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

Mustafa Suleiman

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

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

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

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

    472

كل منشورات العضو Mustafa Suleiman

  1. بخصوص التاريخ، فمن خلال كائن Date في جافاسكريبت كالتالي: <span id="date"></span> <script> function updateDate() { const today = new Date(); document.getElementById('date').textContent = today.toLocaleDateString(); } updateDate(); setInterval(updateDate, 24 * 60 * 60 * 1000); </script> الفكرة هنا في السطر: setInterval(updateDate, 24 * 60 * 60 * 1000); حيث استخدمت دالة setInterval وحددت لها مدة 24 ساعة لتشغيل دالة updateDate. حاول تنفيذ ذلك في مشروع React لكي تحقق استفادة. أما مواقيت الصلاة، ستحتاج إلى API خاص بأوقات الصلاة، ويتوفر التالي: https://aladhan.com/prayer-times-api بالطبع ستحتاج إلى قراءة المستند الخاص به وكيفية استخدامه من هنا: https://aladhan.com/prayer-times-api#get-/timingsByCity/-date- مثال عند جلب مواقيت الصلات لمدينة القاهرة في دولة مصر بتاريخ اليوم: https://api.aladhan.com/v1/timingsByCity/24-05-2025?city=cairo&country=egypt&method=8 حاول القيام بذلك بنفسك، لو واجهت صعوبة أخبرني.
  2. لا تقلق بخصوص تلك النقطة، تستطيع التقدم للإختبار أكثر من مرة لحين إجتيازه والحصول على الشهادة، لكن الأفضل الاستعداد له جيدًا وعدم التسرع في خوضه، وذلك حفاظًا على وقتك ومجهودك، فالأمر يستغرق وقت بلا شك. آلية الإختبار هي كالتالي: بعد إنهاء 4 مسارات من الدورة على الأقل، أو الدورة بالكامل عليك رفع المشاريع التي قمت بها بالدورة على حسابك في github، ثم التحدث لمركز المساعدة وإخبارهم أنك تريد التقدم للإختبار وتوفير روابط المشاريع على github. ثم الإنتظار لبعض الوقت لحين مراجعة المشاريع وسيتم الرد عليك، وتحديد موعد لإجراء مقابلة، وبها يتم: إجراء محادثة صوتيّة لمدة 30 دقيقة يطرح المدرّب عليك أسئلة متعلّقة بالدورة والأمور التي نفّذتها خلالها. يحدد لك المدرّب مشروعًا مرتبطًا بما قمت به أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع إلى أسبوعين. إجراء محادثة صوتيّة أخرى لمدّة 30 دقيقة يناقش بها مشروعك وما نفذته وتطرح أسئلة خلالها. إن سارت على جميع الخطوات السابقة بشكل صحيح، تحصل على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل معنا من جديد.
  3. المشكلة في مكون Prayer حيث قمت بتعريفه كالتالي: export default function Prayer(name, time) { } لكن في React، يجب أن تستقبل المكونات معامل واحد وهو props وليس معاملين، بالتالي عند استدعائك <Prayer /> بدون تمرير أي خصائص، تكون القيم غير معرفة، ويؤدي ذلك إلى مشاكل في العرض. يجب وضع الخصائص بين { } في حال أردت استقبالهم مباشرًة بدلاً من كتابة props، وذلك يسمى object destruction في جافاسكريبت، وذلك لتفكيك كائن props الخاص بالمكون: export default function Prayer({ name, time }) { } ثم في ملف App.jsx يجب تمريرهم كالتالي: <Prayer name="الفجر" time="04:00" />
  4. vite هو أداة تحزيم bundler للمشاريع، لكنها حديثة وسريعة وحاليًا يتم استخدامها في أغلب المشاريع، بينما في الدورة قمنا بإنشاء مشروع React عن طريق react-scripts والتي تستخدم في الخلفية webpack وهو أداة تحزيم أيضًا لكنها أقدم من vite وأقل استخدامًا حاليًا. في الوقت الحالي تم الإنتقال إلى vite حيث أنّ react-scripts لم يُعد يتم تطويرها، من خلال vite يتم إنشاء المشروع بكل سهولة وأيضًا عملية التطوير سريعة من خلالها. لذا لا اختلاف فيما تم شرحه بخصوص React، الفكرة في طريقة إنشاء وتهيئة المشروع فقط والعملية بسيطة، لو واجهت مشكلة أخبرني.
  5. height من الاسم تعني تحديد إرتفاع العنصر، أي بتحديد قيمة ثابتة سيكون ذلك هو الارتفاع النهائي للعنصر بغض النظر عن محتواه أو العوامل الأخرى، ما لم يتم تجاوزه بواسطة خصائص أخرى مثل max-height أو المحتوى الزائد مع overflow. بالتالي لو المحتوى أكبر من الارتفاع المحدد، فسيتسبب ذلك في التدفق الزائد overflow إن لم يتم التعامل معه بتحديد تنسيق overflow: auto له. div { height: 100px; } لاحظ العنصر سيكون دائمًا بارتفاع 100 بكسل، حتى لو كان المحتوى أصغر أو أكبر. بينما min-height يحدد الحد الأدنى لارتفاع العنصر، أي يسمح للعنصر بأن يكون أطول من القيمة المحددة إذا تطلب المحتوى ذلك، لكنه لن يكون أقصر من القيمة المحددة. نستفيد من ذلك بضمان أن العنصر لن يصبح أصغر من ارتفاع معين لكي لا يتشوه التصميم أو يحدث مشكلة في عرض المحتوى، ولكن متاح له أن يتوسع لو المحتوى يحتاج إلى مساحة أكبر. div { min-height: 100px; } وبالطبع تستطيع توظيف height وmin-height معًا، حيث يتأكد min-height من أن الارتفاع لا يقل عن قيمة معينة، بينما height يحدد الارتفاع الافتراضي. وفي حال قيمة min-height أكبر، فخاصية min-height ستتغلب على height.
  6. خاص بالقائمة المنسدلة، أي القائمة التي تختار منها خيار واحد أو أكثر من خيار حسب ما تحدده أنت، وستجد أنها مستخدمة في النماذج أي في عنصر form. ولإضافة الخيارات داخله ستحتاج إلى العنصر <option> حيث كل <option> يمثل خيار في القائمة، كالتالي: <select name="colors" id="colorSelect"> <option value="red">أحمر</option> <option value="blue">أزرق</option> <option value="green">أخضر</option> </select> حيث name="colors" هو اسم الحقل الذي سيتم إرساله مع النموذج إلى الخادم في الواجهة الخلفية، و id="colorSelect" هو مُعرف للعنصرفي حال أردت تنسيقه أو استهدافه من قبل جافاسكريبت. وكل <option> يحتوي على value وهي القيمة التي تُرسل إلى الخادم عند اختيار الخيار ، والنص هو الذي يراه المستخدم مثل أحمر. وللعلم في حال لم يتم تحديد value في <option>، يتم إرسال النص الموجود بين الوسمين كقيمة.
  7. ستحتاج إلى كتابة منطق جافاسكريبت كالتالي: let mainProductImage = document.getElementById('mainImage'); let pageContainer = document.querySelector('.container'); function phones(phoneSrc){ mainProductImage.src = phoneSrc; } function colors(color){ pageContainer.style.background = color; } وعليك تعيين id باسم mainImage للصورة التي سيتم تغييرها بالصور الأخرى: <div class="img"> <img id="mainImage" src="https://placehold.co/600x400?text=Hello+World" alt="Main Product Image"> </div> الفكرة هي اختيار عنصر الصورة الرئيسية باستخدام getElementById وتخزينه في متغير mainProductImage، كذلك اختيار عنصر الحاوية باستخدام querySelector وتخزينه في متغير pageContainer. والدالة phones تستقبل مصدر صورة مصغرة كمعامل وتعينه كمصدر للصورة الرئيسية. والدالة colors تستقبل أيضًا لون الخلفية كمعامل وتعمل على تغيير لون الخلفية عند الضغط على كل صورة.
  8. تقصد التطبيق بمفردك مرة أخرى؟ عامًة الأفضل إعادة التمرين بمفردك، فعملية التعلم عملية تكرارية وتدريجية، فلن تتمكن من تنفيذ مشروع كامل دونّ التدرج من خلال تلك التمارين البسيطة. وأثناء التطبيق مع الشرح لا يكون ذهنك حاضر بنسبة كبيرة، بينما أثناء تنفيذه بمفردك يتم التركيز على الكود والخطوات بنسبة أكبر وتتثبت المعلومات أكثر ويظهر لك نقاط الضعف وما أنت بحاجة إلى مراجعته. ستجد تفصيل هنا:
  9. لا أفضل من الواقعية والصراحة لكي لا تُصاب بالإحباط عند مواجهة أرض الواقع، تحتاج على الأقل ما بين 6 أشهر أو سنة لكي تتعلم تخصص معين في البرمجة مثل الواجهة الأمامية أو الخلفية أو كلاهما معًا. HTM, CSS, JS هي لغات الويب الأساسية لكن غير كافية للعمل على مشاريع حقيقية، نعم توجد مشاريع بسيطة على مواقع العمل الحر العربية تتطلب تلك اللغات فقط، لكن المنافسة عليها عالية فالجميع يتعلم تلك اللغات عند تعلم البرمجة في الغالب. ما الفرق بينك وبين الآخرين إذن؟ تحتاج إلى تمييز نفسك بتعلم كامل التقنيات اللازمة للواجهة الأمامية، أي تعلم React بجانبهم والمكتبات التي حولها فهي لا تعمل بمفردها بل بحاجة إلى مكتبات أخرى في المشاريع الحقيقية، والتي ستتعرف عليها في دورة جافاسكريبت. والأمر ليس بتلك الصعوبة، طالما تعلمت React الباقي يسير. ثم ستحتاج إلى تعلم Next.js وهو إطار عمل مبني على React ولا جدال حول ضرورة تعلمه حاليًا فنحن في 2025، حيث أنك تتعلم React لكي تتعلم Next.js ستجد تفصيل أكثر هنا:
  10. الطريقة الصحيحة لتعلم React هي بتعلم جافاسكريبت والتعمق بها، لديك مشكلة في استيعاب دوال المصفوفات لأنك لم تقم بتجربتها جميعًا أو قراءة شرح لها على الأقل، فتلك من أساسيات اللغة، لذا يجب أولاً الإهتمام باللغة البرمجية نفسها المبنية عليها React من الأساس، ستحتاج إلى تنفيذ مشاريع جافاسكريبت بسيطة ابحث على اليوتيوب عن مشاريع جافاسكريبت للمبتدئين. لو واجهت صعوبة قم بمراجعة أساسيات جافاسكريبت من الدورة مجددًا، أو من أي مصدر تريد. وبخصوص التطبيق بمفردك في حال قمت بذلك واستوعبت الأمر فعلاً، فستكون تعلمت جزء كبير من الأساسيات الخاصة بـ React وأيضًا جافاسكريبت ولكن ليس كامل React بالطبع فهي ليست مكتبة بسيطة. بعد الإنتهاء من التطبيق مع الشرح، أرجو إعادة تنفيذ المشروع من جديد بمفردك، ولا مشكلة في الرجوع للدروس لمراجعة بعض الأمور بعد المحاولة بنفسك أو لتفقد الكود لرؤية هل ما قمت به صحيح أم لا لتجنب تراكم الأخطاء وتركها للنهاية. الفكرة هي تحفيز ذاكرتك على استرجاع المعلومات وأيضًا تفقد مدى استيعابك لما تم شرحه وما قمت به، وكذلك إجبار عقلك على التركيز لأنك تقوم بالمشروع بنفسك، حيث لا يكون ذهنك حاضر بنسبة كبيرة عند التطبيق مع الشرح. ستجد تفصيل هنا: ولكن الأفضل تنفيذ مشروع بسيط آخر بواسطة React فمشروع واحد ليس كافٍ، ابحث على اليوتيوب عن "مشروع React للمبتدئين" وستجد الكثير لكن اختر مشروع بسيط، ستجد مشروع مواقيت صلاة جيد وبسيط، ثم تنفيذ مشروع آخر معقد قليلاً فقط عنه.
  11. الأفضل فصل حساب الإحصائيات، وذلك ما يجب فعله عند التعامل مع بيانات تدريب واختبار، عليك أولاً حساب الإحصائيات من بيانات التدريب فقط. ثم تعريف الدالة التي تستقبل الإحصائيات وبالطبع بها عليك العمل على نسخة من البيانات لتجنب تعديل البيانات الأصلية بشكل غير متوقع، وبداخلها أيضًا تُحدد الأعمدة التي تريد مِلأها. ثم تطبيق الدالة على بيانات التدريب: age_mean_train = train_data['Age'].mean() embarked_mode_train = train_data['Embarked'].mode()[0] def fill_missing_values_ml(data, age_fill, embarked_fill, deck_fill='F'): data_filled = data.copy() fill_values = { 'Age': age_fill, 'Embarked': embarked_fill, 'Deck': deck_fill } cols_to_fill = [col for col in fill_values.keys() if col in data_filled.columns] for col in cols_to_fill: data_filled[col].fillna(fill_values[col], inplace=True) return data_filled train_data_processed = fill_missing_values_ml(train_data, age_mean_train, embarked_mode_train, deck_fill='F') ولاحظ تحديد [0] لأن mode() تعيد أكثر من قيمة لو تساوت التكرارات.
  12. كلاهما من الدوال الخاصة بالمصفوفات في جافاسكريبت، splice لتعديل المصفوفة الأصلية مباشرةً عن طريق إضافة، حذف، أو استبدال عناصر فيها. أي تقوم بتغيير المصفوفة الأصلية، لاحظ التالي: let fruits = ['تفاح', 'موز', 'برتقال', 'مانجو']; fruits.splice(1, 1); console.log(fruits); هنا قمت بحذف عنصر واحد فقط بدءًا من الـ index رقم 1 في المصفوفة، ثم حددت عدد العناصر التي أريد حذفها وهي عنصر 1 فقط. لذا النتيجة: ['تفاح', 'برتقال', 'مانجو'] أما filter لإنشاء مصفوفة جديدة تحتوي فقط على العناصر التي تستوفي شرط معين، ولا تقوم بالتغيير في المصفوفة الأصلية، بل تعيد مصفوفة جديدة تحتوي على العناصر التي اجتازت الشرط. let fruits = ['تفاح', 'موز', 'برتقال', 'مانجو']; let filteredFruits = fruits.filter(fruit => fruit !== 'موز'); console.log(filteredFruits); //المصفوفة التي فلترتها console.log(fruits);//المصفوفة الأصلية قمت بحذف موز من المصفوفة، قم بتجربة تشغيل الكود ولاحظ الفرق بين المصفوفة التي فلترتها والمصفوفة الأصلية والتي لم تتغير. ستجد تفصيل هنا أرجو قراءته بتمعن:
  13. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم أسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  14. قديمًا كان يتم التدخل بشكل بشري ومراجعة المحتوى الذي تم التبليغ عنه، حاليًا تقنيات الذكاء الاصطناعي تُستخدم بشكل كبير بعد أن تم تدريبها على تلك البيانات. ويتبقى جزء صغير للتدخل البشري في حالات معينة، للتفرقة بينهم، لو تم حجب المحتوى خلال ثوانٍ أو دقائق قليلة جدًا من نشره، فذلك يعني تدخل الخوارزميات التي تفحص المحتوى بشكل آلي وسريع بحثًا عن كلمات مفتاحية معينة، صور أو مقاطع فيديو مصنفة مسبقًا كمنتهكة للسياسات مثل العنف، خطاب الكراهية الواضح، المحتوى الجنسي، أو حتى بعض الرموز والشعارات السياسية المحددة. مثلاً في موضوع غزة، ستجدين أنه يتم نشر محتوى متشابه في طبيعته أو كلماته المفتاحية ويتم حجبه باستمرار وبنفس السرعة، بالتالي الخوارزمية تعلمت أو تمت برمجتها لاستهداف ذلك النوع من المحتوى. أيضًا ستجدين رسائل الحجب الآلية عامة جدًا، مثل هذا المحتوى ينتهك معايير مجتمعنا، دون تحديد دقيق للسبب. تقديريًا 95 ٪ من المحتوى يحذف آلياً أولاً، ويتم مُراجعة 5٪ منه كعينة فقط يدويًا لتفقد المحتوى أو بسبب وجود نسبة خطأ، بينما الـ 5% الأخرى تتم يدويًا نتيجة بلاغات. وستجدين أنّ البعض يقوم بالتلاعب بالكلمات أو تقطيعها وإضافة رموز بها لتخطي تلك المشكلة، لكن تقنيات الذكاء الصناعي تتطور وأصبحت قادرة على فهم سياق المنشور بنسبة كبيرة. لكن لو السياق معقد ويتطلب فهم دقيق للسياق والنية مثلاً، هل هو نقد ساخر أم تحريض؟ هل هو رأي أم تضليل متعمد؟، فتلك الحالات تتطلب تقييم بشري، حتى لو تم الإبلاغ عنها مبدئيًا بواسطة خوارزمية أو من قبل أشخاص آخرين. وللعلم ليس شرطًا حظر المحتوى صراحًة، بل هناك فكرة خبيثة يتم تنفيذها، تُسمى الحظر الشبحي أو Shadowbanning حيث لا يتم إعلامك بالحجب، ولكن مدى وصول منشوراتك ينخفض بشكل كبير جدًا، وذلك إجراء عن طريق الخوارزميات لتقليل انتشار محتوى معين دون حذفه بالكامل.
  15. لديك مشكلة في حلقة التكرار، وهي infinite loop أي حلقة تكرار لا نهائية، فالشرط في الحلقة هو while (x < 20)، أي أن الحلقة ستستمر طالما x أقل من 20، وقيمة x هي 1. ويتم زيادتها في حال x قيمة فردية فقط بسبب الشرط if (x % 2)، بالتالي الشرط if (x % 2) لن يتحقق في الحالة الزوجية، ولن يتم تنفيذ x++. يجب أن تزيد من قيمة x دائمًا في كل تكرار للحلقة، سواء كان زوجيًا أم فرديًا: let x = 1; while (x < 20) { if (x % 2) console.log(x); x++; }
  16. بالضبط، عند تطوير تطبيق أو نظام فهو بمثابة النظام الأساسي أو Primary System، لكونه يتفاعل معه المستخدم النهائي بشكل مباشر لتحقيق هدف معين. وفي حال الحاجة إلى قدرات معالجة لغة طبيعية متقدمة كتوليد النصوص، الترجمة، الإجابة على الأسئلة، فنستدعي OpenAI API لتنفيذ تلك المهام. بالتالي OpenAI API هو نظام ثانوي أو خدمة خارجية External Service أو مكون تابع، لأنّ النظام الأساسي يعتمد عليه لأداء وظائف محددة لا يمتلكها داخليًا أو يفضل تفويضها. وفي مخططات حالات الاستخدام في UML، ستقوم بتمثيل العلاقة إما بشكل ضمني حيث أن تفاصيل كيفية تحقيق الـ use case لا تظهر دائمًا المكونات الثانوية أو بشكل أكثر تفصيلاً باستخدام علاقة تبعية dependency أو تضمين لو الخدمة الخارجية جزء لا يتجزأ من تحقيق الـ use case. وكلمة use تصف طبيعة العلاقة بشكل جيد.
  17. المطلوب منك هو المشاريع العملية الكاملة أي التي بها مجلدات وملفات كثيرة مثل مشروع واجهة API للأفلام في مسار Node.js أو مشروع المهام في مسار react وهكذا. أما التطبيقات العملية التي تكون في ملف واحد ليست مطلوبة، لكن الأفضل إنشاء مجلد ثم تقسيمه إلى مجلدات حيث تُنشيء مجلد لكل مسار وداخله تُقسمه إلى مجلدات حيث مجلد لكل قسم داخل المسار، ثم وضع التطبيقات العملية الخاصة بكل قسم في المجلد الخاص بها، ثم رفع المجلد الرئيسي في مستودع github. وبالطبع عليك رفع المشاريع العملية الكاملة على مستودع GitHub منفصل لكل منها، وتوفير روابط تلك المستودعات عند التقدم للإختبار.
  18. في البداية يجب تفهم أن الشعور بالحيرة والتخبط والتشتت وكل المشاعر السلبية أمر طبيعي في بدايات تعلم البرمجة، كل ما عليك هو تجاهل تلك المشاعر ودراسة الدورة بطريقة صحيحة ومنظمة وعدم التسرع، ومع الاستمرار سيزول الأمر شيئًا فشيئًا، ويصبح لديك قدرة على تقييم الأمور بشكل أوضح. ولا تتوقع أن تستوعب كل شيء بمجرد مشاهدة الدرس من المرة الأولى في حال لم يكن لديك خبرة برمجية سابقة، هل ستتعلم اللغة الإنجليزية بمجرد مشاهدة درس عن التحدث؟ بالطبع لا، ستحتاج إلى المراجعة والممارسة والتكرار لكي يتثبت الأمر لديك، وبالأخص الجانب العملي هو أم عامل أثناء تعلم البرمجة، فكلما واجهت صعوبة في استيعاب مفهوم ما قم بالتطبيق بشكل عملي عليه وسيتضح لك بنسبة كبيرة. ولا تدع المفاهيم تتراكم عليك، وتتخطاها لتشاهد دروس أخرى، بل اعمل على استيعابها ثم الإنتقال للدروس التالية، حيث أنّ عملية التعلم عملية تراكمية أي الدروس تعتمد على بعضها البعض ولو واجهت مشكلة في درس ما ستواجه صعوبة في درس آخر. ستجد تفصيل هنا لما عليك فعله:
  19. الأفضل استخدام جدول Users أساسي للمعلومات المشتركة والمصادقة، مع جداول متخصصة للموظفين والزبائن، بالتالي ستجمع بين ميزات كل منهما، وذلك نمط يسمى وراثة الجداول أو جدول النوع الفائق والنوع الفرعي Supertype/Subtype. وستحصل على مصادقة مركزية لأنّ تسجيل الدخول يتم دائمًا عبر جدول Users، أيضًا لا تكرار للمعلومات المشتركة الاسم، البريد الإلكتروني، إلخ، فيتم تخزينها مرة واحدة. ومعلومات متخصصة ومنظمة حيث كل نوع مستخدم له جدوله الخاص ببياناته المحددة، وسهولة التوسع في حال أضفت نوع مستخدم جديد وليكن موردين، فستضيف جدول Suppliers جديد يربط بـ Users. ويدعم حالة الموظف هو زبون، أي متاح للمستخدم أن يكون له سجل في Users وسجل مقابل في Employees و سجل مقابل في Customers لو أردت ذلك، بالإضافة إلى أنّ استعلامات SQL ستكون واضحة.
  20. الأمر يعتمد على الوقت المتاح لك، فإعداد الموقع لن يستغرق أكثر من 15 إلى 20 ساعة باستخدام قالب جاهز أو من خلال أدوات لمساعدته في إنشائه، لذا الأمر يستحق تخصيص وقت له، فوجوده موقع سيُضيف إليك ولن تخسر شيء من مجهودك في إعداده، بالعكس ستتميز عن البقية فالغالب منهم لن يقوم ببناء موقع شخصي يوضح ما قام به بطريقة إحترافية وسهلة. وتجنب عرض جميع المشاريع، بل انتقي الأفضل والمؤثر منها، ثم حاول شرح المشكلة التي حاولت حلها في كل مشروع، والمنهجية التي اتبعتها، والتحديات التي واجهتك، والنتائج التي حققتها، والأثر التجاري أو العلمي للمشروع، وذلك أعمق مما يمكن كتابته في ملف README.md على GitHub، ووفر روابط Binder أو Streamlit أو Gradio لنسخ حية يمكن تجربتها. أيضًا سيجمع كل روابطك المهنية من ملفك الشخصي على LinkedIn، حسابك على GitHub، ملفك على Kaggle.
  21. إذن استخدمه لغرض تخريب النظام، أحيانًا يستخدم البعض ذلك المفهوم بكتابة كود لتعطيل النظام في حال لم يقم العميل بدفع المستحقات، من خلال إخفاء ذلك الكود بداخل كود آخر ثم عمل minify للكود بحيث يصعب قراءته، الفكرة واحدة والاستخدام مختلف.
  22. ذلك مفهوم أشبه بمفتاح الطواريء لإيقاف البرنامج أو جزء من الكود بسرعة في حال حدث عطل دون الحاجة إلى تغيير الكود أو إعادة نشر البرنامج، أي ليس كود محدد بذاته، بل الفكرة إنشاء آلية لإيقاف عملية أو مهمة طويلة بدلاً من أن تتسبب في تجميد المتصفح أو استهلاك موارد النظام بشكل مفرط. مثلاً، الحلقات التكرارية أثناء التطوير، أحيانًأ تكتب حلقة while أو for بشرط توقف خاطئ، وبالتالي تعمل إلى الأبد، أو بعض العمليات التي تستغرق وقت طويل كمعالجة كمية كبيرة من البيانات في المتصفح ونريد توفير خيار للمستخدم لإيقافها. والمشاريع الكبيرة يتم الإعتماد على الـ Kill Switch كطريقة لتعطيل ميزة جديدة بسرعة في حال تسببت في مشاكل بعد إطلاقها، أو لتجربة اختبار ميزة على مجموعة صغيرة من المستخدمين، ولو فشلت، يتم إيقافها بسهولة. وببساطة، يتم إضافة متغير تحكم يسمى Feature Flag في الكود، والذي يحدد هل الميزة تعمل أم لا، وتستطيع التحكم به عبر إعدادات خارجية مثل لوحة تحكم أو API. if (featureEnabled) { runNewFeature(); // تشغيل الميزة } else { console.log("الميزة معطلة!"); }
  23. ستحتاج إلى إنشاء حساب على المنصة، وسيطلب منك إدخال البريد الإلكتروني وكلمة المرور وأيضًا اختيار اسم المستخدم الذي سيظهر بالموقع لحسابك فاختر اسم جيد ورسمي أكثر. وسيصلك رسالة على البريد الإلكتروني لتفعيل حسابك، وبعدها تستطيع إنشاء مستودع ورفع مشروع عليه، وبالطبع عند دفع تغييرات إلى المستودع أي عمل push يتم تحديث الكود والملفات بالمستودع بما يُطابق المستودع المحلي على حاسوبك، فالمستودع على github يُسمى المستودع البعيد لأنه يعتمد على السحابة في خوادم شركة مايكروسوفت. ولتجنب الكثير من المشاكل الغير ضرورية، تحتاج إلى دراسة الأساسيات من خلال: ثم التالي: ما تقصده إذن هو رفع المشروع على استضافة، بالفعل github توفر استضافة وهي github pages ومن خلالها يتم تحديث نسخة الموقع في حال قمت بتحديث الكود بالمستودع. لكن الأسهل لك هي Netlify لأنّ github pages تظهر بها مشاكل بسبب مسارات الملفات أو مشكلة بسبب تعارض بين اسم المستودع وعنوان الموقع ومستودعات أخرى، ستحتاج إلى خبرة في آلية التعامل معها. لذا قم بالاستمرار في استخدام Netlify ولكن قم برفع المشروع عن طريق اختيار مستودع github الخاص بالمشروع، حيث يوجد خيار لذلك بدلاً من رفع مجلد المشروع فقط، وبالتالي عند دفع تغييرات في مستودع المشروع سيتم إعادة بناء المشروع على Netlify ونشره بنفس الرابط أي تحديثه.
  24. لأنها ضرورية للمشاريع على أرض الواقع، حيث تجنبنا الكثير من المشاكل بسبب أنواع البيانات، ستجد تفصيل هنا:
  25. المطلوب منك هو المشاريع العملية الكاملة أي التي بها مجلدات وملفات كثيرة مثل مشاريع Django أو مشروع taskaty وهكذا، أما التطبيقات العملية التي تكون في ملف واحد ليست مطلوبة، لكن الأفضل إنشاء مجلد ثم تقسيمه إلى مجلدات حيث تُنشيء مجلد لكل مسار وداخله تُقسمه إلى مجلدات حيث مجلد لكل قسم داخل المسار، ثم وضع التطبيقات العملية الخاصة بكل قسم في المجلد الخاص بها، ثم رفع المجلد الرئيسي في مستودع github.
×
×
  • أضف...