كيف تستخدم إطار عمل الكيانات Entity Framework في دوت نت كور .NET Core

في هذه المقالة سنتعرف إلى كيفية استخدام إطار عمل الكيانات entity framework في بيئة دوت نت كور للتعامل مع قاعدة بيانات موجودة. بمعنى سنقوم بتجهيز الفئات والسياق context الممثل لقاعدة البيانات.

 

Star تنصيب إطار عمل الكيانات Entity Framework

 

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

 

PowerShell

PS C:\Users\akana> dotnet ef

 

                     _/\__

               —==/    \\

         ___  ___   |.    \|\

        | __|| __|  |  )   \\\

        | _| | _|   \_/ |  //|\\

        |___||_|       /   \\\/\\

 

Entity Framework Core .NET Command-line Tools 3.1.3                                                                                                   

….

 

لاحظ أن التعليمة السابقة تظهر أن إطار العمل جاهز للاستخدام لدي. إن لم يكن الأمر كذلك لديك فقم بكتابة الأمر التالي:

PowerShell

PS > dotnet tool install –global dotnet-ef                                                                                                           

 

 

Star كيفية تمثيل قاعدة بيانات سابقة باستخدام إطار عمل الكيانات

 

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

dotnet ef dbcontext scaffold "<سلسلة الاتصال>" <مكتبة مزود الخدمة> -o <اسم مجلد الخرج> 

 

مثلا: إذا كان لديك قاعدة بيانات للموظفين تحت اسم EmployeeDB فقد يكون الأمر على النحو التالي

 

PowerShell

dotnet ef dbcontext scaffold "server=.\sqlexpress;Database=EmployeeDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o EmployeeModel

 

بعد تنفيذ الأمر السابق بنجاح ستجد مجلد جديد EmployeeModel داخل مشروعك يحتوي على الفئات الممثلة للجداول والسياق EmployeeContext الذي سيوفر لك وظائف استرجاع وتخرين البيانات إلى قاعدة البيانات

 

 

 

المراجع:

  1. https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
  2. https://www.tutorialspoint.com/asp.net_core/asp.net_core_log_in_and_log_out.htm

خوارزمية الجيران الأقرب k Nearest Neighbours

تعتبر خوارزمية knn من أبسط الخوارزميات التي تستخدم في تعليم الآلة machine learning حتى أن البعض لا يدرجها فعليا ضمن تعليم الآلة وذلك لأنها لا تقوم بالاستفادة من البيانات المقدمة إليها في إيجاد نموذج pattern. بمعنى آخر أنها لا تقوم بالتعلم من المعلومات المقدمة لها. كل ما هنالك أنها تجري عمليات حسابية وتتبع خطوات سنتعرف إليها في المقالة لتوقع نتيجة لبيانات جديدة

 

الخوارزمية تعتمد بشكل أساسي:

أولاً: إلى حساب المسافة (مقياس التشابه similarity measure) باستخدام طرق الحسابية للمسافات الشهيرة مثل المسافة الإقليدية Euclidean أو مانهاتن Manhattan

ثانيا: تقوم باستخدام التصويت في للتوقع نتيجة بيانات جديدة

 

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

 

حسنا دعنا نضع المقادير والنتائج التي حصلت عليها إلى الآن وأنت في المطبخ تحضر وصفات مختلفة للكعك

الوصفة

البيض

الماء

الدقيق

النتيجة

1

3

1

3

جيد

2

4

1

4

جيد

3

3

2

3

غير جيد

4

3

2

4

غير جيد

5

4

2

4

؟؟

كما ترى فالمقادير ضمن الجدول تحديد لك الوصفات وبالتالي كمثال لو أخذت السطر الأول (الوصفة الأولى) فالوصفة ستكون عبارة عن 3 بيضات و 1 كوب من الماء و 3 أكواب من الدقيق والنتيجة كانت جيدة أما السطر الأخير فيمثل الوصفة الرابعة وهي عبارة عن 3 بيضات و 2 كوب من الماء و 4 أكواب من الدقيق

 

الآن كيف لنا أن نتوقع نتيجة وصفة جديدة على وشك القيام بها. ولنقل أن الوصفة هي عبارة عن 4 بيضات و 2 كوب من الماء و 4 أكواب من الدقيق

 

