-
المساهمات
13209 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
365
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
باستطاعتك العمل على إطار العمل .NET Framework و ASP.NET MVC و Entity Framework و Xamarin دون الحاجة إلى تعلم C# Windows Forms Applications بشكل مسبق. ومع ذلك، فإن معرفة C# وواجهة Windows Forms قد تساعد في فهم أساسيات بعض المفاهيم المستخدمة في هذه التقنيات وجعل عملية التعلم أسهل. لذلك أنصحك بتعلم C# وواجهة Windows Forms Applications إذا كنت ترغب في تطوير تطبيقات سطح المكتب باستخدام C# في المستقبل. وبخصوص سؤالك الآخر فإن .NET Framework وASP.NET MVC وEntity Framework و Xamarin هي بيئات وإطارات عمل مختلفة تستخدم في تطوير البرمجيات باستخدام لغات برمجة مختلفة مثل C# وVB.NET وF#. على سبيل المثال، يستخدم ASP.NET MVC لتطوير تطبيقات ويب باستخدام لغات برمجة مثل C# وVB.NET وJavaScript. بينما يستخدم Xamarin لتطوير تطبيقات الجوال باستخدام C#، ويمكن استخدام Entity Framework في تطوير تطبيقات قواعد البيانات باستخدام C# أو VB.NET. وإليك بعض النصائح التي قد تساعدك: قم بتعلم أساسيات البرمجة قبل الانتقال إلى لغة معينة، مثل البدء بتعلم أساسيات البرمجة مثل المتغيرات، الدوال، والتحكم في التدفق (if/else statements و loops) في أي لغة برمجة. قم بتعلم الأساسيات التي تحتاجها للبرمجة في بيئة .NET Framework، مثل Visual Studio ومساعدات التصحيح البرمجية والعلامات التجارية المستخدمة في برمجة الأسماء والنواحي الأخرى المهمة. تعلم كيفية استخدام مكتبات الفئات المختلفة وAPIs المتاحة في .NET Framework، مثل ADO.NET للاتصال بقواعد البيانات أو ASP.NET لإنشاء تطبيقات الويب. قم بتطبيق المفاهيم والأساليب التي تتعلمها في مشاريع عملية. يمكنك العثور على مشاريع تطبيقية وتعليمية على الإنترنت، أو إنشاء مشاريع بنفسك لتطبيق ما تعلمته وتحسين مهاراتك البرمجية.
- 2 اجابة
-
- 1
-
الخطأ في الصورة يشير إلى عدم وجود النموذج"app\models\user" المطلوب في المشروع. حاول تجربة الآتي: التحقق من وجود ملف النموذج "user" في المسار التالي: app/models/user.php التأكد من أن الأحرف الكبيرة والصغيرة في اسم الملف متطابقة مع الاسم الذي تم استدعائه في الكود. التأكد من وجود عبارة "namespace app\models" في بداية الملف "user.php"، والتي تحدد مساحة الاسم الخاصة بالنموذج. التأكد من أنه تم تضمين الملف "user.php" في ملف "composer.json"، والذي يحدد الاعتماديات اللازمة لتشغيل المشروع. في حالة عدم وجود ملف "user.php"، يجب إنشاءه في المسار المذكور في الخطوة الأولى وإضافة الكود المناسب لتعريف النموذج وتحديد خصائصه وطرقه.
- 2 اجابة
-
- 1
-
هناك خطأ في إحدى ملفات CSS (b88d04fba731603756b1.css) وهو ملف بناء أي تعمل عمل بناء له من ملفات المشروع الخاص بك، والخطأ يتعلق بوجود حرف تهريب (Escape character) مع بعض الحروف المميزة في هذا الملف. بمعنى وجود مشكلة في تعريف مسار أحد الملفات داخل ملف CSS، وقد يكون السبب هو عدم وجود حرف التهريب مع الأحرف المميزة في مسار الملف، أو استخدام حرف التهريب بشكل غير صحيح.
-
الخطأ معناه وجود مشكلة في تحميل الصورة التالية: ./IMG/(3)علمني والموجودة في المسار المحدد بعد اسم الصورة كما يظهر في الخطأ في مجلد src في ملف HTML. لذلك عليك بالتأكد من مسار الصور الصحيحة المتضمنة في ملفات HTML في هذا المسار. أيضًا هناك مشكلة في تحميل ملف style.css في نفس المسار ، لذلك تأكد أيضًا أنك قمت بكتابة المسار بشكل صحيح.
-
تعلم Sass لا يزال مهمًا لمطوري ReactJS، حتى مع تقدم Webpack أو تراجعها لصالح Vite وظهور مكتبات أخرى مثل Tailwind. تظل Sass أداة مساعدة لتحسين تجربة كتابة CSS وإنشاء أنماط مرنة وسهلة الصيانة، مما يجعل الكود أنظف وأكثر تنظيمًا. بالإضافة إلى ذلك ، قد يكون من الصعب التعامل مع Tailwind إذا كان لديك تصميم خاص لموقع الويب الخاص بك. ومن الممكن أن يتطلب تخصيص تصميم CSS الخاص بك وقتًا أطول وجهدًا أكبر عند استخدام Tailwind. علاوة على ذلك ، فإن تعلم Sass يمكن أن يساعدك في تعلم مفاهيم CSS المتقدمة ، مما يجعلك مطورًا أفضل وأكثر كفاءة في كتابة الأنماط. ويمكن استخدام Sass مع ReactJS بسهولة باستخدام Webpack أو Vite. و Sass لها علاقة بالمكتبات الأخرى مثل React و Tailwind بطريقة غير مباشرة. فعلى سبيل المثال، إذا كنت تستخدم Sass لإنشاء CSS في تطبيق React يستخدم Tailwind، فيمكنك تعريف المتغيرات والمكونات والدوال وإعادة استخدامها بطريقة أكثر فعالية. كما أنه يمكن استخدام Sass لإنشاء ملفات CSS قابلة للتكيف مع Tailwind، مما يتيح لك تخصيص التصميم وفقًا لاحتياجات التطبيق الخاص بك. ومع ذلك، فإن Tailwind لا يعتمد بشكل أساسي على Sass ولكنه يستخدم نظامًا مختلفًا لتخصيص التصميم، مما يعني أنه لا يوجد علاقة مباشرة بين preprocessor وهذه المكتبات. بالنهاية، الاختيار بين استخدام Sass أو Tailwind أو أي أداة أخرى يعتمد على متطلبات المشروع الخاص بك والتفضيلات الشخصية والمسار الخاص بك فمثلاً مطوري Full-stack غالبًا ما يعتمدوا على Tailwind حاليًا لكونها حل وسط بدلاً من استخدام Bootstrap.
- 3 اجابة
-
- 1
-
تستطيع الحصول على المتوسط والتباين لمجموعة الأعداد عن طريق كتابة برنامج بلغة C++. يمكن استخدام الأسلوب التالي لحساب المتوسط والتباين: إنشاء مصفوفة لتخزين المدخلات العشوائية. إنشاء متغير لتخزين مجموع المدخلات العشوائية. قم بإنشاء متغير لحساب المتوسط. قم بإنشاء حلقة for لتوليد 1000 مدخل عشوائي وحساب مجموع المدخلات العشوائية. حساب المتوسط عن طريق تقسيم مجموع المدخلات العشوائية على 1000. إنشاء متغير لحساب التباين. قم بإنشاء حلقة for جديدة لحساب الفرق بين كل عدد والمتوسط. حساب التباين عن طريق جمع جميع الفروق المربعة وتقسيمها على 999. الخطوات السابقة تعتبر الأساس لحساب المتوسط والتباين. ويمكن تحقيقها في برنامج C++ عن طريق استخدام دوال مثل rand() و pow(). البرنامج النهائي يجب أن يعطيك قيم المتوسط والتباين، ويمكنك استخدام دالة cout لطباعة النتائج على الشاشة.
-
بجانب ما تم قد شرحه، يمكن رسم خرائط التدفق للكود الخاص بك على النحو التالي: +--------------+ | 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) عرض النتائج على الشاشة النهاية ويتم الانتقال من مرحلة إلى أخرى في الخريطة باستخدام العمليات الشرطية والحلقات.
-
ربما الخطأ ناجمًا عن طريقة تخزين البيانات في ملف 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.
-
من الصعب تنفيذ مشاريع فعلية باستخدام اللغات والمكتبات التي ذكرتها، حيث يجب تعلم إطار عمل مثل React و Angular. حيث أن اللغات والتقنيات التي ذكرتها جيدة في تنفيذ المشاريع البسيطة والتي بها بيانات ثابتة، ولكن عدما يتعلق الأمر بالمشاريع المتوسطة والكبيرة والتي بها بيانات متغيرة أي ديناميكية فهنا يجب استخدام إطار أو مكتبة للواجهة الأمامية كما ذكرت. وسأحصر إجابتي فيما يخص مواقع العمل الحر العربية مثل مستقل وخمسات، فالمهارات المطلوبة بكثرة بها هي لغة PHP و إطار عمل لارافيل وورد بريس، ثم إنشاء تطبيقات الهواتف باستخدام React native أو Flutter. وهناك بعض المشاريع الي تتطلب لغة ASP.NET وبالطبع ما سبق بحاجة إلى اللغات والمكتبات التي تعلمتها أنت فهى الأساسيات التي يُبنى عليها كل ما سبق. وربما ستجد بعض المشاريع الصغيرة في بعض الأحيان التي لا تتطلب سوى html- CSS- JavaScript - Bootstrap - jQuery - Sass. لكن لتصبح مستقل محترف وتكسب المال بشكل حقيقي فعليك بتعلم إطر العمل واللغات المطلوبة وأهما PHP ولارافيل ومنصة إدارة المحتوى وورد بريس. وأيضًا أنصحك بقراءة مقالات عن كيفية تقديم نفسك للعميل وكتابة عرض مناسب بشكل إحترافي والتعامل بأسلوب لائق يدل على أنك شخص يعتمد عليه وذو ثقة، وبالطبع يجب توافر معرض أعمال بجودة عالية، وتذكر أن لكل شخص رزقه وستحصل عليه بلا شك فعليك بالسعي والتقديم على المشاريع المناسبة لك لحين تعلم ما ذكرته لك.
- 4 اجابة
-
- 1
-
في بداية تعلم البرمجة يجب إختيار ما يتم تقديمه في محتوى الدورة بعناية، فلا يمكن أن تحتوي الدورة على كافة التفاصيل ولا يوجد دورة توفر ذلك أبدًا. بل الدورة الجيدة تقدم ما يحتاجه الدارس ليتقن المهارة التي يريد تعلمها وبشكل إحترافي دونّ إرهاقه بكم هائل من المعلومات التي لن يحتاجها في بداية مساره البرمجي وسينساها وسيعود إليها لاحقًا بعد اكتساب الخبرة للازمة لتعلمها. فليس العبرة بكم المعلومات بل بمقدار الاستفادة منها وتوفيرها في الوقت الصحيح عند الحاجة، ويتم التوجيه دائمًا لضرورة تعلم مهارة البحث بدلاً من توفير معلومة معينة وذلك لتحفيزك لاكتساب مهارة لا غنى عنها لأي مبرمج. فالبحث والقراءة هما الأساس لأي مبرمج يريد أن يصبح ذا شأن في مجاله وإلا لن يصل بعيدًا، ومن خلال التطبيقات العملية يتم التوسع في المعلومات المقدمة وذكر كافة التفاصيل الهامة التي ستحتاجها في بناء المشاريع باستخدام اللغة الخاصة بالدورة. والمشاريع ليست عبارة عن نماذج بسيطة و لعبة XO بل مشاريع حقيقية تضعها في معرض أعمالك عند التقدم للوظيفة بعد الإنتهاء من الدورة، فتلك هي نوعية المشاريع التي تؤهلك لسوق العمل بالفعل والتي يتم النظر إليها عند التقدم لوظيفة في مجال البرمجة وليس النماذج البسيطة. وهناك فخ دائمًا ما يقع فيه الكثير، وهو مقارنة مدة الفيديو أو حجم الدورة بدلاً من مقارنة القيمة والمعلومات التي يتم توفيرها والتي أنت بحاجة إليها فعلاً لتصبح مبرمج محترف، فهناك الكثير من المعلومات التي يمكن ذكرها لكن لن تستخدمها في بداية حياتك كمبرمج أو ربما لن تستخدمها إلا نادرًا حتى بعد اكتساب الخبرة.
- 4 اجابة
-
- 1
-
الخطأ يحدث لأنك تحاول الوصول إلى موارد 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. ويجب الانتباه إلى أنه يجب استخدام خدمات بروكسي بحذر، وتأكد من أن المصدر المستخدم هو موثوق به وآمن.
- 6 اجابة
-
- 1
-
بالتأكيد، يمكن استخدام لغة 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) لإستضافة الخادم وإدارة الحمولة وغيرها.
- 2 اجابة
-
- 1
-
ربما السبب في إعدادات حفظ الصورة الخاصة بك في الإليستريتور، يجب التحقق من الإعدادات الخاصة بحفظ الصورة، والتأكد من تعيين دقة عالية للصورة عند حفظها، بحيث تكون دقة الصورة كافية للحفاظ على جودة الصورة عند التكبير. عن طريق القيام بالخطوات التالية: افتح ملف الإليستريتور الذي تريد حفظه كصورة. انتقل إلى قائمة "File" واختر "Export" أو "Export As". اختر تنسيق الصورة الذي تريد حفظه فيه، مثل PNG أو JPEG. في نافذة "Export"، تأكد من تحديد "Use Artboards" إذا كنت تريد حفظ كامل المشروع، واختر الصفحة المحددة التي تريد حفظها إذا كنت تريد حفظ صفحة محددة فقط. انتقل إلى قسم "Image Size" وتحقق من تعيين دقة الصورة (Resolution) بالقيمة العالية، مثل 300 PPI. اضغط على زر "Export" لحفظ الصورة بإعدادات عالية الجودة. بعد حفظ الصورة، يمكنك التأكد من جودتها عند تكبيرها بالتحقق من الوضوح وعدم التشويش في الصورة. أيضًأ تحقق من إعدادات العرض في البرنامج الذي تستخدمه لعرض الصورة، للتأكد من أن الصورة تعرض بدقتها الأصلية وليس بدقة منخفضة.
-
إذا كان السؤال خاص بالإختبارات فلا يتم الإجابة عليها، يمكن إرشادك فقط لطريقة الحل. باستطاعتك إيجاد معكوس المصفوفة الثنائية باستخدام الرياضيات الخطية. وبالنسبة للطباعة في لغة 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 المستخدمين في الحلقة الخارجية التي تم استخدامها لحساب المصفوفة المعكوسة.
-
حاول تجربة حل المشكلة بإضافة بعض الشروط إلى الكود. يمكنك محاولة تغيير الجزء الخاص بالحركة في الكود ليصبح على النحو التالي: 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 لتحريك اللاعب بالطريقة الصحيحة. يرجى ملاحظة أن الحل قد يحتاج إلى التعديل حسب احتياجات مشروعك.
-
بالطبع، يمكن استخدام 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. ويمكنك تعديل هذا المثال لتناسب احتياجاتك الخاصة.
- 3 اجابة
-
- 1
-
حاول تجربة الخطوات التالية: تسجيل الدخول إلى حسابك على 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 الذي ترغب في تثبيته وتحديثه قبل القيام بأي تغييرات، كما يجب أخذ نسخة احتياطية من الملفات قبل البدء في عملية التحديث.
-
لإضافة 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() لتجنب المشكلة التي واجهتها سابقًا.
-
فيما يتعلق بالـ 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، يجب أن يكون لديك هدف محدد للعناصر المدرجة وأن تستخدم كلمات رئيسية ذات صلة في العناوين والنصوص المتعلقة بكل عنصر. يجب الانتباه إلى أنه في النهاية، الأمر يتعلق بتقديم محتوى ذو جودة عالية وتجربة مستخدم مريحة ومناسبة. لذلك، يجب التركيز على إنشاء محتوى مفيد وجذاب وتصميم صفحات الويب بطريقة سهلة الاستخدام للمستخدمين.
- 3 اجابة
-
- 1
-
المشكلة تحدث بسبب استخدام 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 لمزيد من المعلومات حول التنسيقات المختلفة المتاحة.
-
في البداية سأشرح لك ما هو 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.
- 6 اجابة
-
- 1
-
إضافة دالة داخل الـ 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'); }); }); بعد ذلك يمكنك استخدام الدالة في المكان الذي تريده
- 3 اجابة
-
- 1
-
يمكنك الحصول على الوقت الحالي في 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.
-
عزيزي عبد الرحمن أنت تقوم بالأمر بشكل خاطيء فيجب تفعيل الـ live server من هنا كما في الصورة، وأيضًا يجب تثبيته من متجر الإضافات، ويجب وجود ملف index.html وقم تم ربطه بملف js من خلال عنصر script. أيضًا يمكن أن يكون هناك خطأ في كود JavaScript الخاص بك، وهذا الخطأ يمنع Live Server من تشغيل الملف الخاص بك. قد يكون هناك خطأ في إعدادات Live Server، مما يمنعه من تشغيل ملفات JavaScript. قد يكون Live Server لا يستطيع التعامل مع بعض الملفات الخاصة بـ JavaScript، مثل الملفات الخاصة بـ Node.js.
-
الدورة ليست مخصصة في ذلك، ويجب التنبيه إلى أن مجال الـ cyber security بحاجة إلى أن تكون بارع في البرمجة أي أنّ تأمين الشيء بحاجة إلى الدراية الوافرة به صحيح؟ لذلك أنت بحاجة إلى تعلم أساسيات علوم الحاسب ثم تعلم لغة برمجة وأنصحك في البداية بتعلم c++ ولكن إذا كان لديك الوقت لذلك. وستجد هنا إجابة على المسار الخاص بالـ cyber security وبخصوص دورة علوم الحاسب في أكاديمية حاسوب فذلك هو محتوى الدورة: ماذا ستتعلم في هذه الدورة؟ أساسيات الحاسوب وعلومه والتفكير المنطقي وما هي الخوارزميات وكيف تفيد في البرمجة تطبيقات عملية على أساسيات التفكير المنطقي باستخدام بيئة سكراتش Scratch التفاعلية أساسيات لغة البرمجة JavaScript وتطبيق المفاهيم التي تم شرحها باستخدامها، والتوسع في شرح التطبيقات العملية للغات البرمجة أساسيات أنظمة التشغيل المختلفة وكيفية تثبيت البرمجيات اللازمة للبرمجة عليها أساسيات سطر الأوامر في نظام لينكس، وشرح الأسس التي بني عليها النظام مع تطبيقها عمليًا أنظمة قواعد البيانات المختلفة، مع شرح تفصيلي للغة SQL للتعامل معها مبادئ أساسية في أنظمة قواعد البيانات NoSQL المفاهيم الأساسية التي تبنى فيها صفحات الويب مفاهيم أساسية في الشبكات والخوادم، وكيف يتم استقبال الطلبيات إلى الخادم والرد عليها مبادئ الحماية والأمان في الويب لمن هذه الدورة؟ لمن لا يمتلك أي خبرة مسبقة في البرمجة ويريد الدخول في هذا المجال الشيق لمن يفكر بتغيير مساره المهني ويرغب بأن يصبح مبرمج ولا يعرف من أين يبدأ للمبرمجين الذين تعلموا احدى لغات البرمجة ذاتياً ويرغبوا بملئ الفراغات وتعلم الأسس لطلاب الجامعات الذين يواجهوا صعوبة ببعض المواد مثل أنظمة التشغيل وقواعد البيانات لمن حاول تعلم البرمجة بالسابق وشعر أنها صعبة ولم يتمكن من المواصلة
- 2 اجابة
-
- 1