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

Mustafa Suleiman

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

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

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

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

    340

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

  1. المحاكي هو لنظام ويندوز وتستطيع تجربة تشغيل البرنامج عليه، لكن لا تنتظر من محاكي أن يقدم لك أداء مماثل للويندوز كما أن بعض البرامج أو الألعاب قد لا تعمل عليه.
  2. تحقق من المسار الرئيسي في ملف المسارات لديك، هل يوجد مسار كالتالي؟ على إفتراض أنك تستخدم express.js app.get('/', (req, res) => { // قم بمعالجة المسار "/" هنا }); فالخادم يعمل لكن ويخبرك أنه لا يوجد المسار الذي طلبته.
  3. ليس مجلد public بل يوجد ملف باسم app.blade.php أو layout.blade.php أيًا كان الملف الرئيسي للمشروع لديك، وستجد بالضغط على مجلد resources ثم ستجد بداخله مجلد views والذي يحوي قوالب blade.
  4. عليك تثبيت حزمة ODBC على جهاز الكمبيوتر لديك. إنشاء مصدر بيانات ODBC جديد لقاعدة بيانات أوراكل. افتح لوحة التحكم. انقر فوق "الأنظمة والأدوات". انقر فوق "إدارة مصادر البيانات". انقر فوق "إضافة". حدد "مصادر البيانات ODBC". انقر فوق "التالي". حدد "إنشاء مصدر بيانات جديد". انقر فوق "التالي". حدد "Oracle". انقر فوق "التالي". أدخل اسمًا لمصدر البيانات. أدخل معلومات الاتصال بقاعدة بيانات أوراكل. انقر فوق "التالي". حدد قواعد البيانات التي تريد استخدامها. انقر فوق "التالي". حدد خيارات الاتصال. انقر فوق "التالي". راجع معلومات مصدر البيانات. انقر فوق "إنهاء". أضف مرجعًا إلى مكتبة ODBC.NET إلى مشروع C#. افتح مشروع C# الخاص بك في Visual Studio. انقر بزر الماوس الأيمن فوق مشروعك في نافذة "المستكشف". حدد "إضافة مرجع". حدد "مكتبات". حدد "مكتبات البرامج المثبتة". حدد "ODBC.NET". انقر فوق "إضافة". إنشاء كائن OdbcConnection جديد للاتصال بقاعدة بيانات أوراكل. OdbcConnection connection = new OdbcConnection("DSN=OracleDB"); حيث "DSN=OracleDB" هو اسم مصدر البيانات الذي أنشأته في الخطوة 2. استخدم الكائن OdbcCommand لإنشاء استعلام SQL. ثم استخدم الكائن OdbcDataReader لقراءة البيانات من استعلام SQL. مثال لتوضيح الأمر: using System; using System.Data.Odbc; namespace OdbcDemo { class Program { static void Main(string[] args) { // Create an ODBC connection object. OdbcConnection connection = new OdbcConnection("DSN=OracleDB"); // Open the connection. connection.Open(); // Create an ODBC command object. OdbcCommand command = new OdbcCommand("SELECT * FROM Customers", connection); // Execute the command. OdbcDataReader reader = command.ExecuteReader(); // Read the data from the reader. while (reader.Read()) { Console.WriteLine("{0} {1}", reader["CustomerID"], reader["CustomerName"]); } // Close the connection. connection.Close(); } } } أولا يقوم الكود بإنشاء اتصال بقاعدة بيانات أوراكل المسماة "OracleDB"، ثم سينشئ استعلام SQL لتحديد جميع البيانات من جدول "العملاء"، ثم سيقرأ البيانات من الاستعلام ويطبعها على وحدة التحكم.
  5. أرجو التعليق أسفل فيديو الدورة لمساعدتك بشكل أفضل وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة. أولاً سأوضح لك فكرة الوعود Promises. يمكنك التفكير في الوعود Promises في JavaScript على أنّها الوعود في الحياة الحقيقية. لنفرض أنّ طفلًا صغيرًا طلب من والده أن يشتري له لُعبةً ما و أخبره والده أنه يعده بأن يصنع له اللعبة إذا وجد مواد صنعها في الأسواق. و ذهب الأب للبحث عن هذه المواد أي أنّ الوعد الآن قيد التنفيذ (Pending) ، فإذا وجد الأب المواد سيشتريها و يصنع اللعبة للطفل و بذلك يكون قد وفّى بوعده أي تكون حالة الوعد الآن هي fulfilled أو resolved، أمّا إذا لم يجد هذه المواد فلن يشتريها و بالتالي لن يتمكن من صنع اللعبة أي لا يكون قد وفى بوعده أي تكون حالته rejected. نفس هذا الأمر ينطبق على الوعود Promise برمجيًا. مثال لما يشبه الأمور التي نفعلها في الحياة الواقعية - في الحياة البرمجية: ”شيفرة مُنتِجة“ أي أنّها تُنفّذ أمرًا ما وتأخذ وقت. مثل الأكواد التي تقوم بتحميل البيانات عبر الشبكة. هذا الأب "في المثال السابق". ”شيفرة مُستهلِكة“ أي أنّها تطلب ناتج ”الشيفرة المُنتِجة“ ما إن يُصبح جاهزًا. وهناك عديد من الدوال تحتاج إلى هذا الناتج. هذا الطفل ”في المثال السابق ينتظر اللعبة“. الوعد (Promise) هو كائن في جافاسكربت يقوم بالربط بين ”الشيفرة المُنتِجة“ و”الشيفرة المُستهلِكة“. في الحياة العملية، الوعد هو ”انتظار صنع اللعبة“. يمكن أن تأخذ ”الشيفرة المُنتِجة“ ما تلزم من وقت لتُقدّم لنا النتيجة التي وعدتنا بها، وسيقوم الوعد بتجهيزها لنا لأيّة شيفرة طلبتها متى جهزت. و صيغة الباني لكائنات الوعود تكون كما يلي: let promise = new Promise(function(resolve, reject) { // ‫المُنفِّذ (الشيفرة المُنتجة، مثل ”الأب“) }); تُسمى الدالة التي يتم تمريرها إلى new Promise ”بالمُنفِّذ“. فمتى صُنع الوعد new Promise تعمل الدالة تلقائيًا. يحتوي هذا المُنفِّذ على الشيفرة المُنتجِة، ويمكن أن تُقدّم لنا في النهاية ناتجًا. في مثالنا، فالمُنفِّذ هذا هو ”الأب“. و تُقدّم جافاسكربت الوسيطين resolve و reject وهما ردود نداء. لا نضع الشيفرة التي نريد تنفيذها إلا داخل المُنفِّذ. و عليه مهمّة استدعاء resolve أو reject أي عليه أن يقوم بنداء/استدعاء أحد ردود النداء resolve أو reject: resolve(value)‎: لو اكتملت المهمّة بنجاح. reject(error)‎: لو حدث خطأ. و كائن الوعد promise الذي أعاده الباني new Promise له خاصيتين داخليتين، و هما: الحالة state: و تبدأ حالة الوعد بالقيمة "pending" وبعدها تنتقل إلى "fulfilled" متى تم استدعاء resolve، أو إلى "rejected" متى تم استدعاء reject. الناتج result: و يبدأ أولًا غير معرّف undefined، وبعدها يتغيّر إلى value متى تم استدعاء resolve(value)‎ أو يتغيّر إلى error متى تم استدعاء reject(error)‎. هذا الموضوع معقد بعض الشئ و يحتاج إلى وقت حتى تتمكن من فهمه بشكل جيد خذ وقتك، أيضًا أنصحك بأن تقوم بالبحث عن Promise في أكاديمة حسوب أو موسوعة حسوب و قراءة بعض المقالات التي تظهر لك حتى تتمكن من الفهم بشكل أفضل. و set time out هي دالة تقوم بتنفيذ دالة معينة بعد مرور زمن محدد، وهي مفيدة لعمل جدولة مزمنية مثلا، ومثلها الدالة set interval التي تكرر نفسها اي تستدعي الدالة كل X ثانية مثلا.. يمكننا استخدام هتين الدالتين عندما نستطيع التحكم بالزمن وعمل جدولة زمنية. هنا نستخدمها لتحديث الرسائل أو الاشعارات مثلا كل 5 ثواني.. أما promise هي غرض برمجي، ينفذ مهمة ما وهذه المهمة غير متزامنة اي لانعرف قيود زمنية لها، وتكون بشكل دالة، مثل جلب بيانات من المخدم، او تحميل صورة أو ملف..، وهنا لا نعلم بالضبط الزمن اللازم لانتهاء هذه العملية، أي ممكن تأخذ 1 ميلي ثانية، أو حتى 100 ثانية، هنا لايمكننا توقع متى تنتهي من التنفيذ. ثم بعد انتهاء المهمة الاساسية بنجاح، يقوم promise باستدعاء دالة resolve والتي مثلا تعرض لنا نتيجة مفادها نجاح تحميل او رفع بيانات أو عرض البيانات نفسها.. وإن حدث فشل في الاتصال أو في أي جزء، تستدعي promise دالة reject التي تعطينا رسالة خطأ وتشرح مالذي حصل..
  6. لا مشكلة في استخدام المحاكي، وهناك محاكيات أفضل من حيث الأداء مثل box64droid و exagear. لكن قم بتثبيت المحاكي من المصدر الرسمي أي الموقع الرسمي وهو التالي: https://winlator.com/download/
  7. وعليكم السلام محمود، لاحظ أنك وضعت علامة simi colon بعد دالة then أي علامة ; والتي تعني نهاية سطر الكود وبالتالي أي كود بعدها هو كود جديد. ولكن نحن نريد استخدام دالة catch لذلك نستخدم ميزة method chaining من خلال وضع نقطة بعد نهاية الدالة ثم كتابة الدالة الأخرى التي تستقبل النتيجة منها على شرط أن تلك القيمة لها علاقة بالدالة التي تأتي بعدها وتستقبلها وهنا دالة catch تستقبل الأخطاء ونقوم بالتعامل معها بداخلها. لذا احذف ; بعد then وسيتم حل المشكلة. waitt(7000).then(() => console.log(result)).catch((err) => console.log(err)) وأرجو طرح السؤال أسفل الدرس وليس هنا لمساعدتك بشكل أفضل، فقسم أسئلة البرمجة هو للأسئلة العامة الغير متعلقة بالدورة.
  8. بل البدء مباشرة بـ Redux Toolkit، فذلك الإصدار يوفر الكثير من الميزات التي تجعل عملية تعلم واستخدام Redux أسهل بكثير، كما أنه لا يزال يتبع مبادئ Redux الأساسية، وفي الأصل تم تطوير Redux Toolkit من أجل حل مشاكل كانت موجودة في Redux لذلك الإصدار الذي ينًصح باستخدامه هو Redux Toolkit. ولكن من الأفضل قبل ذلك تعلم كيفية استخدام الـ reducers في React حتى لا تستخدم التقنية بدون معرفة ما يحدث.
  9. الكود يعتمد على مفهوم list comprehension. حيث أن [i for i in range(5)] ستولّد مصفوفة هي [4, 3, 2, 1, 0]، وتوليد تلك المصفوفة سيتكرّر بحسب j في الحلقة الخارجية، وبما أنّ الحلقة الخارجية for j in range(6) ستتكرر 6 مرّات فهذا يعني تكرار الحلقة الداخلية 6 مرّات، أي توليد matrix لها ست صفوف و 5 أعمدة كالتالي: [ [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4] ] حيث الحلقة الداخلية (التي تحوي المتحوّل i) تولّد الأعمدة، والحلقة الخارجية التي يتحكّم بها المتحوّل j تولّد الأسطر. لكن ما معنى استقلال i عن j ؟ هما ليسا نفس المتحوّل، وكما قلت آنفاً لكل منهما وظيفة في الكود أحدهما في حلقة تولّد الأسطر والآخر في حلقة تولّد الأعمدة. وانت بحاجة إلى قراءة التالي لتفهم الأمر بشكل أفضل:
  10. المشكلة هي أنك تحاول المقارنة بين قائمة كاملة ورقم صحيح في السطر: if numbers<30: وذلك غير منطقي، فيجب أن قوم بالمرور على القائمة ثم مقارنة كل رقم بها مع رقم 30. وأنت قمت بذلك بالفعل في حلقة for، لكن استخدمت اسم القائمة الكاملة numbers بدلاً من أن تستخدم المتغير number في حلقة for. لاحظ أن أنك كتبت for number in numbers أي أن number هنا بدون s هو متغير يمثل كل رقم القائمة في كل تكرار لذلك نستخدمه هو داخل الحلقة. أي تصحيح السطر إلى: if number<30: وأرجو طرح السؤال أسفل الدرس وليس هنا لمساعدتك بشكل أفضل، فقسم أسئلة البرمجة هو للأسئلة العامة الغير متعلقة بالدورة.
  11. في البداية نقوم تهيئة المتغيرات: numbers: يخزن قائمة الأرقام. seen: هو قاموس فارغ سيتم استخدامه لتتبع الأرقام التي تم رؤيتها بالفعل. dups: هي قائمة فارغة ستخزن الأرقام المكررة التي تم العثور عليها. بعد ذلك نقوم باستخدام حلقة التكرار for للتكرار على الأرقام، من أجل تعداد كل رقم في قائمة numbers باستخدام حلقة for كالتالي: داخل الحلقة، نستخدم حلقة شرطية if، للتحقق مما إذا كان الرقم الحالي موجودًا بالفعل في قاموس seen. وفي حال كان الرقم غير موجود، فسيتم إضافته إلى قاموس seen بقيمة 1، بمعنى أن الرقم قد شوهد مرة واحدة. وإن كان الرقم موجودًا بالفعل في قاموس seen، يتحقق الكود مما إذا كانت القيمة المرتبطة بالرقم تساوي 1. وإن كانت القيمة 1، فذلك يعني أن الرقم قد شوهد مرة واحدة فقط من قبل، وهنا نقوم بزيادة القيمة إلى 2 وإضافة الرقم إلى قائمة dups، مما يعني أن الرقم قد شوهد الآن مرتين وهو بالتالي مكرر. بعد تكرار جميع الأرقام، ستحتوي قائمة dups على جميع الأرقام المكررة التي تم العثور عليها في القائمة الأصلية، ونقوم بطباعتها. وأرجو طرح السؤال أسفل الدرس وليس هنا لمساعدتك بشكل أفضل، فقسم أسئلة البرمجة هو للأسئلة العامة الغير متعلقة بالدورة.
  12. أنت لم تستخدم f-string كما أوضحت لك هنا حاول تطبيق الشرح وأخبرني إن واجهت مشكلة: وأرجو طرح السؤال أسفل الدرس وليس هنا لمساعدتك بشكل أفضل، فقسم أسئلة البرمجة هو للأسئلة العامة الغير متعلقة بالدورة.
  13. أرجو طرح السؤال أسفل فيديو الدرس لمساعدتك بشكل أفضل. نستخدم الحرف "f" كبادئة لتحديد (f-string)، والنصوص المنسقة هي وسيلة لتضمين قيم المتغيرات داخل سلاسل النصوص بطريقة سهلة وواضحة دون الحاجة إلى استخدام أوامر تكوين معقدة. أي تستطيع استخدام f-string لإدراج قيمة متغير داخل نص بالشكل التالي: name = "أحمد" age = 25 # استخدام f-string لإدراج قيم المتغيرات في سلسلة نصية sentence = f"اسمي {name} وعمري {age} سنة." # طباعة النص المنشأ باستخدام f-string print(sentence) لاحظ دمج قيمة المتغير name في النص "اسمي {name}" وقيمة المتغير age في النص "عمري {age} سنة." بشكل مباشر. والعلامات المنسقة (f-strings)، هي طريقة جديدة متوفرة في Python 3.6 والإصدارات الأحدث. وتدعم f-strings مجموعة متنوعة من المعاملات لتنسيق البيانات داخل سلاسل، مثل معامل ".format()" لتنسيق البيانات بالطريقة التي تريدها، كالتالي: number = 12345.6789 print(f"The number is {number:.2f}.") والنتيجة هي: The number is 12,345.68. لاحظ تم تنسيق الرقم.
  14. للأسف لا يوجد دورة خاصة بالتسويق والتجارة الإلكترونية في أكاديمية حسوب، ولكن يوجد قسمين بهما دروس ومقالات عن التجارة الإلكترونية والتسويق التجارة والتجارة الإلكترونية التسويق والمبيعات أيضًا يوجد الكتب التالية:
  15. أنت على حق فذلك هو الشائع 1 تعني True و0 تعني Flase. لكن هنا يتم استخدام مفهوم آخر، ويعني أن 0 لم يحدث مشكلة بينما 1 تعني حدوث مشكلة ولم يتم العثور. ولتبسيط الأمر تخيل أن البرنامج يسألك "هل حدث مشكلة؟" وأنت تخبره لا لم يحدث مشكلة 0 لا يوجد مشكلة، حيث أنه أحيانًا ستجد في الدوال المدمجة في لغات البرمجة تقوم بإعادة -1 بدلاً من 0 في حال لم يتم العثور على أمر معين أي حدوث مشكلة. وفي حال حدوث مشكلة نخبره نعم 1 حدث مشكلة. لكن تلك الطريقة محيرة وأتفهم ذلك، لذا تجاهل ذلك واعتمد على الطريقة الشائعة وهي 1 تعني True و0 تعني Flase. ولمعلوماتك في C لا يوجد قيمة boolean لذلك نعتمد على الـ 0 و 1.
  16. بالطبع أرسل لي الـ address الخاص بـ AnyDesk على الخاص
  17. ما هي المهارات التي تعلمتها أو سوق العمل الذي تستهدفه هل تريد العمل في شركة أم منصات العمل الحر أم تريد العمل عن بُعد؟
  18. أرجو منك استخدام متصفح آخر لم تقم بتسجيل الدخول منه وتفقد هل تتمكن من تفقد الدورات؟ وفي حال كانت المشكلة من المتصفح حاول إعادة تعيين التطبيق من خلال التوجه للتطبيقات من إعدادات الهاتف ثم البحث عن تطبيق جوجل كروم ثم عرض بيانات التخزين للتطبيق وحذف الـ Data أو البيانات. في حال استمرت المشكلة حاول إعادة تشغيل الراوتر الخاص بك ولكن اتركه لمدة 10 دقائق ثم أعد التشغيل مرة أخرى لتغيير الـ IP العام.
  19. من أفضل الطرق هو استخدام إضافة wappalyzer حيث تدعم أغلب الإطارات والمكتبات الشهيرة وأيضًا لغات البرمجة. أيضًا يوجد إضافة أخرى استخدمها باسم whatruns تخبرك بإصدارات اللغات والسيرفرات المستخدمة بالإضافة إلى مميزات wappalyzer لكن ليس بنفس قوة اكتشافات للمكتبات والإطارات المستخدمة، استخدم كلاهما وستحصل على معلومات جيدة.
  20. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، عليك رسم مخطط نشاط وهو مشابه لخرائط التدفق flow charts، لنظام ترقية ونقل الموظفين ويمكنك الرسم من خلال الأدوات التالية: Microsoft Visio Lucidchart Draw.io مع الأخذ في الإعتبار النقاط التالية: بداية العام: يقوم المدير بتفعيل نظام الترقية. يُخطر النظام الموظف بإدخال الأهداف. وضع الأهداف: يقوم الموظف بإدخال أهدافه للعام. يقوم المدير بإدخال التوقعات للموظف. مراجعة الأهداف: يقوم المدير بمراجعة الأهداف. إذا كانت الأهداف مرضية، يقوم المدير بتأكيدها. إذا كانت الأهداف غير مرضية، يقوم المدير بإبلاغ الموظف بتحديثها. إدخال الإنجازات: يقوم الموظف بإدخال إنجازاته في العام الحالي. كتابة المراجعة: يقوم المدير بكتابة مراجعة للموظف. تقييم الأداء: يدخل المدير نسبة تقييم الأداء (0-100%). التحقق من أهلية الترقية: إذا كان التقييم >= 80% ولم يتلق الموظف ترقية في السنوات الثلاث الماضية، فيمكنه التقدم للترقية. إذا كان التقييم = 100% وكان الموظف قد تلقى ترقية في السنوات الثلاث الماضية، فيمكنه التقدم للترقية. تقديم طلب الترقية (اختياري): إذا اختار الموظف التقدم للترقية، يقوم بإرسال طلب الترقية إلى المدير. التحقق من توصية الفصل: إذا كان التقييم < 50%، يوصي المدير بالفصل. قرار المدير العام: يوافق المدير العام أو يرفض طلب الترقية. إبلاغ الموظف بالقرار: يتم إبلاغ الموظف بالقرار. الممرات البديلة: انسحاب الموظف من الطلب، حيث يمكن للموظف سحب طلب الترقية في أي وقت قبل موافقة المدير العام. تستمر حلقة المراجعة حتى تصبح الأهداف مرضية.
  21. ما المقصود بصفحة ويب؟ فكلاهما موقع ويب، ونعم تستطيع التربح منها من خلال عرض منتج وتسويقه أو تقديم خدمة من خلال تلك الصفحة (الموقع) سواء كانت تلك الخدمة مدفوعة أو مجانية ولكن مع عرض إعلانات.
  22. أرجو طرح السؤال أسفل فيديو الدورة لمساعدتك بشكل أفضل. عليك أولاً تثبيت bootstrap من خلال npm. وعندم استخدام Laravel Mix، يتم تحزيم Bootstrap عن طريق ملفات SCSS لاحظ التالي: mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css') .browserSync('myprojects.test'); لاحظ تحزيم ملف app.scss، والذي نستورد به ملفات bootstrap. وفي vite أنت بحاجة إلى تكوين الإعدادات المناسبة لتحزيم ملف app.scss، لذلك سنقوم بالتالي، نتوجه إلى ملف vite.config.js وكتابة التالي: import { defineConfig } from "vite"; import laravel from "laravel-vite-plugin"; import path from 'path'; export default defineConfig({ plugins: [ laravel({ input: ["resources/sass/app.scss", "resources/js/app.js"], refresh: true, }), ], resolve: { alias: { "~bootstrap": path.resolve(__dirname, "node_modules/bootstrap"), }, }, }); لاحظ أنني أضفت كائن resolve لكي نقوم بتعريف مسار مجلد bootstrap أي نقوم بتعريف ~bootstrap عندم نقوم بكتابتها في ملف app.scss بدلاً من كتابة المسار الكامل وقمنا بتعريف المسار في vite.config.js. واستردت أيضًا وحدة path في السطر import path from 'path' وهي خاصة بـ Node.js من أجل تعريف المسار بواسطة path.resolve. ونتأكد من استيراد بوتستراب في app.scss كالتالي: @import "~bootstrap/scss/bootstrap"; بعد ذلك نتوجه للملف الرئيسي لديك وهو layout.blade.php أو app.blade أيًا كان، ونقوم بتضمين ملفات التنسيقات وملفات جافاسكريبت في عنصر head كالتالي: @vite(['resources/sass/app.scss', 'resources/js/app.js']) ونحذف أي استيرادات خاصة ببوتستراب وpopper من خلال CDN في نفس الملف مثل الكود التالي: <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.min.js" integrity="sha384-BBtl+eGJRgqQAUMxJ7pMwbEyER4l1g+O15P+16Ep7Q9Q+zqX6gSbd85u4mG4QzX+" crossorigin="anonymous"></script> أيضًا حذف أي استيراد لملفات تنسيقات لا نريده في ذلك الملف مثل السطر التالي نقوم بحذفه: <link rel="stylesheet" href="../../css/app.css"> بعد ذلك نستورد ملفات جافاسكريبت الخاصة ببوتستراب، وأين نفعل ذلك؟ إما في ملف app.js في مجلد js أو ملف bootstrap.js في نفس المجلد. وسأقوم بالاستيراد في ملف bootstrap، حيث سأقوم باستيراد ملف bootstrap.bundle.js والذي يتضمن كود جافاسكريبت الخاص ببوتستراب وأيضًا مكتبة popper، بكتابة السطر التالي: import 'bootstrap/dist/js/bootstrap.bundle'; ولا تنسى تشغيل أمر npm run dev. بالطبع تستطيع، في ملف app.css في مجلد css لديك في المشروع، قم بإضافة التالي: @import "bootstrap/dist/css/bootstrap.min.css"; بعد ذلك يجب تحديد اسم المجلد والملف الذي تريد تحزيمه في vite لذلك سنقوم بتعديل المسار في vite.config.js ليصبح: import { defineConfig } from "vite"; import laravel from "laravel-vite-plugin"; export default defineConfig({ plugins: [ laravel({ input: ["resources/css/app.css", "resources/js/app.js"], refresh: true, }), ] }); ثم في الملف الرئيسي في مشروعك ضع: @vite(['resources/css/app.css', 'resources/js/app.js']) والفكرة من استخدام SASS بدلاً من CSS هو أنك تستطيع التعديل على تنسيقات بوتستراب بتنسيقات خاصة بك أي التعديل على كود المكتبة.
  23. من الجيد البداية بموقع codewars، ثم الإنتقال لموقع Leetcode حيث يعتبر هو الأشهر فيما يتعلق بالمسائل البرمجية للتأهيل لمقابلات العمل. وستجد قائمة كاملة هنا: وأيضًا سيفيدك قراءة التالي:
  24. لا مشكلة في ذلك، طالما أنك قمتي بكتابته بنفسك ذلك هو المهم، والشهادة هي موثوقية ليس أكثر، لكن ليست ضرورية، فإن تعلمتي مجال معين بشكل ذاتي وتطورتي فيه واكتسبتي خبرة كافية تودي طرحها بكتاب، فلا مشكلة في ذلك. أي الفكرة من شراء الكتاب هو أن يقدم إفادة للقاريء وليس مجرد حبر على ورق، سواء نقل خبرات أو شرح تعلم أمرًا ما بشكل مفصل وسهل، أو تجميع لخبرات أشخاص آخرين في كتاب أو معلومات في مكانِ واحد.
  25. تفقد إصدار بايثون الذي تستخدمه، ثم استخدام إصدار Pillow متوافق معه وستجد قائمة بالتوافقية هنا: https://pillow.readthedocs.io/en/latest/installation.html وتستطيع تثبيت إصدار معين من خلال الأمر التالي أو تعديل ملف requirements.txt: pip install pillow==8.0.0 أو يمكنك خفض إصدار بايثون downgrade في الاستضافة. وإن استمرت المشكلة حاول حل الأمر من خلال التالي: pip install --upgrade pip setuptools wheel ثم حاول التثبيت مجددًا. في حال استمرت المشكلة حاول تنفيذ التالي: sudo apt-get install python3-dev python3-pip وإن استمرت حاول التالي: pip install --only-binary Pillow Pillow
×
×
  • أضف...