لتوقع النتيجة لنقم باستخدام خوارزمية knn باستخدام مقياس إقليدس Euclidean للحساب ولنقم بتطبيق الخطوات على النحول التالي

 

أ. الخطوة الأولى: حساب الفروقات

حساب المسافة (الفروق) بين الوصفة الجديدة وجميع الوصفات القديمة، سنجري عملية الحساب يدويا ثم نكتب طريقة الحساب باستخدام لغة بايثون

لنحسب الفرق بين الوصفة الأولى والوصفة الجديدة
الوصفة الأولى: (3 بيض، 1 ماء، 3 دقيق)

الوصفة الجديدة: (4 بيض، 2، ماء، 4 دقيق)

الفرق باستخدام إقليدس = (3-4)2 + (1-2)2 + (3-4)2

الفرق = 3

 

نكرر العمليات الحسابية على جميع الوصفات وعندها ستكون الفروقات على النحو التالي (لاحظ العمود الأخير باللون الأرجواني -بنفسجي):

الوصفة

البيض

الماء

الدقيق

النتيجة

الفرق

1

3

1

3

جيدة

3

2

4

1

4

جيدة

1

3

3

2

3

غير جيدة

2

4

3

2

4

غير جيدة

1

 

ب. الخطوة الثانية: ترتيب النتائج

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

الوصفة

البيض

الماء

الدقيق

النتيجة

الفرق

2

4

1

4

جيدة

1

4

3

2

4

غير جيدة

1

3

3

2

3

غير جيدة

2

1

3

1

3

جيدة

3

 ج. الخطوة الثالثة: عملية التصويت

حتى نجري عملية التصويت لتوقع النتيجة نحتاج إلى تحدد عدد الوصفات السابقة التي تود المقارنة معها. لنقل على سبيل المثال سنجري مقارنة مع 3 وصفات للتصويت. يمعنى سيتم مقارنة نتيجة أول ثلاث وصفات من الجدول السابق ذات المسافات الأقصر (الأقرب إلى الوصفة الجديد). بعد البدء بعملية التصويت ستجد أن هناك وصفة جيدة ووصفتان غير جيدتان أي 1 لصالح النتيجة “الجيدة” و 2 لصالح النتيجة “غير جيدة” (عد للجدول السابق). وعندها سيكون تقيم الوصفة الجديدة هو “غير جيد”. لماذا؟ لأن بالعودة للوصفات الثلاث الأولى في الجدول السابق ستجد أن وحدة منهن كانت “جيدة” و إثنتان “غير جيدة” وبالتالي ستحصل على نتيجة التوقع بأن الوصفة الجديدة ستؤول إلى الوصفات “غير جيدة” فيما لو قمت بتحضيرها

 

 

تطبيق الخطوات السابقة باستخدام بايثون

الآن لنقم بالعلميات السابقة باستخدام بايثون:

 

import numpy as np

x = np.array([[3, 1, 3], [4, 1, 4], [3, 2, 3], [4, 2, 3]])

y = np.array([0, 0, 1, 1])

لاحظ أن y عبارة عن 0 و 1 وهما فقط ترميز للنتائج إذ أن الحاسوب يتعامل فقط مع الأرقام! وبالتالي القيمة 0 تمثل النتيجة “جيدة” وقيمة 1 تمثل النتيجة “غير جيدة”. ولعلمك يمكنك أن تعكس الترميز ولا ضير في ذلك فهي مجرد ترميز لا أكثر ولا تؤثر على النتائج إطلاقا.

 

الآن لنقم بتجهيز الخوارزمية وتدريبها على النحو التالي

from sklearn.neighbors import KNeighborsClassifier

k = 3

knn = KNeighborsClassifier(n_neighbors=k).fit(x, y)

لاحظ أن k تمثل عدد الوصفات التي ستدخل في عملية التصويت

 

وأخير لنقم بإيجاد نتيجة التوقع للوصفة الجديدة على النحو التالي:

knn.predict(np.array([[4, 2, 4]]))

 

وستظهر النتيجة كما يلي

array([1])

لاحظ أن النتيجة هي 1 وهو الترميز الذي استخدمناه للدلالة إلى الوصفة “غير جيدة”. وبالتالي فإنك إن قمت بتحضير الوصفة فإن هذه الخوارزمية تقول لك أن النتيجة ستكون غير جيدة.

 

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

 

