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

Mustafa Suleiman

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

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

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

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

    365

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

  1. الطريق الصحيح، هو بتحديد المتطلبات اللازمة ثم البحث عن مسار تعليمي أو تكوينه بنفسك من خلال البحث عن الكورسات التي تؤهلك لتعلم تلك المتطلبات أو المهارات، وبعد تكوين المسار التعليمي Roadmap عليك الآن الإلتزام بها لمدة 6 أشهر على الأقل. وهل ذلك كافي لتعلم البرمجة؟ نعم كافي بالتأكيد، ولكن بشرط الإجتهاد والإلتزام بمسار تعليمي وتخصيص عدد ساعات يومية لا تقل عن 3 ساعات أو ساعتين بحد أدنى وكلما زاد الوقت كان أفضل، وأيضًا التطبيق وكتابة الكود بنفسك وعدم الخوف من التجربة والتغيير بنفسك في الكود والتعلم من أخطائك. وإذا كنتي غير قادرة على تحديد مجال معين في البرمجة، فالأفضل تعلم أساسيات علوم الحاسب، وتعلم لغة برمجة سهلة مثل بايثون كأساسيات فقط، وستصبحي قادرة على الإطلاع على المجالات وتحديد ما تريدينه، رغم أني قد أرشح لك ماجل الويب لكونه سيفتح أمامك الباب للمجالات الأخرى، لكن بالطبع لتعلم بشكل جيد فأنت بحاجة إلى 6 أشهر، والأمر يعتمد على الوقت المتاح لديك، فإذا كان لديك الوقت تستطيعي تعلم ما تريدين وفي حال العكس عليك بتحديد المجال بعناية. وتستطيعي البحث عن الوظائف في ألمانيا على مواقع مثل: Indeed Glassdoor StepStone Xing وبالطبع سيتعين عليك تعلم الإنجليزية وإتقانها والوصول لمستوى C1 على الأقل، وفي حال تعلم الألمانية ستزداد فرصتلك، لكن لا حاجة إلى ذلك فهناك الكثير ممن يعملون في البرمجة هناك ويتعاملون بواسطة الإنجليزية فقط. ثم عليك الآن اكتساب الخبرة وذلك بالعمل في شركة أو على مواقع العمل الحر لمدة سنتين على الأقل، وذلك لتصبحي بمستوى Mid-level developer وقد تحتاج إلى أكثر من سنتين وذلك يتوقف على مجهودك والمشاريع التي عملتي عليها. والفيديوهات والمقالات والنقاشات التالية ستفيدك:
  2. عليك بفهم أمر هام، دورة بايثون أكثر من ممتازة لتأهيلك لسوق العمل وبالأخص في الشركات للعمل بدوام كامل. لكن أنت تبحث على مواقع العمل الحر العربية مثل مستقل وخمسات، وبالتالي النتيجة هي أنك ستجد أن أغلب المشاريع هي PHP، وذلك لأن ووردبريس هي المنصة الأسهل للمشاريع الصغيرة والمتوسطة وهي تعتمد على PHP، أيضًا إطار لارافيل الخاص بـ PHP قوي جدًا ويسهل عملية إنشاء المشاريع. وستجد أنه يتم طلب مشاريع بايثون لكن ليس بنفس الكثرة، بينما في المواقع الأجنبية ستجد الكثير من المشاريع لكون لغة بايثون واسعة الاستخدام في العديد من المجالات. وعليك بتفهم أمر، وهو أن نسبة 80% من المشاريع في موقع العمل الحر عامًة عائدة للمشاريع الصغيرة وبالتالي ستجد أنه يتم الإعتماد على المنصات والأدوات التي تسهل عملية إنشاء المشروع وإدارته. لذلك حدد ما تريده، هل تريد العمل في شركة أم على مواقع العمل الحر؟
  3. تأكد من أن ملف pacakge.json في مجلد الجذر الخاص بالمشروع أي المجلد الرئيسي، وأيضًا تأكد من أنك في المسار الصحيح لمجلد المشروع في منفذ الأوامر، ولتجنب الوجود في المسار الخاطيء، عليك بكتابة cmd في شريط العنوان في مجلد المشروع ثم اضغط على Enter وسيتم فتح التيرمنال في مسار المجلد كالتالي: بعد ذلك قم بكتابة أمر npm start لتشغيل المشروع، ولكن انتبه إلى أنه يجب وجود ملف package.json في جذر مجلد المشروع أي في المسار الذي تم فتحه في منفذ الأوامر.
  4. ما المقصود بمشكلة في ترتيب الملفات؟ فمهما كان مكان المكونات تستطيع الإشارة إلى المسار الخاص بها بكل سهولة، فما المشكلة التي تواجهها؟
  5. في البرمجة، نستخدم الأمر "return" لإرجاع قيمة من وظيفة أو دالة إلى الكود الذي استدعاها، وعندما نقول "إرجاع القيمة"، فإننا نعني أن الوظيفة تقوم بحساب قيمة معينة أو تنفيذ مهمة محددة وتعيد هذه القيمة لتُستخدم في مكان آخر في البرنامج. ولنفترض أن لدينا وظيفة تسمى "calculate_sum" في لغة بايثون تقوم بجمع رقمين وإرجاع الناتج، فسنكتب الكود كالتالي: def calculate_sum(a, b): sum = a + b return sum result = calculate_sum(3, 5) print(result) حيث قمت بتعريف وظيفة تسمى "calculate_sum" تأخذ معاملين "a" و "b"، وحساب مجموع العددين "a" و "b" وتخزين الناتج في المتغير "sum". ثم استخدام الأمر "return" لإرجاع القيمة المخزنة في "sum". بعد ذلك، قمت بتخزين القيمة المُرجعة من الوظيفة في المتغير "result". أي أن القيمة المرجعة هي ناتج جمع الأرقام 3 و 5. أخيرًا، استخدمت الأمر "print" لطباعة القيمة المخزنة في "result"، والتي تكون الناتج النهائي. مما يعني أنه باستخدام "return"، يمكننا الاستفادة من قيمة المرجع في أي مكان آخر في البرنامج، فبدلاً من طباعة القيمة مباشرة داخل الوظيفة، نستطيع استخدام القيمة المرجعة لإجراء عمليات أخرى أو تخزينها في متغيرات أخرى للاستفادة منها في وقت لاحق. فلو لم نقم بكتابة return لإرجاع قيمة من الدالة، لما استطعنا تخزين وطباعة القيمة خارج الدالة. الأمر أشبه أن أعطيك شيئًا ثم أطلب منك تنفيذ أمر معين عليه وأخبرك أني أنتظر منك أن تعود لي بنتيجة بناءًا على ما نفذته، وبالتالي نكتب return ونستطيع التعامل مع القيمة العائدة من الدالة خارجها، وذلك لأنها ستظل محبوسة بداخل الدالة ما لم نكتب return. شرح return في JavaScript من موسوعة حسوب
  6. سأوضح لك فائدة عنصر <radio> في HTML وهي توفير واجهة لاختيار واحدة فقط من بين مجموعة من الخيارات المتاحة، ونستخدم عنصر <radio> في تشكيل نماذج HTML حيث يحتاج المستخدم إلى اختيار خيار واحد فقط من بين عدة خيارات. وإليك مثال: <form> <label for="option1">خيار 1</label><br> <input type="radio" id="option1" name="radioOptions" value="option1"> <label for="option2">خيار 2</label><br> <input type="radio" id="option2" name="radioOptions" value="option2"> <label for="option3">خيار 3</label><br> <input type="radio" id="option3" name="radioOptions" value="option3"> </form> هنا لدينا ثلاثة خيارات (خيار 1، خيار 2، خيار 3) وكل خيار مرتبط بعنصر <radio>. يحتوي كل عنصر <radio> على نفس القيمة للخاصية name، ولكنها مختلفة بين العناصر المختلفة، مما يعني أن المستخدم بإمكانه اختيار خيار واحد فقط من بين الخيارات المتاحة، وذلك لأن قيمة value مختلفة وتلك هي القيمة التي يتم إرسالها للخادم في الواجهة الخلفية Back-End لمعالجة وتخزين تلك البيانات. وعندما يتم تحديد خيار، سيظهر الخيار المحدد بنمط اختيار افتراضي (مع دائرة صغيرة ممتلئة)، بينما يظهر الخيارات الأخرى بنمط اختيار غير محدد (مع دائرة صغيرة فارغة)، ويستطيع المستخدم تحديد خيار آخر بالنقر فوقه. وعند إرسال النموذج، ستُرسل القيمة المرتبطة بالخيار المحدد، وفي المثال، إذا تم اختيار "خيار 2"، ستُرسل القيمة "option2". وإليك مزيد من المعلومات من موسوعة حسوب: الحقل radio العنصر <input>
  7. ليس لديك أي مشكلة، فعند تنفيذ أمر npm run dev يتم تم تجميع ملفات المشروع بواسطة Vite وقد تم ذلك بنجاح وبدون أي رسالة خطأ، وظهر لك رابط تصفح المشروع تستطيع الضغط عليه لتصفحه وهو التالي: http://localhost:5173/
  8. أنت لست بحاجة إلى تعلم أي لغة من أجل تعلم بايثون، بل يتم البدء بلغة بايثون لتعلم البرمجة من قبل الغالبية، حيث أنها اللغة التي تجمع بين السهولة والقوة في نفس الوقت ويتوفر لها دعم كبير، وتستطيع تنفيذ أي شيء من خلالها، ولكن بالطبع هناك لغات أفضل بالنسبة لمجالات معينة، فمثلاً جافاسكريبت أفضل بالنسبة للويب وهكذا. لكن نحن هنا نتحدث عن أنك تريد البدء في مجال البرمجة، ولذلك تستطيع البدء مباشرًة إذا كان لديك إلمام بسيط بعلوم الحاسب والتفكير المنطقي والخورازميات وأنا أتحدث عن الأساسيات فقط. مثلاً فهمك للمفاهيم الأساسية مثل المتغيرات، والتحكم في التدفق، والدوال سيساعدك في فهم كيفية استخدام هذه المفاهيم في لغة Python، وأيضًا قد يفيدك معرفتك بمفاهيم البيانات والهياكل البيانية مثل القوائم والقواميس والمصفوفات عند التعامل مع برامج Python المعقدة. بالإضافة إلى أن فهم مفاهيم الخوارزميات وتحليلها سيساعدك في تحسين كفاءة برامجك وفهم كيفية تحسين أداء الأكواد التي تكتبها باستخدام Python. ومن الأفضل تعلم ذلك قبل البدء في تعلم بايثون إذا كان مستواك ضعيف بعض الشيء في التعامل مع نظام الويندوز مثلاً أو الويب بشكل عام.
  9. الأمر بسيط وهناك عدة طرق للتحويل بين قيم الألوان المختلفة، وفي vscode مثلاً عند الوقوف بمؤشر الفأرة على اللون ستظهر لك نافذة، وعند الضغط على الشريط العلوي بها الذي يحمل قيمة اللون سيتم التحويل بين قيم الألوان المختلفة لنفس اللون، فقم بالضغط حتى تصل لقيمة rgb. ثم تستطيع التعديل عليها لإضافة قيمة a بها وهي قيمة الشفافية، مثلاً اللون الأسود في RGB هو كالتالي: rgb(0, 0, 0) ولإضافة شفافية سنضيف قيمة رابعة في النهاية وتتراوح قيمتها ما بين 0 و 1 وأنا سأضيف 0.5 كالتالي: rgb(0, 0, 0, 0.5) وأيضًا هناك طريقة للتغيير بين قيم الألوان من خلال أدوات المطور في المتصفح كالتالي: وأيضًا تستطيع استخدام أداة خاصة بذلك مثل الأداة التالية: https://www.cssportal.com/css-color-converter/
  10. هل قمت بتجربة تحديث npm عن طريق الأمر التالي ثم إعادة التجربة؟ npm install -g npm@latest في حال لم ينجح ذلك، ستحتاج إلى حذف node.js تمامًا وذلك من خلال التوجه إلى لوحة التحكم control panel ثم البحث عن programs and features ثم ابحث عن node واحذفها. والآن لتتجه إلى الموقع الرسمي وتحميل أحدث إصدار LTS من نود ثم تثبيته: https://nodejs.org/en وبعد الإنتهاء أعد تشغيل الجهاز ثم حاول من جديد. وإذا استمرت المشكلة، فحاول تجربة تثبيت React عن طريق vite باستخدام الأمر التالي: في حال كان إصدار npm لديك هو 6 استخدم التالي: npm create vite@latest my-react-app --template react في حال كان إصدار npm هو 7 أو أعلى استخدم التالي: npm create vite@latest my-react-app -- --template react وتستطيع معرفة إصدار npm لديك عن طريق الأمر التالي: npm -v
  11. أولاً حاول غلق محرر الأكواد vscode تمامًا ثم إعادة فتحه وفتح مجلد المشروع الخاص بك، ثم إعادة تنفيذ أمر تثبيت React كالتالي: npx create-react-app . وسيتم التثبيت في نفس مجلد المشروع وذلك لأنني أضفت النقطة. وإذا استمرت المشكلة، قم بحذف الملفات المؤقتة في npm عن طريق الأمر التالي: npm cache clean --force ثم قم بالتجربة مرة أخرى. وإذا استمرت المشكلة، حاول تحديث npm من خلال الأمر التالي: npm install -g npm@latest ثم إعادة التجربة.
  12. المشكلة أنك تقوم بتنفيذ أمر التشغيل node index.js في المسار الخطأ في منفذ الأوامر، حيث لاحظ أنه المسار التالي: c:\Users\lenovo وعند تنفيذ الأمر لا يتم العثور على ملف index.js، لذلك لضمان أنك في المسار الصحيح، توجه إلى مجلد المشروع أي جذر مجلد المشروع ثم قم بكتابة cmd في شريط العنوان بالأعلى ثم اضغط على Enter وسيتم فتح منفذ الأوامر في مسار مجلد المشروع كالتالي: ثم قم بتنفيذ أمر التشغيل في منفذ الأوامر ومن المفترض أن يتم العثور على ملف index.js الآن.
  13. الإختصارات كثيرة جدًا، وإليك بعض الاختصارات الشائعة في بيئة تطوير فيجوال ستوديو (Visual Studio): Ctrl + S: حفظ التغييرات في الملف الحالي. Ctrl + N: إنشاء ملف جديد. Ctrl + O: فتح ملف موجود. Ctrl + Shift + S: حفظ كل الملفات المفتوحة. Ctrl + F: البحث في الملف الحالي. Ctrl + H: استبدال نص في الملف الحالي. Ctrl + Z: التراجع عن الإجراء الأخير. Ctrl + Y: إعادة الإجراء الذي تم التراجع عنه مؤخرًا. Ctrl + X: قص النص المحدد. Ctrl + C :نسخ النص المحدد. Ctrl + V: لصق النص المنسوخ. Ctrl + D : تكرار السطر الحالي. Ctrl + K, Ctrl + C : تعليق الكود المحدد. Ctrl + K, Ctrl + U: إلغاء تعليق الكود المحدد. Ctrl + /: تعليق/إلغاء تعليق السطر الحالي. Ctrl + Shift + B: بناء المشروع الحالي. F5: تشغيل التطبيق أو البرنامج الحالي. Ctrl + Shift + F5: إعادة تشغيل التطبيق أو البرنامج الحالي بدون إعادة التركيب. F9: وضع نقطة توقف (Breakpoint). F10: الانتقال إلى الخط التالي في وضع التصحيح (Debugging). F11: الدخول إلى الدالة الفرعية أثناء وضع التصحيح. Ctrl + Shift + F: البحث في المشروع بأكمله. أيضًا بعض الاختصارات الخاصة بتكرار نفس سطر الكود للأعلى والأسفل وتحريك الكود في بيئة تطوير فيجوال ستوديو: وانتبه إلى أنه يتم الضغط على السهم في النهاية أي مثلاً اضغط على shift + alt وأثناء الضغط اضغط على لأعلى مثلاً وهكذا. Ctrl + C و Ctrl + V: قص السطر الحالي ولصقه في السطر التالي. Shift + Alt + ↑: نسخ السطر الحالي ولصقه في السطر السابق. Shift + Alt + ↓: نسخ السطر الحالي ولصقه في السطر التالي. Alt + ↑: تحريك السطر الحالي للأعلى. Alt + ↓: تحريك السطر الحالي للأسفل. Ctrl + Shift + ↑: تحريك البلوك المحدد من الكود للأعلى. Ctrl + Shift + ↓: تحريك البلوك المحدد من الكود للأسفل.
  14. تفقد ملف index.php في مجلد public هل يوجد به مشكلة، وإذا استمرت المشكلة أرجو أن ترفق مجلد المشروع بعد ضغطه بصيغة zip.
  15. باستطاعتك إنشاء جدول جديد في قاعدة بيانات MySQL لتتبع عملية الموافقات في سيناريو العمل الذي وصفته، يحمل معلومات الموافقات المتعلقة بكل منشور كالتالي: CREATE TABLE approvals ( id INT AUTO_INCREMENT PRIMARY KEY, post_id INT NOT NULL, approved_by VARCHAR(255) NOT NULL, approval_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status ENUM('pending', 'approved', 'rejected') NOT NULL, FOREIGN KEY (post_id) REFERENCES posts(id) ); وفي الكود، لدينا جدول بعنوان "approvals" يحتوي على الحقول التالية: id: معرف فريد لكل عملية موافقة. post_id: معرف المنشور المرتبط بهذه الموافقة. approved_by: اسم المستخدم الذي قام بالموافقة. approval_date: تاريخ ووقت الموافقة (القيمة الافتراضية هي التاريخ والوقت الحالي). status: حالة الموافقة، يمكن أن تكون إحدى القيم "pending" (قيد الانتظار)، "approved" (موافق)، أو "rejected" (مرفوض). وعند تنفيذ موافقة على المنشور، يتم إدخال سجل جديد في جدول الموافقات مع تعبئة حقول المعلومات المناسبة مثل المعرف المرتبط بالمنشور واسم الموافق والتاريخ وحالة الموافقة، وتستطيع أيضًا إضافة حقول إضافية إلى جدول الموافقات لتلبية متطلباتك الخاصة، مثل التعليقات أو الرسائل المرتبطة بكل موافقة.
  16. أنت تعمل على مشروع لارافيل صحيح؟ والمشكلة هو أنه يتم التوجيه بشكل مستمر بين عدة صفحات دون أن يتم الانتهاء من العملية، أي أن الخطأ يشير إلى وجود دورة توجيه لا نهائية بين الصفحات، لذلك تفقد التالي: من المحتمل أن هناك تكوين خاطئ في إعدادات الويب المخصصة، مثل ملف .htaccess إذا كنت تستخدم Apache، وتحقق من تكوينات الويب المخصصة وتأكد من أنها لا تسبب توجيهات لا نهائية. ربما لديك قواعد توجيه غير صحيحة في ملف routes/web.php أو في أي ملف آخر لتوجيه المسارات، لذلك تأكد من قواعد التوجيه الموجودة ومن عدم وجود دورات توجيه لا نهائية. قد يتم تخزين بعض المعلومات المؤقتة في ذاكرة التخزين المؤقتة، وقد تتسبب تلك المعلومات في توجيهات غير صحيحة، لذلك حاول حذف ملفات التخزين المؤقتة بتنفيذ الأمر php artisan cache:clear من سطر الأوامر في مجلد مشروع Laravel. وربما أيضًا يتم تخزين معلومات الجلسة التي قد تتسبب في التوجيهات المتكررة، فقم بمسح ملفات الجلسة عن طريق تنفيذ الأمر php artisan session:clear من سطر الأوامر.
  17. أولاً تجنب التوقعات الغير واقعية، بمعنى أن الأمر بحاجة إلى وقت وليس أقل من فترة 6 أشهر وقد تصل إلى سنة، والمدة تتوقف على الوقت المتاح لك وخبراتك السابقة ومستواك في علوم الحاسب أو التعامل مع الحاسوب والويب بشكل عام. لذلك، إذا كنت تعمل في وظيفة حاليًا فلا تتركها، وتعلم البرمجة بجانب الوظيفة في وقت الفراغ المتاح لك، ولكي لا نسبق الأحداث علينا الآن بالتركيز على تعلم البرمجة وتخصيص الوقت لذلك وبشكل يومي أو شبه يومي حسب استطاعتك ويجب كتابة الكود وليس المشاهدة السلبية فقط وذلك من أجل تثبيت المعلومات وستتعلم الكثير من أخطائك عن محاولة كتابة الكود بمفردك بعد المشاهدة أو الكتابة وراء المدرب في البداية. وأيضًا عليك بتحديد هل تريد العمل في شركة أو وظيفة بدوام كامل أم تريد العمل الحر؟ حيث أن كلا الأمرين مختلفين، عليك بالبحث على مواقع التوظيف مثل LinkedIn أو indeed عن وظائف بايثون وتفقد ما هي المهارات المطلوبة وأغلبها يتم توفيرها في دورة بايثون في أكاديمية حسوب. أما على مواقع العمل الحر مثل مستقل وخمسات، عليك بتفقد المشاريع البرمجية في قسم البرمجة واحكم بنفسك وتعرف على نوعية المشاريع المطلوبة والمهارات اللازمة لذلك. وستجد هنا مزيد من التفاصيل:
  18. المشكلة الأولى (CS5001) سببها أنه لا يتم العثور على طريقة Main الثابتة في البرنامج، وطريقة Main هي نقطة البداية الرئيسية لتنفيذ البرنامج، أي يجب أن تقوم بإضافة طريقة Main إلى الكود كالتالي: public static void Main(string[] args) { // الكود هنا } ولاحظ أنك قمت بكتابة Main بحرف m صغير وليس كبير. أما بالنسبة للمشكلة الثانية (CS8600)، فتحدث عندما تحاول تحويل قيمة قد تكون قيمة فارغة (null) إلى نوع غير قابل للاشتقاق مما يعني أنه تم استخدام قيمة قد تكون فارغة (null) في مكان لا يقبل القيم الفارغة. والصحيح هو استخدام Convert.ToInt32 لتحويل الإدخال المقروء من Console.ReadLine إلى قيمة صحيحة وتخزينها في المتغير age. ففي السطر name = Console.ReadLine(), إذا قام المستخدم بترك الإدخال فارغًا، فإن Console.ReadLine() ستعيد قيمة فارغة (null)، إذا كانت name معرفة كنوع غير قابل للاشتقاق (non-nullable type)، فسيحدث خطأ CS8600، وتستطيع يمكنك استخدام نوع قابل للاشتقاق لـ name من خلال استخدام string? بدلاً من string. وفي السطر age = Convert.ToInt32(Console.ReadLine()), إذا قام المستخدم بإدخال قيمة غير صحيحة أو ترك الإدخال فارغًا، فإن Console.ReadLine() قد تعيد قيمة فارغة (null). وبما أن age هو من نوع int (نوع غير قابل للاشتقاق)، فسيحدث خطأ CS8600، لذا عليك استخدام int? بدلاً من int لتجنب خطأ CS8600 وللسماح بتخزين القيمة الفارغة (null) في حالة إدخال غير صحيح. ولكن سيظهر لديك تنبيه آخر وهو CS8632: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. حيث أنه في لغة C# 8.0 وما بعدها، يمكن استخدام تعليقات Nullable Reference Types لتوضيح قابلية القيم الفارغة (nullability) للمراجعات، ويتم استخدامها لتوضيح ما إذا كانت المراجعات قد يتم تعيينها بقيمة فارغة (null) أم لا، ولكن، يجب تعيين السياق الخاص بتعليقات Nullable Reference Types باستخدام تعليمة '#nullable enable' في بداية الملف الذي يستخدم تلك التعليقات أي وضع السطر التالي: #nullable enable وبعد التعديلات السابقة يصبح الكود كالتالي: #nullable enable using System; namespace pl { class Program { static void Main(string[] args) { string? name; Console.WriteLine("enter your name"); name = Console.ReadLine(); Console.WriteLine("enter your age"); string? ageInput = Console.ReadLine(); int? age = !string.IsNullOrEmpty(ageInput) ? Convert.ToInt32(ageInput) : null; if (age > 20 && name != null) { Console.WriteLine($"welcome MR{name}"); } else if (name != null) { Console.WriteLine($"welcome {name}"); } } } } دروس ومقالات لغة C#‎ في أكاديمية حسوب
  19. بخصوص مشكلة التعليق، أرجو منك غلق المتصفح بالكامل ثم إعادة فتحه وتجربة كتابة التعليق، وإذا استمرت المشكلة حاول تفقد هل هناك إضافة تسبب تلك المشكلة حاول تعطيل كل إضافة على حدى ثم التجربة، أو تجربة استخدام متصفح آخر. وربما قد يفيدك أيضًا حذف ملفات التخزين المؤقتة للمتصفح، عن طريق الضغط على CTRL + SHIFT + DELETE وستظهر لك نافذة تستطيع منها حذف كل البيانات من خلال الإختيار والضغط على clear data، ولكن لا أنصحك بحذف الكوكيز حتى لا يتم تسجيل خروجك من كل الحسابات في المواقع التي سجلت الدخول بها وستضطر إلى إعادة تسجيل الدخول. وبخصوص فهم الفرق بين block و inline-block فالأفضل شرح الفرق بين block و inline و inline-block: أولاً العناصر block تبدأ في سطر جديد وتأخذ عرضًا كاملاً في حاويتها، ويمكن أن تحتوي على هوامش (margins) وحشو (padding) وإطار (border) على جميع الجوانب، وأمثلة على العناصر block تشمل <div>، <p>، و <ul>. العناصر inline لا تبدأ في سطر جديد وتأخذ فقط العرض الذي تحتاجه، وبإمكانها أن تحتوي فقط على هوامش وحشو وإطار من الجانب الأيمن والأيسر فقط أي لا تستطيع تحديد طول وعرض لها، وأمثلة على العناصر inline تشمل <span>، <a>، و <img>. وهناك أمر هام يجب الإنتباه إلى إليه أنه في حالة استخدام التنسيق التالي على عنصر inline مثل span: span { padding: 12px; border: 14px solid red; } ستجد أنه يظهر إطار من الأعلى والأسفل وأيضًا حشو من الأعلى والأسفل، لكن كيف ذلك! ببساطة الحشو أو الإطار من الأعلى والأسفل لن يؤثر على طول العنصر وإذا قمت بزيادة القيمة ستجد أنه يتم الزيادة من الجانب الأيسر والأيمن بينما الأعلى والأسفل ستجد أنه يتم إنشاء منطقة إضافية حول النص تعتبر "منطقة تجاوز" (overflowing area) والتي لن تكون مرئية إلا إذا تم تعيين خلفية للعنصر كما في الإطار. بينما النص داخل الـ span ظل كما هو على نفس السطر ولم يرتفع أو ينخفض لأسفل. بمعنى أن الحشو (padding) أو margin أو الإطار للعناصر inline لا يؤثر على المسافة أعلى وأسفل العنصر - أي أن الخط (أو الخط الأساسي للنص) يكون في نفس الوضع الرأسي حيث سيكون (أو بالأحرى: هو) بدون الحشو، والحشو هنا ينشئ منطقة تتجاوز خلالها العناصر القائمة فقط إذا تم تحديد خلفية لها. أما عناصر inline-block هي عناصر متوسطة بين العناصر block و inline. ولا تبدأ في سطر جديد، ولكن يمكن أن تحتوي على هوامش وحشو وإطار، مما يجعلها خيارًا جيدًا للعناصر التي ترغب في التحكم في عرضها وارتفاعها، ولكنك لا ترغب في أن تبدأ في سطر جديد، وأمثلة على العناصر inline-block تشمل <input>، <select>، و <button>. شرح خـاصيه الـ Display بالقيم الخاصه بهاا بالتفصـيل معها أمثله
  20. لتفهم سبب شهرته، أولاً هو إطار مفتوح المصدر تم تطويره من قبل مايكروسوفت، وتستطيع من خلاله بناء تطبيقات ويب تعمل على أي نظام، وأيضًا تطبيقات هاتف من خلال Xamarin. أيضًا C# هي لغة برمجة تم تطويرها بواسطة شركة Microsoft وتم إطلاقها لأول مرة في عام 2000 كجزء من منصة Microsoft .NET Framework، ومنذ ذلك الحين، أصبحت C# لغة برمجة رئيسية ومشهورة في تطوير تطبيقات الويندوز وتطبيقات الويب باستخدام ASP.NET وتطبيقات الأجهزة الذكية باستخدام منصة Xamarin. وقامت مايكروسوفت بدفع الكثير من المال وإجراء إتفاقيات من أجل دعم استخدام ASP.NET في المؤسسات الكبيرة الحكومية وإنشاء دورات تدريبية من أجل توفير مطوري ASP.NET في سوق العمل، أيضًا هناك تبرعات تقوم بها مايكروسوفت لدول العالم الثالث! كل سنة. ولذلك ستجد أنه يتم تدريس واستخدام لغات وتقنيات تابعة لمايكروسوفت حصرًا. وانتبه إلى أن ASP.NET هو إطار عمل لتطوير تطبيقات الويب على الجانب الخادم (الواجهة الخلفية، أي نستخدمه لبناء وتشغيل خادم الويب الذي يتعامل مع الطلبات من المتصفحات ويُنشئ الاستجابات الملائمة للعملاء. ويعمل ASP.NET على معالجة المنطق والتفاعل مع قواعد البيانات وتنسيق البيانات وإدارة الحالة والمزيد من الوظائف التي تتطلبها تطبيقات الويب. وASP.NET Core هو إطار عمل حديث يدعم أحدث تقنيات تطوير الويب، مثل Razor Pages و Blazor." حيث أن Razor Pages وهي نموذج بناء الصفحات في ASP.NET Core. تمكن المطورين من بناء صفحات الويب بناءًا على بنية بسيطة، حيث يتم دمج ترميز HTML وكود C# الخادمي في ملف واحد، وبالتالي تساعد تلك الطريقة على إنتاج كود نظيف وقابل للصيانة، مما يجعل عملية تطوير وصيانة تطبيقات الويب أسهل. أما Blazor هو إطار عمل ويب مبتكر يتيح للمطورين بناء تطبيقات ويب تفاعلية عميلية باستخدام لغة C# بدلاً من JavaScript، وباستخدام Blazor، يمكن للمبرمجين كتابة الكود على الجانب العميل والجانب الخادم بلغة C#، مما يوفر لغة برمجة موحدة في جميع أجزاء التطبيق. وبذلك، يتم الاستغناء عن الحاجة إلى التبديل بين لغات برمجة مختلفة ويتم تبسيط عملية التطوير.
  21. سبب المشكلة هو أنك كتبت دالة setTimeout بشكل غير صحيح، ففي جافاسكريبت يتم إعتماد طريقة camel Case في الأسماء أي أن كل كلمة بعد الأولى تبدأ بحرف كبير، لاحظ أنك كتبت settimeout بينما الصحيح هو setTimeout لاحظ حرف t كبير وليس صغير.
  22. أرجو منك التعليق أسفل فيديو الدورة الخاص بالسؤال حيث ستجد قسم خاص بالتعليقات، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة. والكود الذي وضحته وهو التالي لا يوجد به مشكلة حيث سيتم طباعة hello بعد فترة 3 ثواني: const wait = time => new Promise( (resolve, reject) => setTimeout(resolve, time) ) wait(3000).then(() => console.log('hello')) فما هو الخطأ الذي يظهر لك في الكونسول؟ وإليك تفسير الكود: نستخدم الوظيفة wait لإنشاء وعد (Promise) يتأخر لفترة محددة من الوقت المحدد كمعامل (time)، ثم حل الوعد (resolve) بعد انتهاء الفترة المحددة وهي لمدة 3000 ميلي ثانية (3 ثوانٍ)، ثم يتم طباعة "hello" عندما يتم حل الوعد.
  23. إذا كنت تواجه مشكلة أو تريد المزيد من الإيضاح لبعض الأمور في الدورة تستطيع طرح ذلك وسيتم مساعدتك. أما بخصوص تغيير الدورة إلى دورة أخرى، فأرجو منك التحدث إلى مركز المساعدة الخاصة بأكاديمية حسوب وسيتم سؤالك عن البريد الإلكتروني فأدخل البريد الخاص بالحساب الذي اشتركت به في الدورة، ثم سيصلك كود تفعيل أدخله وستظهر لك نافذة المحادثة أخبرهم بما تريد، وسيتم الرد عليك خلال 24 إلى 48 ساعة ولا تقلق بشأن الرد فسيتم مساعدتك بلا شك، لكن أحيانًا يكون هناك ضغط.
  24. المشكلة بسبب استخدام دالة useReducer في TypeScript بشكل غير صحيح، حيث يجب أن تحدد نوع الـ reducer الخاص بك بشكل صحيح، وتتوقع useReducer أن تمرر reducer يستقبل حالة وإجراء ويعيد الحالة الجديدة، ووفقًا للواجهة التي قمت بتعريفها، الدالة reducerFunction من المفترض أن تعيد حالة جديدة من نوع state وليس void. وتستطيع تحديد النوع العام للـ reducer كالتالي: function reducerFunction(state: state, action: action): state { // ... } وبذلك تحدد أن الدالة reducerFunction ستعيد حالة جديدة من نوع state وليس void، وبالتالي يتوافق مع متطلبات useReducer. وبعد تحديد النوع العام للـ reducer، بإمكانك استخدامه في useReducer كما هو: let [state, dispatch] = useReducer(reducerFunction, { b_count: 0, a_count: 0, });
  25. بدون أدوات خارجية سيتعين عليك التالي: استخدم توازن الحمل load balancer لتوزيع حركة المرور الواردة على عدة نسخ من التطبيق الخاص بك، وذلك يضمن وجود نسخة واحدة على الأقل تخدم الطلبات أثناء عملية النشر. إذا تضمنت عملية النشر تغييرات في هيكل قاعدة البيانات، استخدم ميزة ترحيل قاعدة البيانات في Laravel، حيث تتيح لك الترحيلات تطبيق التغييرات على هيكل قاعدة البيانات مع استمرار تشغيل التطبيق، ويتعامل Laravel مع ذلك من خلال تطبيق الترحيلات في عملية انتقالية، لذا إذا فشلت عملية الترحيل، سيقوم Laravel تلقائيًا بإلغاء التغييرات. إعداد بيئة منفصلة للنشر مثل بيئة التجريب أو الاختبار ، ويجب أن تكون تلك البيئة مطابقة لبيئة الإنتاج الحية قدر الإمكان، وذلك بإختبار عملية النشر بدقة في هذه البيئة قبل تطبيقها على بيئة الإنتاج الحية. استخدام نظام التحكم في الإصدار مثل Git لإدارة الكود مما يسمح لك بتتبع التغييرات وإعادة التراجع إذا لزم الأمر. بدلاً من نشر جميع نسخ التطبيق الخاصة بك دفعة واحدة، تستطيع اعتماداستراتيجية النشر التدريجي، وينطوي ذلك على نشر النسخ الجديدة تدريجيًا واحدة تلو الأخرى، بينما تستمر النسخ الحالية في تلبية الطلبات، مما يقلل من تأثير النشر على المستخدمين ويضمن استمرارية الخدمة. تنفيذ فحوصات الحالة لمراقبة حالة نسخ التطبيق الخاصة بك، للتحقق مما إذا كانت النسخة جاهزة لتلقي الطلبات، وتكوين توازن الحمل لتنفيذ فحوصات الحالة وتوجيه المرور إلى النسخ المناسبة والسليمة فقط. بينما من الأسهل لك هو أتمتة عملية النشر وهي تضمن توحيد الأسلوب وتقليل الأخطاء وذلك باستخدم أدوات النشر مثل Jenkins أو GitLab CI/CD أو Laravel Envoyer لأتمتة عملية النشر، وذلك لجلب أحدث كود، وتشغيل الاختبارات، وتنفيذ الترحيلات، وتنفيذ خطوات النشر بشكل تلقائي. وهناك العديد من الأدوات المفيدة التي يمكن استخدامها لتحقيق نشر تطبيق Laravel بدون توقف، وفيما يلي بعض الأدوات الشائعة: Envoyer by Laravel Deployer Jenkins GitLab CI/CD Laravel Vapor
×
×
  • أضف...