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

Mustafa Suleiman

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

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

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

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

    284

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

  1. تستطيع الحصول على المتوسط والتباين لمجموعة الأعداد عن طريق كتابة برنامج بلغة C++. يمكن استخدام الأسلوب التالي لحساب المتوسط والتباين: إنشاء مصفوفة لتخزين المدخلات العشوائية. إنشاء متغير لتخزين مجموع المدخلات العشوائية. قم بإنشاء متغير لحساب المتوسط. قم بإنشاء حلقة for لتوليد 1000 مدخل عشوائي وحساب مجموع المدخلات العشوائية. حساب المتوسط عن طريق تقسيم مجموع المدخلات العشوائية على 1000. إنشاء متغير لحساب التباين. قم بإنشاء حلقة for جديدة لحساب الفرق بين كل عدد والمتوسط. حساب التباين عن طريق جمع جميع الفروق المربعة وتقسيمها على 999. الخطوات السابقة تعتبر الأساس لحساب المتوسط والتباين. ويمكن تحقيقها في برنامج C++ عن طريق استخدام دوال مثل rand() و pow(). البرنامج النهائي يجب أن يعطيك قيم المتوسط والتباين، ويمكنك استخدام دالة cout لطباعة النتائج على الشاشة.
  2. بجانب ما تم قد شرحه، يمكن رسم خرائط التدفق للكود الخاص بك على النحو التالي: +--------------+ | Start | +--------------+ | v +--------------+ | Initialize | +--------------+ | v +--------------+ | Generate | | random | | numbers and | | calculate sum| +--------------+ | v +--------------+ | Calculate | | mean and | | reset sum to | | 0 | +--------------+ | v +--------------+ | Calculate | | variance | +--------------+ | v +--------------+ | Display | | results on | | screen | +--------------+ | v +--------------+ | End | +--------------+ وتتضمن خريطة التدفق السابقة العمليات التالية: البدء البدء بتعيين المتغيرات والقيام بالإعدادات الأولية إنشاء أرقام عشوائية وحساب مجموعها حساب المتوسط الحسابي وإعادة تعيين المجموع إلى الصفر حساب الانحراف المعياري باستخدام الصيغة: (مجموع الفروق المربعة) / (n-1) عرض النتائج على الشاشة النهاية ويتم الانتقال من مرحلة إلى أخرى في الخريطة باستخدام العمليات الشرطية والحلقات.
  3. ربما الخطأ ناجمًا عن طريقة تخزين البيانات في ملف Excel، وعلى الأرجح يتعلق بطريقة قراءة الملفات في Flutter. حاول تجربة استخدام مكتبة أخرى للقراءة من ملفات Excel مثل flutter_excel أو excel بدلاً من استخدام مكتبة dart_excel المستخدمة حاليًا. ويمكن استخدام الكود التالي للقراءة من ملف Excel باستخدام مكتبة excel: import 'package:excel/excel.dart'; import 'dart:io'; var file = "path/to/file.xlsx"; var bytes = File(file).readAsBytesSync(); var excel = Excel.decodeBytes(bytes); for (var table in excel.tables.keys) { for (var row in excel.tables[table]!.rows) { print("$table -> $row"); } } ويجب تعديل الكود أعلاه واستخدام المكتبة المذكورة والتي توفر واجهات للقراءة والكتابة من وإلى ملفات Excel في Flutter.
  4. من الصعب تنفيذ مشاريع فعلية باستخدام اللغات والمكتبات التي ذكرتها، حيث يجب تعلم إطار عمل مثل React و Angular. حيث أن اللغات والتقنيات التي ذكرتها جيدة في تنفيذ المشاريع البسيطة والتي بها بيانات ثابتة، ولكن عدما يتعلق الأمر بالمشاريع المتوسطة والكبيرة والتي بها بيانات متغيرة أي ديناميكية فهنا يجب استخدام إطار أو مكتبة للواجهة الأمامية كما ذكرت. وسأحصر إجابتي فيما يخص مواقع العمل الحر العربية مثل مستقل وخمسات، فالمهارات المطلوبة بكثرة بها هي لغة PHP و إطار عمل لارافيل وورد بريس، ثم إنشاء تطبيقات الهواتف باستخدام React native أو Flutter. وهناك بعض المشاريع الي تتطلب لغة ASP.NET وبالطبع ما سبق بحاجة إلى اللغات والمكتبات التي تعلمتها أنت فهى الأساسيات التي يُبنى عليها كل ما سبق. وربما ستجد بعض المشاريع الصغيرة في بعض الأحيان التي لا تتطلب سوى html- CSS- JavaScript - Bootstrap - jQuery - Sass. لكن لتصبح مستقل محترف وتكسب المال بشكل حقيقي فعليك بتعلم إطر العمل واللغات المطلوبة وأهما PHP ولارافيل ومنصة إدارة المحتوى وورد بريس. وأيضًا أنصحك بقراءة مقالات عن كيفية تقديم نفسك للعميل وكتابة عرض مناسب بشكل إحترافي والتعامل بأسلوب لائق يدل على أنك شخص يعتمد عليه وذو ثقة، وبالطبع يجب توافر معرض أعمال بجودة عالية، وتذكر أن لكل شخص رزقه وستحصل عليه بلا شك فعليك بالسعي والتقديم على المشاريع المناسبة لك لحين تعلم ما ذكرته لك.
  5. في بداية تعلم البرمجة يجب إختيار ما يتم تقديمه في محتوى الدورة بعناية، فلا يمكن أن تحتوي الدورة على كافة التفاصيل ولا يوجد دورة توفر ذلك أبدًا. بل الدورة الجيدة تقدم ما يحتاجه الدارس ليتقن المهارة التي يريد تعلمها وبشكل إحترافي دونّ إرهاقه بكم هائل من المعلومات التي لن يحتاجها في بداية مساره البرمجي وسينساها وسيعود إليها لاحقًا بعد اكتساب الخبرة للازمة لتعلمها. فليس العبرة بكم المعلومات بل بمقدار الاستفادة منها وتوفيرها في الوقت الصحيح عند الحاجة، ويتم التوجيه دائمًا لضرورة تعلم مهارة البحث بدلاً من توفير معلومة معينة وذلك لتحفيزك لاكتساب مهارة لا غنى عنها لأي مبرمج. فالبحث والقراءة هما الأساس لأي مبرمج يريد أن يصبح ذا شأن في مجاله وإلا لن يصل بعيدًا، ومن خلال التطبيقات العملية يتم التوسع في المعلومات المقدمة وذكر كافة التفاصيل الهامة التي ستحتاجها في بناء المشاريع باستخدام اللغة الخاصة بالدورة. والمشاريع ليست عبارة عن نماذج بسيطة و لعبة XO بل مشاريع حقيقية تضعها في معرض أعمالك عند التقدم للوظيفة بعد الإنتهاء من الدورة، فتلك هي نوعية المشاريع التي تؤهلك لسوق العمل بالفعل والتي يتم النظر إليها عند التقدم لوظيفة في مجال البرمجة وليس النماذج البسيطة. وهناك فخ دائمًا ما يقع فيه الكثير، وهو مقارنة مدة الفيديو أو حجم الدورة بدلاً من مقارنة القيمة والمعلومات التي يتم توفيرها والتي أنت بحاجة إليها فعلاً لتصبح مبرمج محترف، فهناك الكثير من المعلومات التي يمكن ذكرها لكن لن تستخدمها في بداية حياتك كمبرمج أو ربما لن تستخدمها إلا نادرًا حتى بعد اكتساب الخبرة.
  6. الخطأ يحدث لأنك تحاول الوصول إلى موارد API من موقع آخر، ويتم منع ذلك بسبب سياسة الـCORS، ويتم ذلك لأسباب أمنية لمنع الوصول غير المصرح به إلى بيانات المستخدم. لحل هذا المشكلة، يجب تمكين الوصول لمصدر الموارد في الخادم الذي تستخدمه. وفي حال لم تكن تملك خادم خاص بك، يمكنك استخدام خدمات بروكسي مثل CORS Anywhere أو بدائل أخرى لتفادي هذه المشكلة. وهذه الخدمات تسمح بإرسال طلب من الموقع المضيف إلى خدمة البروكسي، ثم يتم إعادة إرسال الطلب من خلال البروكسي إلى المصدر الأصلي دون تعريض الصفحة لمشكلة CORS. يمكنك قراءة المزيد عن سياسة CORS وطرق تجاوزها من هنا: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS لذلك، يمكن تعديل الرابط في الطلب ليتضمن عنوان بروكسي، على سبيل المثال: axios.get('https://cors-anywhere.herokuapp.com/https://timeapi.io/api/Time/current/zone?timeZone=Africa/Tripoli') .then(function (response) { // handle success console.log(response); }) .catch(function (error) { // handle error console.log(error); }); المثال يستخدم خدمة بروكسي مجانية تسمى "CORS Anywhere"، والتي تضيف رأس "Access-Control-Allow-Origin" إلى الطلب لحل مشكلة CORS. ويجب الانتباه إلى أنه يجب استخدام خدمات بروكسي بحذر، وتأكد من أن المصدر المستخدم هو موثوق به وآمن.
  7. بالتأكيد، يمكن استخدام لغة C# لبناء تطبيق مثل تطبيق Uber. ولكن، يتطلب ذلك استخدام عدة تقنيات وأدوات بالإضافة إلى لغة البرمجة. فتطبيق Uber يستخدم تقنيات مثل نظام تحديد المواقع العالمي (GPS)، وخدمات الدفع الإلكتروني، وقواعد البيانات، والاتصالات، وواجهات المستخدم، وغيرها. لبناء تطبيق مثل Uber باستخدام C#، يمكن استخدام إطار عمل (framework) مثل .NET Framework، والذي يوفر مكتبات وأدوات للتطوير والتصميم. على سبيل المثال، يمكن استخدام ASP.NET MVC framework لبناء نظام الخوادم الخلفية (Backend) الذي يتيح التواصل بين التطبيق وقاعدة البيانات والتحكم بالبيانات المرسلة والمستلمة وغيرها، بالإضافة إلى استخدام Entity Framework لتنفيذ عمليات قاعدة البيانات بشكل أكثر سلاسة. أما بالنسبة لجانب العميل (Client side) من التطبيق، يمكن استخدام Xamarin، وهو إطار عمل يستخدم لتطوير تطبيقات الهاتف المحمول لأنظمة Android وiOS باستخدام لغة C#. بالإضافة إلى استخدام Xamarin.Forms لتطوير واجهات المستخدم لتطبيقات Android و iOS في الوقت نفسه. وبهذه الطريقة، يمكن استخدام لغة C# وإطار عمل .NET Framework وأدوات مثل ASP.NET MVC وEntity Framework و Xamarin لبناء تطبيق مثل تطبيق Uber. ومن المهم الإشارة إلى أن هذه الطريقة ليست الوحيدة الممكنة، وأن هناك العديد من التقنيات الأخرى التي يمكن استخدامها أيضاً. التقنيات المستخدمة في تطبيق UBER تم بناء تطبيق أوبر باستخدام عدة لغات برمجة. للجانب الخادم (Backend)، حيث استخدمت أوبر لغة برمجة Java في البداية، ثم انتقلت إلى استخدام لغة Go. وقد تم تطوير الجزء الأمامي (Frontend) من التطبيق باستخدام لغات مثل Objective-C و Swift لتطبيق iOS، و Java و Kotlin لتطبيق Android. كما تم استخدام HTML و CSS و JavaScript لتطوير نسخة الويب من التطبيق. علاوة على ذلك، تم استخدام العديد من التقنيات والأدوات الإضافية مثل MySQL لقواعد البيانات و Amazon Web Services (AWS) لإستضافة الخادم وإدارة الحمولة وغيرها.
  8. ربما السبب في إعدادات حفظ الصورة الخاصة بك في الإليستريتور، يجب التحقق من الإعدادات الخاصة بحفظ الصورة، والتأكد من تعيين دقة عالية للصورة عند حفظها، بحيث تكون دقة الصورة كافية للحفاظ على جودة الصورة عند التكبير. عن طريق القيام بالخطوات التالية: افتح ملف الإليستريتور الذي تريد حفظه كصورة. انتقل إلى قائمة "File" واختر "Export" أو "Export As". اختر تنسيق الصورة الذي تريد حفظه فيه، مثل PNG أو JPEG. في نافذة "Export"، تأكد من تحديد "Use Artboards" إذا كنت تريد حفظ كامل المشروع، واختر الصفحة المحددة التي تريد حفظها إذا كنت تريد حفظ صفحة محددة فقط. انتقل إلى قسم "Image Size" وتحقق من تعيين دقة الصورة (Resolution) بالقيمة العالية، مثل 300 PPI. اضغط على زر "Export" لحفظ الصورة بإعدادات عالية الجودة. بعد حفظ الصورة، يمكنك التأكد من جودتها عند تكبيرها بالتحقق من الوضوح وعدم التشويش في الصورة. أيضًأ تحقق من إعدادات العرض في البرنامج الذي تستخدمه لعرض الصورة، للتأكد من أن الصورة تعرض بدقتها الأصلية وليس بدقة منخفضة.
  9. إذا كان السؤال خاص بالإختبارات فلا يتم الإجابة عليها، يمكن إرشادك فقط لطريقة الحل. باستطاعتك إيجاد معكوس المصفوفة الثنائية باستخدام الرياضيات الخطية. وبالنسبة للطباعة في لغة C++، يمكن استخدام حلقتين for متداخلتين لطباعة العناصر العمودية والصفية من المصفوفة المعكوسة. بشكل عام يمكن اتباع الخطوات التالية: تعريف متغيرين row و col لتحديد عدد صفوف وأعمدة المصفوفة. تعريف المصفوفة matrix بحجم row × col باستخدام الأقواس المربعة [][]. على سبيل المثال، int matrix[row][col] يعني أن المصفوفة matrix هي ذات حجم row × col وتتكون من عناصر من نوع int. يتم تعبئة المصفوفة matrix باستخدام حلقة for مدمجة تحتوي على حلقتي for. وتستخدم الحلقة الخارجية لتحديد صفوف المصفوفة والحلقة الداخلية لتحديد عناصر كل صف. على سبيل المثال، لو أن row = 2 و col = 3، فسيتم تعبئة المصفوفة بالشكل التالي: 1 2 3 4 5 6 عرض المصفوفة الأصلية باستخدام حلقة for مدمجة. وتستخدم الحلقة الخارجية لتحديد صفوف المصفوفة والحلقة الداخلية لتحديد عناصر كل صف. يتم استخدام الدالة cout لطباعة كل عنصر في المصفوفة. إنشاء مصفوفة جديدة invertedMatrix بحجم col × row باستخدام الأقواس المربعة [][]. تعبئة المصفوفة العكسية invertedMatrix باستخدام حلقة for مدمجة تحتوي على حلقتي for. حيث تستخدم الحلقة الخارجية لتحديد أعمدة المصفوفة العكسية والحلقة الداخلية لتحديد عناصر كل عمود. يتم استخدام مؤشرات i و j لتحديد موقع كل عنصر في المصفوفة المعكوسة. على سبيل المثال، لو أن row = 2 و col = 3، فسيتم تعبئة المصفوفة العكسية بالشكل التالي: 1 4 2 5 3 6 بعد الانتهاء من حساب المصفوفة المعكوسة، يمكن عرضها على الشاشة باستخدام حلقة for لطباعة كل عنصر في المصفوفة المعكوسة. يمكن استخدام نفس الفهرس i و j المستخدمين في الحلقة الخارجية التي تم استخدامها لحساب المصفوفة المعكوسة.
  10. حاول تجربة حل المشكلة بإضافة بعض الشروط إلى الكود. يمكنك محاولة تغيير الجزء الخاص بالحركة في الكود ليصبح على النحو التالي: if (inputDir != Vector2.zero) { float rotation = Mathf.Atan2(inputDir.x, inputDir.y) * Mathf.Rad2Deg+ cameraTransform.eulerAngles.y; transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y,rotation, ref currentVelocity, smoothRotationTime); // إضافة الشروط if (inputDir.magnitude > 0.1f && currentSpeed < MoveSpeed) { currentSpeed = Mathf.SmoothDamp(currentSpeed,targetSpeed,ref speedVelocity, 0.1f); } else if (inputDir.magnitude <= 0.1f && currentSpeed > 0) { currentSpeed = Mathf.SmoothDamp(currentSpeed, 0, ref speedVelocity, 0.1f); } } // إضافة الشروط if (currentSpeed > 0) { rb.MovePosition(transform.position + transform.forward * currentSpeed * Time.deltaTime); } في الكود السابق، تم إضافة شروط إلى الجزء الذي يتحكم بسرعة اللاعب وحركته. يتم التحقق من مقدار inputDir.magnitude قبل تحديد سرعة اللاعب. إذا كانت قيمة inputDir.magnitude أكبر من 0.1 وكانت السرعة الحالية أقل من السرعة القصوى (MoveSpeed)، فسيتم زيادة السرعة ببطء. إذا كانت قيمة inputDir.magnitude أقل من 0.1، فسيتم تخفيض السرعة ببطء حتى يتم إيقاف حركة اللاعب تمامًا. وأخيرًا، إذا كانت السرعة الحالية أكبر من الصفر، سيتم استخدام الـ Rigidbody لتحريك اللاعب بالطريقة الصحيحة. يرجى ملاحظة أن الحل قد يحتاج إلى التعديل حسب احتياجات مشروعك.
  11. بالطبع، يمكن استخدام selected attribute مع EJS بنفس الطريقة التي تستخدم بها value attribute. وأيضًا استخدام EJS لإدخال قيمة الخيارات ومن ثم استخدام selected attribute لتحديد الخيار الافتراضي. هناك طريقتان لفعل ذلك ، يمكنك استخدام ثنائيات القيمة / النص كما يلي: <select name="mySelect"> <option value="1" <% if (value === "1") { %>selected<% } %>>Option 1</option> <option value="2" <% if (value === "2") { %>selected<% } %>>Option 2</option> <option value="3" <% if (value === "3") { %>selected<% } %>>Option 3</option> </select> أو يمكنك استخدام دالة مساعدة مخصصة لتنفيذ هذا الأمر بشكل أكثر كفاءة: <select name="mySelect"> <% options.forEach(function(option) { %> <option value="<%= option.value %>" <%= option.selected ? 'selected' : '' %>><%= option.text %></option> <% }); %> </select> في المثال السابق، يتم استخدام دالة forEach لتكرار قائمة الخيارات وتعيين selected attribute إذا كانت الخيارات محددة. ثم تمرير القيمة والنص وحالة التحديد كمعلمات لكل option. ويمكنك تعديل هذا المثال لتناسب احتياجاتك الخاصة.
  12. حاول تجربة الخطوات التالية: تسجيل الدخول إلى حسابك على Hostinger والانتقال إلى لوحة التحكم. النقر على "Manage" بجانب الخادم الذي تريد تحديث PHP عليه. تحت "Server Management" ، انتقل إلى "SSH Access". قم بتسجيل الدخول إلى SSH باستخدام بيانات الاعتماد الخاصة بك. بمجرد تسجيل الدخول ، قم بتنفيذ الأمر التالي لتحديث PHP: sudo apt-get update sudo apt-get install php 8.1 بعد الانتهاء من التثبيت ، يمكنك التحقق من إصدار PHP الجديد باستخدام الأمر التالي: php -v سيتم عرض إصدار PHP الجديد الذي تم تثبيته. ملاحظة: يجب أن تكون لديك صلاحيات sudo لتثبيت حزم جديدة في SSH. أيضًا يجب التأكد من دعم استضافة هوستنغر لإصدار PHP الذي ترغب في تثبيته وتحديثه قبل القيام بأي تغييرات، كما يجب أخذ نسخة احتياطية من الملفات قبل البدء في عملية التحديث.
  13. لإضافة Rigidbody إلى اللاعب حاول تجربة الطريقة التالية: في محرر Unity، اختر اللاعب الذي تريد إضافة Rigidbody إليه. في الفرع الهيراركي (Hierarchy)، اختر Add Component من الزاوية اليمنى العليا من النافذة. اختر Physics ثم Rigidbody. ستظهر الآن مكونات Rigidbody في القائمة الجانبية، ويمكنك تعيين القيم التي تريدها. على سبيل المثال، يمكنك ضبط خاصية Mass لتحديد كمية الكتلة التي يمتلكها اللاعب. وبعد إضافة Rigidbody، يجب تغيير بعض الأجزاء في الكود لتحديث التحرك بشكل صحيح مع Rigidbody. أولاً، يمكنك استبدال transform.Translate بـ GetComponent<Rigidbody>().MovePosition لتحريك اللاعب باستخدام Rigidbody. ثانياً، يمكنك استبدال transform.eulerAngles بـ GetComponent<Rigidbody>().MoveRotation لتحديث دوران اللاعب بشكل صحيح مع Rigidbody. لذلك، سيبدو الكود بعد إضافة Rigidbody على النحو التالي: using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMovement : MonoBehaviour { public float MoveSpeed = 3f; public float smoothRotationTime = 0.12f; public bool enableMobileInputs = false; float currentVelocity; float currentSpeed; float speedVelocity; Transform cameraTransform; private Animator ch_animator; public FixedJoystick joystick; Rigidbody rb; void Start() { cameraTransform = Camera.main.transform; ch_animator = GetComponent<Animator>(); // Get the Rigidbody component rb = GetComponent<Rigidbody>(); rb.freezeRotation = true; } void FixedUpdate() { Vector2 input = Vector2.zero; if (enableMobileInputs) { input = new Vector2(joystick.input.x, joystick.input.y); ch_animator.SetBool("Walk", true); } else { input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); ch_animator.SetBool("Walk", false); } Vector2 inputDir = input.normalized; if (inputDir != Vector2.zero) { float targetRotation = Mathf.Atan2(inputDir.x, inputDir.y) * Mathf.Rad2Deg + cameraTransform.eulerAngles.y; transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref currentVelocity, smoothRotationTime); Vector3 moveDirection = Quaternion.Euler(0f, targetRotation, 0f) * Vector3.forward; Vector3 targetVelocity = moveDirection * MoveSpeed * inputDir.magnitude; // Move the rigidbody to the target velocity rb.MovePosition(rb.position + targetVelocity * Time.fixedDeltaTime); } } } يتم تعيين الـ Rigidbody عن طريق استخدام دالة GetComponent() في دالة Start() وتعيين الحركة باستخدام الدالة MovePosition() في دالة FixedUpdate() بدلاً من دالة Translate() لتجنب المشكلة التي واجهتها سابقًا.
  14. فيما يتعلق بالـ SEO ، ليس هناك أي تأثير على ترتيب صفحتك في محركات البحث سواء استخدمت العنصر <p> أو <div> لتضمين النص. ومع ذلك ، يوصى باستخدام العنصر <p> لتنسيق النص الذي يتكون من فقرات منفصلة في صفحتك. هذا لأن العنصر <p> يشير إلى أن النص المضمن يتكون من فقرات منفصلة ويجب عرضها على أنها محتوى منفصل في الصفحة ، بينما يستخدم العنصر <div> بشكل عام لتنسيق المحتوى. وهنا بعض النصائح الإضافية حول الـ SEO كمبرمج: تأكد من أن موقعك متوافق مع الأجهزة المحمولة ، وذلك عن طريق استخدام التصميم الاستجابي (Responsive Design). حيث يعتبر التصميم الاستجابي عاملًا مهمًا في تحسين تجربة المستخدم وتحسين التصنيف في محركات البحث. احرص على استخدام الـ heading tags بشكل صحيح (h1, h2, h3, ...). حيث يجب استخدام الـ h1 لعنوان الصفحة واستخدام الـ h2 لعناوين الفقرات الفرعية والـ h3 للفقرات الفرعية الأخرى وهكذا. هذا يساعد في تنظيم المحتوى وتحسين قابلية القراءة والتصفح. استخدم الكلمات الرئيسية المناسبة بشكل صحيح في النصوص والعناوين. يجب تحديد كلمات رئيسية تناسب محتوى صفحتك وتضمنها بشكل طبيعي دون الإفراط فيها. ومن الأفضل أن تضع الكلمات الرئيسية في العنوان الرئيسي للصفحة (H1) وفي العناوين الفرعية (H2، H3 وما فوق) وفي المحتوى نفسه، ولكن بشكل طبيعي ولا تجعل النص يبدو كتابة خصيصاً لمحركات البحث. كما يجب تجنب التكرار المفرط للكلمات الرئيسية في الصفحة، والذي يمكن أن يؤدي إلى تصنيف المحتوى كمحتوى مخادع وتخفيض ترتيبه في نتائج البحث. ,بالنسبة لتأثير جعل جزء من النص بشكل Bold على السيو، فهو يمكن أن يساعد في تحسين التنسيق العام للصفحة وجعل النص أكثر قراءة واضحة للمستخدمين. ولكن، لا يوجد أي دليل على أن جعل النص Bold يؤثر على تصنيف الصفحة في محركات البحث. أما بالنسبة للاستخدام الصحيح لـ ul و li، فإنه يعتبر جزءًا من بنية الصفحة ويساعد في تحسين السيو بشكل عام. فعند استخدام الـ ul و li، يجب أن يكون لديك هدف محدد للعناصر المدرجة وأن تستخدم كلمات رئيسية ذات صلة في العناوين والنصوص المتعلقة بكل عنصر. يجب الانتباه إلى أنه في النهاية، الأمر يتعلق بتقديم محتوى ذو جودة عالية وتجربة مستخدم مريحة ومناسبة. لذلك، يجب التركيز على إنشاء محتوى مفيد وجذاب وتصميم صفحات الويب بطريقة سهلة الاستخدام للمستخدمين.
  15. المشكلة تحدث بسبب استخدام fromNow() ، حيث تعيد هذه الدالة الفرق بين الوقت الحالي والوقت المحدد بتنسيق معين. بدلاً من ذلك ، يمكنك استخدام format() لتنسيق التاريخ بالطريقة التي تريدها. على سبيل المثال: let date1 = moment(date, 'YYYY-MM-DD').format('DD/MM/YYYY, HH:mm:ss'); وهذا يعطي تنسيقًا للتاريخ والوقت يبدو مثل هذا: "24/03/2023، 12:00:00". ويمكنك تعديل الشكل حسب احتياجاتك. ولتنسيق التاريخ بنفس الشكل الذي يظهر في فيسبوك ، يمكنك تنسيق التاريخ على النحو التالي: let date = moment().format('lll'); // يعيد تنسيق الوقت في شكل "MMM DD, YYYY hh:mm A" lll في الكود السابق هي حرف إل L بالإنجليزية ولكن بشكل small. وباستطاعتك استخدام أي تنسيق آخر يناسب احتياجاتك. على سبيل المثال ، باستخدام الأكواد التالية: 'lll' لتنسيق الوقت على النحو التالي: "MMM DD, YYYY hh:mm A" 'LLLL' لتنسيق الوقت على النحو التالي: "dddd, MMMM DD, YYYY hh:mm A" 'll LTS' لتنسيق الوقت على النحو التالي: "MMM DD, YYYY hh:mm:ss A" يمكنك الاطلاع على وثائق moment.js لمزيد من المعلومات حول التنسيقات المختلفة المتاحة.
  16. في البداية سأشرح لك ما هو Hook useRef، وهو أحد أساليب الحفاظ على الحالة في React، يمكن استخدامه لإنشاء مرجع إلى عنصر DOM أو أي عنصر آخر في التطبيق. يستخدم في الغالب لتعقب القيم السابقة والحالية لعناصر الواجهة، ومن ثم القيام بتحديثات بناءً على هذه القيم. فيما يلي مثال على كيفية استخدام useRef بشكل صحيح في React.js: import React, { useRef, useState } from 'react'; function ExampleComponent() { const [count, setCount] = useState(0); const inputRef = useRef(null); const handleButtonClick = () => { inputRef.current.focus(); }; return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> <input type="text" ref={inputRef} /> <button onClick={handleButtonClick}>Focus input</button> </div> ); } والكود الخاص بك لا يوجد به مشكلة واضحة. حيث يتم استخدام useRef لإنشاء مرجع لعنصر input وتم تمرير هذا المرجع كخاصية ref إلى العنصر input. ثم يتم استخدام myRef.current للوصول إلى عنصر input الفعلي وتنفيذ دالة الـ focus عليه لتركيز المؤشر داخل الحقل input. كما يتم طباعة قيمة الـ value من الحقل input في الكونسول عندما يتم النقر على زر الـ focus. قد يكون السبب في عدم ظهور أي شيء في الكونسول هو أن الحقل input فارغ، لذلك يجب إدخال قيمة داخل الحقل input للتحقق من القيمة المطبوعة في الكونسول عند النقر على زر الـ focus.
  17. إضافة دالة داخل الـ route وتمرير قيمة req.body إلى هذه الدالة وإرجاع قيمة firstName من داخلها: // دالة ترجع قيمة الاسم الذي تريده function calculateFirstName(obj) { return obj.firstName; } router.post('/', (req, res) => { const obj = req.body; const firstName = obj.firstName, lastName = obj.lastName, age = obj.age, Class = obj.class, lessons; const StudentId = Date.now(); // يتم نداء الدالة هنا وإعطائها المعامل بالبيانات اللازمة const calculatedFirstName = calculateFirstName(req.body); db.run(`INSERT INTO Students (StudentId, FirstName, LastName, Age, Class, RegDate, LessonId) VALUES (${StudentId}, "${firstName}", "${lastName}", ${age}, "${Class}", "${RegDate}", ${less}`, (err) => { if (err) return console.error(err); console.log(`Student ${firstName} ${lastName} has been added successfully`); res.redirect('/add-details'); }); }); بعد ذلك يمكنك استخدام الدالة في المكان الذي تريده
  18. يمكنك الحصول على الوقت الحالي في JavaScript باستخدام كائن Date. واستخدام Date.now() للحصول على الوقت الحالي بالميلي ثانية، ثم يمكنك استخدام كائن Date لتحويل الميلي ثانية إلى الوقت الفعلي الذي يمكن عرضه للمستخدم. على سبيل المثال، إذا كانت تاريخ النشر مخزن في قاعدة البيانات كنص، فباستطاعتك استخدام الكود التالي لتحويل النص إلى تاريخ وعرضه في شكل يحوي الساعة والدقائق: // تحويل النص إلى تاريخ const dateString = "2023-03-23T12:34:56Z"; const date = new Date(dateString); // عرض الوقت في شكل يحوي الساعة والدقائق const hours = date.getHours(); const minutes = date.getMinutes(); const timeString = hours + ":" + (minutes < 10 ? "0" : "") + minutes; console.log(timeString); // سيظهر 12:34 يمكنك استخدام هذا الكود لعرض الوقت الذي تمت إضافة الـ post به. واستخدام قيمة Date.now() عند إضافة الـ post لتخزين الوقت الحالي. ثم استخدام الكود السابق لعرض الوقت في صفحة الـ post.
  19. عزيزي عبد الرحمن أنت تقوم بالأمر بشكل خاطيء فيجب تفعيل الـ live server من هنا كما في الصورة، وأيضًا يجب تثبيته من متجر الإضافات، ويجب وجود ملف index.html وقم تم ربطه بملف js من خلال عنصر script. أيضًا يمكن أن يكون هناك خطأ في كود JavaScript الخاص بك، وهذا الخطأ يمنع Live Server من تشغيل الملف الخاص بك. قد يكون هناك خطأ في إعدادات Live Server، مما يمنعه من تشغيل ملفات JavaScript. قد يكون Live Server لا يستطيع التعامل مع بعض الملفات الخاصة بـ JavaScript، مثل الملفات الخاصة بـ Node.js.
  20. الدورة ليست مخصصة في ذلك، ويجب التنبيه إلى أن مجال الـ cyber security بحاجة إلى أن تكون بارع في البرمجة أي أنّ تأمين الشيء بحاجة إلى الدراية الوافرة به صحيح؟ لذلك أنت بحاجة إلى تعلم أساسيات علوم الحاسب ثم تعلم لغة برمجة وأنصحك في البداية بتعلم c++ ولكن إذا كان لديك الوقت لذلك. وستجد هنا إجابة على المسار الخاص بالـ cyber security وبخصوص دورة علوم الحاسب في أكاديمية حاسوب فذلك هو محتوى الدورة: ماذا ستتعلم في هذه الدورة؟ أساسيات الحاسوب وعلومه والتفكير المنطقي وما هي الخوارزميات وكيف تفيد في البرمجة تطبيقات عملية على أساسيات التفكير المنطقي باستخدام بيئة سكراتش Scratch التفاعلية أساسيات لغة البرمجة JavaScript وتطبيق المفاهيم التي تم شرحها باستخدامها، والتوسع في شرح التطبيقات العملية للغات البرمجة أساسيات أنظمة التشغيل المختلفة وكيفية تثبيت البرمجيات اللازمة للبرمجة عليها أساسيات سطر الأوامر في نظام لينكس، وشرح الأسس التي بني عليها النظام مع تطبيقها عمليًا أنظمة قواعد البيانات المختلفة، مع شرح تفصيلي للغة SQL للتعامل معها مبادئ أساسية في أنظمة قواعد البيانات NoSQL المفاهيم الأساسية التي تبنى فيها صفحات الويب مفاهيم أساسية في الشبكات والخوادم، وكيف يتم استقبال الطلبيات إلى الخادم والرد عليها مبادئ الحماية والأمان في الويب لمن هذه الدورة؟ لمن لا يمتلك أي خبرة مسبقة في البرمجة ويريد الدخول في هذا المجال الشيق لمن يفكر بتغيير مساره المهني ويرغب بأن يصبح مبرمج ولا يعرف من أين يبدأ للمبرمجين الذين تعلموا احدى لغات البرمجة ذاتياً ويرغبوا بملئ الفراغات وتعلم الأسس لطلاب الجامعات الذين يواجهوا صعوبة ببعض المواد مثل أنظمة التشغيل وقواعد البيانات لمن حاول تعلم البرمجة بالسابق وشعر أنها صعبة ولم يتمكن من المواصلة
  21. الموقع لا يستخدم وورد بريس بل برمجة خاصة ومعنى ذلك أنه لا يستخدم قالب وورد بريس. معرفة الثيم المستخدم لموقع وورد بريس إليك بعض الإقتراحات: 1- ثيم "LMS"، وهو ثيم متخصص في إدارة الدورات التعليمية والمواد التعليمية. 2- ثيم "Academy"، وهو ثيم مميز ومصمم خصيصًا للمدرسين ومقدمي الدورات والمساقات التعليمية. 3- ثيم "Education WP"، وهو ثيم متعدد الاستخدامات ويشمل العديد من الميزات المفيدة لمواقع الدورات التعليمية والتعلم عبر الإنترنت. 4- ثيم "Masterstudy"، وهو ثيم يوفر العديد من الخيارات المفيدة لمواقع الدورات التعليمية والتدريب. 5- ثيم "Skillfully"، وهو ثيم مميز ويتميز بتصميمه الجذاب وسهولة الاستخدام ويتميز بالألوان الزاهية. وإذا أردتي المزيد من إقتراحات لأفضل ثيمات وورد بريس أنصحك بقراءة الإجابات على الأسئلة التالية: رشح لي قالب ووردبريس يكون خفيف
  22. في SQL، يمكن استخدام بعض التقنيات والأوامر لتحسين أداء استعلامات البيانات وجعلها تستجيب بشكل أسرع. على سبيل المثال، يمكن استخدام أمر "INDEX" لإنشاء فهرس للحقول الذي تستخدم في استعلامات البيانات، وهذا يساعد على تسريع عملية البحث وتحديد المعلومات بشكل أسرع. بالإضافة إلى ذلك، يمكن استخدام الأوامر المثل "SELECT" و "WHERE" بطريقة صحيحة لتحسين أداء الاستعلامات، ويمكن أيضًا استخدام أدوات التجميع والفلترة المختلفة مثل "GROUP BY" و "HAVING" و "ORDER BY" للتحكم في ترتيب النتائج وتجميعها وتصفيتها بشكل فعال. كما يمكن استخدام أوامر معينة مثل SELECT TOP و SELECT DISTINCT لجلب عدد محدود من الصفوف أو لجلب القيم المختلفة في حقل محدد، مما يقلل من عدد البيانات التي تحتاج لجلبها وبذلك يتم تحسين الأداء. أيضاً يمكن استخدام الأوامر المتخصصة للتجميع Aggregate Functions مثل SUM و COUNT و AVG وغيرها للعمليات الحسابية البسيطة على البيانات بدلاً من استعلامات SELECT الطويلة التي قد تأخذ وقتاً طويلاً. ومن الأساليب الأخرى لتحسين أداء استعلامات SQL هي تحسين تصميم قواعد البيانات وتحسين أداء الخادم وتحسين مؤشرات الأداء وغيرها من الإجراءات التي تهدف إلى تحسين أداء استعلامات SQL. من الجدير بالذكر أنه لا يوجد "كود سحري" يمكن استخدامه لجلب البيانات بشكل سريع في SQL، وإنما يتعلق الأمر بتحسين أداء استعلامات البيانات باستخدام التقنيات والأوامر المختلفة المتاحة في SQL.
  23. أنت تستخدم مصفوفة cartItems لتخزين المنتجات في عربة التسوق، ولكن لا تمررها كمدخل لـ CartItem في Cart.jsx. بدلاً من ذلك، تم استخدام qtyArray، والذي يحتوي على قائمة من العناصر التي تم تعديلها بواسطة handlePlus و handleMinus. هذا هو السبب في أن الحذف لا يحدث في المصفوفة cartItems عند النقر على أيقونة الحذف. لحل هذه المشكلة، يمكنك تمرير cartItems كمدخل لـ CartItem في Cart.jsx بدلاً من qtyArray. وبمجرد النقر على زر الحذف، يجب عليك استدعاء دالة removeFromCart وإرسال cartProduct.id كمدخل لها. ثم يجب عليك تحديث المصفوفة cartItems باستخدام setCartItems وإزالة العنصر الذي تم حذفه.
  24. الخطأ يحدث عندما يتم محاولة الوصول إلى مؤشر مصفوفة على قيمة من نوع boolean (bool)، وهو ما يشير إلى وجود مشكلة في الكود في السطر 195 من ملف sql.php. وربما الخطأ مرتبطًا بتنفيذ الدالة find_by_groupLevel() التي لا يتم فيها إرجاع مصفوفة من قاعدة البيانات كما هو متوقع، وبدلاً من ذلك يتم إرجاع قيمة boolean. لحل هذه المشكلة، يجب التحقق من مدى صحة وعملية تنفيذ دالة find_by_groupLevel() والتأكد من عودتها بالمخرجات المتوقعة، وإذا كان هذا هي المشكلة، فيجب إجراء التعديلات اللازمة على الدالة لإصلاحها. كما يمكن استخدام دالة var_dump() لفحص مخرجات الدالة ومعرفة ما إذا كانت تعود قيمة boolean أو مصفوفة كما هو متوقع.
  25. إذا كنت تريد التخصص في البرمجة، فأنصحك بشدة بالإجتهاد في الثانوية لتتمكن من دخول كلية حاسبات ومعلومات وغالبًا في بلدك تابعة لتخصص IT ولكن لا أستطيع أن أجزم فيجب السؤال عن المنهج الخاص بتلك الكلية، أما هندسة البرمجيات فهي بعيدة عن البرمجة بعض الشيء حيث تدرس الأمور بشكل نظري وتهتم أكثر بالـ Hardware. وتجنبًا للتكرار ستجد ضالتك هنا. ما الفرق بين هندسة برمجيات وكلية حاسبات ومعلومات
×
×
  • أضف...