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

Hessen Nasser

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

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

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

3 متابعين

آخر الزوار

362 زيارة للملف الشخصي

إنجازات Hessen Nasser

عضو نشيط

عضو نشيط (3/3)

124

السمعة بالموقع

3

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

  1. عموما يجب ان تعلم ان JSON هو اختصار لـ "JavaScript Object Notation" وهو تنسيق نصي يُستخدم لتبادل البيانات بين التطبيقات. وبالنسبه للكود الذي قدمته: const url = await respon.json(); هذا السطر يتم فيه استخدام دالة json() على كائن respon و json() هي دالة تستخدم لتحويل نص إلى كائن JavaScript يمكنك استخدامه لاستخراج البيانات منه بحيث انك لن تستطيع التعامل مع الرد الذي تستمله بالصوره الطبيعيه لانه بيكون نص وليس object. يمكنك الاستزاده من خلال الاطلاع علي هذه المقاله.
  2. المسار النسبي للصورة هو عندما تكون الصورة في ملف منفصل عن ملف الـ CSS يجب أن يكون المسار الذي تستخدمه في ملف الـ CSS معتمدًا على مكان ملف الصورة بالنسبة لملف الـ CSS نفسه على سبيل المثال إذا كان ملف الصورة في نفس المجلد مع ملف الـ CSS يمكنك استخدام اسم الملف فقط كما هو ولكن في حال وجود الصوهرفي مكان اخر غير مكان ملف ال CSS هيتوجب عليك وصف المسار للصوره من بداية من وقوفك عند ملف ال CSS. عندما قمت بنقل الصور من ملف "photo" إلى ملف CSS مباشرة، ربما قد تمكنت من عرض الخلفية بنجاح لأن المسار النسبي للصورة أصبح مباشرًا بالنسبة لملف الـ CSS. هذا هو المقصود بأن الصور يجب أن تكون منتسبة إلى ملف الـ CSS. عندما يكون لديك ملف CSS وملف الصور في نفس المجلد أو في مجلد فرعي من نفس المجلد الذي يحتوي على ملف CSS، يمكنك استخدام مسارات نسبية دون الحاجة إلى تضمين مسارات مطلقة للصور. هذا يسهل الأمور عند نقل المشروع من مكان إلى آخر أو عند مشاركته مع الآخرين. إذا كانت الصور محتفظة في ملف CSS بجوارها أو في مجلد فرعي، فإن المسار النسبي سيظل صحيحًا حتى إذا قمت بنقل المجلد الرئيسي للمشروع إلى مكان آخر. لهذا السبب، يُفضل عادةً استخدام مسارات نسبية للصور والملفات الأخرى لتسهيل إدارة المشروع وتوزيعه.
  3. لمشكلة التي تواجهها تحدث بسبب استخدام متغير localStorage لتخزين معلومات تسجيل الدخول، وعدم تحديث الصفحة بشكل تلقائي بعد تسجيل الدخول أو تسجيل الخروج. لحل هذه المشكلة، يمكنك استخدام React Router لإعادة توجيه المستخدم تلقائيًا بعد تسجيل الدخول أو تسجيل الخروج. اولا في مكان استجابة نجاح تسجيل الدخول في ملف Login قم بتحديث الصفحة باستخدام navigate من React Router بعد تعيين البيانات في localStorage. قد يكون لديك شيء مشابه للتالي: const onSubmit = async e => { e.preventDefault(); axios.post('/api/auth/login', formData) .then(res => { localStorage.setItem("user", JSON.stringify(res.data)); navigate("/", { replace: true }); // قم بتحديث الصفحة بشكل تلقائي بدون إضافة سجل إلى سجل التصفح }) .catch(error => setError(error.response.data.message)); } ثاميا في مكان تنفيذ عملية تسجيل الخروج (مثل ملف Logout الذي قدمته)، قم بحذف البيانات من localStorage ومن ثم قم بتوجيه المستخدم إلى صفحة تسجيل الدخول باستخدام navigate: const logout = () => { localStorage.removeItem("user"); // قم بحذف البيانات من localStorage navigate('/login', { replace: true }); // قم بتحديث الصفحة بشكل تلقائي بدون إضافة سجل إلى سجل التصفح } بهذه الطريقة سيتم تحديث الصفحة بشكل تلقائي بعد تسجيل الدخول أو تسجيل الخروج دون الحاجة إلى إعادة تحميل الصفحة يدويًا.
  4. إذا كنت تقوم بإعداد الـ Overlay (التراكب) والـ Background (الخلفية) للـ Lightbox بالشكل الصحيح ولا ترى الصورة عند فتح الـ Lightbox، فإن هناك بعض الأسباب التي يمكن أن تكون وراء هذه المشكلة. إليك بعض الأمور التي يجب التحقق منها: التحقق من مسار الصورة: تأكد من أن مسار الصورة الموجود في ملف الـ CSS (img1.jpg) صحيح ويشير إلى الموقع الصحيح للصورة. يجب أن يكون المسار نسبيًا إلى ملف الـ CSS. إذا كان ملف الصورة في نفس المجلد مع ملف الـ CSS، فيمكنك استخدام اسم الملف فقط دون أي مسار. التحقق من تنسيق الصورة: تأكد من أن الصورة img1.jpg تحتوي على تنسيق صورة صالح مثل JPEG أو PNG. إذا كانت تصيغة الصورة غير صالحة، فإنها قد لا تعرض بشكل صحيح. التحقق من الأبعاد: قد يكون هناك تداخل في الأبعاد والأحجام المحيطة بالصورة والعناصر المحيطة بها في الـ Lightbox. تأكد من أن ارتفاع (height) وعرض (width) الـ Lightbox نفسهما معقولين وقد تم تعيينهما بشكل صحيح. يمكنك استخدام الـ inspect لمتابعة العناصر وفحص اذا كان المشكله فقط موجوده في الخلفيه ام ان من الاساس العنصر لا يظهر.
  5. هذا الكود يقوم بتحويل التواريخ من التقويم الميلادي إلى التقويم الهجري وعرضها على الصفحة. سأشرح الكود بالتفصيل من خلال تقسيمه الي وظائف (دوال) : isGregLeapYear(year): هذه الوظيفة تستخدم للتحقق مما إذا كان العام الميلادي هو سنة كبيسة أم لا. إذا كانت السنة كبيسة، ستعيد true وإلا ستعيد false. gregToFixed(year, month, day): هذه الوظيفة تقوم بتحويل تاريخ ميلادي إلى عدد ثابت يُمثل اليوم في التقويم الميلادي. تستند الوظيفة إلى مجموعة من الحسابات والتحويلات المعينة. Hijri(year, month, day): هذه الوظيفة تعرف كائن هجري جديد وتعبئه بالسنة والشهر واليوم المحدد. hijriToFixed(): هذه الوظيفة تقوم بتحويل تاريخ هجري إلى عدد ثابت يُمثل اليوم في التقويم الهجري. hijriToString(): هذه الوظيفة تقوم بإعادة تاريخ هجري بصيغة نصية، حيث يتم استخدام مصفوفة months لتمثيل أسماء الشهور. fixedToHijri(f): هذه الوظيفة تقوم بتحويل العدد الثابت إلى تاريخ هجري. يتم إنشاء كائن tod من نوع Date للحصول على التاريخ الحالي. تُعرف مصفوفتين weekday و monthname لتمثيل أسماء أيام الأسبوع وأشهر السنة. يتم الحصول على العام والشهر واليوم الحالي من كائن tod. يتم استدعاء الوظيفة gregToFixed لتحويل التاريخ الميلادي إلى عدد ثابت وتخزين النتيجة في متغير fixd. يتم إنشاء كائن h من نوع Hijri بتاريخ هجري ثابت (1421, 11, 28)، ثم يتم استدعاء الوظيفة fixedToHijri لتحويل العدد الثابت fixd إلى تاريخ هجري وتخزين النتيجة في المتغير h. يتم عرض التاريخ الميلادي المحدد مع أسماء اليوم والشهر والعام على الصفحة. يتم عرض التاريخ الهجري المحدد على الصفحة مع "م" (ميلادي) و"هـ" (هجري).
  6. إليك شرح لكل خصائص العنصر الذي ارسلته : autocomplete="on": عندما يتحقق المتصفح من أن هذا الخيار مفعل (on)، فإنه سيقترح تلقائيًا قيم مماثلة لهذا الحقل استنادًا إلى البيانات التي قد تكون قد أدخلتها في وقت سابق على سبيل المثال، عند إدخال اسم مستخدم في هذا الحقل قد تظهر قائمة من الأسماء المقترحة تلقائيًا. username-field: هذه الخاصية يبدو أنها مخصصة وربما تستخدم في مكان آخر في الكود أو في الجافا سكريبت يبدو أنها تمثل معلومة إضافية حول نوع الحقل وقد تكون مفيدة للأغراض البرمجية الخاصه بالمشروع نفسه. improve-input: هذه الخاصية تظهر أنها تمثل إجراءات إضافية لتحسين إدخال البيانات في الحقل يمكن أن تشمل هذه الإجراءات تصحيح الأخطاء الإملائية أو تنسيق البيانات ولكنها ايضامخصصة داخل المشروع. rm-white-spaces: هذه الخاصية تشير إلى أن الحقل سيقوم بإزالة الفراغات البيضاء (المسافات) من النص المدخل تلقائيًا يعني ذلك أن أي مسافات بيضاء في البداية أو النهاية أو بين الكلمات سيتم حذفها مع العلم هذه ليست خاصيه في html بل هي مخصصه ويتم التعامل معها من خلال جافاسكريبت. to-arabic-numbers: من الواضح ان هذه الخاصية تقوم بتحويل الأرقام في النص المدخل إلى أرقام عربية إذا كانت الأرقام بالأصل بالأحرف اللاتينية مع العلم هذه ليست خاصيه في html بل هي مخصصه ويتم التعامل معها من خلال جافاسكريبت. to-lower: هذه الخاصية تقوم بتحويل الأحرف في النص المدخل إلى أحرف صغيرة (حالة صغيرة) مع العلم هذه ليست خاصيه في html بل هي مخصصه ويتم التعامل معها من خلال جافاسكريبت. في المواقعالكبيره او المتوسطهه يقوم المطورين بانشاء او اضافة attributes مخصصه لكي يتمكنوا من التعامل مع حالات معينه اثناء تجرة المستخدم المختلفه. لمعرفة المزيد عن خصائص عناصر HTML يمكنك زيارة التوثيق الخاص ب HTML .
  7. تستطيع فهم وتمييز الدوال المختلفه من خلال اسم الداله ولذلك ينصح بكتابة اسم يدل علي وظيفة الداله الاساسيه وايضا يمكنك كتابة تعليق عند بداية كل داله تشرح فيه الهدف منها و وظيفتها ليسهل عليك عملية فهم البرنامج فيما بعد.
  8. يمكنك عمل استعلام واحد لاسترجاع بيانات المنشورات مع تعليقاتها المرتبطة من خلال استخدام عبارة JOIN للانضمام بين جدولي المنشورات والتعليقات باستخدام العمود المشترك بينهما وهو post_id. واليك مثال على كيفية عمل ذلك: SELECT posts.*, comments.* FROM posts LEFT JOIN comments ON posts.post_id = comments.post_id; في هذا الاستعلام سيتم استرجاع جميع السجلات من جدول المنشورات (باستخدام posts.*)وسيتم أيضًا انضمام التعليقات المرتبطة من جدول التعليقات (باستخدام comments.*) باستخدام LEFT JOIN بناءً على post_id وإذا لم يكن هناك تعليقات متطابقة فستكون القيم في جدول التعليقات فارغة.
  9. لكي تستطيع أن تحتفظ بالتوالي بقيم الـX والـO بالشكل الصحيح في لوحة اللعبة لديك بعض الأخطاء في الكود التي قد تؤدي إلى عدم العمل الصحيح للعبة سأساعدك على تصحيحها وشرح ما تم تعديله. المشكلة 1: هناك مشكلة في توالي تبديل اللاعبين X و O الكود كان يحاول تغيير اللاعب بناءً على حالة الخلية الحالية ولكن هذا لا يعمل بشكل صحيح ولكي يتم حل المشكله قم باستخدام متغير cont لتتبع اللاعب الحالي عندما يتم الضغط على خلية صالحة سيتم تغيير اللاعب الحالي من "X" إلى "O" والعكس باستخدام هذا الشرط: cont = "o" if cont == "x" else "x" المشكلة 2: يوجد مشكلة في التحقق من حالة الخلية قبل تغييرها يجب عليك التحقق مما إذا كانت الخلية فارغة قبل تغييرها لتقوم بحل هذه المشكله قم بإضافة هذا الشرط: if fullgame[inp] == " ": fullgame[inp] = cont للتحقق مما إذا كانت الخلية الحالية فارغة قبل تغييرها إذا كانت الخلية محجوزة سيتم طباعة رسالة تعلم اللاعب بأنه يجب اختيار رقم آخر. هذا الكود كامل بعد التعديل : fullgame = {1: " ", 2: " ", 3: " ", 4: " ", 5: " ", 6: " ", 7: " ", 8: " ", 9: " "} def if_is_equal(a, b, c): if a == b == c and b != " ": print(f'Game over! Player {b} wins!') return True return False cont = "x" while True: # عرض لوحة اللعبة for i in range(1, 10): print(fullgame[i], " |", end=" ") if i % 3 == 0: print("\n-------------") inp = int(input("Enter number: ")) # التحقق من صحة الرقم if inp > 9: print("The number is greater than the limit (1 to 9). Please try again.") continue # التحقق من احتلال الخلية if fullgame[inp] == " ": fullgame[inp] = cont # التحقق من انتهاء اللعبة if if_is_equal(fullgame[1], fullgame[2], fullgame[3]) or \ if_is_equal(fullgame[4], fullgame[5], fullgame[6]) or \ if_is_equal(fullgame[7], fullgame[8], fullgame[9]) or \ if_is_equal(fullgame[1], fullgame[4], fullgame[7]) or \ if_is_equal(fullgame[2], fullgame[5], fullgame[8]) or \ if_is_equal(fullgame[3], fullgame[6], fullgame[9]) or \ if_is_equal(fullgame[1], fullgame[5], fullgame[9]) or \ if_is_equal(fullgame[3], fullgame[5], fullgame[7]): break # تغيير اللاعب الحالي cont = "o" if cont == "x" else "x" else: print("This cell is already occupied. Please choose another number.") ستعمل معك اللعبه بشكل صحيح كما هو موضح بالصوره:
  10. بالفعل لغة PHP طلبها بشكل واسع في مجال تطوير مواقع الويب والتطبيقات، ولكن في مجال تطبيقات الجوال ليست مطلوبة بنفس الشكل الكبير كما هو الحال في تطوير المواقع ولكن يظل الطلب موجود مع توجهه نسبه من الشركات الي حلول اخري مثل Firebase لكن هذا لا يقلل من الطلب الموجود علي PHP.
  11. نعم يمكنك استخدام PHP كـ back-end لتطبيقات Flutter يمكنك استخدام PHP لإنشاء API لتقديم البيانات والخدمات لتطبيقات Flutter ومن خلال استخدام البيانات المرسله بواسطة ال API يمكنك عرضها بالشكل المناسب للتطبيق الخاص بك. بالنسبة لجودة PHP مقارنةً بالإطار Firebase فإن الجودة تعتمد على كيفية تنفيذ وتصميم النظام Firebase هو خدمة تُقدمها Google تتضمن الكثير من الأدوات والخدمات المتكاملة لتطوير التطبيقات، بينما PHP يمكن أن يُستخدم في تطوير الجزء الخلفي بطرق مختلفة، بما في ذلك إنشاء خوادم مخصصة بمعني ان الموضوع متوقف علي متطلبات التطبيق وعدة جوانب تحددها علي حسب امكانيات التطبيق نفسه Firebase قد تكون مفيدة إذا كنت بحاجة إلى سرعة التطوير واستخدام خدمات جاهزة مثل قاعدة البيانات والمصادقة والتحليلات أما PHP فتُمكنك من بناء حلول مخصصة ومرنة وفقًا لاحتياجاتك الخاصة. بالنسبة للسوق العمل فإن مهارات تطوير الـ back-end مطلوبة بشكل عام سوق العمل يحتاج إلى مطورين متخصصين في الـ back-end باستخدام مختلف التقنيات بما في ذلك PHP وبالطبع هذا بيختلف من بلد الي اخري لكن في الوطن العربي بالنسبه ل PHP فهو مطلوب بشكل كبير.
  12. يمكنك مشاهدة هذا المقطع للفهم بشكل اوضح الطريقه الصحيحه لرفع موقعك باستخدام github pages.
  13. يمكنك استخدام خدمة إستضافة الويب المجانية لرفع ملفات HTML الخاصة بك والوصول إليها عبر رابط يوفر هذا حل بسيط لمشاركة الكود وعرضه على الإنترنت. تستطيع القيام بذلك من خلال بعض الخطوات البسيطه: قم بالتسجيل في خدمة استضافة ويب مجانية. هناك العديد من الخيارات المتاحة مثل GitHub Pages و Netlify و Firebase Hosting. انصحك باستخدام GitHub Pages لانها من اسهل الخدمات لاستضافة المواقع البسيطه يمكنك معرفة الطريقه من خلال الاجوبه هنا بعد التسجيل وإنشاء حسابك، قم بتحميل ملف HTML الخاص بك إلى الخدمة المستضافة ستحصل على رابط يمكنك مشاركته مع الآخرين للوصول إلى الملف الخاص بك. وبالنسبه لحماية الموقع ومن الدخول الا من خلال اشخاص معينه فهذا امر متقدم نسبيا ويحتاج الي المزيد من التفاصيل ولكن يمكنك اللجو الي حل بسيط وهو عمل صفحه لتسجيل الدخول ومن اي شخص لا يمتلك معلومات التسجيل من الدخول الي الموقع وروية المحتوي الخاص فيه.
  14. مرحبا يا صديقي، في الغالب الاختبارات التي تتعرض لها في الشركه تكون بشروط مثل انك تنفذ مهمه معينه باستخدام تقنيات محدده او بدون اللجوء الي استخدام مكتبه جاهزه ولكن هذه المرحله تكون متقدمه في البدايه بيتم النظر الي معرض اعمالك والي ملفك الشخصي علي منصه مثل github حتي يتم النظر في طريقة كتابتك للكود. مع العلم انه في اكثر الشركات يكون مطلوب العمل باستخدام مكتبات جاهزه حتي يتم تسريع عملية اتمام المشاريع بدون الحاجه الي اعادة بناء كل شيء مره اخري في كل مشروع. شكرا لك.
  15. صحيح يمكنك استخدام مكتبة pyttsx3 في Google Colab. لكن هناك بعض الخطوات التي يجب اتباعها للتأكد من أن المكتبة تعمل بشكل صحيح. أولاً قم بتثبيت المكتبة في كود Google Colab قبل استخدامها. يمكنك فعل ذلك عن طريق تنفيذ الامر التالي: !pip install pyttsx3 تحقق من أن الصوت قابل للتشغيل على Google Colab. ليست جميع المتصفحات والأجهزة قادرة على تشغيل الصوت في Google Colab. قد تحتاج إلى التحقق من ذلك على جهاز آخر أو استخدام متصفح آخر. الكود الذي قم بارساله صحيحًا ويعمل بشكل جيد عند استخدامه على جهاز محلي. إذا لم تعمل هذه الخطوات يمكن أن يكون المشكلة في قدرة Colab على تشغيل الصوت. في هذه الحالة يمكنك محاولة تشغيل الكود على جهاز محلي للتحقق مما إذا كانت المشكلة في الكود نفسه أم في قدرة المتصفح على تشغيل الصوت.
×
×
  • أضف...