-
المساهمات
5232 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
52
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Adnane Kadri
-
اضافة الى ما اشير اليه في التعليقات السابقة، فيما يلي بعض الخطوات العملية للقيام بذلك: قم بتحليل اهتماماتك ومهاراتك: قم بتقييم اهتماماتك ومهاراتك الحالية في مجال البرمجة. ما هي المجالات التي تثير اهتمامك بشكل خاص؟ وما هي المهارات التي تجيدها بالفعل؟ اكتب قائمة بالمجالات التي تود استكشافها وتعلمها. ابحث عن معلومات حول المجالات المختلفة: استخدم المصادر المتاحة عبر الإنترنت للتعرف على المجالات المختلفة في مجال البرمجة. اقرأ المقالات، وشاهد الفيديوهات، واستكشف المجتمعات المهنية والمنتديات. حاول فهم ماهية كل مجال وماهي التقنيات والأدوات المستخدمة فيه وما الى ذلك. قم بالتواصل مع مبرمجين ذوي خبرة: ابحث عن فرص للتواصل مع مبرمجين ذوي خبرة في المجالات التي تهتم بها واستشر كل منهم. قد تجد مجموعات أو منتديات عبر الإنترنت حيث يمكنك طرح الأسئلة واستفساراتك. استفد من تجاربهم ونصائحهم في اتخاذ قرارك. ابدأ بمجال واحد وقم بتوسيع معرفتك: قد تجد من الأفضل أن تبدأ بمجال معين حيث تشعر بالراحة والثقة وتستطيع بناء قاعدة جيدة فيه، ثم توسع معرفتك وتستكشف مجالات أخرى مع مرور الوقت. فكامل مجالات البرمجة تلتقي في نقطة ما في الأخير، وستجد أن الأمر هو نفسه في كامل اللغات وأطر العمل. الذي يختلف هو بعض السياقات والاصطلاحات لا أكثر ولا أقل .. ويمكن للمتعلم تعليما صحيحا ودقيقا أن يكتسب معرفة تخوله لدخول أي مجال آخر.
- 10 اجابة
-
- 1
-
-
إذا كنت ترغب في استخدام جميع الثلاثة متغيرات في رابط واحد، فيمكنك تعديل القاعدة لتتناسب مع ذلك. يمكنك استخدام القاعدة التالية: RewriteEngine On RewriteRule ^egypt/(.*)$ egypt.php?params=$1 [L] RewriteEngine On RewriteRule ^egypt/(.*)$ egypt.php?params=$1 [L] بهذه الطريقة، يمكنك استخدام الروابط التالية على نفس الصفحة egypt.php: www.example.com/egypt/cairo/ www.example.com/egypt/cairo/almaadi/ www.example.com/egypt/cairo/almaadi/rent/ وسيتم تمرير الجزء الكامل بعد /egypt/ كقيمة واحدة للمتغير params في egypt.php. في داخل egypt.php، يمكنك استخدام دالة مثل explode() لتجزئة القيمة والوصول إلى كل جزء على حدة.
-
من الصعب الإحاطة بأسباب المشكلة على نحو دقيق، ولكن عموما قومي بالتأكد من كل من: وجود الملفات في المسار الصحيح: تحقق من أن ملفات home.glb و script.js موجودة في المسار الصحيح داخل مشروع Three.js الخاص بك. الملفات تحمّل بنجاح: تأكد من أن المتصفح يمكنه الوصول إلى الملفات اللازمة. يمكنك التحقق من ذلك من خلال فحص أداة المطور (Developer Tools) في المتصفح والتأكد من وجود أي أخطاء في تحميل الملفات أو أي أخطاء أخرى في وحدة التحكم. التحقق من دعم المتصفح: تأكد من أن المتصفح الذي تستخدمه يدعم جميع الميزات والتقنيات المستخدمة في مشروع Three.js الخاص بك. جربي ايضا تعديل المسار: // resource URL '/home.glb', ليصبح: // resource URL './home.glb', أو: // resource URL 'home.glb', ان كان على نفس مستوى ملف script.js، لأنه قد يكون هنالك مشكلة بتكوين مسارات نسبية انطلاقا من هذا المسار.
-
لا بالطبع، ليس ان تم القيام بالأمر بشكل جيد .. فإذا كنت تستخدم مشروع Firebase واحد لإرسال الإشعارات لتطبيقين منفصلين، فيجب التأكد من تكوين الإشعارات بشكل صحيح في مشروع Firebase واحد وربطه بكلا التطبيقين لإجتناب أي سيناريو مغلوط مثل تكرار ارسال الاشعارات. هنا بعض الخطوات التي يمكنك اتباعها لتأكيد إرسال الإشعارات لكل تطبيق بشكل منفصل: تأكد من أنك قمت بإنشاء مشروع Firebase واحد وربطه بكلا التطبيقين في واجهة Firebase Console. تأكد من أنك قمت بتكوين ملف google-services.json الخاص بمشروع Firebase بشكل صحيح في كلا التطبيقين. كل تطبيق يجب أن يحتوي على ملف google-services.json الخاص به. في كود التطبيق الخاص بكل تطبيق، تأكد من تهيئة رمز المشروع الصحيح في ملف التكوين. يمكنك العثور على رمز المشروع في واجهة Firebase Console تحت إعدادات المشروع. استخدم توكن مختلف لكل تطبيق عند إرسال الإشعارات. قم بتخصيص الحمل (payload) لكل تطبيق بشكل فريد وقم بإرسال الإشعارات بواسطة التوكن المناسب لكل تطبيق.
-
طبعا فإن هذا يعتمد على السوق التي تستهدفها وتريد النشاط فيها بدرجة أولى، ولكن فيما يلي بعض المقارنات بخصوص جزئيات مهمة من كل منهما: MERN Stack: يستخدم لغة JavaScript في الجانب الأمامي والخلفي. يوفر MongoDB كقاعدة بيانات غير علائقية. يستخدم Express.js كإطار عمل للواجهة الخلفية. يستخدم React لبناء واجهة المستخدم الديناميكية. يعتبر سهل التعلم والاستخدام لمطوري JavaScript. يوفر تجربة تطوير متكاملة وفعالة لتطبيقات الويب الحديثة. PHP: يستخدم لغة PHP في الجانب الخلفي لتطبيقات الويب. يحتوي على مجموعة واسعة من الإطارات مثل Laravel وSymfony وغيرها. يدعم العديد من قواعد البيانات الشائعة مثل MySQL وPostgreSQL. يستخدم لبناء مواقع الويب الديناميكية وتطبيقات الشركات الكبرى. يعتبر من أحد اللغات الأكثر استخدامًا في صناعة تطوير الويب. ولذلك، فان كلا من الخيارين مناسب وعليه طلب في سوق العمل.
-
مطلبك عام جدا، ويحتاج تخصيصا وتفصيلا لإعطاء اجابة أكثر دقة، ولكن عموما، لإضافة إشعارات إلى تطبيقك على منصة Android باستخدام Android Studio، يمكنك اتباع الخطوات التالية: قم بإنشاء ملف XML لتصميم شكل الإشعار. يمكنك استخدام عناصر مثل TextView وImageView وغيرها لتخصيص مظهر الإشعار. قم بإنشاء ملف Java للتحكم في سلوك الإشعار. في هذا الملف، يمكنك تحديد عناصر الإشعار مثل النص والصورة وعمليات النقر عليها. في ملف Java الرئيسي لتطبيقك، قم بتهيئة نظام الإشعارات وتكوين القناة الافتراضية للإشعارات. يجب عليك تحديد اسم ووصف للقناة وتعيين الأذونات المناسبة (نتحدث هنا عن جزئية متفرعة جدا، وهي تقنيات الويب سوكيت لتحقيق التخاطب ما بين تطبيق الخادم والعميل في الوقت الفعلي). قم بكتابة الشفرة اللازمة لإظهار الإشعار عند الحدث المناسب، مثل استلام رسالة جديدة أو إكمال مهمة. اختبر التطبيق وتأكد من ظهور الإشعارات بشكل صحيح عند الأحداث المناسبة.
-
ليس تماما، الكثير منها تعتبر اللغة الانجليزية كنقطة اضافية plus point فقط ولا تقدم ذلك كشرط أساسي اذ أن هنالك شروطا أخرى تعد اولى واكثر اعتبارا منها من مثل الخبرة بمجال العمل والقدرة على التواصل وما الى ذلك، ولكن هذا لا يمنع من وجود بعض الاستثناءات وبعض الشركات التي تتطلب ذلك كشرط أساسي ضمن متطلبات الوظيفة. بالإضافة إلى ذلك، هناك الكثير من الشركات تاتقنية التي تركز على خدمة السوق المحلية وعلى تطوير البرمجيات باللغة العربية. يمكنك عمل استقصاء بسيط واستعمال مواقع مثل بعيد وBayt وindeed لأخذ فكرة وتصور شامل عن متطلبات اللغة الانجليزية في مجالات البرمجة في الوطن العربي بشكل عام وفي السعودية حصرا وبشكل خاص.
-
بجانب المقترح، أفضل عن نفسي استعمال حزمة express-jwt، وهي واحدة من الحزمة التي توفر وسيلة سهلة لتنفيذ نظام المصادقة والتحقق من الهوية باستخدام JSON Web Tokens (JWT) في تطبيقات Express. لتثبيت حزمة "express-jwt" واستخدامها في مشروعك، يمكنك اتباع الخطوات التالية: قم بتثبيت حزمة "express-jwt" من خلال تشغيل الأمر التالي: npm install express-jwt في ملف التطبيق الخاص بك (مثل app.js أو server.js)، قم بتضمين حزمة "express-jwt" واستخدامها في تطبيق Express الخاص بك، كما هو موضح في المثال التالي: const express = require('express'); const jwt = require('express-jwt'); const jwks = require('jwks-rsa'); const express = require('express'); const jwt = require('express-jwt'); const jwks = require('jwks-rsa'); const app = express(); // تهيئة express-jwt للتحقق من التوكن وفحص الأذونات const checkJwt = jwt({ secret: jwks.expressJwtSecret({ cache: true, rateLimit: true, jwksRequestsPerMinute: 5, jwksUri: 'https://your-auth0-domain/.well-known/jwks.json', // رابط تحميل مفاتيح التوقيع العمومية }), audience: 'your-audience', // الجمهور المستهدف للتوكن issuer: 'https://your-auth0-domain/', // المصدر الذي أصدر التوكن algorithms: ['RS256'], // خوارزمية التوقيع المستخدمة في التوكن }); // تطبيق حزمة express-jwt كوسيط (Middleware) في تطبيق Express app.use(checkJwt); // تعريف طرق التوجيه الخاصة بك // مثال: طريقة GET محمية بالتحقق من التوكن والأذونات app.get('/protected', checkJwt, (req, res) => { // قم بتنفيذ الأعمال المطلوبة للطريق المحمية هنا res.send('Protected route'); }); // استجابة للأخطاء في التوكن أو الوصول المرفوض app.use((err, req, res, next) => { if (err.name === 'UnauthorizedError') { res.status(401).json('Unauthorized'); } }); // بدء تشغيل الخادم app.listen(3000, () => { console.log('Server started on port 3000'); }); تذكر أن تعديل القيم في الكود السابق وفقًا لاحتياجات تطبيقك الفعلية، مثل رابط تحميل مفاتيح التوقيع العمومية والجمهور المستهدف والمصدر الذي أصدر التوكن وما الى ذلك. طبعا فإن هذا مثال بسيط على كيفية استخدام حزمة "express-jwt" لتنفيذ نظام المصادقة والتحقق من الهوية في تطبيق Express الخاص بك. يمكنك استكشاف المزيد من الوظائف والتكوينات المتاحة في وثائق الحزمة لتلبية متطلبات تطبيقك والتوسع في الفكرة بشكل أفضل.
-
وعليكم السلام ورحمة الله وبركاته، إذا كان هدفك الأساسي هو أن تصبح مطور واجهة خلفية، فإن اختيار اللغة المناسبة يعتمد على عدة عوامل. فكل من Python وJavaScript (مع Node.js) لديهما مزاياهما واستخداماتهما الخاصة. فيما يلي بعض النقاط التي يمكن أن تساعدك في اتخاذ القرار: Python: تعتبر لغة برمجة سهلة التعلم وقوية في نفس الوقت. إذا كنت مبتدئًا في تعلم البرمجة بشكل عام، فقد يكون Python خيارًا ممتازًا لك. فهو من اللغات التي تتميز ببيئة تطوير قوية ومجتمع نشط، حيث يمكنك الوصول إلى مكتبات وأدوات غنية تساعدك في تطوير التطبيقات بسهولة. هذا بجانب وجود احد اقوى اطر عملها ضمن الساحة وهو اطار Django المشهور لتطوير تطبيقات الويب، اذ يوفر هيكلا تنظيميا قويا وأدوات متقدمة لبناء تطبيقات الويب القوية والقابلة للتطوير. JavaScript: لغة البرمجة الأساسية لتطوير الواجهة الأمامية لتطبيقات الويب. إذا كان لديك رغبة في تطوير واجهة مستخدم ديناميكية وتفاعلية، فإن تعلم JavaScript ضروري. و مع Node.js، يمكنك استخدام JavaScript في تطوير الجانب الخادم أيضًا. يتيح لك Node.js بناء تطبيقات الويب الكاملة باستخدام نفس اللغة على الجانبين الأمامي والخلفي. JavaScript هي الأخرى لديها مجتمع نشط وواسع الانتشار، وهناك العديد من المكتبات والإطارات المتاحة التي تسهل تطوير تطبيقات الويب. وعموما، أي منهما يعتبر خيارا جيدا الآن.
-
بجانب ما اقترح مصطفى، يمكنك القيام بذلك عن طريق التحرير على نسق القوالب وفق المراحل التالية: ارفع الأيقونة التي قمت بتصميمها إلى أي خدمة الاستضافة الخاصة بك. احفظ رابط الصورة المرفوعة للأيقونة. في لوحة التحكم في بلوجر، اختر "تخطيط المدونة" ثم انقر على "تحرير HTML". استخدم الأمر <link> لربط الصفحة بالأيقونة، ويجب أن يتم وضع هذا الأمر داخل عنصر <head> في صفحة HTML. استخدم الكود التالي: <link rel="shortcut icon" href="رابط الصورة"> قم بتغيير "رابط الصورة" في الأمر <link> برابط الصورة التي قمت بتحميلها في الخطوة الثانية. احفظ التغييرات وشاهد النتيجة بالذهاب إلى مدونتك وتحديث الصفحة. ستظهر الأيقونة بجانب عنوان الموقع في علامة التبويب.
- 6 اجابة
-
- 1
-
-
لفعل ذلك، اتبع الخطوات التالية: اختر النص الذي تريد تحويله من الجهة اليمنى إلى اليسرى باستخدام أداة النص. اذهب إلى القائمة الرئيسية "عناصر" Elements وحدد "عنصر النص" Text Frame. اذهب إلى قائمة الخيارات "نص الإطار" Text Frame Options وانقر فوق علامة التبويب "المحتوى" Content. حدد "يمين لليسار" Right-to-Left في الخيار "توجيه النص" Text Direction.
-
هذه الرسالة تعني أنه تم رفض عملية الدفع (push) لأن هناك تعارض بين المشروع الحالي الذي تحاول دفعه وبين النسخة الحالية للمشروع في مستودع GitHub. هذا قد يحدث إذا قام شخص آخر بدفع تعديلات على المشروع من مستودع GitHub. لحل هذه المشكلة، يجب عليك إما استخدام الأمر git pull لجلب التحديثات الأخيرة من المستودع البعيد (remote repository) ودمجها مع ملفات المشروع الخاص بك ومن ثم القيام بعملية الدفع مرة أخرى. أو يمكنك استخدام الأمر git push --force لجبر الدفع وإلغاء أي تعديلات تم القيام بها في المستودع البعيد. ومع ذلك، يجب عليك أن تكون حذرًا عند استخدام هذا الأمر لأنه يمكن أن يؤدي إلى فقدان التعديلات التي تم إدخالها في المستودع البعيد من قبل أي شخص آخر.
-
قد يكون هنالك بعض الجدل الخفيف بخصوص ما يقصد بالأساسيات ما بين مطوري جافاسكربت فتجد البعض يعتبر ما هو نحو التعامل مع مختلف أنواع البيانات والمتغيرات والعمليات الحسابية البسيطة والشروط والعبارات الشرطية والحلقات والتكرارات والدوال كافيا كأساسيات اللغة. ولكن البعض الآخر يذهب إلى أكثر من ذلك فيعتبر أنه بجانب ذلك ينبغي التعرض لمفاهيم اكثر تقدما من مثل مثل الدوال العالية الأمان، والوعود، والبرمجة الشيئية وما الى ذلك. ولكن عموما، سيكفيك ما تعلمته حتى الآن كأساسيات، اذ سيعينك هذا على فهم واستيعاب مفاهيم اكثر تقدما في اللغة.
-
زيادة على ما اشار اليه المدربون، فإنه يجب أولا ادراك الفرق بين typescript و javascript لكي يتبين ما يمكن القيام به، فـ TypeScript هي لغة برمجة تعتمد على JavaScript ولكنها تضيف عليها بعض الميزات الإضافية. وتعد TypeScript أحد أدوات التطوير التي توفر ميزات البرمجة الشاملة بما في ذلك إمكانية التعلم العميق، إضافة أنواع البيانات والتأكد من صحتها، والوصول إلى ميزات جديدة مثل العمليات الجبارة والجداول الزمنية الأحادية وما الى ذلك. بالمقارنة مع JavaScript، يوفر TypeScript ميزات إضافية مثل: التحقق من الأنواع: يساعد في الحد من الأخطاء التي يمكن أن تحدث في تطبيقات JavaScript التقليدية. تعزيز الإنتاجية: يوفر الإكمال التلقائي والتصحيح النحوي ومراقبة الرموز. التعلم العميق: يساعد في تحسين أداء تطبيقات الذكاء الاصطناعي وتعلم الآلة والتصنيف والتنبؤ وغير ذلك. على الرغم من ذلك، فإن TypeScript أكثر تعقيدًا من JavaScript، وقد يستغرق الأمر بعض الوقت لتعلمها واستخدامها بكفاءة. وتحتاج TypeScript إلى مترجم خاص بها يقوم بترجمة الشفرة البرمجية المكتوبة بلغة TypeScript إلى الشفرة البرمجية المكتوبة بلغة JavaScript ليتم تشغيلها على المتصفحات أو الخوادم. وعليه، فإنه بالتأكيد يمكن إنشاء تطبيق ويب مثال للسوبر ماركت باستخدام كلا من JavaScript و TypeScript. فكلا اللغتين يتمتعان بقدرات قوية لتطوير تطبيقات الويب. بالإضافة إلى ذلك، هناك العديد من اللغات الأخرى التي يمكن استخدامها في تطوير تطبيقات الويب، مثل Python و Ruby وPHP وغيرها. وكل من هاته اللغات يفي بالغرض ويقوم بنفس الشيء، ويمكنك في كل حال من القيام بتطوير تطبيق ويب لسوبر ماركت.
-
زيادة على ما اشار اليه المدربون في التعليقات السابقة، بالنسبة لعلوم البيانات، يمكن البدء بتعلم الأساسيات في الإحصاء والرياضيات والبرمجة، ومن ثم التركيز على تعلم لغات البرمجة المشهورة في هذا المجال مثل Python و R. يمكن الحصول على العديد من الدورات المجانية والمدفوعة على الإنترنت لتعلم هذه المهارات، كما يمكن الحصول على شهادات معتمدة في هذا المجال مثل شهادة Certified Data Scientist من معهد SAS. بالنسبة للذكاء الاصطناعي، يمكن البدء بتعلم الرياضيات المتقدمة والبرمجة، ومن ثم التركيز على تعلم تقنيات الذكاء الاصطناعي مثل التعلم العميق والتعلم الآلي ومعالجة اللغات الطبيعية والتعلم التعاوني والشبكات العصبية الاصطناعية والتعلم المعزز وما الى ذلك. يمكن الحصول على العديد من الدورات المجانية والمدفوعة على الإنترنت لتعلم هذه المهارات، كما يمكن الحصول على شهادات معتمدة في هذا المجال مثل شهادة TensorFlow Developer من شركة Google او غيرها.
-
تقييم الألعاب والعناصر بشكل عام جيد الى ممتاز، وأهنئك على قيامك بمثل هاته الخطوات فهي ما ستعزز فهمك لجافاسكربت على نحو أدق .. هذا بجانب ان طريقتك في كتابة الاكواد واعتمادك البرمجة كائنية التوجه في التعامل مع الاجسام والكائنات تشير الى اهتمامك بتنظيم الشيفرة وتنظيفها وهو الأمر الآخر الذي يحسب لك، فالشيفرة تستوفي الكثير من معايير الشيفرة النظيفة والكثير من معايير جودة البرمجيات مثل قابلية التوسع والصيانة وما الى ذلك. سيجعل هذا من الممكن التوسع في الألعاب اكثر عن طريق استحداث ميزات أخرى دون الاخلال بتلك الموجودة، مثل اضافة مؤثرات صوتية كاصوات الثعابين او الرصاص والتحذيرات المختلفة، بجانب التحكم في جزئيات من اللعبة مثل مستوى اللعبة وما الى ذلك (في لعبة الثعبان مثلا يترجم ذلك الى سرعة الثعبان). بعض الملاحظات البسيطة: بخصوص shooting stars، لما يظهر الجزء الأسفل اليمين فارغا. عند اعادة تحجيم الشاشة وعمل resize في لعبة الثعبان، يختفي الثعبان، تأكد من اعادة تحجيم canvas اعتبارا لهذا التحجيم.
- 3 اجابة
-
- 1
-
-
زيادة على ما أشار اليه المدربون، ففي React لا يمكن تغيير قيمة state مباشرةً بدون استخدام دالة setState. في الكود الذي قمت بمشاركته، تم استخدام الدالة useState لإنشاء حالة todos والتي يتم تعيينها مرة واحدة فقط عند تحميل الصفحة. ثم تم استخدام if و else if لتصفية todos باستخدام دالة filter، ولكن هذا لن يغير قيمة todos في state. كفكرة، يمكنك إنشاء حالة جديدة مثل filteredTodos باستخدام useState وتخزين القيم المصفاة فيها، ومن ثم تحديث filteredTodos باستخدام setFilteredTodos عند تغيير قيمة showTodo. يمكنك تمرير filteredTodos كـ props إلى مكونات أخرى للعرض. سيحل هذا المشكلة لديك، هذا بجانب ان مثل هذا السياق: todos = todos.filter(todo => !todo.status) console.log(todos); قد يؤدي الى بعض المشاكل الغير متوقعة، قم بتصريح متغير آخر وليكن filteredTodos ليكون: let filteredTodos = todos.filter(todo => !todo.status) console.log(filteredTodos); ثم ان شئت حقن هاته القيمة كقيمة todos يمكنك استعمال setTodos لذلك، setTodos(filteredTodos) فتكون القيم المصفاة هي القيم المعروضة،
- 9 اجابة
-
- 1
-
-
تشير رسالة الخطأ إلى أنك تستخدم إصدار Babel 6.26.3 ، ولكن حزمة "@babel/preset-env" تتطلب إصدار Babel "^ 7.0.0-0". لحل هذه المشكلة ، تحتاج إلى ترقية إصدار Babel الخاص بك إلى الإصدار 7 أو أعلى. لترقية إلى أحدث إصدار من Babel ، يمكنك استخدام الخطوات التالية: إزالة الإصدار الحالي من Babel: npm uninstall babel-cli babel-core babel-preset-env --save-dev تثبيت أحدث إصدار من Babel: npm install @babel/cli @babel/core @babel/preset-env --save-dev تعديل ملف package.json الخاص بك لتحديث أمر Babel CLI: "scripts": { "start": "nodemon -w src --exec "babel src"" } إنشاء ملف .babelrc في جذر مشروعك بالمحتوى التالي: { "presets": [ "@babel/preset-env" ] } ان كان السؤال الخاص بك يتعلق بدورة ما، فيفضل طرح هذا السؤال ضمن قسم تعليقات الطلبة اسفل الدرس. وسيتابع معك المدربون.
-
بجانب المقترح، يمكنك الاعتماد على جافاسكربت لإضافة الامتداد .html بعد تصيير الصفحة من طرف الخادم. var currentUrl = window.location.href; var newUrl = currentUrl + '.html'; window.location.replace(newUrl); يرجى الانتباه ان مثل هاته الطريقة قد تؤدي الى تعطيل بعض عمليات التوجيه التي تعتمد على مسارات نسبية realtive paths.
-
بجانب ما أشار اليه المدرب مصطفى، فإذا كنت لا ترغب في تسجيل الفيديو من خلال البرنامج وتخزينه في قاعدة البيانات، فيمكنك استخدام خدمات تسجيل الفيديو عبر الإنترنت وتضمين رابط للفيديو المسجل في نموذج الشكوى. يمكنك استخدام خدمات مثل Vimeo أو YouTube لتسجيل وتحميل الفيديو والحصول على رابط مضمن في صفحة نموذج الشكوى. بمجرد تلقي الشكوى، يمكنك الاستفادة من API لهذه الخدمات لاسترداد الفيديو المسجل وعرضه في صفحة الشكوى. يمكنك استخدام Laravel لتنفيذ هذه المهمة باستخدام مكتبات مثل Guzzle لإجراء طلبات API. أو مكتبة JavaScript مثل Axios لإجراء الطلبات من الواجهة الأمامية إذا كان ذلك ملائمًا لتطبيقك. وفي كلتا الحالتين، منطق العملية واحد.
-
HTTP 400 Bad Request هي رسالة خطأ تشير إلى أن الخادم لم يتمكن من فهم الطلب الذي تم إرساله بسبب تنسيق غير صالح أو عدم استكمال البيانات اللازمة لتنفيذ الطلب. يمكن أن يحدث هذا عندما يقوم المستخدم بإرسال طلب غير صالح أو عندما يكون هناك خطأ في تنسيق البيانات التي يتم إرسالها. بمعنى أنه لم يتم تفسير الطلب بشكل صحيح. قد يكون هناك خطأ في بنية الطلب أو قد يكون هنالك إرسال بيانات غير صالحة .. للتحقق من سبب الخطأ بشكل أكثر تفصيلاً ، يجب فحص محتوى الطلب وفحص الصفحة الخاصة بالخطأ المرتبط بهذا الطلب. والتأكد من اعتماد بنية بيانات صحيحة وارسالها في الطلبية.
-
مرحبا عبد اللطيف، ان كنت تواجه مشكلة بخصوص دورة ما، فإنا ندعوك الى الانتظار قليلا فالمشاكل التي يطرحها الطلبة متفاوتة التعقيد، وبعض هاته المشاكل قد يأخذ وقتا أطول من المدربين في العمل عليها مما هو عليه في مشاكل أخرى، كما ان العمل بين المدربين يتم بتنسيق عال. ولذلك لا تقلق، سيتم الاجابة على سؤالك في اقرب وقت. اما ان كنت تواجه مشكلة بخصوص فريق الدعم، فهو الآخر يحتاج بعض الوقت للانتباه الى رسالتك والاجابة عليها. اما بخصوص التوقيت، فالمدربون متواجدون بشكل دائم في الاكاديمية للاجابة على استفسارات واستشكالات الطلبة.
- 1 جواب
-
- 1
-
-
اضافة لما أشار اليه المدربان فإن ادارة حياة المكون في كل منهما تختلف عن الأخرى ايضا، ففي function components، يتم استخدام الدالة function لتعريف الـ component واستخدام الـخطافات hooks مثل useState و useEffect لإدارة الحالة state وحياة الـ component. بينما في class components، يتم استخدام الكلاس class لتعريف الـمكون component وتعريف الـجالو state في داخل الـتابع الباني constructor . بجانب استخدام توابع دورة حياة المكون lifecycle methods مثل componentDidMount و componentWillUnmount لإدارة حياة الـ component. بشكل عام، يمكن استخدام أيٍ منهما وفقًا للاحتياجات الخاصة بالمشروع. ولكن يتميز الـ function components بكونها أكثر بساطة وسهولة في الكتابة والصيانة وأقل في استهلاك الذاكرة، بينما يمكن استخدام الـ class components للمزيد من القدرة على التحكم بالحياة الداخلية للـ component ولبعض الميزات المتقدمة مثل تعريف الـ refs والـ Error boundaries.
- 3 اجابة
-
- 1
-
-
يحتمل أن المشكلة أساسا هي طريقة عمل المكون لديك، فعند الضغط على زر تقديم النموذج يقوم بتغيير حالة المتغير clicked، بينما يتم تنفيذ دالة handleLogin والتي تقوم بإرسال البيانات المدخلة إلى المتجر بواسطة خطاف dispatch والتحقق من صحة البيانات وتخزينها باستخدام useState، ولكنها لا تنفذ الدالة handlevalid المسؤولة عن التحقق من صحة الرمز المميز token الذي يرجعه المتجر. لذلك، يجب نقل دالة handlevalid من ال useEffect إلى داخل دالة handleLogin، بعد استدعاء خطاف dispatch، وذلك للتحقق من صحة الرمز المميز الذي يرجعه المتجر في الوقت الحالي. لتكون على نحو: const {email, password} = userData; const handleChange = (e) => { const {name, value} = e.target; setUserData({...userData, [name]:value }) } const handlevalid = async () => { if (!auth.token) {setIsCorrect(false)} }; const handleLogin = async (e) => { e.preventDefault(); handlevalid() setUserData({email, password }) dispatch(login(userData)) }