اذهب إلى المحتوى

Kais Hasan

الأعضاء
  • المساهمات

    1655
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    22

كل منشورات العضو Kais Hasan

  1. لنفس السبب الذي جعلك تنشر سؤالك على موقع الأكاديمية الذي يعتبر موقع ويب، و هو سهولة التعامل مع الويب و استعماله من قبل كل البشر، مما يجعل الشركات كلها ملزمة بإنشاء موقع لها لعرض خدماتها و حتى تقديم الخدمات عبر الويب و إلا ستصبح من الماضي. الويب سهل الوصول لكل الأمور كما أنه لا يحتاج تجهيزات ممتازة لتصفحه، فأي جهاز محمول مهما كانت مواصفاته يستطيع فتح أي موقع. هذا كله أدى إلى طلب عالي على الويب أكثر من أي أمر آخر مما أدى إلى زيادة الوظائف و بالتالي زيادة المبرمجين الذي يعملون في هذا المجال. كما أنه أسهل من غيره كبداية، حيث لا يتطلب الكثير من المعلومات النظرية المسبقة كغيره من المجالات.
  2. بشكل عام كما ذكر المدربون لا توجد مسابقات خاصة بإطار عمل أو مجال معين، فما يهم الشركات هو قدرتك على حل المشكلات و التفكير المنطقي، فإذا كنت تملك هذه المهارات يمكنهم بسهولة تعليمك أي شيء حتى لو كنت لا تعلمه و بسرعة كبيرة. هناك الكثير من مواقع البرمجة التنافسية التي تقوم بمسابقات بشكل دوري من أبرزها: موقع Codeforces و هو من أشهر المواقع في مجال البرمجة التنافسية، يقام فيه مسابقة كل أسبوع تقريباً، و بمستويات مختلفة تبدأ من المبتدئ جداً إلى المتقدم جداً. موقع AtCoder و هو أيضاً يقوم بمسابقات بشكل دوري (كل أسبوع تقريباً) و هو مشابه لل codeforces. كما تعتبر المسابقة البرمجية التنافسية للجامعات ICPC من أعرق و أكبر المسابقات البرمجية في العالم و أصعبها، في حال كنت تدرس في جامعة قد تجد أن جامعتك تشارك في هذه المسابقة، في حال لم تكن تشارك يمكنك العمل على تشجيع الناس و الذهاب إلى أحد مسؤولي الجامعة و طرح فكرة المشاركة عليه، طبعاً يجب عليك أن تعمل على تطوير نفسك جيداً و الحصول على نتائج جيدة في موقع codeforces مثلاً حتى يكون لديك ما يظهر خبرتك في هذا المجال فعلاً.
  3. لا نقوم بالإجابة على الأسئلة كهذه بشكل مباشر، فهذا لا يعود عليك بأي فائدة و لا يحسن من مهاراتك البرمجية. سأساعدك قليلاً بالفكرة و الأمور المطلوبة لحل التمرين و عليك محاولة حله لوحدك، في حال ظهور أخطاء يمكننا مساعدتك، و لكن ليس إعطاءك الحل كاملاً. من أجل السؤال الأول كل ما تحتاجه هو ما يلي: متغير لتقوم بتخزين ناتج الضرب فيه، طبعاً دائماً نخزن العنصر الحيادي بالنسبة للعملية كقيمة أولية حتى لا يؤثر على على الناتج النهائي، و بالتالي هنا يجب أن نعطيه القيمة 1 كقيمة أولية. حلقة تمر على جميع عناصر المصفوفة، بشكل عام نستعمل حلقات for لذلك. في كل مرة نقوم بضرب العنصر الحالي بالمتغير الذي يمثل النتيجة و إعادة تخزين ذلك في ذلك المتغير. في النهاية سيصبح لدينا الناتج و نقوم بطباعته. من أجل السؤال الثاني، ما تحتاجه هو ما يلي: في البداية تحتاج إلى معرفة كيفية توليد رقم عشوائي، ببحث صغير في غوغل ستجد النتيجة. تحتاج إلى معرفة كيفية حساب فيما إذا كان عدد أولي أم لا، يمكننا كتابة تابع يقوم بالتحقق و إعادة true إذا كان أولي و false عكس ذلك، هذا يجعل الكود أكثر ترتيباً و مقروء بشكل أكبر. بالطبع يمكن التحقق فيما إذا كان عدد أولي عن طريق المرور على جميع الأعداد التي أصغر منه و التحقق أن ال 1 و العدد نفسه فقط يقسمانه (نتحقق إذا كان عدد يقسم الآخر عن طريق التحقق أن باقي القسمة هو 0). تحتاج إلى معرفة كيف يتم استقبال دخل من المستخدم. تحتاج إلى شرط يتحقق فيما إذا كان دخل المستخدم صحيح أم لا ( هكذا فهمت ما تريده، في حال كنت تريد فقط طباعة النتيجة يمكنك طباعتها فقط و المستخدم بنفسه يرى فيما إذا أجاب بشكل صحيح). و في النهاية تحتاج إلى حلقة تقوم بالتكرار 10 مرات لما سبق، أيضاً يفضل استعمال حلقة for هنا.
  4. في البداية نقول لدي مجموعة بيانات قم بتدريب نموذج عليها، و ليس قمت بتدريب بيانات، حيث أننا لا يمكن أن ندرب البيانات. ال confusion matrix يتم حسابها بناء على توقعات النموذج الخاص بك، و بالتالي في حال استعملت نفس النموذج ( أي لم تعد تدريبه مرة أخرى) و نفس بيانات الدخل فيجب أن يكون لديك نفس المصفوفة حتماً. بينما في حال غيرت البيانات فبالطبع سيتغير التوقع و ستتغير ال confusion matrix و مقدار التغير سيكون مرتبط بحجم هذه البيانات، فكلما زادت كلما قل هذا الاختلاف. أيضاً في حال قمت بتدريب النموذج و حساب المصفوفة، ثم قمت بتدريب نموذج أخر (له نفس الهيكلية و على نفس البيانات) فستحصل على نموذجين مختلفين بعض الشيء عن بعضهما، سبب هذا الاختلاف يعود إلى عدة عوامل: نحن نقوم بتهيئة النموذج بشكل عشوائي (أي نقوم بتهيئة الأوزان الخاصة به) و بالتالي نحن في كل نموذج سنبدأ عن نقطة معينة من الفضاء الذي نريد إيجاد القيمة الدنيا فيه (حيث نريد أن يكون الخطأ أقل ما يمكن)، و لكن بشكل عام يكون لدينا أكثر من نقطة دنيا (قد لا تكون أمثلية) و كل نموذج قد يذهب إلى واحدة منهما. مشكلة التباين الكبير، و هي مرتبطة بالعامل السابق، و تحدث عندما يكون الفارق في التوقعات كبيرة بين تدريبين لنفس النموذج، هذا يدل على أن النموذج الخاص بك غير جيد و يحتاج لبعض التعديلات. قد لا يكون العاملان السابقان موجودين، أي قد يصل النموذجين إلى نفس النقطة الدنيا، و لكن بشكل عام النماذج لا تصل إلى النقطة تماماً، و إنما منطقة قريبة منها و بالتالي سيكون هناك اختلاف طفيف بين النموذجين.
  5. دجانغو ما هو إلا إطار عمل، يتبع للغة البرمجة التي يستعملها. هنا دجانغو يستعمل لغة البايثون و بالتالي قواعد عمليات المقارنة و العمليات المنطقية تتبع للغة بايثون. مثال عليها: x = int(input('أدخل الرقم الأول')) y = int(input('أدخل الرقم الثاني')) if x < y: print('الرقم الأول أصغر من الرقم الثاني') elif x > y: print('الرقم الأول أكبر من الرقم الثاني') else: print('الرقم الأول يساوي الرقم الثاني') if x > 10 and y > 10: print('الرقمان أكبر من 10') هذا مثال بسيط على تطبيق عمليات المقارنة و العمليات المنطقية، يمكنك الرجوع إلى مقالات أكاديمية حسوب لتعلم المزيد عن هذه الأمور. كما أنصحك بتعلم لغة بايثون جيداً قبل البدء بتعلم إطار عمل يستعملها، هذا ينطبق على أي إطار عمل.
  6. هناك الكثير من الطرق، في حال كانت لغتك الانكليزية جيدة يمكنك متابعة صفحات المراكز البحثية على ال LinkedIn على سبيل المثال، حيث تقوم هذه المراكز بإعلان أي حدث هناك، مثلاً يمكنك متابعة الجامعات المعروفة مثل MIT, Stanford و غيرها. أيضاً يمكنك متابعة الباحثين المشهورين مثل Yann Lecun و هو العالم الرئيس للذكاء الصنعي في شركة Meta، و Andrew Ng و هو أيضاً أحد الباحثين المشهورين في المجال. طريقة أخرى هي متابعة بعض الصفحات التي تقوم بنشر الأخبار، و لكن هذه الطريقة أقل مصداقية حيث أن بعض الصفحات تقوم بالتغيير قليلاً في العنوان لجذب الانتباه، لذلك أنصحك بالطريقة الأولى. من أجل سؤالك الثاني، ليس من الضروري ذلك، و لكن عليك أن تكون جيداً في التعامل مع سطر الأوامر، حيث أن سيرفرات التدريب غالباً يتم التواصل معها و إعدادها عن طريق سطر الأوامر، كما ستحتاجه كثيراً لجلب البيانات و القيام ببعض العمليات عليها و الكثير من الاستعمالات الأخرى.
  7. و عليكم السلام، يجب عليك أن تكون على اطلاع جيد بالرياضيات، خاصة الجبر الخطي و الاحتمال و التحليل. يمكنك الإطلاع على المحاضرات من جامعات عالمية مثل MIT لهذه المواد، بالطبع هي باللغة الانكليزية. بعد ذلك دائماً حاول تطبيق ما تعلمته، قم ببناء تطبيق يستعمل الذكاء الصنعي لوحدك، عندها ستواجد مشاكل و ستتعلم كيف تحلها، بالطبع تحتاج إلى أن تكون على إطلاع بما سبق و ذكرته حيث أن أغلب المشاكل التي تواجهك في هذا المجال ليست مشاكل برمجية و إنما مشاكل منطقية غالباً ما يكون سببها متعلق بالرياضيات، مثلاً اخترت توزع احتمالي غير منطقي للمسألة التي تحاول حلها، أو هناك مشاكل في المشتقات و الكثير من المشاكل الأخرى. المجال ليس سهل بالطبع فهو جديد و الأبحاث فيه تظهر كل يوم فعليك أن تكون على إطلاع دائم على كل ما هو جديد. المجال فيه إبداع بالطبع، ليس مجرد تطبيق خوارزميات، حتى في حال اخترت أن تقوم بالتطبيق فقط بدون البحث العلمي، فإنه عليك أن تكون على مستوى جيد من الفهم حتى تستطيع حل المشاكل التي تواجهك. تصميم خوارزميات ذكاء صنعي بنفسك ليس بالموضوع السهل أبداً، عليك في البداية أن تصبح جيد في المجال و تصبح قادر على بناء التطبيقات المعروفة، من ثم عليك القيام بقراءة الكثير من الأوراق البحثية حتى تصبح على إطلاع على كل ما هو جديد، بعد ذلك يمكنك البدء في عملية البحث لتطوير خوارزميات جديدة، كما أنا الأمر في الغالب يتطلب وجود تجهيزات لتدريب النماذج التي تريد تطويرها، بالطبع يمكنك الاشتراك بالخدمات التي تقدمها الكثير من الشركات من سيرفرات تدريب، و لكن الأمر مكلف جداً، و من الجيد إذا كان بإمكانك إكمال دراستك في جامعة تقدم هذه الأمور، كما أن وجود أحد يوجهك هو أمر ضروري لذلك أنصحك بالدراسة الأكاديمية في جامعة من أجل هكذا مجال.
  8. في حالتك هذه لا فرق، حيث أنك تقوم بتخزين متغير ذو سعة أقل في متغير ذو سعة أكبر. في حالات أخرى مثلاً عندما تريد تخزين float في long فعليك القيام بما يدعى التحويل casting، و هو تحويل القيمة من float إلى long. و عندها تكون هذه الدالة مفيدة لذلك. فائدة أخرى، هي أنك تقوم بشكل واضح بتحديد أنك تريد التحويل، حيث أن من يقرأ الكود الثاني قد يعتقد أنك عن طريق الخطأ قمت بذلك، بينما في حال استعملت الطريقة فمن الواضح أنك تريد هذا التحويل.
  9. إذا كان المقصود هو الاحتفاظ بالأكواد البرمجية، فبالطبع هذا أمر ضروري و ذلك حتى تعود لهذه المشاريع في حال احتجت لتذكر شيء ما أو لاختصار وقت كتابة شيء كنت قد كتبته من قبل. أما إذا كان القصد هو حفظ التعليمات البرمجية في ذهنك (و هذا ما أعتقدك تقصده) فالجواب هو لا دائماً في البرمجة. قد تجد الأمر سهلاً في البداية، و لكن لغات البرمجة و أطر العمل كبيرة جداً و من المستحيل حفظها، دائماً يمكنك البحث عما تريده و لا داعي لحفظ شيء، المهم فهم المفاهيم العامة و كيفية حل المشكلات التي تواجهك، حتى تعرف عما يجب عليك البحث عنه. الحفظ يأتي بشكل تلقائي في بعض الحالات، و ذلك عندما تصبح لديك خبرة في لغة ما أو إطار عمل ما، فكثرة الاستعمال له تجعلك تحفظ تلقائياً التعليمات الأساسية، هذا يسرع من عملك بالطبع بدل البحث عنها كل مرة، و لكن يجب عليك ترك هذه العملية تلقائية و عدم القيام بالحفظ المتعمد، ما تستعمله بكثرة ستحفظه بشكل تلقائي، ما لا تستعمله بكثرة فلا داعي لحفظه أصلاً.
  10. يمكن تنزيله عن طريق كتابة ما يلي: pip install --upgrade tensorflow-federated
  11. مقدمة بسيطة عن طريقة federated learning هي طريقة لتدريب المودل بشكل مستقل من قبل كل مستخدم، أي لنفرض أنه لدينا عدة مستخدمين كل منهم له قاعدة بيانات خاصة به، يتم تدريب المودل على كل واحدة بشكل مستقل بدون تبادل البيانات (لأن البيانات قد تكون حساسة ولا يجب تبادلها)، و من ثم يتم بطريقة ما دمج النماذج المتشكلة من كل تدريب في نموذج واحد. يقدم TensorFlow شرح كامل عن طريقة القيام بذلك باستعماله من هنا. بشكل مختصر يمكن القيام بذلك كما يلي: def model_fn(): keras_model = المودل الخاص بنا return tff.learning.models.from_keras_model(keras_model, sample_batch, loss=تابع التكلفة الخاص بنا) هكذا نعرف مودل خاص بنا، و لكن بالطبع هناك الكثير من الخطوات اللازمة التي تتعلق بالتطبيق المطلوب، يمكنك الإطلاع عليها بمزيد من التفصيل من الموقع الرسمي الذي أرفقت رابطه سابقاً.
  12. لا توجد نسخة بايثون للمبتدئين و أخرى للمحترفين، النسخة دائماً كاملة الميزات. هناك طريقة واحدة لتحميل بايثون و هو عن طريق الموقع الرسمي له من هنا.
  13. تحتاج فقط أساسيات ال calculus، يكفي كبداية أن تعرف مفاهيم المشتقات، التكامل ليس مهماً جداً في البداية و يمكنك إهماله. الجبر الخطي مهم جداً بالطبع، يفضل أن يكون لديك اطلاع على المفاهيم الأساسية فيه و هي: الأشعة و الفضاء الشعاعي، العمليات على الفضاء الشعاعي، الاستقلال و الارتباط الخطي و الأشعة الأساسية basis و القيم و الأشعة الذاتية eigen values, eigen vectors. أما بالنسبة للاحصاء و الاحتمالات يجب عليك معرفة القوانين الأساسية في الاحتمالات و التوزيعات الاحتمالية الشهيرة. يجب عليك معرفة الاساسيات في كل هذه المجالات و فهم مجال واحد بينها غير كافي نهائياً لكي تبدأ بالمجال، و لكن بالطبع حاول أن تتعلم الأساسيات فقط في البداية و بعد أن تتعلم القليل من تعلم الآلة يمكنك العودة و دراسة المزيد من الرياضيات عند الحاجة. لماذا كل هذه الأمور مهمة مباشرة؟ لأنه و ببساطة يمكنك تخيل أي شبكة عصبونية على أنها تابع يقوم بتحويل الدخل ضمن فضاء شعاعي عن طريق عمليات خطية و أخرى غير خطية، و خرج هذه الشبكة عادة يكون عبارة عن توزع احتمالي على القيم الممكنة، و طريقة تدريب الشبكة تعتمد على خوارزمية هي gradient descent و التي يجب عليك معرفة أساسيات ال calculus لفهمها. لكن كما ذكرت لك لا تتعمق جداً في الرياضيات قبل البدء في تعلم الآلة، الأساسيات فقط ثم ابدأ، و عندما تجد الحاجة لتوسيع فهمك في شيء ما قم بذلك، حيث أن الرياضيات علم واسع جداً و من المستحيل تعلمه كله، فيجب عليك معرفة ما تحتاجه ثم الذهاب و دراسته. بالنسبة لسؤالك الأخير، فالجواب هو لا، الرياضيات المتقطعة بشكل عام غير مستعملة بشكل أساسي في الشبكات العصبونية، حيث أن الشبكات العصبونية يجب أن تكون تابعاً مستمراً و كافة تعاملنا يكون مع توابع مستمرة و لا يمكن أن تكون متقطعة و إلا لن يكون هناك مشتق، و التدريب بشكل عام يعتمد على المشتقات.
  14. الخطأ أنك لا تضع معامل الخرج بين السلسلة النصية " x = " و بين y-x. الصحيح أن تكتب ما يلي: cout << x << " - " << y << " = " << fabs(x-y); أو أي عبارة طباعة تريدها، المهم أن يكون معامل الخرج >> موجوداً بين أي قيمتين تريد طباعتهما.
  15. إن بايثون تستخدم ضمنياً لغة السي، و يمكن ترجمة الكود الخاص بها إلى c ثم تنفيذه و هذه تقنية شائعة لتسريع كود البايثون. كما أن أغلب الأكواد التي يتم تنفيذها على ال GPU و هذه هي الحالة في تعلم الآلة يتم تنفيذها باستعمال السي، قد لا تلاحظ ذلك بشكل ظاهري و لكن لو قمت بفتح أكواد بعض المكاتب الكبيرة ستجد أن العمليات أغلبها مكتوبة بلغة السي لتسريع التنفيذ، و لكن أنت كمستخدم لهذه المكتبة لا تحتاج إلى معرفة ذلك.
  16. إن هذا يعتمد على المبرمج بشكل أساسي، للمقارنة يجب أن نقول في حال كان لدينا نفس الخوارزمية مع نفس هياكل البيانات، من الأسرع؟ بشكل عام تعتبر لغة c++ من أسرع اللغات، حيث أن هذا من أهم الأهداف التي تحافظ على تحقيقها، أي ألا يكون من الممكن كتابة نفس الكود بلغة أخرى و تحقيق سرعة تنفيذ أفضل. و لكن بالطبع في حال أتى مبرمج و حل مشكلة معينة بطريقة ذكية تعقيدها الحسابي أقل و لكن بلغة بطيئة، في حين أن مبرمج آخر حلها بالطريقة المباشرة ذات التعقيد الحسابي الأعلى و لكن باستعمال c++ فالأول سيكون سرعة تنفيذ كوده أفضل. كما أنه بشكل عام لا يمكنك ملاحظة هذا الفرق ما لم يكن الكود الذي تنفذه يطبق على عدد بيانات هائل، أي في حال كان لديك بضع مئات من البيانات فلن يكون هناك فرق محسوس. كما أن السرعة ليست أهم شيء، حيث أن السرعة تأتي على حساب الصعوبة في كتابة الكود، حيث أن لغة مثل ال c++ تحاول الإبقاء على إمكانية التعامل بشكل مباشر مع العتاد الصلب و هذا ما يجعلها صعبة، في حين أن لغات أخرى تضحي بهذا الأمر على حساب سهولة و سرعة تطوير البرنامج. لذلك لا نجد لغة مثل ال c++ تستعمل في الويب مثلاً، بينما لا نجد لغة عالية المستوى جداً تستعمل في الأنظمة المدمجة.
  17. بشكل عام يمكنك البدء بشكل متسلسل، أي كما يمكن الملاحظة كل دورة مقسمة إلى مسارات، يمكنك المرور على كل مسار بالترتيب. في بعض الحالات يمكن أخذ المسارات بشكل غير تسلسلي و لكن هذا يعتمد على الدورة التي اشتركتي بها، مثلاً في بايثون هناك دورات خاصة بتحليل البيانات، بالتالي في حال كان لديك بعض الاطلاع على بايثون فقط يمكنك البدء بها مباشرة. و هناك مسار في بايثون للويب، في حال كنت غير مهتمة بالويب يمكنك تخطيه. يمكنك ذكر الدورة حتى نساعدك أكثر.
  18. يمكنك جدولة مهمة يومية للقيام بذلك. يمكن استعمال مكتبة celery كما يلي: from celery.schedules import crontab from celery.task import periodic_task @periodic_task(run_every=crontab(minute=0, hour=0)) def every_day(): print("سيتم طباعة هذه الرسالة كل يوم في منتصف اللليل") طبعاً بدل الطباعة ما ستقوم به هو المرور بحلقة for لها 10 تكرارات و كل مرة تقوم بإنشاء فلاش كارد و إضافتها. أي سيكون الكود الخاص بك شيء مثل ما يلي: from celery.schedules import crontab from celery.task import periodic_task @periodic_task(run_every=crontab(minute=0, hour=0)) def every_day(): for i in range(10): flash_card = FlashCard.objects.create(هنا نضع ما يلزم لهذا الغرض) الطريقة create ستقوم بإنشاء هذا الغرض و كما هو موضح يجب تمرير ما يلزم من أجل هذه الفلاش كارد، مثلاً عنوانها أو أي حقل تحتاجه.
  19. يمكنك اعتبارها موجه أكثر من تعليمة. بشكل أساسي تستعمل لتحديد أن كود ما يمكن لزائر للموقع رؤيته فقط إذا لم يقم بتسجيل الدخول. هذا على عكس @auth التي تفرض أن يكون الشخص قد قام بتسجيل الدخول حتى يرى المحتوى. يمكن استعمالهما كما يلي: @auth // الذي يجب أن يراه من قام بتسجيل الدخول فقط html نضع هنا كود ال @endauth @guest // الذي يجب أن يراه من لم يقم بتسجيل الدخول فقط html نضع هنا كود ال @endguest مثلاً في حال أردنا إظهار رسالة تحث المستخدم على التسجيل في موقعنا، يجب أن نظهرها فقط في حال كان الشخص لم يقم بتسجيل الدخول، و لذلك يمكنك استعمال هذا الموجه لذلك.
  20. بالطبع يمكنك العمل على مواقع العمل الحر، شخصياً لقد قمت بإنجاز 3 مشاريع متعلقة بالذكاء الصنعي على الموقع، و لو كان لدي وقت أكثر لكنت أنجزت أكثر. و لكن الأمر ليس بالسهل دائماً، تحتاج خبرة كبيرة، حيث أن هذا المجال ليس كالبرمجة العادية أو تصميم المواقع و التطبيقات. أنت تحتاج إلى أن تكون على إطلاع جيد على المفاهيم الأساسية في الاحتمالات و الإحصاء و الجبر الخطي و التحليل الرياضي حتى تفهم بشكل صحيح الخوارزميات و تستطيع تطبيقها بشكل صحيح. بالطبع كبداية لن تحتاج إلى كل هذا و لكن لن تفهم ما تقوم به ما لم تفهم الرياضيات جيداً. لذلك في حال كان اعتقادك أن تعلم الآلة هو عبارة عن برمجة باستعمال أحد أطر العمل فهذا غير صحيح، في حال لم تكن تحب تعلم الرياضيات و قضاء الوقت في التفكير أكثر من البرمجة فلا أنصحك بهذا المجال.
  21. بالإضافة إلى ما سبق ذكره يمكنك إضافة البايثون بشكل تلقائي إلى ال path. و لكن قبل ذلك، من فضلك تأكد بأن المشكلة هي كذلك، حيث أنه في بعض الأحيان بدلاً من كتابة python عليك كتابة py أو python3. في حال أي مما سبق لم ينجح علينا إضافته إلى ال path، يمكنك القيام بذلك بسهولة عن طريق الذهاب إلى مربع البحث في ويندوز و كتابة PATH، ثم نضغط على أول خيار يظهر. سيفتح لنا نافذة يكون فيها متغير اسمه PATH (في حال لم تظهر هذه النافذة من فضلك أرفق لقطة شاشة لما ظهر لك) نضغط عليه ثم نختار edit و نضيف في آخر خانة مسار البايثون. هناك مسار افتراضي للبايثون، يمكنك معرفته من خلال الصور السابقة التي أرفقها المدربون، طبعاً مع تبديل الاسم الظاهر باسم المستخدم لديك.
  22. أعتقد قصدك عن الخاصية name في عنصر ال html. تستعمل هذه الخاصية للوصول إلى قيمة العنصر في جافاسكربت (بشكل عام يستعمل ال id أكثر) أو في السيرفر بعد إرسال البيانات. أي في حال كان لديك ما يلي: <form action="/action_page.php"> <label for="username">username:</label> <input type="text" id="username" name="user_name"><br><br> <label for="pass">password:</label> <input type="text" id="pass" name="password"><br><br> <input type="submit" value="Submit"> </form> عندها تصل البيانات إلى السيرفر و يمكن الحصول على قيمة اسم المستخدم من المفتاح user_name و كلمة المرور من المفتاح password.
  23. يمكنك تحويل حقل التاريخ في django إلى غرض من الصف datetime.datetime، حيث أن datatime هي المكتبة الأساسية في بايثون للتعامل مع التاريخ و الوقت. بعد التحويل يمكننا إضافة يوم باستعمال نفس المكتبة. يمكن القيام بكل ذلك كما يلي: # لنفترض أن اسم الحقل الخاص بالتاريخ في النموذج هو # date_field import datetime tomorrow_date = self.date_field.date() + datetime.timedelta(days=1) لإضافة رسالة عندما يأتي هذا اليوم يمكنك استعمال الجافا سكربت، حيث أنه يمكنك كتابة view تمثل endpoint على السيرفر، بحيث يقوم كود الجافا سكربت باستدعاءه كل فترة للتحقق من الوقت. و عندما نصل إلى الوقت المحدد نظهر رسالة. طريقة أخرى هي إضافة مهمة مجدولة في دجانغو. مثلاً يمكن إضافة مهمة يومية بواسطة مكتبة celery كما يلي: from celery.schedules import crontab from celery.task import periodic_task @periodic_task(run_every=crontab(minute=0, hour=0)) def every_day(): print("سيتم طباعة هذه الرسالة كل يوم في منتصف اللليل") و بالتالي يمكنك استعمال هذا للتحقق من التاريخ داخل هذا التابع و طباعة الرسالة المناسبة.
  24. إن ال views في دجانغو تتبع لغة البرمجة المستعملة في دجانغو و هي بايثون، حيث أن ال view ما هي إلا تابع في بايثون و لكن نقوم بربطه بمسار على موقعنا و تغليفه بما يلزم من طبقات الحماية و التحقق من المستخدم و غيرها. يمكننا كتابة عبارة شرطية في بايثون كما يلي: username = input('username: ') password = input('password: ') if name == 'admin' and password == 'admin': print('welcome to the site') else: print('wrong credientials') طبعا هذا مثال بسيط و لكن يمكنك تطبيق نفس الفكرة بغض النظر عما يوجد داخل ال if. أما إن كان قصدك ما ذكره المدربون في التعليقات السابقة فهذا يدعى template وليس view، حيث أن دجانغو يتبع تصميم model-view-template بحيث يكون ال model هو ما نقوم ضمنه بتخزين البيانات و معالجتها، أما ال view فهي التي تقوم بمعالجة طلب المستخدم و تنفيذ ما يلزم، أما ال template فهو من يقوم بالعرض. طبعاً ال view هي من تقوم بعرض ال template و لكن هذا لا يعني أنها بذاتها مخصصة للعرض، حيث هي فقط تقوم بتحديد ما يجب تنفيذه.
  25. إن الأمر طبيعي، الانقطاع لوقت طويل له آثار سلبية في كافة المجالات و ليس فقط في البرمجة. لا أنصحك بمحاولة فهم كل اللغة، الدراسة النظرية فقط للبرمجة لن تجعلك مبرمج ناجح، عليك تعلم الأساسيات و من ثم محاولة التطبيق، دائماً حاول تطبيق ما يطلبه المدرب في البداية، ثم حاول تطبيق شيء ترغب به أنت، و لكن دائماً ابدأ بأفكار بسيطة و من ثم حاول تطويرها، لا تبدأ بفكرة معقدة من البداية فهذه طريقة غير جيدة. مثلاً تعلم في البداية تعليمات الإدخال و الطباعة و حاول فقط القيام ببعض العمليات الحسابية البسيطة في البرنامج الخاص بك. بعدها يمكنك تعلم العبارات الشرطية و محاولة مثلاً تطوير مثال العمليات الحسابية ليأخذ أكثر من خيار بحسب ما يدخله المستخدم. ثم يمكنك تعلم الحلقات التكرارية و مثلاً تطوير البرنامج ليبقى يعمل حتى يدخل المستخدم خيار يجعل الحلقة تقف و ينتهي البرنامج. هذه هي الطريقة الجيدة بشكل عام، أن تتعلم الأساسيات خطوة بخطوة و تقوم بالتطبيق التدريجي للأمور، نبدأ بالأمور السهلة و نبني عليها. أما في حال بدأت بمشروع معقد منذ البداية ستشعر باليأس لأنك ستواجه صعوبات كثيرة في نفس الوقت بدلاً من حلها تدريجياً، حتى أن المشاريع المعقدة يتم بناءها بهذه الطريقة، دائماً نبدأ بشيء بسيط و نزيد التعقيد تدريجياً.
×
×
  • أضف...