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

Mustafa Suleiman

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

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

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

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

    297

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

  1. في البداية عليك تعريف صنف User الأساسي، حيث نستخدم AbstractUser من Django كقاعدة لصنف User، ويوفر AbstractUser جميع الخصائص والوظائف الأساسية للمستخدمين في Django، أي يمكننا إضافة أي خصائص إضافية نحتاجها إلى صنف User. class User(AbstractUser): phone_number = models.CharField(max_length=20) address = models.CharField(max_length=255) ثم تعريف صنف Vendor، ونرث من صنف User باستخدام class Vendor(User)، ونضيف خاصية type مميزة لصنف Vendor لتحديد نوع المستخدم، ونستطيع إضافة أي خصائص إضافية محددة لصنف Vendor نحتاجها. class Vendor(User): type = models.CharField(max_length=50, default="vendor") company_name = models.CharField(max_length=255) business_license_number = models.CharField(max_length=20) ثم تعريف صنف Customer، ونرث من صنف User باستخدام class Customer(User):، ونضيف خاصية type مميزة لصنف Customer لتحديد نوع المستخدم، أيضًا إضافة أي خصائص إضافية محددة لصنف Customer نحتاجها. class Customer(User): type = models.CharField(max_length=50, default="customer") shipping_address = models.CharField(max_length=255) billing_address = models.CharField(max_length=255) الآن نستخدم Vendor.objects.create_user لإنشاء بائع جديد ونمرر اسم المستخدم وكلمة المرور وخصائص أخرى إلى الطريقة create_user. from django.contrib.auth import authenticate username = "test_vendor" password = "password1234" vendor = Vendor.objects.create_user(username=username, password=password, type="vendor") # ... (إتمام عملية تسجيل البائع) أو نستخدم Customer.objects.create_user لإنشاء عميل جديد، ونمرر اسم المستخدم وكلمة المرور وخصائص أخرى إلى الطريقة create_user. from django.contrib.auth import authenticate username = "test_customer" password = "password5678" customer = Customer.objects.create_user(username=username, password=password, type="customer") # ... (إتمام عملية تسجيل العميل) وعليك استخدام الطريقة create_user الخاصة بكل صنف، واستيراد جميع النماذج (models) المُستخدمة في الكود.
  2. أهم ما في الأمر، هو تسليمك الكود المصدري وذلك من خلال ملف مضغوط بصيغة rar مثلاً، وأيضًا من خلال مستودع GitHub. وإن كانت هناك أية ملفات مصدرية أخرى مثل ملفات التصميم يتم تسليمها، لكن ذلك على إشتراط أنه تم الإتفاق على ذلك من البداية، فأحيانًا تكوت تكلفة المشروع أقل مقابل عدم تسليم تلك الملفات. يجب الرجوع إلى الإتفاق وشروطه لمعرفة حقوقك. وإن كانت هناك بيانات خاصة بالاستضافة الخاصة بالمشروع يجب تسليمها أيضًا، بعد الاستلام عليك تغيير بيانات الدخول والحساب لكي لا يتمكن شخص من الدخول. وستجد تفاصيل هنا:
  3. في حال كانت هناك تطورات هامة كالتي أشرت إليها يتم تحديث محتوى الدورة بالتأكيد، وعامًة جميع الدورات بالأكاديمية يتم تحديث محتواها كل فترة لمواكبة التطورات. لكن دورة إدارة تطوير المنتجات، ليست موجهة للمطورين بشكل خاص، بل للفئة التالية: لمن ليس لديه خبرة في مجال البرمجة أو التصميم ويريد تنفيذ مشروعه الناشئ لمن يريد تعلم إدارة تطوير المنتجات لتحسين فرصه التوظيفية لمن يعمل في إدارة المنتجات ويرغب بتوسعة معلوماته حول عملية التطوير وإدارتها لذا هي مفيدة للمطور الذي يريد تعلم الجانب الإداري، لكن الفنيات الخاصة برفع التطبيق ليست من ضمن إختصاص الدورة، بل يتم شرح سير عملية تطوير المنتج وطرح أمثلة عملية، لذا تخصص الدورة هو التالي: المفاهيم الأساسية في إدارة تطوير المنتجات دارسة السوق وتحليل المنافسين ومعرفة متطلبات العملاء كتابة ملفات المواصفات التقنية للمنتج وميزاته وتحديد أولويات التنفيذ كتابة حالات الاستخدام Use cases وقصص المستخدمين User stories المخططات الأولية Wireframes وإنشاؤها التعرف على أنواع MVP توظيف مصممين للهوية البصرية Brand Image ولواجهة المستخدم وتجربة المستخدم UI/UX توظيف مطورين للواجهة الأمامية Front-end لمواقع الويب وللواجهة الخلفية Back-end ولتطبيقات الجوال نشر مواقع الويب وتطبيقات الجوال والوصول إلى مختلف الإحصائيات لتحليلها التطوير المستمر للمنتجات باعتماد منهجية أجايل Agile عامًة ستجد السياسات هنا بالتحديثات الخاصة بها وتستطيع تفقدها قبل تطوير التطبيق: https://support.google.com/googleplay/android-developer/answer/14693005?hl=en
  4. ما تريده يتم تنفيذه بواسطة intersection observer API وهي الطريقة الحديثة في جافاسكريبت لتنفيذ أمر معين في الصفحة عند الوصول لنقطة معينة بها. وبشكل بسيط مراقب التقاطع أو intersection observer API هو واجهة برمجية (API) في جافاسكريبت تسمح لك بمراقبة ظهور عنصر معين في منطقة عرض الصفحة (viewport). وكمثال: const element = document.getElementById("my-element"); const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { // تشغيل الوظيفة عندما يظهر العنصر console.log("The element is visible!"); } else { // تشغيل الوظيفة عندما يختفي العنصر console.log("The element is hidden!"); } }); }); observer.observe(element); نقوم بمراقبة عنصر #my-element. عندما يظهر العنصر في منطقة العرض، يتم تشغيل الوظيفة التي تسجل "The element is visible!"، وعندما يختفي العنصر، يتم تشغيل الوظيفة التي تسجل "The element is hidden!". ستجد شرح مفصل هنا:
  5. لا مشكلة في ذلك، فبتلك الآلية تعمل مكتبة React، لكن يجب أن تكون على دراية بما تفعله، فمكتبة مثل React تم تطويرها على مدار سنوات وإختبارها في كافة أنواع المشاريع وبمختلف الأحجام والتعقيد. لذا بشكل صريح مهما فعلت لن تصل لنفس الجودة والأداء لمكتبة أو إطار تم تطويره واستخدامه على مدار سنوات. لذا من الأفضل أن تستخدم مكتبة React أو أحد الإطارات الأخرى الخاصة بالواجهة الأمامية مثل Angular و Vue.js. وإذا كان أمر الـ SEO مهم بالنسبة لك إذن استخدم NEXT.JS.
  6. ابحث على اليوتيوب عن قرآن كريم ثم اضغط على الفلاتر ثم اضغط على ترخيص Creative Commons وسيظهر لك أصوات المقرئين المتاحة للنشر بدون حقوق ملكية. ومع كل عملية بحث قم بتحديد ترخيص Creative Commons. لكن لا تقم بتحميل الفيديو ثم رفعه على قناتك كما هو، قم بالتعديل عليه سواء خلفية أو أي شيء، أما الصوت فتستطيع الحصول عليه واستخدامه كما تريد.
  7. من خلال CSS حيث يوجد خاصية width وهي تحدد عرض العنصر، وخاصية height والتي تحدد ارتفاع العنصر. div { width: 200px; height: 100px; }
  8. لا أرى إضافة قد تؤدي إلى ذلك سوى إضافة css-intellisense حاول تعطيلها ثم إعادة تشغيل vscode والتجربة.
  9. أرجو توفير صورة بالإضافات التي لديك
  10. من الأيقونة التالية الخاصة بالإضافات extensions ابحث عن أي إضافة باسم remix:
  11. هل لديك إضافة خاصة بـ blade-remix-icon؟
  12. بالطبع من الأفضل تقسيم المهام وذلك هو النهج الصحيح عند تطوير مشاريع كبيرة، ولذلك فوائده: تقسيم العمل إلى أقسام أصغر يجعل عملية البرمجة أكثر سهولة وإدارة. يمكن لفريق العمل التركيز على وظائف محددة دون الحاجة إلى فهم جميع جوانب التطبيق. العمل على القسمين بشكل متزامن، مما يسرع عملية التطوير. يصبح من السهل إصلاح الأخطاء وتحديث الوظائف في كل قسم على حدة. تطوير واختبار كل خدمة بشكل مستقل دون التأثير على الخدمات الأخرى. ويجب تصميم التطبيق بشكل يسمح بتقسيمه إلى قسمين بشكل فعال. يجب أن تكون الوظائف العامة موجودة في قسم واحد فقط، بينما يجب أن تكون الوظائف الخاصة بكل خدمة موجودة في القسم الخاص بها، وبالطبع استخدام نظام إدارة الإصدارات لتتبع التغييرات التي يتم إجراؤها على كل قسم. مع وجود تواصل فعال بين فريق العمل في كل قسم لضمان التكامل بين الوظائف المختلفة، أيضًا اختبار التطبيق بشكل شامل للتأكد من أن جميع الوظائف تعمل بشكل صحيح في كل قسم. وبالطبع يوجد أدوات خاصة بإدارة المشاريع مثل منصة أنا وTRELLO وغيرهم.
  13. لا فرق بينهم، حيث نستخدم علامات الإقتباس في البرمجة للإشارة إلى السلاسل النصية، أي يتم ترجمة النص داخلها على أنه نص. بالطبع هناك استثناء لذلك من خلال الدالة f-strings وهي ميزة جديدة تم إدخالها في بايثون 3.6، عبارة عن نوع خاص من السلاسل النصية تسمح بتضمين المتغيرات مباشرة داخلها. مثال: length = 5 width = 3 area = length * width print(f"The area of the rectangle is {area}") لاحظ تم طباعة قيمة المتغير area ضمن السلسلة النصية.
  14. لا يوجد ما يسمى لغة آمنة أو نظام آمن، لكن يوجد لغة قوية ويصعب اختراقها وأنظمة كذلك. والأمر يعتمد بشكل كبير على المُبرمج نفسه وعلى إتباعه الممارسات الجيدة أثناء تطويره للمشروع وإهتمامه بالجانب الأمني وأن يكون على دارية بالأمور التي تُعرض الكود للإختراق. كمثال: لكن بالرغم من كون لغة PHP آمنة إلا أن كونها لغة شائعة الاستخدام ومفتوحة المصدر يشجع على استغلالها قبل المخترقين الذين يستغلون أي ثغرات أمنية تؤثر على تطبيقات PHP لتنفيذ الهجمات على المواقع، لذا من المهم إبقاء مواقعك محدثة إلى آخر الإصدارات من PHP. أي هي تعد من اللغات ضعيفة التنميط weakly-typed بمعنى أنك قادر على تخزين رقم في متغير ما ثم تخزين نص في نفس المتغير وهذا الأمر يجعل اللغة أكثر مرونة لكنه قد يسبب أخطاء غير متوقعة في التطبيقات، وأضافت الإصدارات الحديثة بدءًا من PHP 7 إمكانية تحديد أنواع المتغيرات والقيم الممررة إلى الدوال والمعادة منها، يمكن للمطورين الاستفادة من هذه الميزات لتحسين تطبيقاتهم الجديدة. وهناك العديد من لغات البرمجة الأخرى الأكثر أمانًا من PHP، مثل Java و C#، لذا تجد أنه يتم استخدام Java في مواقع البنوك مثلاً.
  15. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، لكن كمساعدة في تنفيذ المطلوب. المطلوب دمج صورتين بواسطة بايثون، لذا ستحتاج استخدام مكتبة OpenCV لمعالجة الصور ومكتبة NumPy للتعامل مع المصفوفات. حيث ستقوم بقراءة الصورة الأولى من خلال دالة معينة في OpenCV، ثم نفس الأمر للصورة الثانية. بعد ذلك التحقق من تطابق أبعاد الصورتين و إظهار رسالة خطأ إذا لم تتطابق أبعاد الصورتين، ثم دمج الصورتين باستخدام دالة معينة في OpenCV أيضًا. بعد ذلك عرض الصورة الناتجة و انتظار ضغط مفتاح لإغلاق النافذة، ويمكن حفظ الصورة الناتجة في ملف باسم output.jpg لكن تلك نقطة إختيارية. وتستطيع استخدام مكتبات أخرى لدمج الصور مثل Pillow.
  16. ما تتحدث عنه هو Server Components وهي ميزة جديدة في React وعليك استخدام أحدث إصدار من React وهو 18.20 لتستخدمها. وتلك الميزة تعمل على حل مشاكل موجودة في مشاريع React مثل مشكلة Water fall وهي أنّ المكونات قد تظهر بشكل متأخر وليس بشكل متتالي أو سويًا، حيث أن بعض المكونات قد تطلب بيانات من سيرفر مختلف والبعض الآخر يطلب بيانات من سيرفر آخر لذا وقت الرد ليس واحد، فتجد أن مكون قد ظهر بينما مكون آخر قد ظهر بعد فترة وقام بإزاحة المكون الذي ظهر إلى الأسفل لأنه من المفترض أن يظهر قبله في الكود لدينا لكن لم يظهر بسبب تأخر البيانات. أو حتى جلب البيانات من نفس السيرفر، فتخيل مكون أب بداخله مكونين أبناء، ويقوم المكون الأب بجلب بيانات أو أيًا كان المهم يجري إتصال مع الـ API في الواجهة الخلفية، فلن تظهر المكونات الأبناء حتى يكتمل الإتصال ويتم الحصول على البيانات. أيضًا في حال حذف مكون ولا نريده في المشروع بعد الآن، سنظل نحصل على البيانات الخاصة به من الواجهة الخلفية، فتخيل مثلاً دالة باسم fetchAllDetails تجلب كل البيانات الخاصة بقسم معين سنجد أنها تجلب بيانات لمكون لم يعد نستخدمه وبالتالي تلك مشكلة بالنسبة لصيانة الكود بسبب وجود كود غير مستخدم ويستهلك موارد التطبيق لدينا والوقت المتاح للتحميل. أيضًا الطريقة التي تعمل بها React هو تحديث الـ DOM من خلال JS وعرض المكونات من خلال جافاسكريبت، أي في بداية تحميل صفحة التطبيق لا يوجد أي كود HTML لدينا ويلزم استخدام جافاسكريبت لعرض المكونات وتحديث الـ DOM وتلك عملية ثقيلة على المتصفح وأيضًا بطيئة بالنسبة للمستخدم. لذا ميزة Server Components تقوم بمعالجة المكون على السيرفر (الخادم) ثم توفير كود HTML وجافاسكريبت مباشرًة للمتصفح، أي تتم الأمور كلها من قبل الخادم. وبالطبع نستخدم ذلك في المكونات التي ليست بحاجة إلى تفاعل مع المستخدم، والتي بحاجة إلى تفاعل نستخدم Client components
  17. أرجو التوضيح خبرة في https للقيام بماذا؟ عامًة في أي دورة برمجية في الأكاديمية، سيتم توضيح كيفية التعامل مع طلبات AJAX والتي تستخدم بروتوكول http وذلك في حال تم استخدامها بالدورة. لكن من الأفضل لو قمت بالقراءة أو دراسة الأمر بشكل بسيط لمعرفة الأساسيات وما معنى أرقام الأخطاء مثل 404 و500 أو أرقام نجاح الطب مثل 200، وستجد هنا مرجع لك.
  18. أرجو طرح سؤالك أسفل فيديو الدورة لمساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا، ستجد صندوق تعليقات في نهاية صفحة الدرس. وعند رفع المشروع، نقوم بضغط مجلد المشروع من الخارج بواسطة winRAR ثم نرفع المجلد المضغوط وليس الملفات بشكل منفرد.
  19. غالبًا مجلد bin لديك ليس مُضمن بمسارات البيئة System's environment variable، أي مسار مشابه للتالي: C:\ProgramFiles\Java\jdk1.8.0_05\bin توجهي للمسار المشابه على حاسوبك ثم نسخه ثم إضافته لمتغيرات البيئة. فذلك المجلد bin يحتوي على ملف باسم javac كالتالي: وبعد إضافته أعيدي تشغيل منفذ الأوامر.
  20. هل استخدمت المكتبة التالية؟ https://www.npmjs.com/package/@paypal/react-paypal-js والكود لديك ليس به مشكلة فالزر يظهر عند تجربته، يمكنك تفقد المثال التالي لتفهم الأمر والتعديل على الكود وتجربة الكود الخاص بالزر لديك: https://paypal.github.io/react-paypal-js/?path=/docs/example-paypalbuttons--default
  21. لم تعد استضافة heroku مجانية، ومن البدائل المتاحة كانت منصة railway إلا أنها لم تعد مجانية أيضًا، ومن حيث السهولة في الاستخدام لديك الآن vercel (تدعم (Node.js, Go, Ruby, Python) و أيضًا يوجد Render.com وcyclic.sh، بجانب Netlify والتي تدعم اللغات والبيئات التالية: Node.js Ruby Python PHP Go Java والمزيد يمكنك تفقده من خلال المستند الرسمي. وبخصوص استضافة قاعدة بيانات، فلديك planetscale وsupabase وcockroachDB بالإضافة إلى Atlas.
  22. حاول إعادة إنشاء ملف ldpaths وذلك من خلال إنشاء ملف فارغ باسم ldpaths في المجلد etc داخل مجلد R الرئيسي: sudo touch /usr/lib/R/etc/ldpaths ثم تعديل ملف Rprofile في مجلد R الرئيسي (~/.Rprofile)، أو إنشائه إذا لم يكن موجودًا. Sys.setenv("R_HOME"="/usr/lib/R") إن استمرت المشكلة تأكد من أنك قمت بإزالة R بشكل كامل قبل المحاولة الأولى لإعادة التثبيت، تحقق من ذلك بواسطة: dpkg -l | grep r-base وإن كان لديك أي حزم من R مثبتة، فيجب إزالتها جميعًا باستخدام الأمر: sudo apt-get purge r-base r-base-core r-recommended r-cran-* وإذا واجهتك أي مشاكل، فربما تحتاج إلى إعادة تهيئة متغيرات البيئة المتعلقة بـ R_HOME، وذلك عبر تعديل ملفات الإعداد في /etc/profile.d/ أو /etc/environment.
  23. عليك بالتوجه إلى الرابط التالي وتسجيل الدخول إذا طلب منك ذلك: https://accounts.hsoub.com/settings?service=11 ثم ستجد الاسم واسم العائلة، قم بتغييره للاسم الذي تريده، وبالأسفل اضغط على حفظ التعديلات. وستجد أنه تم تعديل الاسم هنا، وإذا لم يتم ذلك، قم بتسجيل الخروج ثم إعادة تسجيل الدخول.
  24. الكود يعمل بشكل سليم لا مشكلة، لرؤية النتيجة لا تقومي بإدخال أية أسماء أخرى اضغطي على Enter وسيتم عرض النتائج.
×
×
  • أضف...