يمكنك الوصل إلى الكود على github: https://github.com/a-kanaan/SharedWorkspace/blob/master/ml/knn/knn_np.ipynb

لنتعرف إلى الحساسية Sensitivity والنوعية Specificity

ي تعليم الآلة machine learning هناك مفهومين مهمين بالتعرف إليهما وهما: الحساسية والنوعية. ما هما هذان المقياسان وما أهميتهما؟ هذا ما نتعرف إليه في المقالة.

في عمليات تعليم الآلة أو حتى التحليل الإحصائي تحتاج إلى التعرف إلى مدى جدوى الخوارزمية التي يتم استخدامها لحل المشكلة التي أنت بصددها. ولكن ما هما هذا المقياسان الحساسية والنوعية.

 

الحساسية Sensitivity هو مقياس يدلك إلى مدى كفاءة الخوارزمية بالكشف عن الحالات التي تتعقبها ضمن مجموعة السجلات (البيانات). فمثلا لو كانت الخوارزمية تسعى في التعرف إلى الحيوانات كالكلاب والقطط داخل مجموعة من الصور عندها يكون معدل كفاءة الخوارزمية في الكشف عن وجود كلاب أو قطط داخل الصور بشكل صحيح هو ما يعرف بالحساسية  Sensitivity. وبالتالي إذا كانت الحساسية Specificity هي معدل كفاءة الخوارزمية في التعرف إلى الحالات بشكل صحيح عندها يكون النوعية هي معدل كفاءة الخوارزمية في التعرف إلى الحالات التي لا تحقق الشرط التي تتعقبها الخوارزمية.

 

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

 

ربما يتبادر إلى ذهنك كما تبادر إلى ذهني في وقت ما أن هل الحساسية هي مكمل للنوعية؟ بمعني إذا كانت قيمة الحساسية “س” هل يكون قيمة النوعية هي 1 – “س”؟

 الجواب هو: لا. قبل تعليل الجواب ، أود أن أنبه أن مجال القيم لكلا المؤشرين هو بين الصفر 0 و الواحد 1. فمثلا لو كانت قيمة الحساسية 0.45 عندها نقول أن حساسية الخوارزمية هو 45%

فالحساسية والنوعية تقيسان شيئين مختلفين لهدف واحد. بمعنى أن كل ما كانت قيمة الحساسية والنوعية أعلى كانت كفاءة الخوارزمية أعلى فلو كانت قلا القيمتين هما 1 عندها تعني أن الحساسية هي 100% والنوعية هي 100%. بل أكثر من ذلك هو أن نقصان قيمة أحد المؤشرات لا يؤثر في قيمة المؤشر الثاني. بمعنى قد يكون حساسية الخوارزمية هو 1 ويكون النوعية لدى الخوارزمية 0! كيف يكون ذلك؟!! مثلا إذا أخبرت الخوارزمية بأن كل الصور في المجموعة هي صور لفادي على الرغم من أن بعضها لا يمثل صور فادي، عندها ستكون الحساسية 100% إذ كانت الخوارزمية قادرة إلى التعرف إلى صديقي ولكن بنفس الوقت فشلت فشلا ذريعا في دحض الصور التي لا تمثله. فهذه الخوارزمية في الحقيقة لا تعمل على الإطلاق هي فقط تقول أن الجميع هو فادي في كل الحالات بما فيها تلك الحالات الصحيحة. هنا سيكون معدل النوعية 0 وهو دليل على أن الخوارزمية لا تعمل

 

كيف نحسب قيم الحساسية والنوعية؟ هل هناك معادلات للحساب؟

الجواب: نعم. ولكن حتى نتعرف إلى المعادلات علينا التعرف إلى المصطلحات التالية: إيجابية صحيحة true positive و إيجابية خاطئة false positive و سلبية صحيحة true negative وسلبية خاطئة false negative. للنظر إلى الصورة التالية حتى نفهم كل مصطلح من هذه المصطلحات. ولكن قبل الشروع في الشرح ، لاحظ أن كل حالة من الحالات الأربع السابقة هي عبارة عن كلمتين (حالتين) مثل إيجابية صحيحة هي عبارة عن كلمتين “إيجابية” و “حقيقية”. الكلمة الأولى تعبر عن نتيجة الخوارزمية هي إما تكون “إيجابية” أم “سلبية”. أما الحالة الثانية (الكلمة الثانية) تدل على حقيقة ما توصلت إليه الخوارزمية وهي إما أن تكون “صحيحة” أو “خاطئة”

 

