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

Mustafa Suleiman

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

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

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

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

    365

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

  1. أولاً عليك إنشاء حساب على مركز المعلومات الوطنيhttps://www.moi.gov.sa/wps/vanityurl/ar/nic وتفعيل حسابك. ثم تأتي خطوة الحصول على مفتاح API من خلال التالي: تسجيل الدخول إلى حسابك انتقلي إلى قسم "التطبيقات" اضغطي على "إنشاء تطبيق جديد" أدخلي اسم التطبيق ووصفًا له حددي الخدمات التي تريد الوصول إليها (خدمة "الاستعلام عن بيانات المواطن") اضغطي على "إنشاء" وسيتم توفير مفتاح API الخاص بك بعد ذلك عليك تثبيت إضافة "WP API Manager" من مستودع ووردبريس وتفعيل الإضافة ثم انتقلي إلى "الإعدادات" -> "WP API Manager". ثم إضافة مفتاح API بالضغط على "إضافة نقطة نهاية جديدة" وأدخلي اسم نقطة النهاية (مثل "مركز المعلومات الوطني") ثم عنوان URL نقطة النهاية. ثم أدخلي مفتاح API وحددي طريقة المصادقة (Bearer Token)، ثم اضغطي على "حفظ. الآن عليك إنشاء نموذج تسجيل مستخدم جديد، وذلك بإنشاء صفحة جديدة في ووردبريس ثم أضيفي نموذجًا باستخدام عنصر "Formidable Forms". وأضيفي الحقول التالية إلى النموذج: الاسم رقم الجوال العنوان الوطني ومن خلال الـ API تستطيعي ملء تلك الحقول عن طريق الاستعلام بالرقم القومي مثلاً.
  2. التوثيق الرسمي الجديد هو: https://react.dev/reference/react وفي حال مواجهة مشكلة في تصفحه، فربما يوجد مشكلة في الإنترنت لديك أو وجود إضافة في المتصفح تسبب تلك المشكلة حاول تجربة متصفح آخر، أو اعتمد على بروكسي من خلال الرابط التالي تستطيع تصفح الموقع مباشرًة: https://azureserv.com/reference/react?__cpo=aHR0cHM6Ly9yZWFjdC5kZXY وإن تمكنت من تصفحه إذن المشكلة في الإنترنت لديك، حيث يتم حجب الموقع لسبب ما والبروكسي هو الموقع التالي إذا أردت استخدام لموقع آخر: https://plainproxies.com/resources/free-web-proxy
  3. لستَ بحاجة إلى استخدام NEXT AUTH في مشروعك إذا لم يكن لديك باك إند مبني على Next.js. لأن NEXT AUTH هو حل مخصص لتسهيل مهام المصادقة في مشاريع Next.js الكاملة، حيث يتكامل بسلاسة مع واجهة المستخدم الأمامية ويوفر واجهة برمجة تطبيقات سهلة الاستخدام للتعامل مع المستخدمين في واجهة المستخدم الخلفية. بينما أنت ستعتمد على باك إند من خلال إطار Laravel لذا بإمكانك الربط بواسطة واجهة برمجة تطبيقات RESTful كالتالي: إنشاء واجهة برمجة تطبيقات RESTful في Laravel للتعامل مع عمليات المصادقة وإدارة المستخدمين. استخدم واجهة برمجة تطبيقات RESTful من Next.js لإرسال طلبات HTTP إلى Laravel للتحقق من صحة المستخدمين وإنشاء جلسات جديدة. استخدام مكتبات مثل Axios أو Fetch API لإجراء طلبات HTTP من Next.js إلى Laravel. أو استخدام JWT (JSON Web Tokens): كالتالي: إنشاء JWT في Laravel عند تسجيل دخول المستخدم. إرسال JWT إلى Next.js كملف تعريف ارتباط أو في عنوان URL. تحقق من صحة JWT في Next.js قبل السماح للمستخدم بالوصول إلى صفحات أو ميزات معينة. أو استخدام مكتبة مثل Passport فهي مكتبة Laravel شائعة لتسهيل مهام المصادقة، ونعتمد عليها لإنشاء واجهة برمجة تطبيقات OAuth 2.0 في Laravel. وبالطبع تستطيع استخدام مكتبة Passport في Next.js للتفاعل مع واجهة برمجة تطبيقات OAuth 2.0. لذا في حال وجود متطلبات مصادقة بسيطة، فاستخدام واجهة برمجة تطبيقات RESTful كافيًا، بينما لميزات مصادقة أكثر تقدمًا، مثل التخويل على أساس الأدوار، فنلجأ إلى JWT أو Passport كخيار أفضل.
  4. لاحظ وجود حرف a زائد في كلمة ClaassName الصحيح هو ClassName أي كالتالي: const paragraph = document.getElementsByClassName("content");
  5. jQuery تم تطويرها في وقت تكنولوجي قديم وكانت مصممة لمعالجة صعوبات التلاعب والتحكم بالـ DOM في المتصفحات القديمة. ,الـ DOM يعني "Document Object Model"، وهو نموذج برمجي يُستخدم في تمثيل وتنظيم هيكل ملفات HTML أو XML في موقع ويب لكننا نستخدم HTML في الغالب لمواقع الويب، وبببساطة، يمثل الـ DOM الصفحة ويتيح لك كمبرمج التفاعل مع الصفحة بواسطة لغة برمجة الويب وهي JavaScript. فعندما يتم تحميل صفحة ويب، يقوم المتصفح بإنشاء نموذج لتلك الصفحة باستخدام الـ DOM، ويتكون النموذج من عناصر (elements) كالعناصر المرئية (مثل الأزرار والنصوص والصور) والعناصر الأخرى مثل الروابط والجداول. وعند حدوث تغيير أو تحديث للمحتوى على الصفحة، يتم تحديث الـ DOM بشكل ديناميكي، مما يسمح للصفحة بالتفاعل مع المستخدم بدون إعادة تحميل الصفحة بأكملها، مما يجعل تجربة المستخدم أكثر سلاسة وديناميكية عند استخدام تطبيقات الويب. ومع تقدم التكنولوجيا وظهور المتصفحات الحديثة، تم تحسين دعم JavaScript الأساسي لعمليات DOM ومعالجة الأحداث، مما قلل من الحاجة إلى استخدام jQuery، وبالأخص بدايًة من تحديث ES6 في عام 2016. ولعلك تتسائل لماذا نستخدم jQuery إذن؟ السبب هو أن نسبة كبيرة جدًا من المواقع كانت تستخدم jQuery وما زالت تستخدمها حتى الآن لذلك يجب الإعتياد على استخدام تلك المكتبة حتى تتمكن من التعديل والتطوير على أحد تلك المواقع عند دخول سوق العمل. وبالإضافة لمكتبة jQuery سنستخدم مكتبة Font Awesome وهي مكتبة خاصة بالأيقونات، ومن خلالها نستطيع إضافة أيقونات بشكل سهل في موقعنا. ستجد تفصيل أكثر هنا: شرح jQuery
  6. عليك توصيل قارئ 3M 9000 بجهاز الكمبيوتر الخاص بك بشكل صحيح، ويجب وجود بيئة ASP Classic مثبتة على جهاز الكمبيوتر أيضًا، وستحتاج إلى مكتبة ActiveX لـ قارئ 3M 9000 وتستطيع تنزيلها من موقع 3M على الويب. بالإَضافة إلى كتابة كود ASP Classic لاستخدام مكتبة ActiveX وقراءة بيانات MRZ من جواز السفر. للتوضيح سيكون كود ASP Classic مشابه للتالي: <% Dim reader As Object Dim data As String Set reader = CreateObject("3M.Reader") reader.Open() data = reader.ReadMRZ() reader.Close() Set reader = Nothing %> واستبدل "3M.Reader" باسم مكتبة ActiveX التي قمت بتثبيتها.، وسيتم قراءة بيانات MRZ من جواز السفر وحفظها في المتغير "data" والذي تستطيع استخدامه لعرض معلومات جواز السفر على صفحة الويب.
  7. بالطبع، وأيضًا هناك متطلبات لازمة للتعامل معه حيث يتطلب فهمًا عميقًا لمفاهيم تعلم الآلة ومنها: البرمجة بلغة Python الجبر الخطي حساب التفاضل والتكامل نظرية الاحتمالات وتتوفر العديد من الوثائق لـ TensorFlow، ولكن معظمها موجه للمستخدمين ذوي الخبرة. لذا يتم التعلم أولاً من خلال Keras وScikit-learn أو PyTorch. حيث أنّ Keras هو واجهة برمجة تطبيقات عالية المستوى مبنية على TensorFlow، و Scikit-learn هي مكتبة Python شائعة الاستخدام لتعلم الآلة، أما PyTorch فهو إطار عمل مشابه لـ TensorFlow ولكنه أسهل في الاستخدام. بالطبع السابق مع مكتبات مثل pandas للتعامل مع البيانات.
  8. المشكلة بسبب حزمة typescripts فهي بالمشروع بالإصدار 5.3.3 بينما في مكتبة react-scripts تريد تنزيل الحزمة بالإصدار 3.2.1. لذا لحل تلك المشكلة قم بخفض الإصدار كالتالي في ملف package.json: typescript: "^3.2.1" ثم تنفيذ أمر npm i
  9. من الطبيعي أن يظهر كود الواجهة الأمامية HTML, CSS, JS، وإذا أردت إخفاءهم عليك باستخدام أداة مثل zend guard. لكن كود PHP في الواجهة الخلفية ليس لأحد صلاحية الوصول إليه سواك أنت حيث لديك صلاحية الوصول للسيرفر الذي به ملفات الواجهة الخلفية.
  10. الطريقة الأولى سهلة التنفيذ ولا تتطلب الكثير من التعديلات على الكود، وربما تزيد من وقت تحميل الصفحة ومن خطر حدوث أخطاء. أما الطريقة الثانية تمنع حدوث مشكلات حجز المخزون وتقلل من خطر حدوث أخطاء، ولكن أكثر تعقيدًا من الطريقة الأولى وتتطلب المزيد من التعديلات على الكود. حاول استخدام حزمة Laravel Cashier لدمج بوابات الدفع بسهولة.
  11. يمكنك ذكر مثال لأحدها لتوضيح ما يحدث
  12. تعتمد الطريقة على آلية ربط حسابك على المنصة بحسابك على منصة التواصل الاجتماعي (مثل فيسبوك أو تويتر) وبالتالي، يمكن للموقع تتبع نشاطك والتأكد من أنك قمت بمتابعة الحسابات المطلوبة. ولا ينصح باستخدام تلك الطريقة لأسباب أخلاقية وأيضًا لأنها قد تؤدي إلى إغلاق حسابك على منصة التواصل الاجتماعي. وكبدائل أخلاقية لزيادة المتابعين، قم بإنشاء محتوى جذاب وذو جودة عالية، التفاعل مع متابعيك بشكل منتظم، استخدام هاشتاقات relevante، الترويج لحسابك على منصات أخرى واستخدام الإعلانات المدفوعة.
  13. أرجو حذف الملفات المؤقتة من خلال تحديث الصفحة بواسطة الضغط على CTRL + F5. إن استمرت المشكلة حاول التجربة من متصفح أو جهاز آخر لمعرفة أين تكمن المشكلة، إن استمرت حاول إعادة تشغيل راوتر الإنترنت.
  14. يجب توضيح ما الغرض من ذلك لتقديم نصيحة مفيدة لك، لكن عامًة في حال كان المحتوى مرتبط ببعضه ويُفضل جمعه في صفحة واحدة فإذن ستحقق استفادة وزيادة عدد الصفحات التي تم زيارتها من قبل المستخدم وتسهيل عملية الوصول للمحتوى. وأيضًا المحتوى الطويل مفيد للـ SEO في حال كان مرتبط ببعضه، لكن يجب توفير تقنية Lazy load من أجل ألا يؤثر المحتوى الطويل على سرعة التحميل فتصبح النتيجة عكسية. أما في حال كان المحتوى غير مرتبط بحيث لا يُفضل وضعه في صفحة واحدة، إذن سيؤثر ذلك على الـ SEO، وربما يصبح التنقل في صفحة واحدة معقدًا للمستخدمين الذين يبحثون عن معلومات محددة، وبالتالي يؤثر ذلك على تجربة المستخدم والتي هي العامل الأهم بالنسبة لجوجل حاليًا. وستفقد الترتيب على كلمات معينة، حيث يجب الربط بين صفحات الموقع داخليًا وإنشاء شبكة فيما بينها. بشكل بسيط إن كان ما ستفعله يعني تجربة مستخدم أفضل فلا مشكلة، ويمكن معالجة ذلك الأمر، لكن إن كان العكس فلا تقم بذلك.
  15. في البداية عليك تعريف صنف 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) المُستخدمة في الكود.
  16. أهم ما في الأمر، هو تسليمك الكود المصدري وذلك من خلال ملف مضغوط بصيغة rar مثلاً، وأيضًا من خلال مستودع GitHub. وإن كانت هناك أية ملفات مصدرية أخرى مثل ملفات التصميم يتم تسليمها، لكن ذلك على إشتراط أنه تم الإتفاق على ذلك من البداية، فأحيانًا تكوت تكلفة المشروع أقل مقابل عدم تسليم تلك الملفات. يجب الرجوع إلى الإتفاق وشروطه لمعرفة حقوقك. وإن كانت هناك بيانات خاصة بالاستضافة الخاصة بالمشروع يجب تسليمها أيضًا، بعد الاستلام عليك تغيير بيانات الدخول والحساب لكي لا يتمكن شخص من الدخول. وستجد تفاصيل هنا:
  17. في حال كانت هناك تطورات هامة كالتي أشرت إليها يتم تحديث محتوى الدورة بالتأكيد، وعامًة جميع الدورات بالأكاديمية يتم تحديث محتواها كل فترة لمواكبة التطورات. لكن دورة إدارة تطوير المنتجات، ليست موجهة للمطورين بشكل خاص، بل للفئة التالية: لمن ليس لديه خبرة في مجال البرمجة أو التصميم ويريد تنفيذ مشروعه الناشئ لمن يريد تعلم إدارة تطوير المنتجات لتحسين فرصه التوظيفية لمن يعمل في إدارة المنتجات ويرغب بتوسعة معلوماته حول عملية التطوير وإدارتها لذا هي مفيدة للمطور الذي يريد تعلم الجانب الإداري، لكن الفنيات الخاصة برفع التطبيق ليست من ضمن إختصاص الدورة، بل يتم شرح سير عملية تطوير المنتج وطرح أمثلة عملية، لذا تخصص الدورة هو التالي: المفاهيم الأساسية في إدارة تطوير المنتجات دارسة السوق وتحليل المنافسين ومعرفة متطلبات العملاء كتابة ملفات المواصفات التقنية للمنتج وميزاته وتحديد أولويات التنفيذ كتابة حالات الاستخدام 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
  18. ما تريده يتم تنفيذه بواسطة 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!". ستجد شرح مفصل هنا:
  19. لا مشكلة في ذلك، فبتلك الآلية تعمل مكتبة React، لكن يجب أن تكون على دراية بما تفعله، فمكتبة مثل React تم تطويرها على مدار سنوات وإختبارها في كافة أنواع المشاريع وبمختلف الأحجام والتعقيد. لذا بشكل صريح مهما فعلت لن تصل لنفس الجودة والأداء لمكتبة أو إطار تم تطويره واستخدامه على مدار سنوات. لذا من الأفضل أن تستخدم مكتبة React أو أحد الإطارات الأخرى الخاصة بالواجهة الأمامية مثل Angular و Vue.js. وإذا كان أمر الـ SEO مهم بالنسبة لك إذن استخدم NEXT.JS.
  20. ابحث على اليوتيوب عن قرآن كريم ثم اضغط على الفلاتر ثم اضغط على ترخيص Creative Commons وسيظهر لك أصوات المقرئين المتاحة للنشر بدون حقوق ملكية. ومع كل عملية بحث قم بتحديد ترخيص Creative Commons. لكن لا تقم بتحميل الفيديو ثم رفعه على قناتك كما هو، قم بالتعديل عليه سواء خلفية أو أي شيء، أما الصوت فتستطيع الحصول عليه واستخدامه كما تريد.
  21. من خلال CSS حيث يوجد خاصية width وهي تحدد عرض العنصر، وخاصية height والتي تحدد ارتفاع العنصر. div { width: 200px; height: 100px; }
  22. لا أرى إضافة قد تؤدي إلى ذلك سوى إضافة css-intellisense حاول تعطيلها ثم إعادة تشغيل vscode والتجربة.
  23. أرجو توفير صورة بالإضافات التي لديك
  24. من الأيقونة التالية الخاصة بالإضافات extensions ابحث عن أي إضافة باسم remix:
  25. هل لديك إضافة خاصة بـ blade-remix-icon؟
×
×
  • أضف...