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

عبدالباسط ابراهيم

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

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

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

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

    11

كل منشورات العضو عبدالباسط ابراهيم

  1. بشكل عام، يتطلب العمل في الشركات الحصول على الحد الأدنى من السن المطلوبة للعمل والذي يختلف من بلد لآخر ومن شركة لأخرى. وفي بعض الدول، يتم تحديد الحد الأدنى للسن القانوني للعمل، وقد يتم تطبيق هذا الحد الأدنى في شركات القطاع الخاص والحكومي على حد سواء. ولكن بشكل كبير لا توجد شركات تقوم بالتوظيف لمن أقل من 18 عاماً ولكن بدلاً من العمل في الشركات، يمكن العمل كمستقل والعمل على مشاريع حرة ومشاريع العملاء المختلفة. ويمكن العثور على مشاريع حرة وعملاء جدد عن طريق المواقع الإلكترونية المختلفة المتخصصة في العمل الحر مثل مستقل . ولكن المشكلة في توثيق الهوية والحل الوحيد لهذه المشكلة هو التسجيل ببيانات شخص قريب منك ويمكن أيضًا تطوير مشاريعك الخاصة وتحسينها وتسويقها عبر المنصات المختلفة للبيع مثل CodeCanyon وThemeForest وغيرها. كما يمكنك الإتفاق مع مبرمج آخر تثق به للعمل معاً في بعض المشاريع وكما أخبرك أسامة فإن بناء موقع شخصي يمكن أن يكون وسيلة فعالة لعرض مهاراتك وأعمالك السابقة وجذب العملاء والفرص الجديدة. يمكنك استخدام الموقع الشخصي كمنصة لتحميل أعمالك السابقة وعرض مهاراتك المختلفة وتفاصيل الخبرة السابقة.
  2. الأفضل هو الاهتمام بما تقوم بتطبيقه وتعلمه بدلاً من الاهتمام بالتقدم في الدورة. الهدف الرئيسي من الدورات التعليمية هو تعليم المفاهيم الأساسية والمهارات اللازمة لإتقان المهارات المطلوبة في المجال، ولكن الاستفادة الحقيقية من هذه الدورات تأتي من تطبيق هذه المفاهيم والمهارات على مشاريع عملية. عندما تستخدم المفاهيم والمهارات التي تعلمتها في مشاريع عملية، فإنها تصبح أكثر واقعية وقابلة للاستخدام في بيئة العمل الحقيقية، وتساعدك على تطوير مهاراتك وفهم المفاهيم بشكل أفضل. لذلك، يجب أن تركز على فهم المفاهيم وتطبيقها على مشاريع عملية، ويجب أن يكون التقدم في الدورة هو وسيلة لتحقيق هذا الهدف، وليس الغاية الأساسية. لذلك يمكن أن تأخذ الكثير من الوقت أكثر من أي شخص آخر وذلك بسبب التطبيق على ما تعلمته مع نفسك مثلاً بجانب التطبيقات الموجودة في الدورة أو محاولة التعمق أكثر في ما تتعلمه والعديد من الأسباب الأخرى ونصيحة لك ربما لا تعطيها الأهتمام كثيراً ولكن حاول المشاركة في المجتمعات التعليمية: يمكنك الانضمام إلى المجتمعات التعليمية والمنتديات ومواقع التواصل الاجتماعي للتواصل مع الآخرين الذين يشاركونك نفس الاهتمامات والمهارات، وتبادل الأفكار والخبرات والموارد. تحديث المهارات: يجب الاهتمام بتحديث المهارات الخاصة بك بشكل منتظم، ومتابعة التطورات في المجال الذي تعمل فيه، وتعلم أحدث التقنيات والأدوات المستخدمة في المجال.
  3. يتم استخدام الدالة الموجودة في متغير key كدالة تحويل (transform function)، والتي تستخدم لتحويل كل عنصر في القائمة قبل الفرز. في حالتنا، تحويل العناصر يتم بإزالة الحرفين الأولين من كل عنصر في القائمة، ثم تحويل النتيجة إلى قيمة صحيحة (integer) باستخدام دالة int()، وهذا يتم بإستخدام التعبير اللامبدا (lambda expression). يمكن تغيير اسم المتغير key إلى اسم آخر، لكن يجب الاحتفاظ بالمعنى الذي يحمله، والذي يعني "الدالة التي تستخدم لتحويل العناصر قبل الفرز". ويمكن استخدام دالة مخصصة بدلاً من التعبير اللامبدا في المتغير key، وستعمل بنفس الطريقة، أي تحويل العناصر قبل الفرز. يتم استخدام الدالة print() لإظهار قائمة العناصر المرتبة بعد الفرز، وليست لتحويل العناصر قبل الفرز. لذلك، يجب تحديد دالة تحويل (transform function) مخصصة باستخدام المتغير key لتحويل العناصر قبل الفرز، ولا يمكن استخدام دالة print() لهذا الغرض. مثال آخر على الشرح لنفترض أن لدينا قائمة من الأسماء ونريد ترتيبها بحسب طول كل اسم. يمكن استخدام المتغير key لتحديد دالة تحويل (transform function) تستخدم لتحويل كل عنصر في القائمة قبل الفرز. في هذه الحالة، يمكن استخدام دالة len() لتحويل كل عنصر في القائمة إلى طوله قبل الفرز. يمكن استخدام المتغير key لتحديد دالة التحويل كالتالي: my_list = ['John', 'Bob', 'Alice', 'Mike', 'David'] my_list.sort(key=lambda x: len(x)) print(my_list) في هذا المثال، تم استخدام التعبير اللامبدا (lambda expression) في المتغير key لإنشاء دالة تحويل مخصصة. تستخدم هذه الدالة دالة len() لتحويل كل عنصر في القائمة إلى طوله، ثم يتم فرز القائمة وفقًا لطول كل عنصر فيها. سيتم طباعة النتيجة كالتالي: ['Bob', 'John', 'Mike', 'Alice', 'David'] ويمكن ملاحظة أن الأسماء مرتبة حسب طولها بدءًا من الأصغر إلى الأكبر. إذا كان السؤال خاص بدورة ما في الأكاديمية يفضل السؤال أسفل الفيديو وسيتم الإجابة بأسرع وقت
  4. Laravel Nova هي عبارة عن حزمة Laravel ويتم بناؤها على Laravel. وبالتالي، يمكن استخدام Laravel Nova فقط مع تطبيقات Laravel. يمكن استخدام Laravel Nova لإنشاء واجهة مستخدم إدارية لتطبيقك. يمكن استخدام Laravel Nova لإنشاء واجهة مستخدم إدارية مخصصة لإدارة مختلف الوحدات والموارد والبيانات في تطبيقك. يمكنك إنشاء موارد جديدة وتخصيص الوحدات القائمة والعلاقات بينها وإدارة المستخدمين والصلاحيات والعديد من الميزات الأخرى باستخدام Laravel Nova. يمكنك ببساطة تثبيت Laravel Nova باستخدام Composer وتكوينها لتناسب تطبيقك واستخدامها لإنشاء واجهة مستخدم إدارية مخصصة لتطبيقك. يمكنك أيضًا تخصيص واجهة المستخدم لتتناسب مع تطبيقك وتضمين مكوِّنات مخصصة لعرض بيانات تطبيقك بشكل أفضل. مثالًا على كيفية استخدام Laravel Nova لإنشاء واجهة مستخدم إدارية. سنستخدم Laravel Nova لإنشاء واجهة مستخدم إدارية لإدارة كتالوج منتجات لتطبيق الشراء عبر الإنترنت. أولاً، يجب تثبيت Laravel Nova باستخدام Composer. يمكن العثور على تعليمات التثبيت والتكوين اللازمة في الموقع الرسمي لـ Laravel Nova. بعد تثبيت Laravel Nova، يتم إنشاء مورد لكل جدول في قاعدة البيانات الخاصة بك. في هذا المثال، سننشئ موردًا لجدول المنتجات. يمكن إنشاء مورد للمنتجات باستخدام الأمر التالي: php artisan nova:resource Product بعد إنشاء المورد، يتم تحديد الحقول التي يتم عرضها وتحريرها في واجهة المستخدم. يمكن تعيين الحقول المراد عرضها باستخدام الأمر التالي في ملف المورد: public function fields(Request $request) { return [ ID::make()->sortable(), Text::make('Name')->sortable()->rules('required', 'max:255'), Text::make('Description')->hideFromIndex(), BelongsTo::make('Category')->searchable(), Number::make('Price')->sortable(), Boolean::make('Available'), ]; } يمكن إضافة مزيد من الحقول والعلاقات والتكوينات حسب الحاجة. بعد تحديد حقول المورد، يتم تسجيلها في لوحة الإدارة الخاصة بك باستخدام الأمر التالي: public static $group = 'Products'; حيث يتم تحديد المجموعة التي سيتم عرض المورد فيها في لوحة الإدارة. يمكن الآن تشغيل خادم التطبيق Laravel والوصول إلى واجهة المستخدم الإدارية الخاصة بك باستخدام المسار التالي: http://localhost/nova بهذه الطريقة، يمكن استخدام Laravel Nova لإنشاء واجهة مستخدم إدارية مخصصة لتطبيقك.
  5. توضيح المزيد حول الفرق بين elif و else و if في لغة البرمجة بايثون. الكلمة if: تستخدم الكلمة if لتنفيذ جزء من البرنامج إذا تم تحقيق الشرط المحدد. على سبيل المثال، إذا كنا نريد إجراء مقارنة بين قيمتين، يمكن استخدام الكلمة if لتنفيذ الإجراء المحدد إذا كانت القيمة الأولى أكبر من القيمة الثانية. وفي حالة عدم تحقيق الشرط، يتم تجاهل الإجراء المحدد. الكلمة elif: تستخدم الكلمة elif لإضافة شرط إضافي لتنفيذ جزء من البرنامج إذا تم تحقيق الشرط المحدد، وإذا لم يتم تحقيق الشرط المحدد في الكلمة الأولى. على سبيل المثال، إذا كان لدينا ثلاثة قيم، يمكن استخدام الكلمة elif لإجراء مقارنة بين القيمة الثانية والثالثة، وتنفيذ الإجراء المحدد إذا كانت القيمة الثانية أكبر من الثالثة. وفي حالة عدم تحقيق الشرط، يتم تجاهل الإجراء المحدد في الكلمات السابقة. الكلمة else: تستخدم الكلمة else في نهاية سلسلة الشروط المحددة بـ if و elif، وتنفيذ جزء من البرنامج إذا لم يتم تحقيق أي شرط سابق. على سبيل المثال، إذا كان لدينا عددًا يمثل درجة الطالب في اختبار ما، يمكن استخدام الكلمة else لإجراء إجراء محدد إذا كانت الدرجة أقل من 50. وفي حالة تحقيق أي شرط سابق، يتم تجاهل الإجراء المحدد في الكلمات السابقة. وفيما يلي بعض الأمثلة: استخدام if و else: في هذا المثال، يتم فحص قيمة المتغير score وإذا كانت أكبر من 50، يتم طباعة "Pass"، وإلا يتم طباعة "Fail". score = 65 if score > 50: print("Pass") else: print("Fail") استخدام if و elif: في هذا المثال، يتم فحص قيمة المتغير x وإذا كانت أكبر من 0، يتم طباعة "Positive"، وإذا كانت أقل من 0، يتم طباعة "Negative"، وإلا يتم طباعة "Zero". x = 3 if x > 5: print("x is greater than 5") elif x > 2: print("x is greater than 2 but less than or equal to 5") else: print("x is less than or equal to 2") استخدام if و elif و else: في هذا المثال، يتم فحص قيمة المتغير age وإذا كانت أقل من 18، يتم طباعة "Underage"، وإذا كانت أكبر من 18 وأقل من 65، يتم طباعة "Adult"، وإلا يتم طباعة "Retired". age = 30 if age < 18: print("Underage") elif age < 65: print("Adult") else: print("Retired")
  6. الخطوات الأساسية لبرمجة مُنشئ مواقع الويب الخاص بك هي: إنشاء قالب HTML: سيكون هذا القالب الأساسي لجميع المواقع التي سيتم إنشاؤها باستخدام برنامجك. يجب أن يحتوي على بنية HTML الأساسية مع الرأس والجسم وما إلى ذلك. يمكنك تضمين ملفات CSS و JS في القالب إنشاء نظام تخطيط / سمات: اسمح للمستخدمين باختيار تخطيطات مختلفة مثل تخطيط عمود واحد، تخطيط عمودين، تخطيط المدونة، وما إلى ذلك. وتضمن خيارات التنسيق للاختيار من بين الألوان والخطوط وما إلى ذلك. يمكنك أن تجعل ملفات السمات هذه تمتد للقالب الأساسي. بناء مُنشئ صفحات سحب وإفلات: اسمح للمستخدمين بسحب المكونات مثل النص والصور والأزرار، ووضعها على الصفحة. يمكنك استخدام مكتبات مثل jQuery UI للوظيفة سحب وإفلات. تطوير نظام المكونات: أنشئ مكونات قابلة لإعادة الاستخدام مثل صناديق النص، والصور، والمعارض، ونماذج الاتصال، وما إلى ذلك. حدد كيفية حفظ بيانات كل مكون وكيفية عرضه. إنشاء واجهة لإضافة/تحرير الصفحات: بناء واجهة، على سبيل المثال محرر WYSIWYG، حيث يمكن للمستخدمين إضافة، تحرير، وحذف الصفحات. اسمح بتعيين عناوين الصفحات وروابط URL وترتيب القائمة، وما إلى ذلك. إضافة بناء القائمة/التنقل: أنشئ واجهة للمستخدمين لبناء قوائم التنقل عن طريق إضافة صفحات، فئات، روابط خارجية، وما إلى ذلك إلى القائمة. تنفيذ نظام تخزين البيانات: ستحتاج إلى قاعدة بيانات لتخزين جميع الصفحات والمكونات والسمات والقوائم والمحتوى الآخر الذي تم إنشاؤه بواسطة المستخدمين. يمكنك استخدام MySQL و MongoDB وما إلى ذلك. دمج كل شيء: استخدم لغة البرمجة الخاصة بالخادم (Backend) مثل PHP أو Python لمعالجة تقديم الصفحات واسترداد البيانات من قاعدة البياناتومعالجة تحرير الصفحات وربطها بكل من الكود الخلفي والأمامي. ومثال على ذلك تم بناء Wix على مجموعة من التقنيات، بما في ذلك: React: مكتبة JavaScript لبناء واجهات المستخدم. Node.js: بيئة تشغيل JavaScript التي تسمح لـ Wix بتشغيل JavaScript على الجانب الخادم (Server-Side). Express.js: إطار تطبيق ويب لـ Node.js يستخدم لمعالجة طلبات HTTP والتوجيه. MongoDB: قاعدة بيانات NoSQL تستخدم لتخزين البيانات الخاصة بمواقع Wix. Webpack: أداة تجميع الوحدات والتي تستخدم لتحسين وتعبئة الكود الخاص بـ JavaScript في منصة Wix. بالإضافة إلى ذلك، تستخدم Wix تقنيات أخرى مثل GraphQL و MobX و Next.js للتعامل مع التواصل بين العميل والخادم وإدارة حالة التطبيق، كما تستخدم خدمات AWS للاستضافة والنشر.
  7. تعلم حل المشكلات في البرمجة هو مهارة مهمة لأي مبرمج أو مطور، ويمكن تعلمها بالتدريب والممارسة المستمرة. إليك بعض النصائح التي يمكن أن تساعدك في تحسين قدراتك في حل المشكلات في البرمجة: تعلم الأساسيات فهم المشكلة استخدام أدوات البرمجة البحث عن الحلول الممارسة المستمرة العمل الجماعي وبدلاً من تكرار الشرح مرة أخرةى يمكنك الإطلاع على الإجابات التالية
  8. قم بتحديث Dart كما يلي تنفيذ الأمر flutter channel master ثم الأمر flutter upgrade
  9. هناك العديد من الأمثلة التي يمكن استخدامها لتوضيح استخدام عبارة "return" في الدوال البرمجية في جافاسكريبت، ومن بين هذه الأمثلة: إرجاع قيمة: في الدالة التالية، يتم استخدام "return" لإرجاع قيمة المتغير "result" الذي يتم حسابه داخل الدالة. function addNumbers(num1, num2) { let result = num1 + num2; return result; } let sum = addNumbers(5, 7); // sum = 12 الخروج من الدالة: في الدالة التالية، تستخدم "return" للخروج من الدالة إذا لم يتحقق شرط معين، وعدم تنفيذ الأوامر اللاحقة في الدالة. function checkAge(age) { if (age < 18) { return "You are not eligible to vote."; } else { return "You are eligible to vote."; } } let result = checkAge(20); // result = "You are eligible to vote." التحقق من شرط معين: في الدالة التالية، يتم استخدام "return" لتحقق من شرط معين (إذا كان المدخلات غير صحيحة)، وإرجاع قيمة "undefined" في حالة عدم تحقق الشرط. function multiplyNumbers(num1, num2) { if (typeof num1 !== "number" || typeof num2 !== "number") { return; // إذا كان أي من المدخلات غير رقمية } else { return num1 * num2; } } let result = multiplyNumbers(5, "10"); // result = undefined هذه هي بعض الأمثلة البسيطة لاستخدام عبارة "return" في الدوال البرمجية في جافاسكريبت. يمكن استخدام هذه العبارة بطرق مختلفة وفقًا لاحتياجات البرنامج ومتطلبات العمل.
  10. كما أخبرك عدنان فإن المشكلة تكمن في تنفيذ الأمر npm strat في المسار الموجود به ملف package.json كما هناك بعض الممارسات العامة التي يمكن اتباعها لتنظيم مشروع React بشكل جيد. يمكن استخدام هذه الإرشادات كنقطة انطلاق عند بدء تنظيم مشروعك: ترتيب مقترح للمجلدات والملفات في مشروع React: مجلد public: يحتوي على الملفات العامة مثل: index.html favicon.ico أي ملفات صور أو CSS مجلد src: يحتوي على كل ملفات المصدر للمشروع مثل: مجلد components: يحتوي على مكونات React مجلد assets: يحتوي على الصور والملفات الأخرى مجلد styles: يحتوي على ملفات CSS أو Sass ملف index.js: يحتوي على تصدير التطبيق الرئيسي ملف App.js: يحتوي على المكون الرئيسي للتطبيق مجلد config: يحتوي على ملفات الإعدادات مثل webpack وغيرها .gitignore: ملف إهمال git لتجاهل ملفات مثل node_modules وأي ملفات أخرى غير ضرورية لإدارة نسخة المشروع. وبالطبع ملف الpackage.json في نفس مستوى المجلد src هذا الترتيب العام يساعد في تنظيم وتنسيق ملفات مشروع React ويجعله سهل التوسع والصيانة.
  11. الخطوات التالية تحل المشكلة بشكل أبسط. تتضمن الخطوات: مسح ذاكرة التخزين المؤقت لـ npm باستخدام الأمر npm cache clean -f حذف مجلد node_modules باستخدام الأمر rm -rf node_modules إعادة تثبيت المكتبات والأدوات المطلوبة باستخدام الأمر npm i يتم استخدام هذه الخطوات في حالات عديدة عند وجود مشاكل في تثبيت وإدارة مكتبات npm. وتعمل هذه الخطوات عادة على حل مشاكل التثبيت والتشغيل والتحديث للمكتبات والأدوات المطلوبة.
  12. لا يوجد حاجة لتعلم لغات أخرى قبل البدء في تعلم لغة Python. يمكنك البدء مباشرة في تعلم Python دون الحاجة للتعلم من لغات أخرى، حيث أن Python تعتبر من اللغات البرمجية المناسبة للمبتدئين. تعتمد الإجابة إلى حد كبير على الهدف والمجال البرمجي الذي ترغب في التخصص فيه. فعلى سبيل المثال، إذا كنت ترغب في تطوير تطبيقات الويب، فإن تعلم لغات مثل HTML وCSS وJavaScript سيكون مفيداً بالتأكيد. وإذا كنت ترغب في تطوير تطبيقات الأندرويد، فإن تعلم Java سيكون مفيداً لك. لذلك يفضل تحديد المجال البرمجي الذي تود تعلمه أولاً ، وذلك لأنه يمكن أن يساعدك على تحديد اللغة البرمجية التي ستتعلمها بشكل أفضل. ومع ذلك، إذا كنت تريد البدء في تعلم البرمجة دون وضع مجال محدد في الاعتبار، فإن Python تعتبر خيارًا جيدًا للبدء، حيث أنها تستخدم في العديد من المجالات البرمجية المختلفة، من تطوير الويب والعلوم والبيانات وحتى الذكاء الاصطناعي وتعلم الآلة.
  13. يمكن تغيير شفافية الألوان في CSS باستخدام القيمة opacity أو rgba. باستخدام القيمة opacity: يمكنك تعيين قيمة opacity للعنصر الذي تريد تغيير شفافيته بين 0 و 1، حيث 0 يعني عدم وجود شفافية و 1 يعني شفافية كاملة. يمكن استخدام القيم المتوسطة لتحسين شفافية الألوان. .my-element { opacity: 0.5; /* 50% شفافية */ } باستخدام القيمة rgba: يمكنك استخدام القيمة rgba لتعيين قيمة شفافية مع اللون الذي تريده. تحتوي قيمة rgba على أربعة مكونات: قيمة الأحمر والأخضر والأزرق (RGB) وقيمة الشفافية (A). يمكن تعيين قيمة الشفافية بين 0 و 1. .my-element { background-color: rgba(255, 0, 0, 0.5); /* اللون الأحمر مع 50% شفافية */ } ولكن لا أحد يتذكر ال rgba لذلك لا تحتاج للبحث عنه فقط قم بكتابة اسم اللون في محرر الأكواد vs code مثلاً ثم قم بتوجيه الmouse إلى اسم اللون وستظهر لك هذه القائمة قم بالضغط على كلمة rgb وسيتم تحويل اللون إلى rgb
  14. هناك العديد من المصادر للإطلاع على اختصارات فيجوال ستوديو: موقع Cheatography: يحتوي هذا الموقع على قائمة كبيرة بالاختصارات المتعلقة بفيجوال ستوديو والعديد من مجموعات اختصارات أخرى. يمكنك العثور على هذه الاختصارات باستخدام البحث عن "Visual Studio". كما في هذا الرابط موقع كتاب دليل اختصارات فيجوال ستوديو: يحتوي هذا الموقع على كتاب الكتروني مجاني بعنوان "دليل اختصارات فيجوال ستوديو"، ويشرح العديد من الاختصارات الهامة. ويمكنك تحميله من هذا الرابط الوثائق الرسمية لفيجوال ستوديو: تحتوي وثائق مايكروسوفت الرسمية لفيجوال ستوديو على قسم كامل يتناول مختلف اختصارات المتعلقة بالبرامج من خلال هذا الرابط .
  15. تنشيط تطبيق Laravel على سيرفر دون انقطاع يتطلب القيام ببعض الخطوات الضرورية لتجنب أي تأخير أو انقطاع في عملية النشر. فيما يلي شرح مفصل لأهم الأدوات والاستراتيجيات التي يمكن استخدامها لنشر تطبيق Laravel بدون توقف: استخدام خدمات الاستضافة المخصصة لـ Laravel: توفر خدمات الاستضافة المخصصة لـ Laravel مثل Laravel Forge و Laravel Vapor إعدادات مسبقة للنشر والتحكم في الإصدارات والتحديثات دون توقف الخدمة. تتضمن هذه الخدمات أيضًا أدوات مثل Git و SSH للتحكم في الإصدارات والتحديثات. استخدام أدوات النشر المستمر: يمكن استخدام أدوات النشر المستمر مثل Travis CI و CircleCI لإعداد سيرفرات الإنتاج وتحديثات البرمجيات دون توقف. يمكن استخدام هذه الأدوات لتحديد مراحل النشر والاختبار والتحديثات الدورية. استخدام Docker: يمكن استخدام Docker لإنشاء حاويات Docker ونشرها على خوادم الإنتاج بدون توقف. يتم إنشاء حاويات Docker المحمولة بسهولة ويمكن نقلها بين الخوادم بسهولة، ويمكن استخدام أدوات مثل Docker Compose لتسهيل العملية. استخدام إدارة التحميل: يمكن استخدام إدارة التحميل مثل Envoyer لتبسيط عملية النشر والتحديثات الدورية دون توقف. يوفر Envoyer واجهة برمجة التطبيقات (API) لتوصيل البرامج وإعدادات مسبقة للنشر. استخدام استراتيجيات النشر: يمكن استخدام استراتيجيات النشر مثل Blue-green deployment و Canary release لنشر الإصدارات الجديدة بشكل تدريجي ومراقبة الأداء والاستجابة قبل إطلاقها بشكل كامل. يمكن استخدام هذه الاستراتيجيات لتخفيض أي تأثير على الخدمة الحالية وزيادة الثقة في الإصدار الجديد. استخدام خوادم التحميل الموزعة: يمكن استخدام خوادم التحميل الموزعة مثل NGINX و Apache لتقليل وقت الانتظار وتحسين أداء النشر عن طريق توزيع الحمولة على عدة خوادم. بالنسبة للنشر عبر GitHub، يمكن استخدام خدمات CI/CD مثل Travis CI و CircleCI لإنشاء سيرفرات الإنتاج وتحديثات البرمجيات بشكل تلقائي. يمكن استخدام Git hooks لتنفيذ إجراءات محددة عند الإصدارات الجديدة، مثل تحديث قاعدة البيانات وتحميل الملفات الثابتة. يمكن أيضًا استخدام Docker وإدارة التحميل لتسهيل عملية النشر. يتم ذلك عن طريق إنشاء ملفات Dockerfile و docker-compose.yml لتعريف الحاويات والخدمات المطلوبة لتشغيل التطبيق. يمكن تحديث هذه الملفات وتنفيذ عمليات النشر عن طريق خدمات CI/CD المتكاملة مع GitHub.
  16. يمكن إضافة بعض التحسينات الإضافية لتحسين الكود أكثر، ومنها: إضافة disabled لزر الإرسال في حالة عدم صحة الحقول: يمكن إضافة خاصية `disabled` إلى زر الإرسال حتى يتم تعطيله في حالة عدم صحة الحقول. هذا يساعد في تجنب إرسال النموذج بشكل غير صحيح ويخبر المستخدم أن هناك مشكلة يجب حلها. يمكن إضافة `disabled` بشكل مشروط باستخدام `formik.isValid` وفقًا للكود التالي: <button type="submit" className="btn btn-primary" disabled={!formik.isValid}> Submit </button> إضافة رسالة تأكيد عندما يتم التسجيل بنجاح: بعد التسجيل بنجاح، يمكن إضافة رسالة تأكيد لإخبار المستخدم بأن التسجيل تم بنجاح. يمكن إضافة عنصر `div` في النموذج يحتوي على رسالة التأكيد، كما هو موضح في الكود التالي: {formik.submitCount > 0 && !formik.isValid && ( <div className="text-danger mb-3">Please fix the errors above</div> )} {formik.submitCount > 0 && formik.isValid && ( <div className="text-success mb-3">Registered successfully</div> )} يتم تمرير `formik.submitCount` و `formik.isValid` إلى العنصر `div` بحيث يتم عرض رسالة التأكيد فقط عندما يتم إرسال النموذج بنجاح.
  17. يوجد خطأ في النحو (syntax error) في الكود المذكور، حيث يتم كتابة "settimeout" بدلاً من "setTimeout" بحرف كبير في الحرف S const wait = time => new Promise( (resolve, reject) => setTimeout(resolve, time) ); wait(3000).then(() => console.log('hello')); الكود المذكور بالفعل بسيط ويقوم بالغرض المطلوب، ولكن يمكن تحسينه بإضافة التعامل مع حالة الخطأ (error handling) في حالة فشل الوعد (promise)، وكذلك إضافة قيمة افتراضية للوقت الممرر إلى الدالة في حالة عدم تمرير أي قيمة. يمكن تحسين الكود على النحو التالي: const wait = (time = 0) => new Promise((resolve, reject) => { if (typeof time !== 'number') { reject(new Error('Invalid time')); } setTimeout(resolve, time); }); wait(3000) .then(() => console.log('Hello')) .catch(error => console.error(error.message));
  18. حسب الكود الذي تم وضعه، هناك اثنين من الأخطاء: الخطأ الأول: "Program does not contain a static "Main" method suitable for an entry point" هذا الخطأ يحدث عندما يفتقد البرنامج الدالة الرئيسية (Main) التي تعتبر نقطة الدخول الرئيسية لتنفيذ البرنامج. يمكن إصلاح هذا الخطأ عن طريق إضافة دالة Main إلى البرنامج، والتأكد من أن تكون الكتابة بالحروف الكبيرة (Main). الخطأ الثاني: "Converting null literal or possible null value to non-nullable type" هذا الخطأ يحدث عندما يتم تحويل قيمة محتملة أن تكون فارغة (null) إلى نوع غير قابل للاحتواء على قيمة فارغة (nullable type). في الكود الذي وضعته، يتم استخدام دالة Console.ReadLine() للاستماع إلى إدخال المستخدم. إذا لم يقم المستخدم بإدخال أي شيء، فإن القيمة التي سيتم استردادها من الدالة هي قيمة فارغة (null). لتجنب هذا الخطأ، يمكن استخدام عبارة التحقق من الصحة (null check) للتحقق من عدم وجود قيمة فارغة قبل تحويلها إلى نوع غير قابل للاحتواء على قيمة فارغة. وفي الكود الصحيح، يمكن استخدام دالة Convert.ToInt32() لتحويل الإدخال إلى نوع int، والتي تقوم بإجراء التحقق من الصحة بشكل صحيح. المثال الصحيح للكود هو كما يلي: using System; namespace pl { class Program { static void Main(string[] args) { int age; string name; Console.WriteLine("Enter your name:"); name = Console.ReadLine(); Console.WriteLine("Enter your age:"); age = Convert.ToInt32(Console.ReadLine()); if (age > 20) { Console.WriteLine($"Welcome MR {name}"); } else { Console.WriteLine($"Welcome {name}"); } } } }
  19. عليك أن تأخذ بعين الاعتبار أن العمل الحر يتطلب الكثير من الجهد والتحضير والتخطيط، ولا يمكن أن يكون ناجحًا إلا إذا اتخذت القرار الصحيح واكتسبت المهارات والمعرفة اللازمة. إذا كنت ترغب في العمل الحر في مجال تطوير البرمجيات، فإن دورة بايثون هي خطوة جيدة نحو تحقيق هذا الهدف، حيث أن بايثون هي لغة برمجة شائعة وقوية وتستخدم على نطاق واسع في تطوير البرمجيات. ومن أجل النجاح في العمل الحر، يجب عليك اتباع الخطوات التالية: اكتساب المهارات اللازمة: يجب عليك تعلم المهارات اللازمة للعمل الحر في مجال تطوير البرمجيات، وبما أنك قمت بالإنضمامإلى دورة بايثون فأضمن لك الحصول على المهارات اللازمة للعمل الحر التسويق لنفسك: يجب عليك أن تحسن من قدرتك على التسويق لنفسك، وذلك بوضع خطة تسويقية جيدة وإنشاء ملف شخصي احترافي على الإنترنت وتحسين مهارات التواصل مع العملاء. إدارة الوقت: يجب عليك تنظيم وإدارة وقتك بشكل جيد لتحقيق الإنتاجية والنجاح في العمل الحر. العمل بجد: يجب عليك العمل بجد والاستمرار في تحسين مهاراتك وتطوير نفسك لتصبح محترفًا في مجال تطوير البرمجيات. وتم النقاش في هذا الموضوع كثيراً من قبل لذلك يفضل قراءة الإجابات التالية مقالات حول العمل الحر
  20. في بناء نظام workflow على قاعدة بيانات MySQL، يمكن إنشاء جدول جديد لتخزين الموافقات، وذلك لتتبع عملية الموافقة على الـ post التي أضافها المستخدم. الجدول الجديد يمكن تصميمه ليحتوي على الحقول التالية: معرف الموافقة: يتم توليد هذا المعرف تلقائيًا عند إنشاء الموافقة في الجدول ويستخدم لتحديد الموافقة بشكل فريد. معرف البوست: يحتوي هذا الحقل على معرف البوست الذي أضافه المستخدم في جدول البوستات، مما يساعد في ربط الموافقة بالبوست. مستوى الموافقة: يمكن تحديد مستوى الموافقة باستخدام هذا الحقل، ومن الممكن أن يكون هناك أكثر من مستوى للموافقة. على سبيل المثال، يمكن تعيين قيمة (1) للموافقة المقدمة من الـ admin وقيمة (2) للموافقة المقدمة من الـ superadmin. حالة الموافقة: يمكن تحديد حالة الموافقة باستخدام هذا الحقل، حيث يمكن تعيين قيمة (0) للموافقة المعلقة وقيمة (1) للموافقة المقبولة وقيمة (2) للموافقة المرفوضة. تاريخ الموافقة: يمكن تحديد تاريخ الموافقة باستخدام هذا الحقل. باستخدام هذا الجدول، يمكن تتبع الموافقات وحالتها، وتحديد المستوى الذي تم تقديم الموافقة منه، وتحديد تاريخ الموافقة. وهذا يساعد على إدارة عمليات الـ workflow بشكل أفضل وتسهيل العملية بشكل كبير. لنفترض أن لدينا تطبيقًا للمدونات، ويمكن للمستخدمين إضافة بوستات جديدة ويتم عرضها للمشاهدة بعد الموافقة عليها من قبل الـ admin والـ superadmin. يمكن تصميم جدول الموافقات بالشكل التالي: CREATE TABLE approvals ( id INT NOT NULL AUTO_INCREMENT, post_id INT NOT NULL, level INT NOT NULL, status INT NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) );
  21. لتوضيح الشرح السابق بأبسط طريقة ممكنة هو إزالة ال width و ال height للعنصر a لذلك تعتقد أنت أن يأخذ العنصر a عرض الصفحة كاملة ولكن ذلك ليس صحيح حيث أن كل عنصر في الموقع يأخذ موقعه في الصفحه نسبياً للعنصر الأب وتطبيقاً لهذا الكلام يأخذ العنصر a نفس العرض والإرتفاع للعنصر list-inline-item إذا قمنا بتحديد العرض والإرتفاع كما في الصورة التالية لذلك بعد التعديلات السابقة يجب أن تصبح التنسيقات كما كانت قبل التعديل
  22. كما وضح مسعود في التعليق السابق فإن ال ASP.NET Core هو إطار عمل يستخدم لتطوير تطبيقات الويب وخدمات الويب بلغة البرمجة C# وغيرها. بالنسبة للعلاقة بين ASP.NET Core ولغة الC#، فإن C# هي اللغة الرئيسية التي يستخدمها المطورون لبرمجة تطبيقات ASP.NET Core. وتتميز لغة الC# بسهولة التعلم والاستخدام، وبإمكانها التعامل مع أنواع مختلفة من البيانات والتعامل مع الأخطاء بشكل فعال. وبفضل تكامل ASP.NET Core مع لغة الC#، يتم تسهيل عملية تطوير تطبيقات الويب وخدمات الويب، ويتم تحسين الإنتاجية والكفاءة في العمل. تطبيقات الويب هي تطبيقات تعمل على الإنترنت ويمكن الوصول إليها من خلال متصفح الويب. وتتنوع تطبيقات الويب بشكل كبير وتشمل ما يلي: مواقع الويب (Websites): وهي صفحات الويب التي تعرض محتوى مختلف مثل المعلومات العامة أو المحتوى الترفيهي أو المحتوى التعليمي أو المحتوى الإخباري. التطبيقات التعليمية: وهي التطبيقات التي تستخدم في التعليم والتدريب عبر الإنترنت، مثل منصات التعلم الإلكترونية والمنصات الأكاديمية. التطبيقات التجارية: وهي التطبيقات التي تستخدم في الشراء والبيع والتجارة الإلكترونية، مثل مواقع التسوق الإلكتروني والخدمات المالية عبر الإنترنت. بالنسبة لتطبيقات الهواتف الذكية، فإنه يمكن استخدام ASP.NET Core لتطوير تطبيقات الويب المحمولة (أو تطبيقات الويب القابلة للتطبيق على الهواتف الذكية) باستخدام تقنيات تصميم الويب المستجيب Responsive Web Design، والتي تتيح جعل موقع الويب يتكيف مع حجم شاشة الجهاز المستخدم. ويمكن أيضاً استخدام ASP.NET Core لتطوير تطبيقات جوال مخصصة باستخدام Xamarin، وهي منصة تطوير تطبيقات جوال تعتمد على إطار عمل .NET وتستخدم لغة البرمجة C#.
  23. لإضافة نظام الـ like/unlike في Next.js باستخدام TypeScript، يمكنك استخدام الحالة (state) في React ودالة الـ useEffect() لجلب وحفظ حالة الـ like عند النقر على الزر. في الصفحة التي تريد إضافة الخاصية فيها، يمكنك استخدام الحالة (state) باستخدام useState() وتحديثها عند النقر على الزر باستخدام دالة setState()، كما يلي: import { useState, useEffect } from "react"; const Page = () => { // تحديد حالة الـ like بشكل افتراضي const [liked, setLiked] = useState(false); // دالة تنفذ عند النقر على الزر const handleLikeClick = async () => { // إذا كان الـ like مفعل، استخدام الـ endpoint /unlike if (liked) { const response = await fetch("/api/unlike", { method: "POST" }); if (response.ok) { setLiked(false); } } else { // إذا كان الـ like غير مفعل، استخدام الـ endpoint /like const response = await fetch("/api/like", { method: "POST" }); if (response.ok) { setLiked(true); } } }; // استخدام دالة useEffect() لجلب حالة الـ like من الـ endpoint عند تحميل الصفحة useEffect(() => { const fetchLikeStatus = async () => { const response = await fetch("/api/like-status"); if (response.ok) { const data = await response.json(); setLiked(data.liked); } }; fetchLikeStatus(); }, []); return ( <div> <button onClick={handleLikeClick}>{liked ? "Unlike" : "Like"}</button> </div> ); }; export default Page; في هذا المثال، يتم استخدام الحالة (state) liked لتخزين حالة الـ like ويتم تحديثها عند النقر على الزر باستخدام دالة handleLikeClick() التي تقوم بإرسال طلب POST إلى الـ endpoint المناسب (like أو unlike) وتحديث حالة الـ like بناءً على الرد الذي تم استلامه. يتم استخدام دالة useEffect() لجلب حالة الـ like من الـ endpoint "/api/like-status" عند تحميل الصفحة، ويتم تحديث حالة الـ like باستخدام دالة setLiked(). يمكنك تغيير المسار واسم الـ endpoint حسب احتياجاتك، وتأكد من إنشاء الملفات اللازمة في مجلد pages/api (مثل api/like.ts و api/unlike.ts) لتنفيذ الـ endpoints.
  24. هناك بعض الطرق لتطبيق نظام الإعجاب (الـ like system) للمشروع: استخدم وضعين منفصلين في الـJSX: <button onClick={likePhoto}> {liked ? <FaHeart /> : <FaRegHeart />} </button> حيث liked هو حالة الإعجاب، و FaHeart و FaRegHeart هما مكونان لتمثيل رمز قلب مليء أو فارغ. احتفظ بعدد الإعجابات likes في حالة الـ state ، ثم عند الضغط على الزر: likePhoto() { if (liked) { setLikes(likes - 1); setLiked(false); } else { setLikes(likes + 1); setLiked(true); } } فهذا سيزيد أو ينقص عدد الإعجابات اعتمادًا على حالة الإعجاب الحالية. هناك طرق أخرى لكن هذه هي الأبسط. يمكنك تجربة أي واحد وتعديل وتحسين الحل بمرور الوقت.
×
×
  • أضف...