الصورة جانبا تمثل حالة يتم دراستها. لاحظ توزع المصطلحات السابقة داخل الصورة. دعنا نبدأ بهم:

إيجابية صحيحة true positive: هي تلك الحالات المكتشفة الصحيحة والتي توافق الحالة الحقيقية. بمعنى أن الخوارزمية قامت بتخمين الشخص وهي بالفعل صحيحة في تخمينها
إيجابية خاطئة: هي تلك الحالات المكتشفة على أنها شخص ما ولكن في الحقيقة هي لشخص آخر (خطأ)

سلبية صحيحة: هي تلك الحالات التي تم دحضها على أنها ليس لها صلة بالحالة المدروسة وهي فعلا كذلك

سلبية خاطئة: هي تلك الحالات التي تم تصنيفها على أنها ليس لها علاقة بالحالة المدروسة ولكن الحقيقة غير ذلك فهي خاطئة في تخمينها

 

الآن لحساب المقياسان: الحساسية والنوعية عليك تطبيق المعالتين التاليتين:

 

الحساسية = إيجابية صحيحة \ (إيجابية صحيحة + سلبية خاطئة)

 

النوعية = سلبية حقيقية \ (سلبية حقيقية + إيجابية خاطئة)

(https://en.wikipedia.org/wiki/Sensitivity_and_specificity)

 

المراجع

  1. https://en.wikipedia.org/wiki/Sensitivity_and_specificity

ب201: ماذا تعلم عن “مدّخر السجلات” Logstash في ELK

    Logstash هو أحد حزم ELK. إن لم يكن لديك معلومات عن ELK هي اختصار Elasticsearch-Logstash-Kibana هي باختصار مجموعة من الحزم التي تتيح لك تخزين ومعالجة وعرض البيانات. Logstash  “لج ستاش” يتيح لك معالجة “سجلات البرامج” log files وهي عبارة عن ملفات تستخدمها بعض البرمجيات لتسجيل الأحداث التي طرأت على البرنامج خلال الزمن. على أية حال التعامل مع هذه الملفات أمر ليس بالسهل وخاصة أن هذه الملفات ليس لديها هيكل تنظيمي بسيط. المهم logstash الترجمة الحرفية لإسمه “مدّخر السجلات” وظيفته هي قراءة هذه السجلات (الملفات) وتخزين محتوياتها في حزمة elasticsearch. على فكرة يمكن استخدامه للقراءة والتخزين من وإلى قواعد بيانات أخرى مثل SQL Server.

    clip_image001

     

    والأمر الجميل فيه أنه

    (1) يتعقب الملفات داخل المجلد الذي تيم القراءة منه وبذلك في حال وجود ملف جديد داخل المجلد فسيقوم بشكل تلقائي بمعالجة الملف الجديد. أليس هذا جميلا. طبعا يمكنك عمل برنامج صغير باستخدام c# أو أي لغة برمجة تفضلها للقيام بنفس المهمة إن أردت. على أية حال يعتمد على ملف بامتداد sincedb_ يتبع برقم معرف لتخزين معلومات مثلا عن الملفات التي تم معالجتها.

    (2) تستطيع استخدام لغات مثل رُوبي Ruby و C# أو ترميز مثل جيسون JSON لعمل تنقيح

     

    clip_image002 الملف sincedb تجده في المسار  التالي داخل مجلد logstash الخاص بك: .\data\plugins\inputs\file\.sincedb_<id> إذا لم تجلد الملف فقد يكون بسبب أنك لم تجري أي عمليات قراءة ملفات بعد. راجع المسار لاحقا عندما بعد شروعك بعمليات القراءة.

     

    المهم سنتعرف اليوم على عميلة تنصيب وتشغيل “مدّخر السجلات” logstash. لن يتم تخزين البيانات ولكن سنقوم بقراءة النصوص المكتوبة إلى محرر الأوامر Command Line وإعادة طباعتها إلى الشاشة مرة أخرى

     

    المراحل بشكل مبسط:

    1. قم بتحميل نسخة جافا https://openjdk.java.net/ (لن أتحدث عن طريقة تنصيب وتحصير جافا راجع أحد المواضيع عن ذلك)
    2. قم بتحميل نسخة logstash من خلال الرابط التالي:  https://www.elastic.co/logstash
    3. قم بفك ضغط الملف في أحد مجلدات حاسبتك
    4. انتقل إلى المجلد config وابحث عن ملف logstash-sample.conf
    5. قم بعمل نسخة من هذا الملف وعدل اسمه إلى logstash-stdout.conf أو أي اسم يناسب
    6. ادخل المحتويات التالية إلى داخل الملف الجديد
    7. # Sample Logstash configuration for creating a simple

      # Beats -> Logstash -> Elasticsearch pipeline.

       

      input { stdin {} }

       

      output { stdout {} }

      الملف لا يحتوى الكثير سوى أننا نحدد المدخل  input وهي المكان الذي سيقوم “مدّخر السجلات” بالقراءة منه والمخرج output إلى أين سيتم تحويل البيانات المقروءة. كما أسلفت سابقا في هذه المقالة سيتم عملية القراءة من نافذة محرر الأوامر stdin وإعادة الطباعة إلى محرر الأوامر نفسه stdout

    1. لنقم بتشغيل البرنامج
    1. قم بفتح نافذة محرر الأوامر بورشل أو أي محرر آخر (command line)
    2. انتقل إلى مجلد logstash الأساسي
    3. اكتب الأمر التالي:

    .\bin\logstash.bat -f .\config\logstash-stdout.conf

    1. اذا سارت الأمور على مايرام سيظهر لك على الشاشة شبيه السطر التالي:

    [2020-03-22T10:43:34,508][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

    1. والآن logstash أصبح جاهزا للإختبار. قم بإدخل أي شيء إلى الشاشة وسيتم إعادة طباعته

     

    clip_image003 قد يظهر الخطأ ERROR: Pipelines YAML file is empty  إذا لم تقم بتحديد مسار الملف logstash-stdout.conf إن كان هناك عدد من الملفات بإمتداد conf. داخل المجلد كما في حالتنا هنا.

     

    لنقم بالإختبار:

    قم بإدخال جملة “Hello World” وستجد أن الجملة قد تم طباعتها على الشكل التالي:

     

    {

              “host” => “dell”,

          “@version” => “1”,

           “message” => “Hello World\r”,

        “@timestamp” => 2020-03-22T02:47:10.518Z

    }

     

    الخرج يشبه إلى حد كبير صيغة جيسون json مع إختلاف الفاصل بين المفتاح والقيمة حيث يتم استخدام الرمز  => . طبعا الآن بإمكاني تحويل هذه البيانات إلى Elasticsearch أو MongoDB أو حتى قواعد البيانات التقليدية مثل SQL Server

    وبهذا نكون قد وصلنا إلى نهاية المقالة ب201. في المقالات اللاحقة سنتعرف أكثر إلى طرق استخدام logstash وربطها مع elasticsearch أو مع قواعد بيانات أخرى. ابقوا معنا

كيف تخفي مسار محرر الأوامر command prompt

 

إن كنت تحب إخفاء مسار الظاهر في محرر الأوامر command prompt فاتبع الخطوات التالية:

 

clip_image001

 

   1                                                                             

أنشئ ملف فارغ وسمه مثلا init.cmd

clip_image002

 

 2                                                                              

 

افتح الملف باستخدام محرر النصوص notepad مثلا

واكتب التعليمة التالية:

prompt <ضع_رمز> $g

 

قم باستبدال >ضع_رمز< بالرمز الذي يناسبك

 

clip_image003

 

بالنسبة لي فقط استخدمت الإختصار CMD ولاحظ أضفت السطر cls في النهاية حتى يقوم بحذف التعليمة prompt بعد تنفيذها عند فتح محرر الأوامر

 

 

  3                                                                              

 

أخيرا نفذ السطر التالي:

reg add “HKCU\Software\Microsoft\Command Processor” /v AutoRun ^
  /t REG_EXPAND_SZ /d “
حدد مسار الملف كاملا” /f

 

clip_image001[6]

 

  4                                                                             

أعد فتح محرر الأوامر من جديد

 

clip_image005

 

 

في أي وقت أحببت ان تعرف المسار الذي انت فيه فقط نفذ تعليمة cd

 

clip_image006

 

المراجع:

1. https://stackoverflow.com/a/17405182/2696230

كيف تتصفح قرص خارجي في بيئة لينكس باش

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

 

clip_image001

 

إقرأ المزيد

الأسس العلمية لقواعد البيانات–مقتبس من مقالات الفريق العربي للبرمجة–للإستاذ InternetMaster–الجزء الأول

https://www.novelucent.com/templates/novelucent/images/database-services.jpg

مقدمة،

هذه مجموعة كتابات للإستاذ InternetMaster تم نشرها سابقا على موقع الفريق العربي للبرمجة في عام 2003. الكاتب أسلوبه مميز وطريقة شرحه مبسطة وغنية بالعلم والمعلومات. اليوم أقدمها بين أيديكم لنستفيد من هذا العلم الذي قدمه الإستاذ InternetMaster ومن العبارات المفيدة التي ذكرها هي أنك إذا أردت أن تتتعرف إلى المشكلة وطريقة علاجها. لا تنظر للعلاج على انه حل لمشكلة بسيطة ولا تحتاج هذا التعقيد في الحل. ولكن الفكرة ان هذا حل ما قد وجد لمشكلة هي ليس بسيطة – قد تكون بسيطة ولكن اذا استعصى عليك الفهم فعليك إلى النظر فيما لوكانت مشكلة كبيرة. فمثلا جدول يضم 10 سجلات وانتهى الأمر قد لا يحتاج لبناء قاعدة معطيات من الأساس والإستغراف في التعلم ولكن حتى تفهم المشكلة التي تحاول حلها تخيل لو أن الجدول في مليون سجل بدل العشرة وهكذا. المهم أضع بين أيدكم هذه المقالات. والله الموفق

إقرأ المزيد

كيف تنصب برنامج آر R Language

    السلام عليكم ورحمة الله | مرحباR logo.svg

    باللغة العربية نتقدم..

     

    تطيبق آر R من التطبيقات المهمة للعمليات الإحصائية. في هذه المقالة سنتعرف إلى كيفية تنصيب وإعداد بيئة آر

إقرأ المزيد

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

السلام عليكم | مرحبا بكم

 

باللغة العربية نتقدم،،


بيئة دوت نت كور بيئة مازالت جديدة وبيئة يمكن أن تعتبر المستقبل إذ أن بيئة دوت نت كور مستقلة عن بيئة دوت نت التقليدية ولكن أبرز مزاياها أنها توفر لك امكانية تشغيل برنامجك على جميع المنصات من ويندوز إلى لينكس إلى نظام تشغيل أبل

 

في هذه المقالة سنتعرف كيف تجهز تطبيق نموذج-عرض-تحكم MVC في بيئة دوت نت كور

 

إقرأ المزيد

تعرف إلى الواصفة ValidationAttribute وطريقة استخدامها

هناك عدة طرق للتحقق من قيم نموذج model منها

  • باستخدام IValidatableObject
  • باستخدام الواصفة ValidationAttribute
  • الطريقة الأخرى هي استخدام Enterprise

 

 

في هذه المقالة سنتعرف إلى كيفية استخدام الفئة ValidationAttribute

 

باختصار التطبيق الذي سنقوم به هو تعريف واصفة UnlikeAttribute مهمتها هي التحقق من عدم التطابق (الإختلاف) بين حقلين أو خاصيتين داخل فئة. اذا كنت قد استخدمت الواصفة CompareAttribute ستدرك أن ما سنقوم به الآن هو العكس تماما لمبدأ عمل Compare. حيث أن الفئة السابقة مهمتها التحقق من التطابق وبالتالي حدوث اختلاف بين قيمتين فهذا يعني أن النموذج غير صحيح وعليه يترتب إجراء مناسب لضمان سلامة وصحة البيانات. ولكن الواصفة UnlikeAttribute التي سنقوم بإنشائها ستكون مخالفة تماما. قد تتساءل ما الفائدة من ذلك؟ ببساطة في حال كنت قد قررت إضافة إمكانية تغير كلمة المرور للمستخدم داخل أحد تطبيقاتك فربما ستقرر بعدم السماح للمستخدم باستخدام نفس كلمة المرور الحالية ككلمة مرور جديدة!

إقرأ المزيد

%d مدونون معجبون بهذه: