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

محمد_عاطف

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

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

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

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

    117

كل منشورات العضو محمد_عاطف

  1. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل. إذا لم يكن هذا السؤال خاص بإحدى دروس الدورات يرجى توضيح ذلك لمساعدتك.
  2. وعليكم السلام ورحمة الله وبركاته . بعد إنهاءك لأى دورة من الدورات هنا في الأكاديمية يمكنك طلب التقدم لدخول الإختبار وإذا قمت بإجتياز هذا الإختبار ستحصل على شهادة إتمام الدورة بالفعل. أى يمكنك بعد إنهاء الدورتين التقدم للإختبار ويمكنك التقدم للإختبار بعد إنهاء الدورة الأولى ومن ثم إنهاء الدورة الثانية والتقدم للإختبار بعدها. وإليك تفاصيل أكثر حول طبيعة الإختبار وشروط التقدم له :
  3. هذه المشكلة غالبا بسبب إضافة Extension لديك في المتصفح . يرجى فتح المتصفح الخفي من خلال الضغط على CTRL + SHIFT + N حيث يجب أن يتم تعطيل جميع الإضافات وسيختفي هذا الخطأ أو يمكنك محاولة فتح متصفح أخر .
  4. عند الضغط على زر update يتم بالفعل وضع عنوان هذا المنتج في حقل العنوان (tilte) في نموذج إنشاء المنتج : ولكن هذا الأمر ليس أفضل شئ حيث يفترض أن تقوم بإظهار نموذج (form) مختلف يقوم بتعديل المنتج حيث يظهر فيه جميع بيانات ومن ثم يمكنك تحديث بياناته. إذا لم يكن يظهر لك العنوان عند الضغط على زر update يرجى إرفاق صورة لل console لديك حيث من الممكن أنه يوجد خطأ لديك يمنع ظهوره.
  5. يبدوا أنك تحاول رفع النماذج نفسها لا يجب رفع النماذج بل ملفات الأكواد . حيث يمكن تحميل النماذج من الإنترنت أو تنفيذ الكود لحفظ النموذج . كل ما عليك فعله كما أخبرتك سابقا أن تقوم فقط برفع ملفات ipynb أو ملفات الأكواد .
  6. المستودع الذي أقصده هو ال repository على github أى يجب إنشاء repository (مستودع) على github لرفع المشاريع . github يستقبل حتى 100MB للملف الواحد . هل يمكنك توضيح الملف الذي تريد رفعه ولا يسمح به github
  7. هذا يعتمد على نوع المشاريع. فمثلا المشاريع التي لها ملف أكواد فهذه المشاريع يجب رفعها على مستودع في github حيث يمكنك رفع المشاريع العملية الكبيرة في مستودعات منفصلة ومن ثم مشاركة روابط تلك المستودعات حينما يتم طلبها منك. أما بخصوص المسارات الخاصة بالذكاء الإصطناعي والتي إستخدمت فيه google colab يمكنك إما تحميل ذلك المشروع على جهازك في ملف بصيغة .ipynb ومن ثم رفعه على مستودع . أو يمكنك مشاركة رابط المشروع مباشرة من google colab . ولهذا يفضل رفع المشارع دوريا على github حتى لا تتراكم المشاريع أو يتم فقدانها من على جهازك. ويمكنك قراءة التالي لمعرفة كيفية رفع المشاريع على git :
  8. وعليكم السلام ورحمة الله وبركاته. لا يوجد خيار أفضل دائما بين إن تعويض القيم المفقودة أو حذفها ويعتمد هذا الأمر على عدة عوامل: فالتعويض أفضل : عندما تكون البيانات قليلة فإذا كانت مجموعة البيانات صغيرة فإن حذف القيم المفقودة قد يؤدي إلى فقدان كبير للمعلومات المهمة مما يؤثر على أداء النموذج. عندما تكون القيم المفقودة قليلة فإذا كانت نسبة القيم المفقودة صغيرة مثلا أقل من 5 أو 10% يمكن تعويضها بطرق مثل المتوسط أو الوسيط أو التنبؤ باستخدام نماذج تعلم آلي دون إدخال تحيز كبير. عندما تكون البيانات مفقودة بشكل عشوائي فإذا كانت القيم مفقودة بشكل عشوائي أو مرتبط بمتغيرات أخرى وليس بالقيمة نفسها فإن التعويض يكون آمن وجيد في تلك الحالة. يكون الحذف أفضل : عندما تكون القيم المفقودة كثيرة فإذا كانت نسبة البيانات المفقودة في عمود أو صف مرتفعة جدًا مثلا >50% فقد يكون التعويض غير موثوق ويؤدي إلى تحيز. عندما تكون البيانات مفقودة بشكل غير عشوائي فإذا كان سبب الفقدان مرتبط بالقيمة نفسها مثل استبيانات حيث يتجنب الناس الإجابة عن أسئلة حساسة فإن التعويض قد يشوه البيانات، والحذف قد يكون أكثر أمان. عندما تكون البيانات كافية فإذا كانت مجموعة البيانات كبيرة بما يكفي فإن حذف نسبة صغيرة من الصفوف أو الأعمدة لن يؤثر كثيرا على النتائج.
  9. أولا ينبغي عليك دراسة هندسة البرمجيات نفسها ومعرفة كيفية تصميم التطبقات الجيدة وهيكل المشروع الجيد وغيرها . مثل هياكل البيانات Data Structure و الخوارزميات Algorithms وأنماط التصميم design patterns والعلوم المتخصصة أكثر في هندسة البرمجيات . وكلمة تقنيات كثيرة التي أقصدها أعني بها عدم التركيز والإهتمام فقط بتقنية واحدة مثلا هنا Django . فمثلا ينبغي عليك دراسة Flask مثلا وأيضا دراسة واجهات المستخدم والواجهات الأمامية ف Django بمفردها لن تكون كافية في المستقبل . ويمكنك أيضا دراسة odoo فهو من المسارات المهمة والمطلوبة بكثرة . لهذا سيتوجب عليك بذل الكثير من المجهود مع إستمرار تطور الذكاء الإصطناعي.
  10. أولا لا أحد يعلم علما اليقين ما الذي سيحدث وما الذي سيصل إليه مدى تطور الذكاء الإصطناعي ولكن ما نعرفه أن الذكاء الإصطناعي سيغير الوظائف تماما وستختفي وظائف موجودة حاليا وستظهر وظائف أخرى . وبخصوص المبرمجين ومهنة البرمجة فبالفعل إن الذكاء الإصطناعي بدأ يأخذ وظائف المبرمجين العاديين وحتى أيضا العاملين في الذكاء الإطناعي أنفسهم فنماذج الذكاء الإصطناعي مثل gpt و غيرها من النماذج القوية الأخرى قد تطورت بشكل كبير جدا والذي يسمح لها بتوليد أكواد كاملة لمشاريع بسيطة ومتوسطة. وإن أحد المبرمجين الكبار في شركة جوجل قد صرح أنه في غضون 5 سنوات ستكون الأكواد المكتوبة في الشركة 95% منها من الذكاء الإصطناعي نفسه وليس من المهندسين وهذا يخبرك ما الذي سيتطور إليه الذكاء الإصطناعي وأن كتابة الأكواد من الممكن أن تكون من الماضي ويجب على المبرمجين أن يهتموا بتعلم بناء الأنظمة وهياكل البيانات والخوارزميات وغيرها وليس الإهتمام بالكود فقط. وأيضا حتى مجال الذكاء الإصطناعي نفسه ليس بعيدا عن ذلك الأمر . حيث أيضا شركة مايكروسوفت سرحت هذا الشهر السابق العديد من المبرمجين ومن ضمنهم مبرمجين ذكاء إصطناعي حيث لم يعد لديهم حاجة حاليا. وبالفعل الأمر سيكون صعب على الأشخاص المبتدئين الذين يريدون الدخول في هذا المجال لأنه بالفعل لتوظيفهم سيحتاجون إلى تعلم تقنيات كثيرة والتركيز أكثر على هندسة البرمجيات وليس كتابة الأكواد. لهذا ينبغي عليك وعلى من يريد أن يستمر في هذا المجال أن يكون لديه علم كبير وأن يطور نفسه بإستمرار وأن يتعلم كيف يستخدم أدوات الذكاء الإصطناعي لتطوير نفسه وزيادة إنتاجيته. ويمكنك قراءة الإجابات التالية لمزيد من التفاصيل :
  11. إن العلاقة بين السيارة الرياضية و السيارة السيدان و الشاحنة الصغيرة وبين السيارة العامة (الفئة الأساسية) هي علاقة وراثة (Inheritance) وليست تركيب (Composition) حتى وإن كانت تحتوي فقط على الموديل والسنة. وذلك لأن جميع الأنواع مثل السيارة الرياضية و السيدان تشترك في خصائص السيارة الأساسية مثل الموديل والسنة ولكن لكل نوع من تلك الأنواع خصائص إضافية أو سلوكيات مميزة عن الأخرى ولذلك فهي وراثة في الأساس. والوراثة تستخدم عندما نقول أن كل سيارة رياضية هي سيارة أو كل شاحنة صغيرة هي سيارة وهكذا. بينما التركيب يستخدم عندما نقول أن الكائن يحتوي على كائن آخر مثل السيارة تحتوي على محرك وهذا ليس هو الحال هنا.
  12. أولا لا أحد يعلم علما اليقين ما الذي سيحدث وما الذي سيصل إليه مدى تطور الذكاء الإصطناعي ولكن ما نعرفه أن الذكاء الإصطناعي سيغير الوظائف تماما وستختفي وظائف موجودة حاليا وستظهر وظائف أخرى . وبخصوص المبرمجين ومهنة البرمجة فبالفعل إن الذكاء الإصطناعي بدأ يأخذ وظائف المبرمجين العاديين وحتى أيضا العاملين في الذكاء الإطناعي أنفسهم فنماذج الذكاء الإصطناعي مثل gpt و غيرها من النماذج القوية الأخرى قد تطورت بشكل كبير جدا والذي يسمح لها بتوليد أكواد كاملة لمشاريع بسيطة ومتوسطة. وإن أحد المبرمجين الكبار في شركة جوجل قد صرح أنه في غضون 5 سنوات ستكون الأكواد المكتوبة في الشركة 95% منها من الذكاء الإصطناعي نفسه وليس من المهندسين وهذا يخبرك ما الذي سيتطور إليه الذكاء الإصطناعي وأن كتابة الأكواد من الممكن أن تكون من الماضي ويجب على المبرمجين أن يهتموا بتعلم بناء الأنظمة وهياكل البيانات والخوارزميات وغيرها وليس الإهتمام بالكود فقط. وأيضا حتى مجال الذكاء الإصطناعي نفسه ليس بعيدا عن ذلك الأمر . حيث أيضا شركة مايكروسوفت سرحت هذا الشهر السابق العديد من المبرمجين ومن ضمنهم مبرمجين ذكاء إصطناعي حيث لم يعد لديهم حاجة حاليا. لهذا ينبغي عليك وعلى من يريد أن يستمر في هذا المجال أن يكون لديه علم كبير وأن يطور نفسه بإستمرار وأن يتعلم كيف يستخدم أدوات الذكاء الإصطناعي لتطوير نفسه وزيادة إنتاجيته. ويمكنك قراءة الإجابات التالية لمزيد من التفاصيل :
  13. المشكلة لديك هنا : لاحظ هنا في ال id لقد قمت بكتابة أول حرف كبير S . ولكنك في جزء إضافة الإستماع إلى الحدث وضعت حرف صغير : وحيث أن اللغة حساسة للأحرف لهذا لا يتم العثور على ال id الصحيح . ولذلك يجب عليك إما جعل أول حرف كبير في السطرين السابقين أو جعله صغير أى يجب أن يكونوا متطابقين : <html> <head> <link rel="stylesheet" href="training.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <script> $(function () { $('#selectBtn').click(function () { $('input:checkbox').attr('checked', 'checked'); }); $('#deselectBtn').click(function () { $('input:checkbox').removeAttr('checked'); }); }); </script> </head> <body> <form> <input id="html" value="" type="checkbox" /> <label for="html">HTML</label> <br> <input id="css" value="" type="checkbox" /> <label for="css">CSS</label><br> <input id="javascript" value="" type="checkbox" /> <label for="javascript">javascript</label><br> <input id="jquery" value="" type="checkbox" /> <label for="jquery">jquery</label><br> </form> <select id="languages" name="languages"> <obtion value="java"> Java</obtion> <option value="cs">C</option> <option value="php">php</option> <option value="vb">visual basic</option> </Select> <br><br> <form> <input type="button" id="selectBtn" value="Select ALL"> <input type="button" id="deselectBtn" value="Deselect ALL"> </form> <script src="java script.js"></script> </body> </html> إذا كان هذا السؤال هو سؤال خاص بالدروة يرجى وضع سؤالك أسفل الدرس الذي توجد به مشكلتك وليس هنا حيث هنا هو قسم الأسئلة العامة.
  14. حاليا منعا للتشت لك وعدم الدخول في دروس أو خصائص لم يتم شرحها فيمكنك فقط الإطلاع على الدروس في موسوعة حسوب التي تم شرحها في الدرس فقط والتركيز عليها ويمكنك حل تمارين عليها للتطبيق مع المدرب.
  15. توجد العديد من المصادر المتاحة ويمكنك تحديد المصادر المناسبة لك سواء كنت تفضل دروس مكتوبة أو فيديوهات شرح. ستجد هنا على موقع الأكاديمية دروس كثيرة مجانية يمكنك من خلالها تعلم React : وإليك كافة المقالات والدروس من خلال الرابط التالي : https://academy.hsoub.com/programming/javascript/react/ https://wiki.hsoub.com/React أما إذا كنت تريد مشاهدة فيديوهات فهنا في الأكاديمية يوجد في دورة تطوير التطبيقات بإستخدام JavaScript مسار خاص بتعلم React و تمارين عملية عليه . أو لو أردت دروس مجانية يمكنك البحث عن اليوتيوب على React Crash Course . وإليك المشاريع البسيطة التالية التي يمكنك محاولة بنائها للتدرب عليها أثناء التعلم :
  16. في التخزين المحلي (Local Storage) الدالتين setItem و getItem هما جزء من كائن localStorage ويستخدمان لحفظ البيانات واسترجاعها. فإن setItem تستخدم لحفظ القيمة التي تريدها في التخزين المحلي باستخدام مفتاح (key). وgetItem تستخدم لإسترجاع القيمة المحفوظة مسبقا في الدالة setItem باستخدام نفس المفتاح. فمثلا تخيل أننا نريد إنشاء موقع باللغتين العربية والإنجليزية فكيف نستطيع معرفة اللغة التي إختارها المستخدم الحالي ؟ وحتى لو قام بإغلاق المتصفح والدخول للموقع مرة أخرى نريد معرفة أخر لغة هو قام بإختيارها . هنا نستخدم التخزين المحلي لتحقيق ذلك. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>تبديل اللغة</title> </head> <body> <h1 id="title"></h1> <p id="message"></p> <button onclick="toggleLanguage()">تبديل اللغة</button> <script> // النصوص باللغتين const translations = { en: { title: "Welcome", message: "English Text" }, ar: { title: "مرحا", message: "نص باللغة العربية" } }; // دالة لتغيير النصوص حسب اللغة المختارة function applyLanguage(lang) { document.getElementById('title').textContent = translations[lang].title; document.getElementById('message').textContent = translations[lang].message; } // دالة لتبديل اللغة function toggleLanguage() { let currentLang = localStorage.getItem('language') || 'en'; let newLang = currentLang === 'en' ? 'ar' : 'en'; localStorage.setItem('language', newLang); applyLanguage(newLang); } // عند تحميل الصفحة، استخدم اللغة المخزنة أو الإنجليزية كافتراضي window.onload = () => { const savedLang = localStorage.getItem('language') || 'en'; applyLanguage(savedLang); }; </script> </body> </html> وهكذا لاحظ كيف قمنا بتخزين قيمة اللغة في التخزين المحلي عند تغير اللغة . وهكذا إذا أغلق المستخدم الصفحة أو المتصفح وقام بفتحها مرة أخرى أو حتى إعادة تحميل الصفحة سيتم إستخدام أخر لغة قام بإختيارها.
  17. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
  18. يجب عليك معرفة أولا ما هو ال random_state حيث أنه رقم يُستخدم لضبط العشوائية بحيث تكون قابلة للتكرار فهو رقم يتم إستخدامه كبذر لخوارزمية العشوائية . حيث أي أنك إذا وضعت نفس الرقم فإن الخوارزمية ستعيد نفس البيانات أى ىستحصل على نفس النتائج كل مرة تشغل فيها الكود. أما إذا لم تحدد random_state، فستحصل على نتائج مختلفة في كل مرة لأن العمليات العشوائية مثل تقسيم البيانات أو تدريب بعض النماذج ستكون غير ثابتة لأنه يتم إستخدام رقم مختلف في كل مرة. ولاحظ أن رقم 42 ليس مهما أو ثابتا بل يمكنك وضع أي رقم صحيح مثلا 42 أو 0 أو 1 أو أى رقم أخر فلا يهم الرقم نفسه، المهم أنه: إذا أردت نتائج متكررة وثابتةيجب عليك إستخدام نفس الرقم. وإذا أردت نتائج مختلفة في كل مرة لا تحدد ال random_state. وفائدته هو أنك إذا أردت تقيم دقة وأداء النموذج فيمكنك إستخدامه وتثبيت الرقم وهنا سيتم إختبار النموذج على نفس البيانات هي هي في كل مرة وهكذا يمكنك متابعة الدقة بطريقة صحيحة فلو زادت الدقة على نفس البيانات إذا التحسينات التي قمت بها جيدة وهكذا.
  19. أولا تأكد أن الملفات اللتي تريد تحفظها موجودة في المسار /kaggle/working/ فمثلا : with open("/kaggle/working/my_file.txt", "w") as f: f.write("Hello, this is a test file.") في الكود السابق هذا الملف سيتم حفظه مؤقتا في الجلسة الحالية . بعد ذلك اضغط على زر ال "Save Version" الموجود في أعلى صفحة ال notebook و الزر ستجده موجود في الشريط في الأعلى بجانب اسم ال notebook . وعند الضغط عليه ستظهر لك نافذة منبثقة في تلك النافذة قم بإختَيار نوع الحفظ ويمكنك الأفضل إستخدام : Quick Save لحفظ سريع أو Save & Run All لتشغيل كل الخلايا وحفظ النتائج. ثم اضغط على زر "Save" في أسفل النافذة. وإنتظر حتى تنتهي عملية الحفظ. وبعد الحفظ سيتم إنشاء نسخة جديدة من ال notebook في صفحة "Versions". وللوصول إلى الملفات في وقت أخر يمكنك الإنتقال إلى صفحة ال notebook على Kaggle ومن القائمة الجانبية إختار "Versions". ويمكنك فتح النسخة التي حفظتها مسبقا. وفي نافذة النسخة ستجد قسم "Output Files" وهذا فيه كل الملفات اللتي كانت موجودة في /kaggle/working/. ويمكنك تحميل الملفات أو استخدامها في notebook آخر سواء بالضغط على زر التحميل بجانب الملف أو من notebook جديد تضيف النسخة كمصدر (dataset) واستخدام الملف مباشرة.
  20. هل تقوم بتشغيل المشروع بداخل ال terminal الموجود في cmd أم الخاص بالويندوز ؟ يفضل إستخدام الويندوز فمن الممكن أن Vs code يستهلك تلك الرامات بشكل كبير من خلال تشغيل المشروع فيه. أيضا إن ال Nuxt 3 يرسل بيانات Telemetry بشكل افتراضي مما يزيد الضغط على الموارد لديك أثناء التطوير ولإيقاف تلك الخاصية يمكنك تنفيذ الأمر التالي : npx nuxt telemetry disable وأيضا لو كنت تستخدم modules كثيرة والتي تساعدك أثناء التطوير فهذا الأمر سيأخذ الكثير من الرامات بالفعل مثل : Tailwind لو كنت تستخدم JIT mode به وهو الأمر الذي يجعل tailwind يشاهد التغيرات اللحظية في الملفات لديك لتوليد ال classes المستخدمة فقط. أيضا ESLint و Prettier أثناء التشغيل يأخذون الكثير من الموارد لو كان المشروع كبيرا وذلك لإكتشاف الأخطاء وإقتراح التحسينات لديك. ويمكنك أيضا تقليل عدد الملفات التي يشاهدها vite من خلال تعديل الإعدادات هكذا : export default defineNuxtConfig({ vite: { server: { watch: { usePolling: false, interval: 1000 } } } })
  21. هل الملف image.jpg موجود في مجلد assets ؟ إذا لم يكن موجودا يرجى وضعه والتأكدم من الإسم الصحيح . إذا إستمرت المشكلة يرجى إرفاق ملفات المشروع بأكملها ماعدا مجلد node_modules وإرفاقها هنا بعد ضغطها ويرجى عدم إرفاق مجلد src فقط بل جميع الملفات أى مجلد المشروع الرئيسي.
  22. لإضافة صورة كخلفية (background-image) باستخدام bg-url في Vue فإن ذلك يتم بنفس طريقة CSS العادية. الطريقة الأولى بداخل ملف CSS خارجي أو <style> <template> <div class="img"></div> </template> <style scoped> .img { width: 300px; height: 200px; background-image: url('@/assets/img.jpg'); background-size: cover; background-position: center; } </style> وإن @/assets/my-image.jpg هي اختصار ل src/assets/my-image.jpg وهذا الأمر إذا كنت تستخدم Vue CLI أو Vite. الطريقة الثانية بإستخدام binding داخل style في الـ template فلو أردت أن تجعل الخلفية ديناميكية أي تتغير حسب البيانات مثلا يمكنك استخدام binding: <template> <div :style="bgStyle" class="img"></div> </template> <script> export default { data() { return { imageUrl: require('@/assets/img.jpg'), // أو import }; }, computed: { bgStyle() { return { backgroundImage: `url(${this.imageUrl})`, backgroundSize: 'cover', backgroundPosition: 'center', }; }, }, }; </script> <style scoped> .img { width: 300px; height: 200px; } </style> الطريقة الثالثة يمكنك وضعها مباشرة داخل ال template : <template> <div class="img" :style="{ backgroundImage: `url(${require('@/assets/img.jpg')})` }" ></div> </template>
  23. مدة التعليم تختلف بناء على المستوي الذي تريد الوصول إليه وأيضا الوقت المتاح لديك. فلتعلم أساسيات الـ SEO أى فهم ما هي الكلمات المفتاحية و الروابط والعناوين وال Meta TagsالSEO الداخلي (On-page) فهذه الأمر قد يستغرق من 2 إلى 4 أسابيع. أما لو أردت الوصول إلى مستوى متوسط أو احترافي لكي تقوم بتحليل المنافسين وتحسين سرعة المواقع و السيو التقني (Technical SEO) و ال Schema وبناء الروابط (Backlinks) فمن الممكن أن تحتاج إلى 2 حتى4 شهور. أما إذا أردت أن تصبح خبير SEO فالأمر سيأخذ منك أكثر من 6 أشهر. ونعم ال SEO سيفيدك في البرمجة بالطبع ولكن يجب عليك معرفة أن هناك وظائف منفصلة تماما لل SEO .أى هي مخصصة للمطورين أو المبرمجين وقليلا ما تجد خبير SEO ولديه خبرة كبيرة في البرمجة . ولكن بالطبع لو عرفت الأساسيات أو أصبحت متوسط الخبرة في SEO فسيفيدك جدا كمبرمج. فلو أنت مطوّر ويب (Frontend أو Full Stack): ستفهم كيف تبني مواقع سريعة ومتوافقة مع محركات البحث. وستعرف كيفية تحسن العناوين والصور و ال HTML Structure. وأيضا سيكون لديك فرص كبيرة في التوظيف. ولو كنت تعمل ك eCommerce أو WordPress: ستجد أن ال SEO مهم جدا لنجاح المواقع التجارية والمدونات. وستسطيع إضافة إعدادات SEO للمنتجات أو المقالات بنفسك. أما لو تعمل كمبرمج حر Freelancer أو تريد بناء مشروعك الخاص: هنا ستعرف كيفية جلب زوار مجانيين من Google إلى موقعك. وستستطيع إستخدام أدوات ال SEO لتطوير استراتيجيتك التسويقية.
  24. إذا أردت دراسة أساسيات TypeScript فقط فيمكنك البدأ في مسار "أساسيات TypeScript" مباشرة ولكن في نهاية المسار يوجد تطبيق عملي بإستخدام إطار Next.js وإن إطار عمل Next هو يعتمد على React لهذا يجب عليك معرفة React مسبقا ولكن ليس معرفة كاملة . حيث أن Next.js هو إطار عمل (framework) يعتمد على React كما وضحت لك لهذا فإنك ستواجه مكونات React مثل useState و useEffect و JSX أثناء تطوير Next وإذا لم تكن تعرف React مطلقًا، قد تواجه صعوبة في فهم بعض المفاهيم الأساسية مثل: المكونات (Components). الخصائص (Props). الحالة (State). دورة حياة المكون (Lifecycle). ولكن بما أنك درس vue فستفهم إلى حد ما تطبيق Next ولكن للمتابعة مع المدرب سيتوجب عليك دراسة React وتطبيق عملي عليه من خلال مسار "تطبيق دردشة يشبة whatsApp"
  25. وعليكم السلام ورحمة الله وبركاته. بالنسبة إلى هذا السؤال فإن الدالة format تقوم بتنسيق النصوص حيث تقوم بوضع حقول قابلة للاستبدال تُعرَّف عبر وضع قوسين معقوفين {} في السلسلة النصية ثم استدعاء الدالة str.format()‎، ويتم تمرير القيمة التي تريد وضعها ضمن السلسلة النصية إلى الدالة format()‎ وستوضع هذه القيمة في نفس مكان الحقل القابل للاستبدال الموجود في السلسلة الأصلية وهو الأقواس {} عندما تقوم بتشغيل برنامجك. print("Hello {} .".format("Mohamed")) فلاحظ كيف في المثال السابق قامت الدالة format بإستبدال الأقواس {} بقيمة "Mohamed" الذي تم تمريره لها . أى أنها لا تقوم بإستبدال النص بأكمله بل فقط الأقواس . ويمكنك تمرير أكثير مم كلمة حيث يجب عليك تمرير كلمات بعدد الأقواس الموجودة لديك في السلسلة النصية : print("Hello I'm {} And my age is {}".format("Mohamed", "10")) كما في المثال السابق إستبدلنا القوسين بالنصين الممرات للدالة. ويمكنك أيضا وضع أرقام بين الأقواس لتدل على المعامل الذي سيمرر لها . print("Hello I'm {1} And my age is {0}".format( "10","Mohamed")) فلاحظ بالرغم من تمرير رقم 10 أولا ولكنه تم إستبداله بالقوس الثاني وذلك لأننا وضحنا الرقم بداخل كل قوس فالقوس {0} سيتم إستبداله بالمعامل الأول و القوس {1} سيتم إستبداله بالمعامل الثاني . ويمكنك قراءة المزيد من التفاصيل من خلال الدرس التالي : هل يمكنك توضيح ما هي greet_name حيث لا يوجد دالة بهذا الإسم. لاحظ كما وضحت لك في شرح الدالة format هي تقوم فقط بإستبدال الأقواس . ولهذا فهي قامت بكتابة salam كما هي وقامت فقط بإستبدال الأقواس ب YOUSSEF لهذا قامت بإسناد النص : salamYOUSSEF إلى المتغير TAHIA_name ولا تقوم بإعادة الإسم الممر لها فقط بل النص بأكمله بعد إستبدال الأقواس. إذا كان هذا السؤال خاص بإحدى دروس الدورات من فضلك يرجى وضع سؤالك أسفل الدرس حيث يوجد صندوق للتعليقات أسفل الدرس كما هنا حيث هنا هو قسم الأسئلة العامة ولا نقوم بالإجابة على أسئلة الدورات هنا.
×
×
  • أضف...