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

Mustafa Suleiman

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

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

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

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

    445

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

  1. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، ولكن إليك خطوات الحل: يجب تعريف نموذج للعميل يحتوي على المعلومات اللازمة مثل الاسم، رقم الحساب، الرصيد الحالي، إلخ. تعريف نموذجين منفصلين للحساب الشخصي والحساب الشركة، كل واحد يحتوي على الحقول الخاصة به. إنشاء قاعدة بيانات لتخزين معلومات العملاء، وتستطيع استخدام قاعدة بيانات SQL أو أي نظام تخزين آخر يدعم العمليات الأساسية مثل الإدخال والاستعلام والتحديث والحذف. كتابة برنامج باستخدام لغة C# لتنفيذ العمليات المطلوبة، واستخدام أنواع البيانات والهياكل التحكم المناسبة لتنفيذ العمليات المختلفة. تنفيذ العمليات الأساسية مثل السحب، الإيداع، عرض رصيد العميل، حذف العميل، وفقًا للطلبات المحددة. يتم استخدام عمليات قاعدة البيانات لإضافة وتحديث واستعلام البيانات الخاصة بالعملاء. تمديد النموذج والبرنامج لدعم تعريف نوعين مختلفين من العملاء، ويمكن إضافة حقول إضافية للنموذج للعملاء الشركة وتعديل البرنامج ليتعامل مع هذه الحالة بشكل صحيح. بعد اتباع هذه الخطوات، سيتمكن البرنامج من تنفيذ العمليات الأساسية التالية ضمن البنك: السماح للمستخدم بإدخال مبلغ يرغب في سحبه من حسابه، ثم يقوم البرنامج بتحديث رصيد الحساب وتخزين التغيير في قاعدة البيانات. يستطيع للمستخدم بإدخال مبلغ يرغب في إيداعه في حسابه، ثم يقوم البرنامج بتحديث رصيد الحساب وتخزين التغيير في قاعدة البيانات. السماح للمستخدم بإدخال رقم حساب العميل، ثم يقوم البرنامج بجلب معلومات العميل من قاعدة البيانات وعرض رصيده الحالي. إمكانية إدخال رقم حساب العميل الذي يرغب في حذفه، ثم يقوم البرنامج بحذف معلومات العميل من قاعدة البيانات. وإذا أردت توضيح بخصوص الخطوات السابقة أخبرني.
  2. يمكنك مساعدتك بخطوات الحل لكونه سؤال إختباري: استخدمي import لاستيراد المكتبات التي ستستخدمها في البرنامج، مثل smtplib لإرسال البريد الإلكتروني وrandom لإنشاء كود عشوائي للطالب. بتعريف المتغيرات التي ستحتوي على معلومات البريد الإلكتروني مثل البريد الإلكتروني وكلمة المرور ومعلومات الخادم البريدي. إنكتابة دالة تستخدم المكتبة random لإنشاء كود عشوائي يتم إرساله إلى الطالب، وقد يكون هذا الكود مكونًا من أحرف وأرقام عشوائية. كتابة دالة تستخدم المكتبة smtplib لإرسال البريد الإلكتروني، تستطيعي استخدام معلومات البريد الإلكتروني وكلمة المرور ومعلومات الخادم البريدي المعرفة مسبقًا لإرسال رسالة بريد إلكتروني تحتوي على الكود العشوائي إلى الطالب. كتابة رمز لقراءة معلومات الطالب مثل الاسم والبريد الإلكتروني وغيرها، وقومي بتخزينها في المتغيرات المناسبة. استدعِ الدالة التي تنشئ الكود العشوائي واستدعِ الدالة التي ترسل البريد الإلكتروني بمعلومات الطالب. إدراج تعليمات للتحقق من نجاح إرسال البريد الإلكتروني، باستخدام معلومات الرد التي توفرها مكتبة smtplib للتحقق من أن البريد الإلكتروني تم إرساله بنجاح، عورض رسالة تأكيد إذا تم إرسال البريد الإلكتروني بنجاح، أو رسالة خطأ إذا حدثت مشكلة أثناء الإرسال. تنسيق رسالة البريد الإلكتروني بشكل مناسب، يمكن أن تحتوي على التحية وتوضيح للطالب بأنه تم إنشاء إيميل رسمي له ويحتوي على الكود العشوائي، وتستطيعي استخدام تنسيق السلاسل في بايثون (مثل format()) لإدراج متغيرات الطالب في رسالة البريد الإلكتروني. اختبار البرنامج عن طريق إدخال معلومات طالب والتأكد من أن البريد الإلكتروني يتم إرساله بنجاح ويحتوي على الكود العشوائي.
  3. المطلوب هو تصميم موقع بسيط من خلال HTML و CSS و جافاسكريبت، وطالما أنه سؤال إختباري فعليك بالإجتهاد في تنفيذه، وتستطيعي طرح الأسئلة هنا لأي مشكلة تواجهك أثناء تنفيذ المشروع. وأنصحك بقراءة المقالات التالية فهي ستمكنك من تنفيذ المشروع في حال قمتي بدراستها:
  4. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، ولكن يمكن مساعدتك بخطوات الحل: خطوات الحل لكل سؤال بشكل عام هي: قبل بدء كتابة الخوارزمية ورسم خريطة التدفق، يجب أن تفهمي المشكلة جيدًا وما المطلوب من البرنامج. يجب معرفة المدخلات التي ستتلقاها الخوارزمية والمخرجات التي يجب أن تقوم الخوارزمية بإنتاجها. استنادًا إلى فهمك للمشكلة ومتطلبات المدخلات والمخرجات، عليك بتصميم خوارزمية تقوم بحل المشكلة بالطريقة المطلوبة. استخدمي لغة البرمجة المناسبة لكتابة الخوارزمية بناءً على التصميم الذي قمت به، ويجب أن تتضمن الخوارزمية تعليمات وأوامر للتحكم في التدفق والتكرار حسب الحاجة. بعد كتابة الخوارزمية، قم برسم خريطة التدفق الخاصة بها، وتستطيعي استخدام رموز معينة لتمثيل العمليات والشروط والتحكم في التدفق. قومي بتشغيل البرنامج واختباره باستخدام مدخلات مختلفة للتحقق من صحة عمله واحتمالية حدوث أخطاء. إذا كان هناك أي أخطاء أو أداء ضعيف، عليك بتحسين الخوارزمية وكرر عملية الاختبار والتحسين حتى تصلي إلى النتيجة المرجوة. وكمساعدة في السؤال الأول عليك باستخدام حلقة تكرارية (حلقة while أو for) تستمر حتى "number" يصبح أكبر من 20، وفي السؤال الثاني حلقة تكرارية (حلقة while أو for) تستمر حتى "number" يصبح أكبر من 30. وأكملي باقي الخطوات للخوارزمية حيث يجب تعيين متغير في البداية بقيمة معينة، والخورازمية لا تكون بالتفصيل بل تكون نقاط عامة عن كيفية تنفيذ البرنامج وليست بالتفصيل فمثلاً في السؤال الأول تستطيعي كتابة أحد النقاط كالتالي : داخل الحلقة، فحص ما إذا كان "number" زوجي أم لا.
  5. الكود الذي قمت بكتابته يقوم ببعض الحسابات الخاطئة ولا يتوافق تمامًا مع المتطلبات المحددة. إليك بعض المشكلات في الكود: لا تقوم بفحص إذا ما كان الزبون اشترى أكثر من 2 عناصر عند حساب الخصم. يجب أن يكون لديك شرط يحدد إذا ما كان العدد أكبر من 2 قبل حساب الخصم. في حل case 1 و case 2، يجب أن يكون الخصم 7% وليس 10%. يجب عليك تعديل القيمة المستخدمة في حساب الخصم. في حساب الخصم لأي عنصر يتجاوز سعره 7 JOD، يجب أن تضيف 1% من سعر العنصر للخصم وليس من الإجمالي الكلي للفاتورة، لذلك قم بتعديل الجزء المتعلق بهذا الحساب. لا يتم احتساب الخصم الإضافي للعملاء الذين قاموا بشراء أكثر من عنصرين وإجمالي الفاتورة يتجاوز 20 JOD، عليك بإضافة الخصم الإضافي البالغ 5% للقيمة المناسبة. الكود لا يقوم بتحديد الحد الأقصى للخصم والذي يجب أن يكون 50% من الفاتورة الإجمالية، ويجب أن تقوم بفحص القيمة المحسوبة للخصم وإعادة تعيينها إلى القيمة المحددة في حالة تجاوز الحد الأقصى. حاول تعديل الكود من خلال النقاط السابقة، وتوفير الكود بعد تعديله وسيتم مساعدتك في الحل. القسم الخاص بمقالات لغة c في أكاديمية حسوب.
  6. هناك بعض التنبيهات التي تظهر لك، وتتعلق بالتكامل مع مكتبة XR Interaction Toolkit، وتشير إلى وجود تعارض في استخدام المصدات الفعَّالة (Colliders) بين الكائنات التفاعلية (Interactable objects) المختلفة، وهناك Collider يتم استخدامه بالفعل من قبل كائن تفاعلي آخر. الأسباب المحتملة لحدوث هذه الأخطاء هي: قد يكون هناك انتهاك لقواعد التصادم (Collision) في المشهد، حيث يتم تسجيل مصدات (Colliders) متعددة لكائن واحد. هناك تداخل في استخدام مصدات الكائنات التفاعلية بين مكونات المشهد المختلفة أو النماذج المستوردة. حاول اتباع الخطوات التالية لحل المشكلة: قم بمراجعة المشهد الخاص بك وتأكد من عدم وجود أي تداخل في استخدام المصدات بين الكائنات التفاعلية المختلفة. قم بالتحقق من الكائنات التفاعلية المذكورة في الأخطاء وتأكد من أن المصدات المستخدمة لكل منها فريدة ولا يتم استخدامها بالفعل من قبل كائن تفاعلي آخر. تأكد من أن الطبقة التفاعلية (Interaction Layer) للكائنات مع المشكلة معينة هي "Teleport". يمكنك التحقق من ذلك في إعدادات الكائن التفاعلي. قد يكون هناك تداخل في الترميز أو المكونات المستخدمة في المشروع. قم بمراجعة البرمجة والتأكد من أن الأشياء المختلفة التي تستخدم المصدات لديها تعيينات فريدة وصحيحة. إذا استمرت المشكلة، قد تحتاج إلى مراجعة البرمجة الخاصة بك والتأكد من أن الكائنات التفاعلية والكائنات التفاعلية والمصدات الخاصة بها تم تهيئتها واستخدامها بطريقة صحيحة. أيضًا عليك بالتحقق من سلسلة الأحداث والتوقيتات التي تقوم فيها بتفعيل وتعطيل الكائنات التفاعلية والمصدات، وتحقق من النقاط التالية: تأكد من أن كل كائن تفاعلي لديه مصدات فريدة وليست متشابهة مع مصدات كائنات تفاعلية أخرى. بمراجعة البرمجة المرتبطة بالأحداث التي تنشط وتعطل فيها الكائنات التفاعلية والمصدات. تأكد من عدم تسجيل نفس المصدات في أكثر من كائن تفاعلي في نفس الوقت. فحص أي مكونات إضافية متواجدة في المشهد أو المشروع التي قد تتداخل مع نظام التفاعل. ابحث عن أي تعارضات في استخدام المصدات بين هذه المكونات والكائنات التفاعلية. قد يكون من المفيد إعادة تشغيل Unity وإعادة تحميل المشهد من الصفر. قد تكون هناك حالة تشغيل سابقة تؤثر على استخدام المصدات في الحالة الحالية. إذا كنت تستخدم مكتبات أو حزم إضافية، تأكد من تحديثها إلى أحدث إصداراتها، فقد تكون هناك تحسينات أو إصلاحات لمشكلة مماثلة تم تصحيحها في التحديثات الأحدث.
  7. تستطيع استخدام السكريبتات والتحكم بمكونات اللعبة لتنفيذ هذا النوع من الحركات، وإليك مثال بسيط لكيفية تنفيذ حركة لفتح باب المكتب عندما يتم توجيه الجهاز والضغط على زر الإمساك: 1- قم بإنشاء كائن في الساحة يمثل الباب. 2- إضافة مكون RigidBody إلى الكائن الذي يمثل الباب. هذا المكون سيمكّن الباب من التفاعل مع القوى الفيزيائية مثل الجاذبية والتصادم. 3- إنشاء سكريبت جديد وربطه بكائن الباب. يمكنك أن تسميه، على سبيل المثال، "DoorController". 4- في داخل السكريبت، أنشئ متغيرات لتخزين المكونات اللازمة. قم بتعيين قيمة افتراضية للمتغيرات في دالة Start(): private Rigidbody doorRigidbody; private bool isDoorOpen = false; void Start() { doorRigidbody = GetComponent<Rigidbody>(); } 5- في دالة Update()، قم بفحص حالة الجهاز وزر الإمساك. إذا تم توجيه الجهاز نحو الباب وتم الضغط على زر الإمساك، قم بتغيير حالة الباب لتكون مفتوحة وتطبيق قوة لفتح الباب: void Update() { // قراءة إدخالات الجهاز float horizontalInput = Input.GetAxis("Horizontal"); float verticalInput = Input.GetAxis("Vertical"); bool grabInput = Input.GetButtonDown("Grab"); // تحقق مما إذا تم توجيه الجهاز للباب وتم الضغط على زر الإمساك if (horizontalInput > 0 && grabInput) { // فتح الباب isDoorOpen = true; // تطبيق قوة لفتح الباب Vector3 force = transform.right * 100f; // تعديل القوة حسب الحاجة doorRigidbody.AddForce(force); } } 6- قم بتعليق السكريبت على كائن الباب في Unity Inspector لكي يتم تنفيذه في اللعبة. انتقل إلى نافذة Unity وحدد كائن الباب في الساحة، ثم ابحث عن المكون "DoorController" في مربع الكومبو الموجود في Inspector، وسحب السكريبت وإفلاته على المكون "DoorController" لتعليق السكريبت على الكائن. 7- تكوين إدخالات المحور وزر الإمساك في Unity لتفعيل الحركة. في لوحة المشروع، انتقل إلى قسم "Input" في الإعدادات. قم بإنشاء محورين لتمثيل حركة الجهاز عن طريق الاختيار الأفقي والرأسي، أيضًا أنشيء زر لتمثيل زر الإمساك. قم بتعيين الأزرار والمحاور المعرفة في السكريبت في الخطوة 5 إلى إدخالات المحور وزر الإمساك الخاصة بها في لوحة المشروع. 8- قم بتجريب اللعبة من خلال الضغط على زر اللعب في Unity لتشغيل اللعبة وتجربة الحركة. عند توجيه الجهاز نحو الباب والضغط على زر الإمساك، يجب أن يتم فتح الباب وتطبيق القوة لفتحه.
  8. هناك بعض المواقع الأخرى بالإضافة إلى ما تم ذكره: https://assetstore.unity.com/?q=free&orderBy=1 https://craftpix.net/freebies/ https://mixkit.co/free-after-effects-templates/animated/ https://dribbble.com/tags/2d animation https://itch.io/game-assets/free https://www.videezy.com/free-video/2d-animation https://shareae.com/tags/2d/ https://www.vecteezy.com/free-videos/2d-animations https://aedownload.com/ https://kenney.nl/assets https://www.kinetictext.com/freebies/ وتستطيع أيضًا صور من نوع Vector للتصميم من البداية، حيث تُستخدم الصور النوعية (Vector Images) في Adobe Animate للتصميم والتحريك بطرق مختلفة، وتتيح هذه الصور مزيدًا من المرونة والقابلية للتعديل والتحريك. إليك الخطوات الأساسية لاستخدام الصور النوعية في Adobe Animate: قم بإنشاء ملف جديد في Adobe Animate. اختر أداة Pen Tool أو Shape Tool لرسم الصور النوعية. بعد الانتهاء من الرسم، انتقل إلى لوحة الخصائص Properties Panel وحدد النوعية الناعمة (Smooth) أو النوعية الحادة (Sharp) للصورة. يمكنك تحريك الصورة ببساطة باستخدام أداة Selection Tool. لتغيير حجم الصورة دون فقدان جودتها، قم بتحريك الـ Anchor Point في لوحة الخصائص. أيضًا تستطيع إنشاء حركات بديهية للصورة باستخدام أداة Motion Editor.
  9. تستطيع طباعة ما تريده داخل echo كالتالي: <!DOCTYPE html> <html> <head> <title>مثال</title> </head> <body> <code> <?php echo htmlspecialchars('<?php echo " النص النص النص"; ?><br><input type="button" value="">'); ?> </code></body> </html> لاحظ استخدام دالة htmlspecialchars() لتحويل الرموز الخاصة إلى entities ومنع تفسير الكود بواسطة المتصفح.
  10. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، ولكن يمكن إرشادك لطريقة الحل، وأيضًا لم يتم توضيح ما هي اللغة المستخدمة في البرنامج وهل مطلوب استخدام قاعدة بيانات؟ أرجو توضيح ما المطلوب لمساعدتك بشكل أفضل. وعلي أي حال، إليك الخطوات المطلوبة لتفعيل كل خدمة في البرنامج هي كالتالي: 1- لتفعيل خدمة إضافة طالب طلب من المستخدم إدخال تسلسل الرقم الجامعي للطالب الذي يريد إضافته. إنشاء كائن من الصف الطالب (class student) باستخدام البيانات التي يدخلها المستخدم، مثل الاسم والرقم الجامعي والكلية والمعدل السنوي. تسلسل الرقم الجامعي للطالب الجديد بحسب الرقم الذي يدخله المستخدم. 2- لتفعيل خدمة البحث عن طالب طلب من المستخدم اختيار طريقة البحث المرغوبة، سواء كان البحث بالرقم الجامعي أو الاسم. استرجاع بيانات الطالب المطابقة للبحث، مثل الاسم والرقم الجامعي والكلية والمعدل السنوي. 3- لتفعيل خدمة حذف بيانات طالب طلب من المستخدم إدخال رقم الجامعي للطالب الذي يريد حذفه. البحث عن الطالب المطابق للرقم الجامعي ويتم حذف بياناته. 4- لتفعيل خدمة الفرز حسب معيار محدد طلب من المستخدم اختيار معيار الفرز المطلوب، سواء كان الفرز بالرقم الجامعي أو الاسم أو السنة الدراسية أو الكلية أو المعدل السنوي. فرز القائمة الحالية من الطلاب بناءً على المعيار المختار. 5- لتفعيل خدمة طباعة قوائم الطلاب طباعة قائمة بجميع الطلاب المسجلين بالبرنامج، ويتضمن ذلك بيانات كل طالب مثل الاسم والرقم الجامعي والكلية والمعدل السنوي.
  11. هذا ما يظهر لي في المتصفح عزيزي وأظن أن هذا هو ما طلبته أنت، وإذا كان غير ذلك فأرجو توضيح المطلوب بالضبط.
  12. تستطيع استيراد الفيديو ولكن لن تستطيع التعديل عليه أي أنه سيعمل كفيديو فقط، وإذا أردت التعديل على المجسمات التي تظهر في الفيديو فعليك بتحميلها ووضعها في البرنامج. وذلك من خلال بعض المواقع التي توفر مجسمات ثلاثية الأبعاد لبرنامج Blender بشكل مجاني 3D Bender Models، ومنها: https://3dsky.org/ https://open3dmodel.com/3d-models/blender https://sketchfab.com/features/free-3d-models?ref=footer https://www.blendswap.com/ https://free3d.com/3d-models/blender https://www.cgtrader.com/free-3d-models/blender https://www.blenderkit.com/get-blenderkit/ https://sketchfab.com/tags/blender https://www.blendernation.com/category/art/free-blender-models/ https://www.turbosquid.com/Search/3D-Models/free/blend
  13. يبدوا أنني فهمت سؤالك بشكل غير صحيح، في تلك الحالة، عليك باستخدام الكود التالي: <!DOCTYPE html> <html> <head> <title>مثال</title> </head> <body> <code><?php echo "echo النص النص النص;" ?></code> </body> </html>
  14. بإمكانك استخدام علامات الـ "pre" في HTML و "pre" في CSS للحفاظ على تنسيق النص عند الطباعة، وبالتالي يتم عرض النص بدون ترجمته في المتصفح. <!DOCTYPE html> <html> <head> <title>مثال</title> <style> pre { white-space: pre-wrap; font-family: inherit; font-size: inherit; margin: 0; } </style> </head> <body> <pre> echo "النص النص النص"; ? </pre> </body> </html>
  15. حاول استخدام المجموعات (Groups) والمجموعات الديناميكية (Dynamic Groups) في Unity. 1- المجموعات الثابتة (Static Groups) تعد المجموعات الثابتة مفيدة عندما تريد تجميع العناصر التي تكون دائمًا في نفس المكان في اللعبة، والتي لا يتم تحريكها أو تغيير موقعها. لإنشاء مجموعة ثابتة في Unity. وتستطيع اختيار الكائنات التي تريد تجميعها في hierarchy ومن ثم النقر بزر الماوس الأيمن واختيار "Create Empty Group"، ثم تسمية المجموعة وسحب الكائنات المراد تجميعها داخلها. 2- المجموعات الديناميكية (Dynamic Groups) تستخدم المجموعات الديناميكية في Unity عندما تريد تجميع العناصر التي قد يتم تحريكها أو تغيير موقعها في اللعبة. وبإمكانك إنشاء مجموعة ديناميكية في Unity بالتحديد نفس طريقة إنشاء مجموعة ثابتة، ولكن يجب تمكين الخاصية "Dynamic" في إعدادات المجموعة الديناميكية. بمجرد إضافة الكائنات إلى المجموعة الديناميكية، تستطيع تحريك المجموعة بأكملها وستتحرك الكائنات الموجودة داخلها معًا.
  16. بالطبع تستطيعي ذلك، أرجو منك الضغط على اسم الحساب الخاص بك بالأعلى ثم إختيار إعدادات الحساب، بعد ذلك سيظهر لك البريد الإلكتروني وبجانبه تغيير وسيظهر لك صفحة أخرى لإضافة بريد إلكتروني آخر بالإضافة للموجود وستتمكني بتسجيل الدخول من خلاله.
  17. لنبدأ من البداية، عليك بتثبيت مكتبة fontawesome في مشروع React بالشكل التالي: npm i --save @fortawesome/fontawesome-svg-core ثم عليك بتثبيت شكل الأيقونات الذي تريد استخدامه سواء solid أو regular بالشكل التالي: npm i --save @fortawesome/free-solid-svg-icons npm i --save @fortawesome/free-regular-svg-icons والآن لنقوم بتثبيت مكون Font Awesome React component بأخر إصدار: npm i --save @fortawesome/react-fontawesome@latest والآن عليك تثبيت إضافة Babel Macros من أجل استيراد الأيقونات بشكل Dynamic: npm install babel-plugin-macros ثم أنشأ ملف باسم babel.config.js في حالة لم يكن موجود وأضف إليه التالي: module.exports = function (api) { return { plugins: ['macros'], } } ثم قم بإنشاء ملف باسم babel-plugin-macros.config.js وأضف إليه التالي: module.exports = { 'fontawesome-svg-core': { 'license': 'free' } } والآن تستطيع إضافة الأيقونات في مشروع React بالشكل التالي: import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { icon } from '@fortawesome/fontawesome-svg-core/import.macro' <FontAwesomeIcon icon={icon({name: 'user-secret'})} /> // Defaults to the Classic family, Solid style <FontAwesomeIcon icon={icon({name: 'coffee', style: 'regular'})} /> // Defaults to Classic family <FontAwesomeIcon icon={icon({name: 'coffee', family: 'sharp', style: 'solid'})} /> // Setting both family and style <FontAwesomeIcon icon={icon({name: 'twitter', style: 'brands'})} /> // A brand icon ولاحظ استخدام brands في style ، ففي مكتبة FontAwesome ، "brands" هي مصطلح يستخدم للإشارة إلى العلامات التجارية (brands) التي تمثل شركات ومنظمات وشبكات اجتماعية معينة، مثل Twitter وFacebook وغيرها. ويتم استخدام هذا المصطلح في الرموز الخاصة بالعلامات التجارية في FontAwesome لتمييزها عن الرموز العادية (solid) أو الناعمة (regular) أو الخطية (light). وهذا يشير إلى أن الأيقونة المطلوبة هي من فئة العلامات التجارية (brands) ، بدلاً من الرموز العادية أو الناعمة، وبالتالي ، سيتم عرض الأيقونة المناسبة لـ "تويتر" كأيقونة من فئة العلامات التجارية (brands). وأرجو منك قراءة المستندات الخاصة بمكتبة FontAwesome فبها شرح عن كيفية استخدامها في React: https://fontawesome.com/v6/docs/web/use-with/react https://fontawesome.com/v6/docs/web/use-with/react/add-icons
  18. نعم يجب إدخال نفس البريد الإلكتروني الذي تم من خلال الإشتراك بالدورات، وأرجو منك مشاهدة الفيديوهات التالية:
  19. الحل الأسهل استخدام إضافة إذا كنت تستخدم وورد بريس أو تنزيل مكتبة إذا كنت تطور موقع خاص بك. أما إذا كنت تريد الكود، فإليك كود HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Share on WhatsApp</title> <style> .whatsapp-share-button { display: inline-block; text-align: center; background-color: #25d366; color: #fff; border-radius: 4px; padding: 8px; font-weight: bold; text-decoration: none; box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2); font-size: 16px; } .whatsapp-share-button:hover { background-color: #128c7e; } </style> </head> <body> <a class="whatsapp-share-button" href="https://api.whatsapp.com/send?text=Enter%20your%20message%20here&phone=whatsapp_number_with_country_code" target="_blank">Share on WhatsApp</a> </body> </html> وإليك كود جافاسكريبت لتحديث الرابط المراد مشاركته مع الرسالة: <script> function shareOnWhatsApp() { const text = "Enter your message here"; const url = "https://www.example.com/image.jpg"; const message = encodeURIComponent(text) + " - " + encodeURIComponent(url); const whatsapp_url = "https://api.whatsapp.com/send?text=" + message; window.open(whatsapp_url); } document.querySelector('.whatsapp-share-button').addEventListener('click', shareOnWhatsApp ); </script> ثم يتم استدعاء الدالة "shareOnWhatsApp()" عند النقر على زر مشاركة الواتساب: ويجب استبدال "Enter your message here" بالنص الذي تريد مشاركته و"https://www.example.com/image.jpg" بالرابط الخاص بالصورة أو المنشور أو الفيديو الذي تريد مشاركته.
  20. لا تقلق عزيزي بخصوص هذا الأمر، حيث يوجد مشكلة بسيطة يتم حلها الآن عليك فقط بإرسال رسالة لمركز المساعدة الخاص بأكاديمية حسوب وسيتم حل المشكلة ولكن أرجو منك الإنتظار لبعض الوقت قد تتراوح ما بين 24 إلى 48 ساعة لحين حل المشكلة. وعند التوجه لمركز المساعدة عليك بإدخال البريد الذي قمت بالإشترك من خلاله بالدورة، ثم سيصلك كود تأكيد على البريد قم بإدخاله وستظهر لك نافذة المحادثة. وأرجو مراجعة قائمة دوراتي في حسابك وتفقد الدورة. كيف أصل للدورات التي اشتركت بها
  21. عند استخدام الدالة setInterval ، يتم استدعاؤها بشكل متكرر كل 1000 مللي ثانية (1 ثانية) وتقوم بتحديث حالة الـ timer. ومع ذلك، يمكن أن يحدث تأخير في عملية تحديث الحالة، وهذا يؤدي إلى تجاوز قيمة timer المرتقبة بشكل خاطئ. لذلك باستطاعتك استخدام دالة الـ useEffect لتحديث قيمة الـ timer بشكل دقيق بعد انتهاء الـ interval. const [timer, setTimer] = useState(0); const format = (time) => { let hours = Math.floor((time / 60 / 60) % 24); let minutes = Math.floor((time / 60) % 60); let secondes = Math.floor(time % 60); hours = hours < 10 ? "0" + hours : hours; minutes = minutes < 10 ? "0" + minutes : minutes; secondes = secondes < 10 ? "0" + secondes : secondes; return hours + ":" + minutes + ":" + secondes; }; useEffect(() => { const interval = setInterval(() => { setTimer((timer) => timer + 1); }, 1000); return () => { clearInterval(interval); }; }, []); useEffect(() => { const timerValue = format(timer); // Do something with the timerValue, like displaying it }, [timer]); من خلال إضافة دالة useEffect جديدة والتي تتم استدعائها عند تحديث الـ timer يتم إنشاء متغير يحتوي على القيمة المنسقة للـ timer باستخدام دالة format، وعليك باستخدام هذا المتغير لعرض الـ timer بالشكل المطلوب. ولاحظ أن دالة clearInterval مفادها هو إلغاء الـ interval بشكل صحيح عندما يتم إيقاف تشغيل المؤشر، وإعادة ترتيب الكود عن طريق نقل دالة setInterval إلى داخل دالة useEffect. وإحدى الطرق الأفضل هي استخدام دالة useRef لحفظ قيمة الـ interval والسماح لنا بإيقافها بشكل دقيق وفي الوقت المناسب، بالشكل التالي: import { useState, useEffect, useRef } from "react"; function Timer() { const [timer, setTimer] = useState(0); const intervalRef = useRef(); const format = (time) => { let hours = Math.floor((time / 60 / 60) % 24); let minutes = Math.floor((time / 60) % 60); let secondes = Math.floor(time % 60); hours = hours < 10 ? "0" + hours : hours; minutes = minutes < 10 ? "0" + minutes : minutes; secondes = secondes < 10 ? "0" + secondes : secondes; return hours + ":" + minutes + ":" + secondes; }; useEffect(() => { intervalRef.current = setInterval(() => { setTimer((timer) => timer + 1); }, 1000); return () => { clearInterval(intervalRef.current); }; }, []); const stopTimer = () => { clearInterval(intervalRef.current); }; const resetTimer = () => { setTimer(0); }; return ( <div> <div>{format(timer)}</div> <button onClick={stopTimer}>Stop Timer</button> <button onClick={resetTimer}>Reset Timer</button> </div> ); } تستخدم دالة useRef لإنشاء مرجع ref جديد لـ interval وحفظ قيمته في متغير، وإرجاع الدالة useEffect التي تستخدم intervalRef.current بدلاً من interval وإعادة تعيين قيمة intervalRef.current عندما يتم تحديث الـ timer. كما تم إضافة دالة stopTimer لإلغاء الـ interval و إنشاء دالة resetTimer لإعادة الـ timer إلى القيمة الافتراضية. وإضافة زر "Stop Timer" لإيقاف تشغيل المؤشر وزر "Reset Timer" لإعادة تعيين الـ timer إلى القيمة الافتراضية، وتستطيع استخدام الـ format() في عرض الـ timer بالشكل المطلوب.
  22. في مشروع لارافيل، ملف composer.json يحتوي على قائمة بجميع الحزم (packages) التي يحتاجها المشروع، بما في ذلك إصداراتها المحددة وتبعياتها. وملف composer.lock هو ملف يُنشأ تلقائياً عند تنفيذ أمر تثبيت الحزم باستخدام Composer ويحتوي على نفس القائمة من الحزم وإصداراتها المحددة، بالإضافة إلى معلومات عن الحزم المثبتة بالفعل في النظام. الفرق الرئيسي بينهما هو أن composer.json يُحدث يدوياً بشكل مستمر بواسطتك لإضافة وحذف الحزم وتحديث إصداراتها. بينما يتم توليد composer.lock تلقائياً بواسطة Composer. ويستخدم ملف composer.json لتحديد متطلبات المشروع ولإنشاء ملف composer.lock، بالإضافة إلى ذلك، يستخدم ملف composer.lock للتأكد من أن جميع الحزم التي تم تثبيتها في المشروع متوافقة مع بعضها البعض ولتجنب أي تعارضات بينها. أي أن composer.json هو الملف الرئيسي الذي يستخدمه المطورون لتحديد متطلبات حزم المشروع، بينما يعتبر composer.lock ملف إضافي يستخدم لضمان توافق الحزم وعدم وجود أي تعارضات بينها. ولعلك تتسائلي لماذا نحن بحاجة إلى composer.lock؟ في الحقيقة نحن بحاجة إلى ملف composer.lock لعدة أسباب بالإضافة إلى ما تم ذكره سابقًا: 1- تجنب تغييرات غير مرغوبة في الحزم حيثث يساعد ملف composer.lock على تجنب تغييرات غير مرغوبة في الحزم المثبتة في المشروع. فإذا قمت بتثبيت الحزم باستخدام composer.json فقط، فقد يحدث تغيير غير متوقع في إصدار الحزمة أو إضافة حزم جديدة تعتمد على إصدارات مختلفة من الحزم الحالية. وبما أن الملف composer.lock يحدد إصدارات الحزم بدقة، فلا يمكن تغييرها دون إعادة تشغيل عملية تثبيت الحزم. 2- التأكد من استقرار المشروع يتيح ملف composer.lock لفريق التطوير والمطورين الآخرين التأكد من أن جميع الحزم المستخدمة في المشروع مستقرة، وأنها تم اختبارها بشكل جيد، مما يعني أن الجميع لديه نفس الإصدار من الحزم. وذلك يفيد في تجنب المشاكل الغير مرغوبة طالما أن الجميع يعمل في نفس بيئة العمل، فستحدث نفس المشكلة لدى الجميع وليس لدى شخص واحد فقط يستخدم حزمة مختلفة. وربما لديك تساؤل آخر، عند استخدام الأمر composer install يتم تثبيت الحزم من ملف composer.lock أم composer.json؟ وما يحدث هو أنه سيتم تثبيت الحزم من ملف composer.lock إذا كان موجوداً في المجلد الحالي، وإلا سيتم استخدام ملف composer.json. وإذا كنت قد أنشأتي ملف composer.json ولم تقومي بتنفيذ الأمر composer install من قبل، فلن يتم إنشاء ملف composer.lock بعد تشغيل composer install. وبدلاً من ذلك، سيتم إنشاء ملف composer.lock وتحديثه تلقائيًا عندما تقوم بتشغيل composer update أو عند تثبيت حزمة جديدة باستخدام composer require.
  23. إذا كنت تقصد دورة تطوير واجهات المستخدم فأنت ستتعلم من خلالها التالي: مفهوم الواجهة الأماميّة للموقع front-end وكيفية عملها. أساسيات لغات تطوير واجهات المستخدم: HTML, CSS, JavaScript. استخدام أحدث أدوات التطوير: Bootstrap, jQuery, Sass, Gulp. التعامل مع خدمة استضافة المشاريع GitHub. إعداد هيكل الموقع ووضع خطة العمل. تطوير واجهة استخدام حقيقة لمتجر الكتروني كامل من الصفر. تطوير موقع لشركة مع مدونة خاصة خطوة بخطوة. بناء 5 صفحات هبوط مختلفة بناء واجهة لموقع يشبه YouTube بناء لوحة تحكم لتطبيق ويب وهو الجانب الخاص بالواجهة الأمامية، والآن إذا أردت تصبح مطور واجهة خلفية أيضًا وبذلك تصبح مطور Full stack أي قادر على بناء مشروع كامل بمفردك، فعليك بتعلم إما Node.js أو PHP وإطار لارافيل. وبإمكانك تعلم Node.js من خلال دورة تطوير التطبيقات باستخدام لغة JavaScript: و PHP ولارافيل وورد بريس أيضًا من خلال دورة تطوير تطبيقات الويب باستخدام لغة PHP. وإذا أردت نصيحتي عليك بتعلم دورة تطوير تطبيقات الويب باستخدام لغة PHP، إذا كنت تريد أن تصبح مطور ويب. أما إذا أردت تصبح مطور ويب وأيضًا معرفة كيف يتم تطوير تطبيقات الهاتف وسطح المكتب فعليك بدورة تطوير التطبيقات باستخدام لغة JavaScript، حيث سيتم فيها شرح React native و Electron.js. وأنصحك بقراءة النقاشات التالية:
  24. خطوات تصدير مشروع Go كملف تنفيذي exe 1- قم بإنشاء ملف باسم main.go يحتوي على الشفرة التالية: package main import "fmt" func main() { fmt.Println("Hello, world!") } 2- قم بفتح موجه الأوامر (Command Prompt) أو الطرفية (Terminal) الخاصة بجهاز الكمبيوتر الخاص بك. 3- استخدم الأمر "cd" للانتقال إلى مجلد يحتوي على ملف main.go الذي قمت بإنشائه في الخطوة السابقة. 4- استخدم الأمر "go build" لبناء ملف التنفيذي (exe)، لإعطاء اسم مخصص لملف التنفيذي: go build -o <اسم الملف> واستبدل <اسم الملف> باسم الملف الذي تريده. 5- بعد الانتهاء من بناء ملف التنفيذي، سيتم إنشاء ملف باسم "main.exe" في نفس المجلد الذي يحتوي على ملف main.go. 6- تستطيع تشغيل ملف التنفيذي عن طريق النقر المزدوج عليه في نظام Windows. وأرجو ملاحظة أن الخطوات للتصدير قد تختلف قليلاً اعتمادًا على نظام التشغيل الذي تستخدمه والأدوات التي تستخدمها لتطوير التطبيق.
×
×
  • أضف...