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

Mustafa Suleiman

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

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

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

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

    365

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

  1. لقد قمت بفحص الكود الخاص بك، ولا أرى أي خطأ واضح في ملف auth.js، والخطأ الذي تتلقاه يشير إلى أن هناك مشكلة في JSON الذي ترسله إلى الخادم عند محاولة تسجيل مستخدم جديد. من أجل معرفة أين المشكلة بالضبط، يمكنك استخدام أدوات مثل JSONLint أو JSONFormatter للتحقق من صحة JSON كما يمكنك محاولة تسجيل مستخدم جديد باستخدام Postman، ولكن هذه المرة قم بتسجيل JSON الذي ترسله إلى الخادم، ثم استخدام أدوات التحقق من صحة JSON لفحص JSON المسجل وتأكد من التالي: تأكد من أن جميع الأقواس والأقواس المزدوجة مفتوحة ومغلقة بشكل صحيح. جميع المفاتيح والقيم مفصولة بعلامات الفاصلة (،). جميع المفاتيح محاطة بعلامات اقتباس مزدوجة (" "). جميع القيم من النوع الصحيح. على سبيل المثال، لا يمكنك وضع قيمة رقمية داخل قيمة سلسلة.
  2. الخطأ يحدث لأنك تستخدم حقل "username" في نموذج التسجيل ولكن هذا الحقل غير موجود في نموذج المستخدم. وتحتاج إلى إضافة حقل "username" إلى نموذج المستخدم عن طريق إضافة السطر التالي إلى نموذج المستخدم: username = models.CharField(max_length=255, unique=True) بمجرد إضافة الحقل إلى نموذج المستخدم، يجب أن تختفي الأخطاء. إليك مثال على كيفية القيام بذلك: # models.py from django.db import models class User(models.Model): email = models.EmailField(max_length=255, unique=True) password = models.CharField(max_length=128) username = models.CharField(max_length=255, unique=True)
  3. الأمر طبيعي، فكيف ستتحكم في المتجر بدون لوحة تحكم؟ حيث يمكنك القيام بالتالي: إضافة وتعديل وحذف المنتجات. إدارة المخزون. إدارة الطلبات والعملاء. إدارة طرق الدفع والشحن. إعداد التقارير والتحليلات. ولوحة التحكم هي أداة أساسية لنجاح أي متجر إلكتروني، حيث توفر لصاحب المتجر إمكانية التحكم الكامل في متجره وإدارة جميع العمليات بشكل فعال. وبعض من أهم فوائد لوحة التحكم للمتاجر الإلكترونية: تحسين كفاءة إدارة المتجر، حيث توفر الوقت والجهد على صاحب المتجر. ضمان دقة جميع العمليات المتعلقة بالمتجر، مثل إدارة المنتجات والطلبات والعملاء. توفير الشفافية لصاحب المتجر حول جميع جوانب المتجر، مما يسمح له باتخاذ القرارات المناسبة لتحسين أداء المتجر. وعند إختيار أو تطوير لوحة تحكم للمتجر الإلكتروني عليك الإنتباه للتالي: يجب أن تكون لوحة التحكم متوافقة مع نظام إدارة المحتوى (CMS) الذي يستخدمه المتجر الإلكتروني. يجب أن توفر لوحة التحكم جميع الميزات التي يحتاجها صاحب المتجر لإدارة متجره. أن تكون لوحة التحكم سهلة الاستخدام حتى يتمكن صاحب المتجر من التحكم في متجره بسهولة.
  4. تمارين بايثون للمستوى المبتدئ بخصوص تمارين بايثون للمستوى المبتدئ، فعليك أولاً تعلم الأساسيات وهي: التعرف على لغة بايثون معرفة البيئة الخاصة بلغة بايثون معرفة التركيبة الأساسية للغة بايثون التعرف على نماذج المتحولات في لغة بايثون التعرف على المُشغلات الرئيسية في لغة بايثون التحكم في سير البرنامج باستخدام الحلقات والشروط التعامل مع القوائم والصفوف كتابة وظيفة بسيطة وإليك بعض التمارين: اكتب برنامجًا يطبع "Hello, world!" اكتب برنامجًا يطلب من المستخدم إدخال رقم ويطبعه اكتب برنامجًا يحسب مجموع أرقام معينة اكتب برنامجًا يطبع الأعداد من 1 إلى 10 اكتب برنامجًا يطبع الأعداد الزوجية من 1 إلى 10 اكتب برنامجًا يطبع الأعداد الفردية من 1 إلى 10 اكتب برنامجًا يطلب من المستخدم إدخال رقم ويطبع العدد التالي له اكتب برنامجًا يطلب من المستخدم إدخال رقم ويطبع العدد السابق له اكتب برنامجًا يطلب من المستخدم إدخال رقمين ويطبع الفرق بينهما اكتب برنامجًا يطلب من المستخدم إدخال رقمين ويطبع حاصل الضرب بينهما اكتب برنامجًا يطلب من المستخدم إدخال رقمين ويطبع حاصل القسمة بينهما تمارين بايثون للمستوى المتوسط هنا يجب تعلم مفاهيم متقدمة مثل: التعامل مع الملفات استخدام المكتبات كتابة وحدات نمطية كتابة تطبيقات واجهة المستخدم الرسومية كتابة تطبيقات الويب كتابة تطبيقات التعلم الآلي بعض التمارين: اكتب برنامجًا يقرأ ملفًا نصيًا ويطبعه اكتب برنامجًا يكتب إلى ملف نصي اكتب برنامجًا يستخدم مكتبة math لحساب قيمة جيب التمام لـ 45 درجة اكتب برنامجًا يستخدم مكتبة random لإنشاء قائمة عشوائية من الأرقام اكتب برنامجًا يستخدم مكتبة tkinter لإنشاء واجهة مستخدم رسومية بسيطة اكتب برنامجًا يستخدم مكتبة flask لإنشاء تطبيق ويب بسيط اكتب برنامجًا يستخدم مكتبة scikit-learn لتدريب نموذج التعلم الآلي البسيط تمارين بايثون للمستوى المتقدم هنا تأتي مرحلة إنشاء مشاريع كاملة أو برنامج أكثر تعقيدًا وعليك تعلم التالي: البرمجة الكائنية البرمجة الوظيفية هندسة البرمجيات Django قواعد البيانات ويمكنك البحث عن مشاريع على اليوتيوب لتنفيذها.
  5. من المفترض في حال تفعيل البيئة الإفتراضية أن يعرض الأمر pip freeze المكتبات المثبتة في البيئة فقط. وعلي أي حال لعرض المكتبات المثبتة فقط في البيئة الافتراضية الحاليةفقط استخدم الأمر : pip freeze --local تستطيع أيضًا استخدام الأمر pip list لعرض قائمة بالمكتبات المثبتة في البيئة الافتراضية الحالية. ولكن هناك أمر هام تغفل عنه أنت هناك فرق بين virtualenv وvenv التي قمت بتفعيلها أنت، حيث أن virtualenv هي حزمة خارجية لإنشاء بيئة إفتراضية بينما venv هي وحدة نمطية قياسية في بايثون. وأنت قمت بإنشاء بيئة venv عن طريق الأمر التالي: python -m venv venv ثم تفعيلها عن طريق الأمر التالي: venv\Scripts\activate أما virtualenv فعليك تثبيتها من خلال الأمر التالي: pip install virtualenv ولإنشاء بيئة إفتراضية عليك بالتالي: virtualenv my_env ثم تفعيل البيئة الافتراضية بالأمر التالي: source my_env/bin/activate ولعرض المكتبات المثبتة في البيئة الافتراضية my_env، فسيؤدي الأمر التالي إلى ذلك: pip freeze
  6. لإضافة تأثيرات الانتقال (transition) عندما تنتقل من رابط إلى رابط والـ panel مفتوحة، عليك بالإعتماد على CSS لتحقيق ذلك، ويجب أن تقوم بتعريف الانتقال في CSS لعناصر الـ panel. وفي الكود التالي، سأفترض أنك تريد تأثيرًا يظهر الـ panel من الجانب الأيسر ويختفي عند الإغلاق. /* تعريف تأثير الانتقال */ .para { transition: transform 0.3s ease-in-out; transform-origin: left center; transform: translateX(-100%); /* ابدأ بإخفاء ال panel عند الشحنة الأولى */ } /* تعريف حالة ظهور ال panel */ .para:not(.d-none) { transform: translateX(0); /* إظهار ال panel بشكل تأثيري */ } هنا الكود يعرف تأثير الانتقال باستخدام transform على العناصر ، وpara ويقوم بتعيين النقطة الأصلية للتأثير من الجهة اليسرى (transform-origin: left center) ويبدأ بإخفاء العنصر بتحريكه خارج الشاشة عبر transform: translateX(-100%). عندما تكون الفقرة مفتوحة (بمعنى أنها ليست .d-none)، ستتمكن من رؤية التأثير حيث يتحرك العنصر إلى اليسار ليظهر، وتستطيع تغيير مدى وسرعة التأثير من خلال تعديل قيم transition و transform.
  7. تم الحديث عن ذلك بشكل مفصل في النقاش التالي: وبإختصار قم بتخزين الفيديوهات والصور على خوادم آمنة ومحمية مثل Vimeo ويمكنك استخدام خدمات التخزين السحابي مثل Amazon S3 أو Google Cloud Storage وضبط الصلاحيات بحيث يكون الوصول إلى الملفات مقيدًا. وتستطيع تشفير ملفات الفيديو باستخدام تقنيات التشفير المتاحة في خوادم الوسائط الخاصة بك أو استخدام DRM (إدارة الحقوق الرقمية) للفيديوهات إذا كان ذلك ضروريًا.
  8. 1- الحل البديهي هو استخدام تقنية pagination لعرض المنتجات بشكل متتالي، وتسمح لك بتقسيم المنتجات إلى صفحات، بحيث يتم تحميل كل صفحة عند الحاجة إليها، وتستطيع استخدام تقنية pagination مع أي قاعدة بيانات، بما في ذلك MongoDB. وإليك مثال على كيفية استخدام تقنية pagination لعرض المنتجات في Node.js: const express = require("express"); const mongodb = require("mongodb"); const app = express(); // Connect to the database const db = mongodb.connect("mongodb://localhost:27017/products"); // Get all products const products = db.collection("products").find().toArray(); // Create a paginator const paginator = new Paginator(products, 10); // Get the next page of products const nextPage = paginator.next(); // Render the products app.get("/products", (req, res) => { res.send(nextPage); }); app.listen(3000); 2- هناك خيار آخر وهو استخدام cursors لعرض المنتجات بشكل متتالي، وتسمح لك تلك التقنية بتصفح مجموعة من البيانات دون تحميلها بالكامل في الذاكرة، وبالطبع تستطيع استخدام cursors مع MongoDB. مثال: const express = require("express"); const mongodb = require("mongodb"); const app = express(); // Connect to the database const db = mongodb.connect("mongodb://localhost:27017/products"); // Get all products const cursor = db.collection("products").find(); // Iterate over the products cursor.forEach((product) => { console.log(product); }); app.listen(3000); ويمكنك استخدام تقنية cursors لعرض المنتجات بشكل متتالي عن طريق استخدام دالة next() للتقدم إلى المنتج التالي. 3- وكحل آخر استخدم sharding لتوزيع البيانات على عدة خوادم، و سيساعد ذلك في تقليل وقت جلب البيانات من قاعدة البيانات. مثال: const express = require("express"); const mongodb = require("mongodb"); const app = express(); // Connect to the database const db = mongodb.connect("mongodb://localhost:27017/products"); // Shard the database const sharding = new Sharding(db); // Get all products const products = sharding.collection("products").find().toArray(); // Render the products app.get("/products", (req, res) => { res.send(products); }); app.listen(3000); والفكرية هي تقسيم مجموعة البيانات إلى عدة أجزاء يتم تخزينها على خوادم مختلفة، مما يساعد في تقليل وقت جلب البيانات من قاعدة البيانات. بالإضافة إلى تحسين أداء قاعدة البيانات عن طريق تحسين خوارزميات البحث والفرز وتحسين بنية البيانات.
  9. بعد الدورة والحصول على الشهادة سيتم توجيهك لتحسين مهارات بما يتناسب مع سوق العمل، لتحسين سيرتك الذاتية وملفاتك الشخصية على مواقع العمل الحر، وإن لم تحصل على وظيفة أو عمل حر خلال 6 أشهر من موعد اجتيازك للامتحان، يغطي قيمة الدورة التي دفعتها، ستعيد لك أكاديمية حسوب ما دفعت. بتلك البساطة. وبخصوص التدريب فلا يوجد تدريب في الأكاديمية ويمكنك البحث عن فرص internships على موقع مثل LinkedIn وIndeed وما شابهم من مواقع التوظيف، وأفضل تدريب هو تنفيذ المشاريع، وأنت في دورة بايثون ستعمل على تنفيذ المشاريع التالية وهي مشاريع حقيقية: تطوير متجر إلكتروني باستخدام جانغو Django تطوير واجهة برمجية لتعديل الصور باستخدام فلاسك Flask تطوير تطبيقات أودو Odoo بناء مدونة باستخدام فلاسك Flask ومشاريع أخرى. وبعد الإنتهاء من الدورة سيُطلب منك تنفيذ مشروع حقيقي من أجل الحصول على شهادة التخرج. ويمكنك تنفيذ مشاريع أخرى أثناء دراسة الدورة، ستجد على اليوتيوب الكثير من مشاريع بايثون لكن حاول إختيار مشاريع مناسبة تصلح لوضعها بمعرض أعمالك وليس مجرد مشاريع بسيطة والتي تصلح كبداية للتعلم فقط.
  10. الأمر غير ممكن بدون واجهة خلفية، حيث يجب معالجة الطلبات الواردة من الواجهة الأمامية في الواجهة الخلفية وأيضًا تخزين بيانات المستخدمين وأمور أخرى. وفي حال لم ترد تعلم لغة خاصة بالواجهة الأمامية تستطيع استخدام منصة مثل Firebase والتي توفر لك واجهة خلفية متكاملة بدون الحاجة لإنشاء الواجهة الخلفية من البداية، فقط ستحتاج إلى تعلم استخدام تلك المنصة. حيث سيتعين عليك تضمين الـ API الخاص ببوابة الدفع في الواجهة الخلفية من أجل معالجة عمليات الشراء. وستجد هنا شرح مفصل أكثر:
  11. تقصد في المرة الأولى عند فتح التطبيق بدون أي تحديث للحالة state أو الإعتماديات الخاصة بالخطاف useEffect؟ في حال كان الأمر كذلك، فهو بسبب وضع StrictMode وما يفعله هو 3 أشياء أثناء تطوير المشروع: يعيد عرض مكوناتك مرة أخرى Re-renders للعثور على الأخطاء الناتجة عن إعادة العرض غير النقي (التأثيرات الجانبية). يعيد تشغيل تأثيرات مكوناتك مرة أخرى للعثور على الأخطاء الناجمة عن عدم وجود دالة تنظيف مناسبة. يتحقق من مكوناتك مما إذا كان يتم استخدام واجهات برمجة التطبيقات القديمة deprecated APIs. وبالتالي يتم طباعة الرسالة مرتين في الكونسول، ومن المفترض أن تجد ذلك الوضوع مفعل في مشروعك في ملف index.js أو app.js كالتالي: const root = ReactDOM.createRoot( document.getElementById('root'), ); root.render( <React.StrictMode> <App /> </React.StrictMode>, ); وفي حال تعطيله قم بإزالة StrictMode ليصبح الكود كالتالي: const root = ReactDOM.createRoot( document.getElementById('root'), ); root.render( <App />, );
  12. مجلد المشروع لا يوجد به مجلد الخادم، بل مجلد الـ client مكرر مرتين ولكن بداخل مجلد server
  13. هل حاولت إضافة رمز التوثيق إلى الطلب؟ عن طريق إضافة حقل Authorization كالتالي: useEffect(() => { const getUser = async() => { const token = localStorage.getItem("token"); const headers = { "Authorization": `Bearer ${token}` }; await axios.get('/api/auth', { headers }) .then(res => console.log(res.data)) .catch(err => console.log(err, "err")) } getUser() }, []) أيضًا تأكد من التالي: العنوان الموجه (proxy) في ملف package.json الخاص بمشروع ReactJS يشير إلى الخادم الصحيح أي التأكد من أن الخادم Node.js يعمل على الميناء 3001 وأن العنوان الذي تم تحديده في package.json هو الصحيح. الخادم Node.js يقوم بالتصريح بشكل صحيح بالمسار '/api/auth'، وهذا مهم لأنه يجب أن يتطابق مع المسار الذي تم استدعاءه من مشروع ReactJS. تأكد من أن الرمز المرسل في رأس الطلب من مشروع ReactJS (x-auth-token) هو الرمز الصحيح ويتطابق مع الرمز الذي تم إنشاؤه عند تسجيل الدخول. قم بتصحيح أي مشكلات محتملة في وظيفة protect وتأكد من أنها تقوم بإصدار رمز المصادقة (Token) بشكل صحيح وأنها تستجيب للطلبات بالشكل الصحيح.
  14. الهدف من السكريبت هو أتمتة العمليات المرتبطة بلعبة على الإنترنت تسمى "Crash"، والسكريبت يستخدم تقنيات الويب للوصول إلى صفحة اللعبة وتنفيذ إجراءات محددة على الصفحة عندما يكون عنوان الصفحة يحتوي على كلمة "Crash". الخطوات الرئيسية التي يقوم بها السكريبت هي: يتحقق من عنوان الصفحة وإذا كان يحتوي على كلمة "Crash"، يقوم بتحميل مكتبة jQuery إلى الصفحة. بمجرد أن يتم تحميل مكتبة jQuery بنجاح، يقوم بإزالة عناصر معينة من الصفحة باستخدام تحديد محدد لعناصر HTML. يعين متغيرات معينة مثل "coefficient" و "crashTime" ويحسبهما استنادًا إلى القوانين الخاصة باللعبة. يقوم بتنفيذ دورة تكرارية غير محدودة (باستخدام while (true)) حتى تتحقق شرط معين (محتملًا عندما ينجح الوقت في الانهيار)، ثم يخرج من الدورة. يستخدم setInterval لتنفيذ وظيفة بانتظام كل 1000 مللي ثانية (1 ثانية)، وهذه الوظيفة تقوم بفحص حالة زر معين على الصفحة وتنفيذ إجراءات إذا كان الزر غير معطل. هذا يبدو وكأنه يتعلق بالمراهنة أو اللعب في اللعبة "Crash". ويمكن تشغيل السكريبت من خلال إنشاء إضافة خاصة في المتصفح ابحث على اليوتيوب عن how to make google chrome extension وستجد الكثير من الشروحات. لكن ذلك السكريبت يعمل على موقع خاص بالقمار ولن يتم المساعدة بخصوص ذلك الشأن، وأيضًا لا يمكن التنبؤ بموعد إنفجار الطائرة، لأنه يتم ذلك بشكل عشوائي وليس بشكل محدد.
  15. السبب هو أنك قمت بتثبيت برنامج آخر يدعم صيغة PSD وتم تحديده البرنامج الإفتراضي لتشغيل ذلك النوع من الملفات. ولحل تلك المشكلة، عليك بالضغط بزر الفأرة الأيمن على ملف PSD ثم إختيار properties كالتالي: ستجدي خيار باسم open with وبجانبه البرنامج الإفتراضي لتشغيل ذلك النوع من الملفات، عليك بالضغط على change: وسيظهر لك نافذة بها البرامج التي تصلح لتشغيل ذلك النوع من الملفات ومنها Photoshop فاختاريه ثم اضغطي على Set default كالتالي:
  16. هل يظهر لك أية أخطاء في الكونسول، وأيضًا من المفيد حذف الملفات والإعدادات المؤقتة من خلال الأمر التالي: php artisan optimize:clear وعليك التحقق من ملفات السجلات (logs) على الخادم الاستضافة للبحث عن أي أخطاء، ويمكنك العثور على ملف السجلات في مجلد storage/logs في مشروع Laravel. تأكدي أيضًأ من أن الاستضافة تدعم Laravel وLivewire وأن الإعدادات مثل إصدار PHP والامتدادات اللازمة مكونة بشكل صحيح. ثم التحقق من تثبيت جميع الاعتماديات (dependencies) على الخادم الاستضافة باستخدام Composer وتنفيذ الأمر الأمر التالي: composer install ملف env تحققي منه على الاستضافة وتأكدي من أن جميع الإعدادات المطلوبة مثل قاعدة البيانات وإعدادات Livewire مكونة بشكل صحيح. وتستطيعي تفعيل وسائط التصحيح في Livewire عن طريق تعيين debug إلى true في ملف .env: LIVWIRE_DEBUG=true
  17. إذا أردت موقع لتشغيل كود بايثون بسيط مباشرًة استخدم الموقع التالي وبإمكانك من خلاله إختيار إصدار مترجم بايثون الذي تريد تشغيل الكود من خلاله: https://www.jdoodle.com/python3-programming-online أما إذا أردت تثبيت مكتبات واستخدام محرر كامل أون لاين، فيوجد Codespaces وهو عبارة محرر vscode ولكن من خلال المتصفح ويدعم أيضًا التيرمنال منفذ الأوامر من خلال الرابط التالي: https://github.com/codespaces لكن عليك إمتلاك حساب على GitHub من أجل استخدامه. وهناك أيضًا مواقع أخرى مشابه مثل replit وcodesandbox.io.
  18. بدلاً من تخزين رقم الأيام للاشتراك في متغير، تستطيع تخزينه في قاعدة بيانات، وسيسمح لك ذلك بإجراء عمليات بحث أكثر كفاءة على بيانات الاشتراك. وذلك باستخدام نموذج بيانات بسيط يحتوي على حقل واحد لتاريخ انتهاء الاشتراك، ثم، استخدام تعبيرات SQL لتحديد العملاء الذين انتهت صلاحية اشتراكهم. وكمثال استخدم العبارة التالية لتحديد العملاء الذين انتهت صلاحية اشتراكهم قبل يوم واحد: SELECT * FROM subscriptions WHERE expiration_date < NOW() - INTERVAL 1 DAY وهناك طريقة أخرى وهي بدلاً من استخدام مكتبة node-cron، استخدم مؤقتات Node.js لتشغيل الوظيفة الدورية الخاصة بك، مما سيوفر لك تشغيل الوظيفة في الوقت المحدد بدقة أكبر. استخدم وظيفة setTimeout() أو setInterval()، لتشغيل الوظيفة الدورية الخاصة بك كل يوم في الساعة 12 منتصف الليل: const subscriptionChecker = () => { // Do something }; setTimeout(subscriptionChecker, 1000 * 60 * 60 * 24, 0); // Run the function every day at midnight
  19. لا داعي لإرفاق node_modules بالنسبة للمشكلة لديك، قم بتغيير المنفذ من 6000 إلى 3000 يبدوا أن منفذ 6000 به تعارض ما في الويندوز فلم يعمل لدي.
  20. هل قمت بتشغيل السيرفر عن طريق الأمر التالي في منفذ الأوامر: node index.js وفي حال كان اسم ملف السيرفر لديك مختلف عليك تعديل اسم index.js بعد ذلك من المفترض أن تقوم بتصفح المشروع على رابط مثل التالي: http://localhost:3000/ ولاحظ أن المنفذ لديك قد يكون مختلف عن 3000 فعليك استخدام المنفذ الصحيح الذي قمت باستخدامه في المشروع. وفي حال استمرار المشكلة أرفق مجلد المشروع هنا بعد ضغطه لتفقد المشكلة.
  21. كل شخص لديك طريقة مناسبة للتعلم واستقبال المعلومات مثل تدوين ملاحظات أو كتابة نقاط عامة في ورقة خارجية أو على الحاسوب وهكذا. لكن الطريقة الصحيحة هي بإتباع مسار تعليمي Roadmap والإلتزام به ثم دراسة الكورسات المطلوبة لإنهاء المسار التعليمي والإلتزام بتلك الدورات وعدم الإنتقال بين دورة وأخرى بحثًا عن أفضل دورة. بعد ذلك تجنب المشاهدة السلبية أي بدون التطبيق مع المدرب، وأيضًا كنصيحة حاول قدر الإمكان كتابة الكود بمفردك مرة أخرى، حيث ستجد أنك تتعلم الكثير من ذلك، فعند التطبيق مع المدرب ينتابك شعور أنك تعرف الكود والخطوات لكن ذلك غير صحيح، وسيتبين لك ذلك عند التطبيق بمفردك، الأمر الذي سيدفع لفهم الكود والتركيز في الخطوات والعلم من الأخطاء التي ستظهر لك. وبعد كل 10 فيديوهات مثلاً عليك بتنفيذ مشروع بسيط للتطبيق على ما تعلمته، مثل تنفيذ جميع التمرين التي تم تنفيذها في تلك الدروس ودمجها في تمرين واحد شامل، أو البحث عن مشروع بسيط على اليوتيوب. وكرر نفس الأمر، وعند الوصول إلى مستوى متقدم عليك بتنفيذ مشروع متقدم أكثر وهكذا لحين نهاية الدورة ثم تنفيذ مشروع حقيقي. وبخصوص عملية التلخيص وكتابة ملحوظات في مدونة خارجية أو على ملف نصي على الحاسوب في مجلد خاص الدورة، فقم بما تفضله والمناسب لك، لكن النقطة المهمة هو إنشاء مجلد خاص بالدورة وحفظ المشاريع والملخصات والملاحظات به إن أمكن. بالنسبة لا يناسبني كتابة ملخصات أو ملاحظات بل المتابعة والتطبيق بمفردي والبحث والقراءة والمشاهدة بعيدًا عن الدورة لفهم المزيد وعدم الإكتفاء بها وذلك ليس في كل الدروس بالطبع، لكن لا تدخر جهدًا في البداية، المهم هو أن تستوعب بشكل كافي وذلك ما سيؤهلك إلى حفظ ما يتم شرحه واسترجاعه واستخدامه بشكل أفضل. وفي حال نسيت أمرًا لديك جوجل صديقك الصدوق في رحلة تعلم البرمجة، طالما أنك استوعبت ما تم شرحه من قبل فستتمكن من الاسترجاع واستخدامه مرة أخرى فور البحث عنه. وبالطبع التطبيق العملي والمشاريع هي العامل الأهم لتثبيت ما تعلمته، ثم المراجعة مرة أخرى بعد مرور أسبوع مثلاً على ما سبق في البداية لأنك ستنسى بلا شك خاصًة مع الكم الهائل من المعلومات في بداية تعلمك، وذلك من خلال تنفيذ المشاريع مرة أخرى وهو أمر ممل لكن ستقوم بذلك بشكل أسرع وأيضًا لتتبين ما الجزء الذي أنت بحاجة إلى مراجعته في الدورة.
  22. الإمتحان سيكون على كامل محتوى الدورة، فما فائدة الشهادة في حال لم يتم إختبارك في كامل الدورة، حيث يتم كتابة تم وبنجاح دورة كذا، وليس إنهاء مسارات كذا وكذا، لذلك في حال قمت بإنهاء مسارات محددة، فمن المتوقع منك أن تكون على دراية ولديك خبرة بباقي المادة العلمية المشروحة بالدورة أي لديك خبرة بالبرمجة من قبل وفي اللغة والإطارات والمكتبات الخاصة بالدورة. وقد تم شرح الأمر هنا:
  23. التغيير إلى Vue مع Innertia يستحق ذلك إذا كنت تلاحظ أن Livewire بطيء في بعض العمليات البسيطة، فمن ناحية الأداء، Innertia أفضل بكثير من Livewire. ومن بعض الإيجابيات الرئيسية لـ Vue مع Innertia مقارنة بـ Livewire: أسرع بكثير من Livewire، خاصةً للعمليات البسيطة مثل إنشاء عداد تفاعلي. أكثر قابلية للتوسع من Livewire. يمكنك إضافة المزيد من الميزات إلى تطبيقك دون الشعور بالثقل. أكثر قابلية للنقل من Livewire. يمكنك استخدام نفس التطبيق على أي خادم يدعم PHP. وبعض السلبيات الرئيسية لـ Vue مع Innertia مقارنة بـ Livewire: أكثر تعقيدًا من Livewire. قد يستغرق الأمر بعض الوقت لمعرفة كيفية استخدامه. أكثر تعقيدًا من Livewire. قد يستغرق الأمر بعض الوقت لإعداده. وحول الاختلافات الرئيسية بين Livewire و Vue مع Innertia: Livewire يقوم بتحميل جميع البيانات من الخادم في كل مرة يتم فيها تحميل الصفحة، وذلك يمكن أن يؤدي إلى بطء الأداء للعمليات البسيطة مثل إنشاء عداد تفاعلي. Innertia يقوم بتحميل البيانات من الخادم فقط عند الحاجة إليها، مما يجعله أسرع بكثير من Livewire، خاصةً للعمليات البسيطة. Livewire يمكن أن يكون ثقيلًا في بعض الحالات، فإذا كنت تخطط لإضافة الكثير من الميزات إلى تطبيقك، فقد تواجه مشاكل في الأداء. Innertia أكثر قابلية للتوسع من Livewire، ويمكنك إضافة المزيد من الميزات إلى تطبيقك دون الشعور بالثقل. Livewire مقيد بـ Laravel، وإن كنت ترغب في استخدام تطبيقك على خادم لا يدعم Laravel، فلن تتمكن من القيام بذلك. أما Innertia فيمكنك استخدام نفس التطبيق على أي خادم يدعم PHP. Livewire أسهل في التعلم من Vue مع Innertia، لأنه يستخدم blade كمحرك قالب template engine. Innertia أكثر تعقيدًا من Livewire، وسيستغرق الأمر بعض الوقت لمعرفة كيفية استخدامه، خاصةً إذا كنت لا تعرف شيئًا عن Vue. Livewire أسهل في الإعداد من Vue مع Innertia، ويمكنك البدء في إنشاء تطبيق Livewire في دقائق. Innertia أكثر تعقيدًا من Livewire، ويستغرق الأمر بعض الوقت لإعداده، خاصةً إذا كنت لا تعرف شيئًا عن Vue. فإن كنت بحاجة عن إطار عمل تفاعلي سريع وقابل للتوسع وقابل للنقل، فإطار Vue مع Innertia هو الخيار الأفضل.
  24. بخصوص ما تعلمته فهو مطلوب في سوق العمل وهناك الكثير من الوظائف التي تطلب مطور MERN ويمكنك التقديم على الوظائف التي تسمح بالعمل عن بعد أو الشركات التي لا يوجد بها عقد عمل وبالتالي ستتمكن من العمل بها وهي شركات صغيرة بالطبع. حاول كتابة CV جيد ثم إنشاء معرض أعمال به أعمال حقيقية وتجنب إضافة نماذج صغيرة به بل مشاريع كاملة وبتصميم جيد فهو يدل على أن الكود جيد أيضًا وتم الإهتمام به. وعلى مستقل ستجد مشاريع تتطلب مطور MERN ولكن عليك إنشاء معرض أعمال جيد وأيضًا تعلم طريقة كتابة عرض جيد والتفاوض مع العملاء والأمر بحاجة إلى وقت وكنصيحة لا تقم بالتقديم على كل مشروع بل المشاريع التي ترى نفسك مناسب لها فقط. وستجد هنا تفصيل أكثر: بخصوص تلك النقطة، فأفضل طريقة هي تنفيذ المشاريع والتعمق أكثر في لغة جافاسكريبت حاول دراسة كورس Advanced، عليك بتنفيذ مشروع كل فترة لكي لا تنسى ما قمت بدراسته وأيضًا تحسين مهاراتك وإضافة مشاريع لمعرض أعمالك.
×
×
  • أضف...