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

Mustafa Suleiman

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

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

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

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

    264

إجابات الأسئلة

  1. إجابة Mustafa Suleiman سؤال في مشكلة في كود JavaScript كانت الإجابة المقبولة   
    عليك أن تستخدم علامات الاقتباس (single or double quotes) للسلاسل النصية داخل دوال displayCart() و productContainer.innerHTML كالتالي:
    productContainer.innerHTML += ` <div class="products"> <img src="image/remove.png"> <img src="image/${item.tag}.png"> </div> <div class="price">${item.price}</div> <div class="quantity"> <img src="image/plus.png"> <span>${item.inCart}</span> <img src="image/mins.png"> </div> <div class="price-total"> ${item.price * item.inCart} </div> `; productContainer.innerHTML += ` <div class="bask"> <h4 class="baskTitle"> baskTitle </h4> <h4 class="baskTotal"> ${cartCost} </h4> </div> `; أيضًا في دالة setItems(), يجب تصحيح هذا السطر:
    localStorage.setItem("product.inCart", JSON.stringify(cartItems)); إلى:
    localStorage.setItem("productsInCart", JSON.stringify(cartItems)); وفي دالة displayCart(), صحح هذا السطر:
    let cartCost = document.querySelector('total'); إلى:
    let cartCost = document.querySelector('.baskTotal');  
  2. إجابة Mustafa Suleiman سؤال في ما هي الـ package التي تحتوي على class Point2D في جافا ؟ كانت الإجابة المقبولة   
    الحزمة هي package java.awt.geom وتحتوي على class Point2D، وتلك هي الفئة الأساسية لجميع الكائنات التي تخزن إحداثيات ثنائية الأبعاد.
    وتوفر الفئة مجموعة من الأساليب لمعالجة نقاط ثنائية الأبعاد، مثل حساب المسافة بين نقطتين وتحديد ما إذا كانت النقطة داخل شكل هندسي.
    باستطاعتك أيضًا استخدام الفئة javafx.geometry.Point2D لتمثيل نقاط ثنائية الأبعاد، وتلك الفئة متشابهة مع الفئة java.awt.geom.Point2D، ولكنها توفر بعض الميزات الإضافية، مثل دعم تنسيقات النقاط المعقدة.
    وإليك مثال على استعمال الفئة java.awt.geom.Point2D:
    import java.awt.geom.Point2D; public class Point2DExample { public static void main(String[] args) { Point2D point1 = new Point2D.Double(10, 20); Point2D point2 = new Point2D.Double(30, 40); System.out.println("Distance between points: " + point1.distance(point2)); if (point1.contains(point2)) { System.out.println("Point 2 is inside point 1"); } else { System.out.println("Point 2 is not inside point 1"); } } }
  3. إجابة Mustafa Suleiman سؤال في بعد حصولي على الشهادة, كيف يمكنني العمل في الشركة على الانترنت ؟ كانت الإجابة المقبولة   
    في مواقع التوظيف مثل LinkedIn وIndeed وBayt ومنصة بعيد، وهناك مواقع أخرى.
  4. إجابة Mustafa Suleiman سؤال في استفسار عن استعلامات قاعدة بيانات البريد الإلكتروني كانت الإجابة المقبولة   
    المطلوب هو التالي:
    1- عرض صندوق الوارد الخاص بمستخدم (أحد أعضاء المجموعة)، ويجب أن يشمل ذلك كل من رسائل البريد الإلكتروني المباشرة ورسائل البريد الإلكتروني إلى مجموعاته.
    ولعرض صندوق الوارد الخاص بمستخدم، ستحتاج إلى استعلام جدول Email وتصفية النتائج حسب عمود ReceiverID لتطابق معرف المستخدم، وستحتاج أيضًا إلى الانضمام إلى جدول UserGroup لتحديد المجموعات التي يكون المستخدم عضوًا فيها، ويمكن اعتبار أي رسائل بريد إلكتروني يتم إرسالها إلى مجموعة يكون المستخدم عضوًا فيها جزءًا من صندوق بريدهم.
    2- عرض جميع رسائل البريد الإلكتروني المرسلة بواسطة مستخدم (أحد أعضاء المجموعة) مرتبة حسب تاريخ البريد الإلكتروني.
    و ستحتاج إلى استعلام جدول Email وتصفية النتائج حسب عمود SenderID لتطابق معرف المستخدم، وتستطيع بعد ذلك فرز النتائج حسب عمود emailDate لترتيبها حسب التاريخ.
    3- عرض جميع رسائل البريد الإلكتروني في مجموعة المستخدمين
    استخدم هنا استعلام جدول Email والانضمام إلى جدول UserGroup لتحديد رسائل البريد الإلكتروني التي تم إرسالها إلى المجموعة، ثم تصفية النتائج حسب عمود GroupID لتطابق معرف المجموعة.
    4- إضافة مستخدم إلى مجموعة
    هنا عليك إدراج صف جديد في جدول UsersinGroup مع معرف المستخدم ومعرف المجموعة.
  5. إجابة Mustafa Suleiman سؤال في هل يمكن توضيح المطلوب عمله ف الجداول؟ كانت الإجابة المقبولة   
    أعتقد أن المقصود هو جدول هو "EmailSenderReceiver" ونستخدم الأمر التالي لإنشاؤه:
    CREATE TABLE EmailSenderReceiver ( emailID INT NOT NULL AUTO_INCREMENT, senderID INT NOT NULL, receiverID INT NOT NULL, subject VARCHAR(255) NOT NULL, body TEXT NOT NULL, sentDate DATETIME NOT NULL, PRIMARY KEY (emailID), FOREIGN KEY (senderID) REFERENCES Users (userID), FOREIGN KEY (receiverID) REFERENCES Users (userID) ); ,الأمر سينشئ جدولًا يسمى "EmailSenderReciver" بستة أعمدة:
    emailID: رقم تعريف البريد الإلكتروني senderID: رقم تعريف المرسل receiverID: رقم تعريف المستلم subject: موضوع البريد الإلكتروني body: نص البريد الإلكتروني sentDate: تاريخ إرسال البريد الإلكتروني يحدد المفتاح الأساسي للجدول أن كل صف يجب أن يحتوي على قيمة فريدة لـ emailID. يحدد المفتاح الخارجي لـ senderID أن senderID يجب أن يكون قيمة موجودة في جدول UsersK ,يحدد المفتاح الخارجي لـ receiverID أن receiverID يجب أن يكون قيمة موجودة في جدول Users.
  6. إجابة Mustafa Suleiman سؤال في مشكلة في تصفح الأكاديمية في ظل تفعيل برنامج Salfeld كانت الإجابة المقبولة   
    حاول تعطيل مانع الإعلانات أو تجربة متصفح آخر، وفي حال استمرار المشكلة فلا فرار من تعطيل salfeld 
  7. إجابة Mustafa Suleiman سؤال في رسم وتحريك الأشكال الهندسية باستخدام Java أو C كانت الإجابة المقبولة   
    هناك بعض المزايا التي تجعل استخدام Policies أفضل:
    تسمح Policies بفصل التحقق من Authorization عن المعالجة الفعلية للطلب، وذلك يساعد في جعل الكود أكثر قابلية للاختبار والصيانة، بمعنى تجميع جميع القواعد المتعلقة بالصلاحيات في مكان واحد بدلاً من تشتيتها في Middlewares، وأيضًا بسهولة يمكن فحص السياسات لفهم كيف يتم التحقق من الصلاحيات لنوع محدد من الموديل، مما يسهل عليك وعلى الآخرين فهم اللوجيك والتعديل عليها عند الحاجة. إعادة استخدام السياسات بسهولة في أماكن متعددة في تطبيقك، لتحقق الصلاحيات في مكان معين دون الحاجة إلى إعادة كتابة اللوجيك. تستخدم Policies للتحكم في الوصول إلى الموارد المحددة، كاستخدام Policy لتحديد ما إذا كان المستخدم مرخصًا لرؤية صفحة معينة أو إجراء عملية معينة. بإمكانك توسيع Policies بسهولة لإضافة قواعد جديدة للتحقق من Authorization. إمكانية تجاوز السياسات بسهولة الصلاحيات الأكثر تعقيدًا وتعقيدًا بناءًا على معطيات محددة، بينما تكون Middleware أقل قابلة للتعديل لتلبية حالات الاستخدام المعقدة. استخدام السياسات بشكل مباشر مع الـ Gate والـ Authorization في Laravel، مما يوفر لك أسلوبًا أكثر جمالاً للتحقق من الصلاحيات.
  8. إجابة Mustafa Suleiman سؤال في تصحيح استعلام SQL لاستبعاد قيم منفصلة في عمود معين؟ كانت الإجابة المقبولة   
    أرجو التعليق أسفل فيديو الدرس لمساعدتك بشكل أفضل.
     هناك خطأ في استعلامك، فالقيمة التي تريد استبعادها هي "four, five" ككل وليست قيمتين منفصلتين، أي يجب عليك تقسيمهما بواسطة فاصلة، وذلك باستخدام كلمة "IN" فقط لكل قيمة، كالتالي:
    SELECT * FROM school WHERE class NOT IN ('four', 'five'); بالطبع قم بتغيير اسم الجدول بما يتناسب لديك، وأيضًا لاحظ أنه في الجدول كتبت for وليس four لذلك عليك تصحيح الأمر.
  9. إجابة Mustafa Suleiman سؤال في تغيير بيانات صفحة وفق نسبة الـ سكرول كانت الإجابة المقبولة   
    الفكرة هي أنك بحاجة إلى تعديل تنسيق الـ Header عند عمل سكرول بنسبة معينة، ثم نقوم بإضافة كلاسات أخرى أو تنسيقات،  فمثلاً نستخدم الكود التالي:
    const className = "colorful"; const scrollTrigger = 60; window.onscroll = function() { if (window.scrollY >= scrollTrigger) { document.getElementsByTagName("header")[0].classList.add(className); } else { document.getElementsByTagName("header")[0].classList.remove(className); } }; طبق نفسك الفكرة بإضافة وحذف الكلاسات أو إضافة تنسيقات، فالكود السابق يقوم بإضافة كلاس colorful والذي يحمل التنسيق التالي في ملف css:
    .colorful { background-color: pink; box-shadow: 0 3px 5px 0.3px rgba(0, 0, 0, 0.1); } .colorful a { color: #0e436b; }  
  10. إجابة Mustafa Suleiman سؤال في حل خطأ "AttributeError: 'dict' object has no attribute 'NUMPY_SETUP'" عند تثبيت Gensim 3.8.3 كانت الإجابة المقبولة   
    حاول أولاً تثبيت مكتبة Wheel كالتالي:
    pip install wheel ثم حاول من جديد، وإن استمرت المشكلة حاول تثبيت مكتبة gensim من جديد وأيضًا تثبيت مكتبة pillow.
    وإن استمرت المشكلة حاول تجربة:
    pip install --use-pep517  
  11. إجابة Mustafa Suleiman سؤال في كيف اتفادى تنبيه ESLint في React عند استخدام useEffect Hook مع مصفوفة DependencyList فارغة ؟ كانت الإجابة المقبولة   
    بإمكانك تعطيل ذلك التحذير مؤقتًا باستخدام تعليق eslint-disable-next-line فوق السطر الذي يولد التحذير، كالتالي:
    useEffect(() => { // eslint-disable-next-line react-hooks/exhaustive-deps // الكود الخاص بك هنا }, []); أو إنشاء ملف باسم
    .eslintrc   في مجلد المشروع ثم وضع التالي به:
    { "plugins": ["react"], "rules": { "react-hooks/exhaustive-deps": [ "error", { "additionalHooks": ["useEffect"], "dependency-array-exclusions": ["[]"] } ] } } حيث تستخدم خاصية dependency-array-exclusions في ESLint لتستثني بعض المصفوفات من التحقق، وتستطيع استخدام تلك الخاصية لاستثناء المصفوفة الفارغة من التحقق، بحيث لا يصدر ESLint أي تنبيهات.
    وإن لم يعمل حاول تجربة الإعداد التالي:
    { "rules": { "react-hooks/exhaustive-deps": "off" } }
  12. إجابة Mustafa Suleiman سؤال في لماذا عند دخول مسار بايثون، يكتب Human Verification ولا أستخدم VPN أو بروكسي كانت الإجابة المقبولة   
    في حال استمرت المشكلة على الهاتف وعلى متصفح آخر، فذلك يعني وجود مشكلة في إتصال الإنترنت لديك، حاول إعادة تشغيل الراوتر وتركه لمدة 10 دقائق من أجل تغيير الـ IP الخاص بك، ثم أعد تشغيله، وفي حال استمرت المشكلة حاول تغيير إعدادات الـ DNS في نظام الويندوز لتصبح كالتالي:
    1.1.1.1 1.0.0.1  
  13. إجابة Mustafa Suleiman سؤال في تفسير مصطلح 'Business Logic' في تطوير المنتجات البرمجية كانت الإجابة المقبولة   
    الـ business logic المقصود به مجموعة من القواعد والإجراءات التي تحدد كيفية عمل التطبيق من الناحية التجارية، ويتمثل دورها في تحويل البيانات الواردة من المستخدمين أو مصادر البيانات الأخرى إلى نتائج مفيدة.
    بمعنى أنه لو كنتِ تقومين ببناء تطبيق مصرفي، فإن الـ "business logic" سيتعلق بكيفية إجراء عمليات الإيداع والسحب، وكيفية التحقق من صحة المعاملات، وتنظيم كيفية عرض المعلومات المالية للمستخدمين، وغيرها من الجوانب الأساسية لأنشطة البنك.
    وينقسم business logic التطبيقات إلى عدة أجزاء رئيسية، وهي:
    التحقق من صحة البيانات: يتحقق هذا الجزء من أن البيانات الواردة من المستخدمين أو مصادر البيانات الأخرى صالحة ومتوافقة مع متطلبات التطبيق. المعالجة: يعالج هذا الجزء البيانات الواردة ويحولها إلى نتائج مفيدة. عرض النتائج: يعرض هذا الجزء النتائج للمستخدمين أو يرسلها إلى مصادر البيانات الأخرى. وإليك بعض الأمثلة على business logic التطبيقات:
    في تطبيق مبيعات، قد يشمل business logic قواعد لحساب الضريبة وتحديد الخصومات. في تطبيق ويب،  يشمل business logic قواعد للتحقق من أن المستخدمين مسجلين ومسؤولين عن المحتوى الذي ينشئونه. في تطبيق ألعاب الفيديو، قد  business logic قواعد لتحديد كيفية تحرك الشخصيات والتفاعل مع البيئة.
  14. إجابة Mustafa Suleiman سؤال في أجد صعوبة في استيعاب مفهوم Callback Functions في JavaScript كانت الإجابة المقبولة   
    باختصار، الدالة callback هي دالة يتم تمريرها كوسيطة إلى دالة أخرى، ويتم استدعاؤها من قبل الدالة الخارجية بعد اكتمال المهمة التي تم تعيينها لها، والدالة نفسها ليس غير متزامنة بل هي دالة متزامنة، لكن الدالة الخارجية المسؤولة عن استدعاء الدالة أي عمل callback لها هي الدالة الغير متزامنة.
    وفي جافاسكريبت، يتم تنفيذ الدوال بشكل متزامن بشكل افتراضي، مما يعني أن الدالة يتم تنفيذها من البداية إلى النهاية قبل الانتقال إلى الدالة التالية، ولكن هناك بعض المهام التي قد تستغرق وقتًا طويلاً للتنفيذ، مثل تحميل ملف أو الاتصال بقاعدة بيانات، وفي تلك الحالات Asynchronous Execution، لا نريد أن تتوقف البرامج الأخرى عن العمل حتى تكتمل تلك  المهام.
    وبالتالي تُستخدم الدوال callback لحل تك  بدلاً من انتظار انتهاء المهمة، نقوم بتمرير الدالة callback إلى الدالة الخارجية، وبعد اكتمال المهمة تقوم الدالة الخارجية باستدعاء الدالة callback، والتي يمكنها بعد ذلك التعامل مع النتيجة.
    مثال بسيط
    لنفترض أننا نريد تحميل ملف من الإنترنت، يمكننا استخدام الدالة fetch() للقيام بذلك، ولكن تلك الدالة ترجع قيمة غير معرفة حتى يكتمل تحميل الملف، أي أنها دالة غير متزامنة.
    const file = fetch("http://example.com/quran"); بدلاً من ذلك، يمكننا استخدام الدالة fetch() مع دالة callback، بحيث سيتم استدعاء الدالة callback بعد اكتمال تحميل الملف، وسيكون لها الوصول إلى نتيجة fetch()، كالتالي:
    fetch('http://example.com/quran') .then(response => response.json()) .then(data => console.log(data)) .catch(err => console.error(err)); بمعنى أن then(response => response.json()) هو callback function يتم تمرير الوعد (Promise) المُرجع من fetch إليها ويتم تنفيذها عندما يتم حل الوعد بنجاح، وهي تقوم بتحويل الاستجابة إلى شكل JSON، ونفس الأمر بالنسبة لباقي الدوال.
    أمثلة أخرى:
    استخدام setTimeout:
    function sayHello() { console.log("Hello!"); } setTimeout(sayHello, 2000); // سيتم استدعاء الدالة sayHello بعد 2 ثانية تمرير دالة كمعامل لدالة أخرى:
    let numbers = [1, 2, 3, 4, 5]; function printNumber(num) { console.log(num); } numbers.forEach(printNumber); // سيتم استدعاء الدالة printNumber لكل عنصر في المصفوفة كدوال مستجيبة للأحداث (Event Handlers):
    // تعريف دالة callback function handleClick() { console.log("Button Clicked!"); } // تعيين الدالة callback كمعالج لحدث النقر const buttonElement = document.getElementById("myButton"); buttonElement.addEventListener("click", handleClick); وبخصوص:
    صحيح، فنحن نريد استخدامها لتنفيذ أمرًا ما في وقت معين وليس استدعائها على الفور، ولكن يجب العلم أنها دوال مستقلة أي نقوم بتعريفها كما بالمثال السابق ثم نقوم بتمريرها بدون كتابة القوسين () الخاصين بتنفيذ الدالة حتى يتم استدعائها من قبل الدالة الخارجية.
    وستجد هنا تفاصيل أخرى:
     
  15. إجابة Mustafa Suleiman سؤال في مسار RESTFul API كانت الإجابة المقبولة   
    سأقوم بإخبار فريق إعداد الدورات في أكاديمية حسوب بذلك، وعامًة يتم تحديث أي جزء قديم في الدورات كل فترة ولكن هناك أولويات يتم العمل عليها، وفي حال وجود جزء لم يعد صالحًا في أحد الدورات ومر عليه فترة يتم تحديثه أو شرح كيفية التعامل مع المستجدات الجديدة من أجل تحقيق استفادة من الشرح.
    وفي حال واجهت مشكلة في أحد الدروس، يمكنك التعليق أسفل الدرس وسيتم مساعدتك وتوجيهك وتوفير مصادر أيضًا.
    وتستطيع تفقد التحديثات التي تتم كل فترة في الأكاديمية من خلال صفحة آخر التحديثات.
  16. إجابة Mustafa Suleiman سؤال في متى يكون استخدام Cloudinary مناسبًا؟ كانت الإجابة المقبولة   
    يفضل استعمال Cloudinary:
    كنت بحاجة إلى تخزين الصور ومقاطع الفيديو وإدارتها بكفاءة دون الحاجة إلى بناء بنية تخزين خاصة بك، واستخدام Cloudinary لتخزين هذه الوسائط وإدارتها بسهولة. تساعد Cloudinary على تحسين أداء موقع الويب  من خلال تقديم الصور بأحجام وجودات مختلفة تلائم الأجهزة وسرعة الاتصال بالإنترنت للمستخدمين،  أي تحتاج إلى ميزات متقدمة لمعالجة الصور وتحسينها، مثل التحويل إلى أحجام مختلفة أو إضافة مؤثرات.  تعمل على توفير توصيل سريع للوسائط من خوادم موزعة على مستوى العالم، مما يقلل من وقت تحميل الوسائط ويحسن تجربة المستخدم. تحسين تجربة المستخدم من خلال تقديم صور محسنة ومقاطع فيديو بجودة عالية وبسرعة. يمكنك توفير التكاليف المرتبطة بتخزين وتسليم الوسائط الرقمية عبر الإنترنت بشكل مستقل. بينما يكون استعمال Cloudinary عبء على المشروع في حال:
    لديك مشروع صغير ولا يتضمن الكثير من الوسائط، وبالتالي استخدام Cloudinary زيادة غير ضرورية. لا تحتاج إلى ميزات متقدمة لمعالجة الصور.
    لديك ميزانية محدودة  وعندها تعتبر تكلفة استخدام Cloudinary باهظة بالنسبة لمشروعك. السيطرة الكاملة على تخزين وتوصيل الوسائط الخاصة بك دون الاعتماد على خدمة خارجية، وهنا لا يعتبر Cloudinary الخيار المناسب.  
  17. إجابة Mustafa Suleiman سؤال في كيف يتم انشاء فيديوهات تيك توك مثل المرفق وما هو البرنامج المستخدم في ذلك كانت الإجابة المقبولة   
    الفيديو تم إنشائه بواسطة تطبيق keynote (تطبيق إنشاء عروض خاص بآبل) وأيضًا هناك إمكانية أنه تم إنشاء الرسومات من خلال فيجما ثم تحريكها من خلال keynote، ويمكنك محاولة إنشاء نفس الفيديوهات من خلال برامج المونتاج مثل أدوبي بريمير وغيرها على الويندوز.
  18. إجابة Mustafa Suleiman سؤال في مشكلة في تخزين التوكن بعد تسجيل الدخول في مشروع Laravel وReact كانت الإجابة المقبولة   
    ما يجب أن يكون هو أن الباك اند مسؤول عن إصدار وتخزين التوكن لمراجعته عند إرسال الطلبات، حيث أنه هو المسؤول عن المصادقة وإصدار التوكنات، يجب أن يرسل الباك اند التوكن إلى الفرونت اند في استجابة لطلب تسجيل الدخول الناجح، ثم يمكن للفرونت اند بعد ذلك تخزين التوكن في ملفات تعريف الارتباط أو التخزين المحلي.
    ولكن إن تم تخزين التوكن في الفرونت اند، فسيتم فقده إذا قام المستخدم بحذف ملفات تعريف الارتباط أو التخزين المحلي.
    وبخصوص اختيار استخدام Breeze API أو الطريقة العادية في بناء الـ Backend، يعتمد ذلك على ما تريده، حيث Breeze API هو إطار عمل  يساعد في تسهيل تطوير التطبيقات بلغة PHP باستخدام Laravel ولا مشكلة في استخدامه إن كنت تفضل بساطة التطوير واستخدام أفضل الممارسات الموصى بها من قبل Laravel، ولكن عند الحاجة إلى مزيد من التحكم في بنية وعمل باك اند، فمن الأفضل بناء الباك اند بالطريقة العادية.
    وبخصوص مشكلة تخزين التوكن:
    تأكد من أن الباك اند يقوم بإصدار التوكن بشكل صحيح عن طريق اختبار طلب تسجيل الدخول باستخدام أداة مثل Postman. ثم التحقق من أن الباك اند يرسل التوكن إلى الفرونت اند في استجابة لطلب تسجيل الدخول الناجح من خلال تسجيل استجابة الباك اند. ثم تفقد هل الفرونت اند يقوم بتخزين التوكن بشكل صحيح عن طريق فحص الكود الخاص بذلك.
  19. إجابة Mustafa Suleiman سؤال في الفرق بين web app و web site كانت الإجابة المقبولة   
    السؤال متعلق بدورة علوم الحاسب أرجو التعليق أسفل فيديو الدورة في المرة القادمة لمساعدتك بشكل أفضل.
    وإن كنت قد فهمت سؤالك بشكل صحيح، فالفرق الرئيسي بين تطبيق الويب (web app) وموقع الويب (web site) هو أن تطبيق الويب يوفر تفاعل أكثر مع المستخدم، بينما موقع الويب هو مجموعة من الصفحات التي يمكن عرضها من خلال مستعرض الويب.
    وكأمثلة، موقع فيسبوك هو تطبيق ويب وليس موقع ويب، بينما المواقع الإخبارية أو Wikipedia مثلاً هي مواقع ويب، 
    بمعنى أن تطبيقات الويب المحتوى بها متغير بناءًا على تفاعل المستخدم معها، وهي مواقع ديناميكية، أي محتواها يتغير بدون تدخل من مديري الموقع، فمثلاً أنتِ في أكاديمية حسوب تقومين بإنشاء حساب وتغيير صورتك ونشر سؤال والتعليق ورفع ملفات وصور وخلافه.
    لكن الفرق بين أكاديمية حسوب وموقع فيسبوك هو أن فيسبوك عبارة SPA أي تطبيق من صفحة واحدة، بمعنى أنه يتم إنشاء محتوى الصفحة بالكامل في وقت واحد باستخدام لغة برمجة جافا سكريبت، وبالتالي المستخدم لا يحتاج إلى تحميل صفحة جديدة كلما قام بإجراء تغيير، مثل التفاعل مع منشور أو مشاركة صورة.
    وذلك النوع من تطبيقات الويب الديناميكية له مزايا فريدة مثل تحديث المحتوى بدون الحاجة إلى إعادة تحديث الصفحة وأيضًا القدرة على التنقل السريع ومزايا أخرى.
  20. إجابة Mustafa Suleiman سؤال في هل يجب ان ان يكون امتحان الحصول على الشهاده بعد 6 اشهر ام هو مفتوح المده كانت الإجابة المقبولة   
    الدورة متاحة لك مدى الحياة، وتستطيع التقدم للإمتحان في أي وقت وأيضًا أكثر من مرة في حال لم تجتازه من المرة الأولىولكن من الأفضل الاستعداد جيدًا، وكنصيحة قم بتحديدجدول زمني واقعي بالنسبة للوقت المتاح لك والتزم به ولا تترك الأمر بدون تخطيط.
  21. إجابة Mustafa Suleiman سؤال في لماذا لا تعمل أكواد بايثون الموجودة في فيديوهات يوتيوب كانت الإجابة المقبولة   
    هل قمت بتثبيت الحزم المطلوبة للمشروع، وهل تعلم الطريقة الصحيحة للتعديل على الكود ليتناسب مع مسارات الملفات في جهازك؟ فمثلاً لو قمت بكتابة نفس الكود في الفيديو فستجد به بعض المسارات الخاص بالملفات عليك تعديلها بما يتناسب مع الملفات الموجودة على حاسوبك والتي تريد العمل عليها.
    ولا يمكن تحديد سبب المشكلة بدون رؤية الخطأ الذي يظهر لك، ومن الأفضل تعلم أساسيات بايثون حتى تتمكن من استيعاب ما يتم شرحه. 
  22. إجابة Mustafa Suleiman سؤال في هل ما زال يتم توفير متابعة وتوجيه بعد الحصول على الشهادة كانت الإجابة المقبولة   
    بالطبع فذلك مذكور في وصف كل دورة، وهو الآتي:
    حينما تحصل على الشهادة سنقدم لك خدمة كتابة السيرة الذاتية مجانًا، ثم سنتابع معك لإعداد حساباتك على مواقع العمل، وحينها إن لم تحصل على عمل يغطي قيمة الدورة التي دفعتها خلال 6 أشهر من حصولك على الشهادة فسنعيد لك ما دفعت، بكل بساطة.
     
  23. إجابة Mustafa Suleiman سؤال في ما هو دور الفاصلة المنقوطة (semicolon) في جافا سكريبت؟ كانت الإجابة المقبولة   
    هل تقصد مثل التالي؟
    const x = 5; const y = 10; عامًة الحروف المنقوطة (semicolon) تُستخدم لإنهاء التعبيرات أو الأوامر، أي إن وجودها يشير إلى نهاية تعليمة معينة في الكود.
    وذلك يساعد المترجم (interpreter) أو المتصفح على فهم هذا الجزء من الكود وتنفيذه بشكل صحيح.
    وعلى الرغم من أن الحروف المنقوطة تُستخدم عمومًا لهذا الغرض في جافا سكريبت، إلا أنها اختياري ويمكن تركها في الأكواد البسيطة، ولكن، عند كتابة أكواد أكبر وأكثر تعقيدًا، يصبح استخدام الحروف المنقوطة ضروريًا لتجنب الأخطاء والسماح بفهم أفضل للكود.
  24. إجابة Mustafa Suleiman سؤال في رفع الصور على databse كانت الإجابة المقبولة   
    هل قمت بطباعة الرد من الخادم لرؤية الروابط التي يتم استلامها في الواجهة الأمامية؟ حاول طباعة ذلك وتفقد هل الرابط صحيح أم لا وأيضًا تفقد مسار الصور من خلال عمل inspect لمكان الصورة ورؤية قيمة خاصية src، فقد تحتاج إلى تعديل المسارات أو ما شابه.
  25. إجابة Mustafa Suleiman سؤال في كيفية رفع مشروع react على vercel والإتصال بقاعدة بيانات MongoDB كانت الإجابة المقبولة   
    عليك إنشاء قاعدة البيانات على MongoDB Atlas وبناء Cluster وتعيين اسم مستخدم وكلمة مرور ستحصل على رابط للإتصال، وعليك أن تضع ذلك في ملف .env في مشروع وكافة متغيرات البيئة اللازمة.
    والآن أثناء نشر مشروعك على Vercel عليك تحديد متغيرات البيئة كما كتبتها في ملف .env أي كتابة مثلاً MONGODB_URL كالتالي:

    أي وضع الاسم ثم القيمة الخاصة بذلك المتغير.
    وبعد الإنتهاء من إضافة كافة المتغيرات عليك الضغط على deploy، وفي حال كان هناك مشروع منشور بالفعل، تستطيع الوصول لمتغيرات البيئة من خلال إعدادات المشروع settings ثم environment variables ثم إضافة المتغيرات وتأكد من تفعيل Automatically expose system environment variables.

×
×
  • أضف...