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

Mustafa Suleiman

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

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

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

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

    407

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

  1. هل تقصد برامج المونتاج؟ حاليًا أنصحك بتجربة برنامج clipchamp من مايكروسوفت فهو مجاني وبه ميزة تسجيل الشاشة والكاميرا وعمل مونتاج وميزات أخرى. أيضًا يوجد برامج مونتاج أخرى مثل: Adobe Premiere Pro أحد أكثر برامج المونتاج شيوعًا وقوة، ويوفر مجموعة واسعة من الميزات والأدوات للمستخدمين المحترفين. Final Cut Pro برنامج مونتاج شائع آخر لنظام macOS، ويوفر واجهة سهلة الاستخدام ومجموعة متنوعة من الميزات. DaVinci Resolve برنامج مونتاج مجاني ومفتوح المصدر يوفر مجموعة واسعة من الميزات والأدوات، بما في ذلك تحرير الفيديو والصوت والمؤثرات المرئية. وبالطبع يوجد Camtasia وهو الأسهل في حال أردت عمل شروحات على اليوتيوب.
  2. رسالة "401 Unauthorized" تعني أن الطلب لم يتم تصديقه بنجاح عند إرساله إلى الخادم، أي أن الـ JWT (JSON Web Token) الذي تم إرساله مع الطلب غير صالح أو غير موجود. عليك بالتالي: تأكد من أنك قمت بتسجيل الدخول بنجاح وحصلت على JWT الصحيح عند تسجيل الدخول. التأكد من أنك تقوم بإرسال الـ JWT الصحيح مع الطلب، وأنت تقوم بذلك بالفعل في كود العميل باستخدام: "x-auth-token": user?.data?.token وتحقق من أن خادمك يستخدم نفس (JWT_SECRET) الذي تم استخدامه عند إنشاء الـ JWT ويجب أن يكون متطابقًا على الجانبين (الخادم والعميل) حتى يمكن التحقق من الـ JWT بنجاح. وقم بتضمين وسيط الحماية (protect) في مسار الطلب /api/auth/change_password للتحقق من الـ JWT قبل تنفيذ العملية وتأكد من أن الوسيط موجود في سلسلة وسائط التوجيه التي تتعامل مع هذا المسار. أيضًا تحقق من الجزء التالي في الكود: await current_user.save() res.send(res.json({ success: true, data: current_user })) عليك أيضًا إزالة res.json() حيث أن res.send() بالفعل يقوم بإرسال الجواب بصيغة JSON.
  3. الأمر بحاجة إلى استراتيجية شاملة تستهدف جميع جوانب الشركة، من المهام اليومية إلى البنية التحتية. وتتضمن بعض الاستراتيجيات الشائعة ما يلي: تقليل التكاليف الثابتة مثل الإيجار والمرافق والتأمين، جزءًا كبيرًا من ميزانية الشركة الناشئة، ويمكن تقليل تلك التكاليف من خلال العمل من المنزل، أو إيجار مساحة عمل مشتركة، أو التفاوض على عقود إيجار طويلة الأجل. توظيف المستقلين طريقة فعالة لتجنب تكاليف التوظيف التقليدية، مثل الرواتب والفوائد والاستفادة منهم لأداء مجموعة متنوعة من المهام، بما في ذلك تطوير الويب والتسويق والكتابة. تساعد التكنولوجيا الشركات الناشئة على تبسيط العمليات وزيادة الكفاءة، مما يؤدي إلى خفض التكاليف، وهناك العديد من الأدوات والبرامج المتاحة التي يمكن أن تساعد الشركات الناشئة على تقليل التكاليف، مثل أدوات إدارة المشاريع وبرامج CRM وأدوات التسويق عبر البريد الإلكتروني. التركيز على الأساسيات، مثل تطوير منتج أو خدمة جيدة، وبناء قاعدة عملاء من اجل خفض التكاليف على المدى الطويل من خلال زيادة الإيرادات. وضع في اعتبارك أن خفض التكاليف ليس الهدف النهائي، بل يجب أن يكون هدفك هو إيجاد التوازن بين خفض التكاليف والحفاظ على قدرة الشركة على النمو والازدهار. 7 استراتيجيات فعالة لخفض التكاليف في شركتك الناشئة
  4. الخطأERR_HTTP_HEADERS_SENT يعني أنك تحاول تعيين رؤوس استجابة تم إرسالها بالفعل إلى العميل. ويحدث ذلك إن قمت باستدعاء res.send() أو res.json() عدة مرات في نفس المعالج، أو قمت باستدعائه بعد إرسال الاستجابة بالفعل. ولديك المشكلة هي أنك تقوم باستدعاء res.send(current_user) بعد أن قمت بالفعل باستدعاء res.json({errors: errors.array()}). وذلك لأن دالة validationResult() تُرجع مصفوفة من أخطاء التحقق، وإن كانت هناك أية أخطاء، فأنت ترسل استجابة JSON بها تلك الأخطاء. ببساطة عليك نقل استدعاء res.send(current_user) خارج كتلة if (!errors.isEmpty()). سيضمن ذلك إرسال الاستجابة مرة واحدة فقط، بعد اجتياز جميع عمليات التحقق من الصحة. const changePassword = async(req,res) => { const errors = validationResult(req) if (!errors.isEmpty()) { return res.status(400).json({errors: errors.array()}) } try { const { password, newPassword} = req.body; const current_user = await User.findById( req.user ) console.log(req.body) // أرسل الاستجابة فقط إذا لم تكن هناك أخطاء في التحقق من الصحة res.send(current_user) } catch (error) { console.log(error) res.status(500).send("Server Error"); } }
  5. أي مشكلة برمجية لا تبدأ حلها من خلال الكود، بل عليك التفكير في الطريقة المناسبة للحل من خلال الأدوات المتاحة لك والتي لديك علم بها حاليًا. وعند التفكير عليك تقسيم السؤال أو المشكلة إلى أجزاء صغيرة والعمل عليها لا النظر إلى المشكلة البرمجية ككل، فسيتجمد عقلك بتلك الطريقة ولن تصل إلى حل في بدايات تعلمك. ثم بعد التفكير إن لم تتوصل لحل مناسب عليك بالمراجعة عن الجزئية أو الإجزاء التي أنت بحاجة إليها من أجل حل السؤال سواء من خلال دورة أو من خلال مستند رسمي وهنا ليكن المستند الرسمي الخاص بـ React وفي حسوب يوجد شرح باللغة العربية: https://wiki.hsoub.com/React ثم بعد التفكير والمراجعة إن لم تتوصل لحل المناسب أو استقريت على الطريقة التي تنوي بها كتابة الكود، فعليك بالبحث عن كيفية تنفيذ ما تريده وذلك ستتعلمه مع مرور الوقت حيث ستتحسن لديك مهارة البحث والقدرة على البحث عن ما تريده بشكل صحيح وكتابة المصطلحات الصحيحة سواء بالعربية أو الإنجليزية وعليك التركيز على الإنجليزية. بالنسبة لخطوات حل سؤالك فهي كالتالي: أنشئ مشروع React جديد. أنشئ مكونين جديدين: Header و Footer. في مكون Header، مرر له prop يسمى title والذي يحتوي على القيمة "My React App". في مكون Footer، وهومكون يعرض حقوق النشر. مرر له prop يسمى copyright والذي يحتوي على القيمة "© 2023". في مكون App، وهو المكون الرئيسي للمشروع والذي يتم به عرض المكونات الأخرى وأيضًا تمرير props لها، وهو يعرض المكونين Header و Footer ويمرر المكون الرئيسي prop يسمى title إلى المكون Header و prop يسمى copyright إلى المكون Footer. وهناك بعض النقاط الهامة: Props غير قابلة للتغيير، مما يعني أنه لا يمكن تغييرها بمجرد تمريرها إلى مكون فرعي. Props غير قابلة للتغيير من منظور المكون الفرعي أي بداخل المكون الذي تم تمريرها إليه. يمكنك تمرير أي قيمة JavaScript من خلال props، بما في ذلك الكائنات والصفائف والوظائف. للوصول إلى props في مكون فرعي، يمكنك استخدام كائن props.
  6. أرجو المزيد من التوضيح، هل تقصد عند تطوير مشروع أم عند تصفح موقع عادي على الإنترنت؟ علي أي حال هناك عدة أسباب محتملة: في حال كانت سرعة الإنترنت لديك بطيئة، فقد يؤدي ذلك إلى حدوث تأخير في تحميل المحتوى على الصفحة في حال كان يتم تطبيق تقنية Lazy loading، مما قد يتسبب في حدوث lag أثناء الـ scroll. الصفحة كبيرة جدًا، مما يستغرق تحميلها وقتًا أطول. الصفحة تحتوي على الكثير من المحتوى الثقيل، مثل الصور أو مقاطع الفيديو. إذا كان الخادم الذي يستضيف الصفحة يعاني من مشاكل، فقد يؤدي ذلك إلى حدوث lag في scroll. المتصفح الخاص بك قديمًا أو به مشاكل.
  7. أنت تقصد بيئة العمل الافتراضية في بايثون وهي بيئة مستقلة تحتوي على نسخة من مفسر بايثون ومكتباتها، ونستخدمها لعزل مشاريع بايثون المختلفة عن بعضها البعض، مما يمنع حدوث تعارضات بين الحزم والبرمجيات المستخدمة في المشاريع المختلفة. تتمثل أهمية بيئة العمل الافتراضية في بايثون في الآتي: عزل كل مشروع بايثون عن المشاريع الأخرى، مما يمنع حدوث صراعات بين الحزم والبرمجيات المستخدمة في المشاريع المختلفة، فلو لدينا مشروعان يستخدمان نفس الحزمة، ولكن بإصدارات مختلفة، فقد يؤدي ذلك إلى حدوث خطأ عند تشغيل أحد المشروعين. الحفاظ على توافق المشاريع المختلفة مع بعضها البعض، ومع وجود مشروعان يستخدمان نفس الحزمة، ولكن بإصدارات مختلفة، فقد يحدث خطأ عند تشغيل المشروعين معًا. تُسهل بيئة العمل الافتراضية عملية إدارة المشاريع المختلفة من خلال إنشاء بيئة عمل افتراضية لكل مشروع، مما يسهل تثبيت الحزم والإعدادات المطلوبة للمشروع. وهناك venv و pipenv وهما أداتان تستخدمان لإنشاء بيئات عمل افتراضية في بايثون، وكلاهما يسمح لك بإنشاء بيئة مستقلة تحتوي على نسخة من مفسر بايثون ومكتباتها، وبالطبع هناك بعض الاختلافات الرئيسية بين الأداتين: venv (Python Virtual Environment): venv هي أداة قياسية مدمجة في Python (متوفرة في إصدار Python 3.3 وما بعدها) تُستخدم لإنشاء بيئات افتراضية. يتم إنشاء بيئة افتراضية باستخدام الأمر: python -m venv <اسم البيئة> وتفعيلها بواسطة تشغيل النص source <اسم البيئة>/bin/activate في أنظمة Linux/macOS أو venv\Scripts\activate في نظام Windows. pipenv pipenv أداة تُستخدم لإدارة بيئات مشروع Python وتثبيت المكتبات المطلوبة بشكل أكثر تطورًا. حيث تقوم pipenv بدمج مهام إنشاء بيئات افتراضية وإدارة ملفات الاعتماد (مثل Pipfile و Pipfile.lock) وتثبيت المكتبات باستخدام pip في واجهة واحدة. تثبيت وتحديث الحزم تلقائيًا من مستودعات PyPI. إنشاء ملف requirements.txt الذي يسرد جميع الحزم المثبتة في البيئة الافتراضية، ويمكن استخدام هذا الملف لتثبيت نفس البيئة الافتراضية على جهاز آخر. لإنشاء بيئة pipenv، يجب تثبيت pipenv أولاً باستخدام أمر pip التالي: pip install pipenv بعد تثبيت pipenv، تستطيع إنشاء بيئة جديدة باستخدام الأمر التالي: pipenv install وسيؤدي الأمر إلى إنشاء بيئة عمل افتراضية جديدة في مجلد جديد باسم .venv في الدليل الحالي. لتنشيط البيئة الجديدة، استخدام الأمر التالي: pipenv shell
  8. عند إشتراك في أدورة في أكاديمية حسوب، تصبح قادر على الوصول للمسار الأول من جميع الدورات الأخرى. وهنا أنت تريد تعلم اللغات الأساسية للواجهة الأمامية وهم HTML, CSS, JS وبالتالي عليك دراسة المسار الأول أيضًا من دورة تطوير واجهات المستخدم حيث يتم به شرح تلك اللغات بالإضافة لمكتبة jQuery ثم إنشاء مشروع للتطبيق على ما تعلمته وهو موقع شخصي. ثم عليك العود لدورة جافاسكريبت واستكمال دراسة لغة JS بجانب ما تعلمته من دورة تطوير واجهات المستخدم.
  9. لا يمكن ذلك، إما الظهور في جوجل أو إما لا، لكن تستطيع حجب الزوار من خلال الـ IP أو تحديد كود الدولة في htaccess الأمر الذي سيؤدي إلى ظهور نتائجك في ترتيب منخفض بسبب الحجب وإنخفاض مدة بقاء الزوار على موقعك.
  10. من خلال ما ذكرته، فمجال الواجهة الخلفية هو مجال مناسب لك حيث سيتعين عليك إنشاء الخادم والواجهة البرمجية API والتعامل مع قواعد البيانات وخلافه بدون التعرض بشكل مكثف للواجهة الأمامية فهى ليست من إختصاصك. والمجال مطلوب بلا شك ولكنه بحاجة إلى المزيد من الوقت الوجهد مقارنًة بالواجهة الأمامية، وطالما أنك تفضل ذلك فلن يشكل ذلك عائق بالنسبة لك. ولمعلوماتك مطور الواجهة الأمامية ليس من إختصاصه تصميم الواجهة فتلك مهمة مصمم واجهات المستخدم UI/UX، ومهتمك أنت هو تحويل تلك الواجهة إلى موقع من خلال الكود وااستخدام تقنيات مختلفة تبعًا لحاجة المشروع. وبالطبع يتعين عليك فهم أساسيات التصميم الجيد لكي تتمكن من إخراج عملك بأفضل شكل والتحاور مع المصمم، وأيضًا قد يتم تعيين بعض مهام التصميم لك ويكفي معرفتك بأداة مثل Figma وذلك نقاش مفيد:
  11. ذلك لأن دالة cv2.imread() تتوقع اسم ملف نصي كوسيطة، وأنتِ تمررين كائن args['images']، والذي هو قائمة من مسارات الصور. حاولي تحويل كائن args['images'] إلى سلسلة باستخدام الدالة str(). import cv2 from pathlib import Path import pafy import argparse import numpy as np classesf="yolov3.txt" weights="yolov3.weights" config="yolov3.cfg" scale=0.00392 classes=None with open(classesf,'r') as f: classes=[line.strip() for line in f.readlines()] COLORS =np.random.uniform(0,255,size=(len(classes),3)) net=cv2.dnn.readNet(weights,config) ############################################التعديل هنا لادخال الصور ap = argparse.ArgumentParser() ap.add_argument('-i', '--images',nargs='+', default=["sam.jpg"], help = 'path to input image') ap.add_argument('-c', '--config', default="yolov3.cfg", help = 'path to yolo config file') ap.add_argument('-w', '--weights', default="yolov3.weights", help = 'path to yolo pre-trained weights') ap.add_argument('-cl', '--classes', default="yolov3.txt", help = 'path to text file containing class names') args =vars(ap.parse_args()) for image_path in args['images']: image_path = str(image_path) # Call the video_detector() function video_detector(image_path) # Save the output image to a new file with a unique name output_image_path = "object-detection-" + image_path.split('.')[0] + ".jpg" cv2.imwrite(output_image_path, image)
  12. ما هو النظام الذي تستخدمه ويندوز أم ماك أو لينكس؟ وهل قمت بتثبيت بايثون بالإصدار الأخير 3.11؟ وهل قمت بإغلاق منفذ الأوامر ثم إعادة تشغيله والتجربة مرة أخرى؟ أرجو إرفاق صورة للخطأ. وعلي أي حال على قم بتنفيذ الأمر التالي لتثبيت pip: python -m ensurepip --upgrade
  13. هناك أنواع مختلفة من الخوادم (سيرفرات) تستخدم لأغراض مختلفة في عالم تكنولوجيا المعلومات، والشائع منها هو التالي: Web Server (خادم الويب): هذا النوع من الخوادم يُستخدم لاستضافة وتقديم مواقع الويب وتطبيقات الويب، ويتيح للمستخدمين الوصول إلى ملفات HTML وCSS وJavaScript والموارد الأخرى عبر الإنترنت. File Server (خادم الملفات): يُستخدم لتخزين ومشاركة الملفات عبر الشبكة المحلية أو الإنترنت، وكأمثلة على تلك الخوادم تشمل خوادم NAS (Network-Attached Storage) وخوادم مشاركة الملفات. Database Server (خادم قواعد البيانات): يُستخدم لتخزين وإدارة قواعد البيانات، ويمكن أن يتضمن خوادم قواعد البيانات أنظمة مثل MySQL وOracle وMicrosoft SQL Server. Application Server (خادم التطبيقات): يتيح للتطبيقات تشغيل البرامج والخدمات الأساسية، ويُستخدم في تطبيقات الويب والأعمال المؤسسية. Mail Server (خادم البريد الإلكتروني): يُستخدم لإرسال واستقبال البريد الإلكتروني وتشمل خوادم SMTP وPOP3 وIMAP. DNS Server (خادم أسماء النطاقات): يُستخدم لتحويل أسماء النطاقات إلى عناوين IP والعكس، ويلعب دورًا حاسمًا في توجيه حركة المرور عبر الإنترنت. Proxy Server (خادم الوكيل): يُستخدم لوسيطة طلبات المستخدمين إلى الخوادم الأخرى على الإنترنت، ويمكن استخدامه للحفاظ على الأمان وتسريع الوصول إلى الموارد. Print Server (خادم الطباعة): يُستخدم لإدارة ومشاركة الطابعات عبر الشبكة وجعلها متاحة للمستخدمين في الشبكة. وتلك مجرد أمثلة قليلة من الأنواع المختلفة للخوادم المتاحة، والفكرة هي أننا نستطيع تخصيص الخوادم للقيام بمهام محددة حسب احتياجات المؤسسة أو المشروع. أي أن السيرفرات له عتاد متشابه من معالج وذاكرة عشوائية وسعة تخزين وخلافه، لكن النظام والبروتوكول الذي يتم تثبيته هو ما يجعل لكل خادم وظيفة مختلفة، ويمكن تثبيت أكثر من نظام على نفس السيرفر. وبخصوص خوادم الويب يوجد منها أنواع مختلفة تناسب أحجام وإحتياجات مختلفة وستجد شرح مفصل هنا:
  14. لتتمكنين من معالجة أكثر من صورة مدخلة وحفظها، عليك إجراء التغييرات التالية: في حلقة for image_path in args['images']:، عليك إنشاء كائن image جديد لكل مسار صورة. بعد استدعاء دالة video_detector()، قومي بحفظ الصورة الناتجة إلى ملف جديد باسم فريد باستخدام متغير image_path لإنشاء اسم فريد لكل صورة ناتجة. import cv2 from pathlib import Path import pafy import argparse import numpy as np classesf="yolov3.txt" weights="yolov3.weights" config="yolov3.cfg" scale=0.00392 classes=None with open(classesf,'r') as f: classes=[line.strip() for line in f.readlines()] COLORS =np.random.uniform(0,255,size=(len(classes),3)) net=cv2.dnn.readNet(weights,config) ############################################التعديل هنا لادخال الصور ap = argparse.ArgumentParser() ap.add_argument('-i', '--images',nargs='+', default=["sam.jpg"], help = 'path to input image') ap.add_argument('-c', '--config', default="yolov3.cfg", help = 'path to yolo config file') ap.add_argument('-w', '--weights', default="yolov3.weights", help = 'path to yolo pre-trained weights') ap.add_argument('-cl', '--classes', default="yolov3.txt", help = 'path to text file containing class names') args =vars(ap.parse_args()) for image_path in args['images']: image = cv2.imread(image_path) # Call the video_detector() function video_detector(image) # Save the output image to a new file with a unique name output_image_path = "object-detection-" + image_path.split('.')[0] + ".jpg" cv2.imwrite(output_image_path, image) وما قمت به هو: إنشاء حلقة for لمعالجة كل صورة مدخلة. إنشاء كائن image جديد لكل صورة مدخلة. استدعاء دالة video_detector() لمعالجة الصورة الحالية. حفظ الصورة الناتجة إلى ملف جديد باسم فريد. لإنشاء اسم فريد للصورة الناتجة، قمت باستخدام متغير image_path لفصل اسم الصورة عن امتدادها ثم قمت بإضافة بادئة "object-detection-" إلى اسم الصورة الأساسي. والآن ما عليك سوى تمرير مسارات الصور المدخلة كوسائط إلى البرنامج، أي لمعالجة الصور sam.jpg و cat.jpg، ستقومين بتشغيل الأمر التالي: python object_detection.py -i sam.jpg cat.jpg وذلك من أجل إنشاء صورتين، object-detection-sam.jpg و object-detection-cat.jpg، والتي ستحتوي على الكائنات المكتشفة في كل صورة.
  15. الأمر بسيط توجه إلى المستودع على حسابك في GitHub ثم قم بنسخ رابط المستودع من المتصفح وأرسله للعميل، مثال للرابط: https://github.com/ اسم المستخدم/repoName.git مثال حقيقي: https://github.com/HsoubAcademy/odoo لكن ذلك بشرط أن تكون قد قمت بتحديد المستودع على أنه Public أي متاح للتصفح مع إمكانية تحميل الكود المصدري من قبل الجميع. أما في حال كان المستودع Private أي متاح لك أنت فقط، فعليك إضافة العميل إلى المستودع كمشارك أو مساهم collaborator من خلال التوجه للمستودع ثم الضغط على settings كالتالي: ثم قم بالتالي: اسأل العميل عن اسم المستخدم الخاص به على GitHub وإذا لم يكن لديه اسم مستخدم بعد، فيمكنه التسجيل في GitHub (أي يجب أن يكون لديه حساب على GitHub). انتقل إلى المستودع الذي تريد دعوته إليه. انقر فوق "الإعدادات". في قسم "الوصول Access " في الشريط الجانبي، انقر فوق "المتعاونون Collaborators". انقر فوق "إضافة أشخاص". في حقل البحث، ابدأ في كتابة اسم الشخص الذي تريد دعوته. انقر على اسم المستخدم الذي تريده في قائمة البحث. انقر فوق Add NAME to REPOSITORY. سيتلقى العميل بريدًا إلكترونيًا يدعوه إلى المستودع وبمجرد قبول دعوتك، سيكون لديهم وصول متعاون إلى مستودعك. وبإمكانك اختيار منحه أحد مستويات الأذونات التالية: القراءة: يسمح مستوى الأذونات ذلك للمتعاون بعرض المستودع واستنساخه، لكن لا يمكنهم إجراء أي تغييرات عليه. الكتابة: يسمح بعرض المستودع واستنساخه وإجراء تغييرات عليه. المسؤول: يمنح تحكمًا كاملاً في المستودع، بما في ذلك القدرة على إدارة المتعاونين الآخرين. طريقة أخرى لمشاركة مستودع Private: يمكنك استخدام خدمة طرف ثالث مثل https://gitfront.io من أجل مشاركة المستودع الخاص من خلال رابط فقط دون الحاجة للعميل إلى إنشاء حساب أو القيام بالخطوات السابقة.
  16. السؤال عام جدًا، وعلي أي حال طريقة استخدام أي تقنية او أداة هي ما تحددأي تقنية أو أداة، لكن أولاً ما المقصود بالذكاء الاصطناعي؟ ببساطة الذكاء الاصطناعي هو مصطلح واسع يشير إلى أي نظام يمكنه أداء المهام التي تتطلب عادةً الذكاء البشري، ويتراوح ذلك ما بين الأنظمة التي يمكنها التعلم من البيانات إلى الأنظمة التي يمكنها اتخاذ القرارات المستقلة. وكيف نستفيد من ذلك؟ من خلال أتمتة المهام التي كانت تتطلب سابقًا تدخلًا بشريًا، مما يوفر لنا وقتًا وجهدًا، كالقيادة الذاتية، وتنظيف منازلنا، وغيرها من الأمور مثل توليد صور فنية من كلمات نصية أو حتى إنشاء فيديو. أما في حال إساءة استخدام تلك التقنية، فيمكن أن يؤدي الذكاء الاصطناعي إلى التمييز ضد الأشخاص على أساس العرق أو الجنس أو الدين أو أي عوامل أخرى، كأن تؤدي خوارزميات الذكاء الاصطناعي المستخدمة في التوظيف إلى رفض المتقدمين من المجموعات الأقلية. أو أن يؤدي الذكاء الاصطناعي إلى فقدان الوظائف البشرية، حيث يمكن للآلات القيام بالعديد من المهام التي كانت تتطلب سابقًا تدخلًا بشريًا وذلك متوقع بحلول عام 2030.
  17. غير صحيح، حيث أن FTP (File Transfer Protocol) ليس نوعًا من أنواع السيرفرات مثل DNS server، بل هو بروتوكول يُستخدم لنقل الملفات بين الأجهزة عبر الشبكة، ويتيح FTP للمستخدمين نقل الملفات من جهازهم إلى سيرفر أو من سيرفر إلى جهازهم. على الجانب الآخر، خادم DNS (DNS server) هو نوع من الخوادم التي تقوم بخدمة نظام أسماء النطاقات (DNS)، وهو نظام يُستخدم لتحويل أسماء النطاقات (مثل www.example.com) إلى عناوين IP المقابلة، ويساعد DNS في تمكين التوجيه الصحيح لحركة المرور عبر الإنترنت ويساعد المستخدمين على العثور على المواقع على الويب باستخدام أسماء نطاق بدلاً من العناوين IP. وعند الحاجة نقل الملفات عبر الشبكة، نستخدم بروتوكول FTP من خلال برنامج مثل vsftpd أو Filezilla أما إعداد خادم DNS، فسيكون ذلك لضمان توجيه حركة المرور الشبكية بشكل صحيح.
  18. أرجو منك طرح السؤال أسفل فيديو الدورة لمساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا. علي أي حال، عليك أولاً تثبيت pipenv من خلال الأمر التالي: pip install pipenv وللتأكد من تثبيت pipenv استخدم الأمر التالي: pipenv -h ثم تفعيل البيئة من خلال الأمر التالي: pipenv shell ثم بعد التنشيط، قم بتثبيت Django باستخدام pip: pip install django
  19. هل المقصود هو نشر المقالات على المدونة أم نشر المقالات لتظهر في جوجل؟ بخصوص نشر المقالات على المدونة حاول ضبط إعدادات الروابط الدائمة والمقالة التالية ستفيدك: أيضًا تأكد من أن حالة المقالة "منشورة" (Published) حتى تظهر للزوار، ويمكنك تغيير حالة المقالة من خلال لوحة تحكم ووردبريس، في قسم "المقالات" (Posts)، من خلال النقر على "حالة" (Status) واختيار "منشورة" (Published). وبخصوص جوجل والـ SEO عليك استخدام إضافة Yoast أو All in one SEO ثم ضبط الإعدادات الخاصة بها.
  20. نستخدم عنصر background في صفحة HTML لتحديد خلفية للعنصر نفسه، أو للصفحة ككلل، عن طريق تحديد قيمة للخاصية background-color. ومثلاً لإضافة خلفية زرقاء إلى الصفحة ككل، علينا إضافة الكود التالي إلى عنصر body: <body style="background-color: blue;"> ... </body> ولكن استخدام عنصر background في HTML له بعض القيود حيث لا يمكن استخدامه لتحديد صورة كخلفية، أو لتحديد كيفية تكرار الصورة. أما استخدام عنصر background في صفحة CSS، فهو أكثر مرونة، ونستطيع استخدامه لتحديد خلفية للعنصر نفسه، أو للصفحة ككل، أيضًا لاستخدامه لتحديد صورة كخلفية، أو لتحديد كيفية تكرار الصورة. ولإضافة خلفية زرقاء إلى الصفحة ككل، نقوم بإضافة الكود التالي إلى ملف CSS: body { background-color: blue; } ولاستخدام صورة كخلفية، نكتب الكود كالتالي: body { background-image: url("image.png"); } ولتكرار الصورة نكتب الآتي: body { background-repeat: repeat; } أي من الأفضل كتابة تنسيقات CSS بشكل منفصل وخاصًة عنصر background وذلك لأنه أكثر مرونة وقابلية للتخصيص، وبالطبع تستطيع استخدام عنصر background في HTML إذا كنت بحاجة إلى تحديد خلفية بسيطة للعنصر نفسه أو للصفحة ككل.
  21. يمكنك الحصول على روابط المكتبات من خلال CDN من مواقع مثل: https://cdnjs.com https://www.jsdelivr.com إليك الرابط <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> ومن الأفضل طرح الأسئلة المتعلقة بالدورة أسفل الدرس الخاص بها في التعليقات وطرح الأسئلة العامة هنا.
  22. من المفترض أن الطريقة الصحيحة لإزالة جلسة المستخدم عند تسجيل الخروج في Flutter Firebase،هي كالتالي: Future<void> signOut() async { // 1. إلغاء تسجيل الدخول من Firebase Auth await FirebaseAuth.instance.signOut(); // 2. مسح بيانات المستخدم من Firebase await FirebaseFirestore.instance .collection('users') .doc(FirebaseAuth.currentUser!.uid) .delete(); // 3. إعادة تعيين المتغيرات الخاصة بالمستخدم _isLoggedIn = false; _user = null; } حيث يعمل الكود على النحو التالي: أولاً، إلغاء تسجيل الدخول من Firebase Auth باستخدام FirebaseAuth.instance.signOut(). بعد ذلك، مسح بيانات المستخدم من Firebase باستخدام FirebaseFirestore.instance.collection('users').doc(FirebaseAuth.currentUser!.uid).delete(). ثم إعادة تعيين المتغيرات الخاصة بالمستخدم، مثل _isLoggedIn و _user. وتستطيع استخدام الكود في ملف main.dart ووضعه في وظيفة onPressed لزر تسجيل الخروج: // ... class MyApp extends StatelessWidget { // ... @override Widget build(BuildContext context) { return MaterialApp( // ... home: Scaffold( appBar: AppBar( title: Text('My App'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // ... ElevatedButton( onPressed: signOut, child: Text('تسجيل الخروج'), ), ], ), ), ), ); } // ... Future<void> signOut() async { // 1. إلغاء تسجيل الدخول من Firebase Auth await FirebaseAuth.instance.signOut(); // 2. مسح بيانات المستخدم من Firebase await FirebaseFirestore.instance .collection('users') .doc(FirebaseAuth.currentUser!.uid) .delete(); // 3. إعادة تعيين المتغيرات الخاصة بالمستخدم _isLoggedIn = false; _user = null; // 4. إظهار رسالة للمستخدم ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('تم تسجيل الخروج بنجاح'), ), ); } } وعندما يضغط المستخدم على زر تسجيل الخروج، سيتم إلغاء تسجيل الدخول من Firebase Auth ثم مسح بيانات المستخدم من Firebase، بالإضافة إلى إعادة تعيين المتغيرات الخاصة بالمستخدم، مما يشير إلى أن المستخدم غير مسجل الدخول.
  23. سأتحدث معك بصراحة، في حال ظننتي أنك ستتمكني من إنهاء تلك الدورات كما ينبغي في شهرين فقط، فستصابين بالإحباط، لذلك عليك وضع خطة قريبة من أرض الواقع وبشكل عملي. وأنا لا أتحدث عن دورة مثل دورة تطوير المنتجات أو دورة علوم الحاسب، فتلك الدورات يمكن إنهائها خلال شهر أو أقل حسب خبراتك السابقة وعلاقتك بالحاسوب ومجال البرمجة. أما دورة تطوير واجهات المستخدم فيمكن إنهائها خلال شهرين، لكن الدراسة الصحيحة للدورة بحاجة إلى 3 أشهر على الأقل من أجل دراسة الأساسيات بشكل جيد وإنشاء مشاريع جانبية بالإضافة للدورة والقراءة والبحث ومشاهدة فيديوهات على اليوتيوب لتعلم المزيد وهكذا. أما الدورات الأخرى فهى بحاجة إلى 4 أشهر على الأقل كدراسة صحيحة، ولا مشكلة في إنهائها خلال شهرين، لكن هل مستوى من قام بإنهائها في شهرين مثل 4 أشهر أو 6 أشهر؟ بالتأكيد لا، كلما تم بذل مجهود وتوفير وقت أكثر للدراسة والتأني ستصبح المحصلة أفضل بلا شك. وعلي أي حال كل دورة بحاجة إلى 4 أو 5 أضعاف الوقت الإجمالي لها من إجل فهمها واستيعابها والتطبيق والبحث وما إلى ذلك. وستجدي هنا شرح مفصل:
  24. عليك أولاً إنشاء ملف JSON يحتوي على بيانات الصور وليك ملف data.json بمحتوى مشابه لهذا: [ { "id": 1, "src": "https://placehold.co/600x400", "alt": "صورة 1" }, { "id": 2, "src": "https://placehold.co/600x400", "alt": "صورة 2" }, { "id": 3, "src": "https://placehold.co/600x400", "alt": "صورة 3" } ] في تطبيق React قم بإنشاء مكون (component) لعرض الصور وليك مكون اسمه ImageGallery: import Images from './assets/data.json'; const App = () => { console.log(Images); // عرض الصور في المكون return ( <div> {Images.map(image => ( <img key={image.id} src={image.src} alt={image.alt} /> ))} </div> ); }; export default ImageGallery;
  25. هل قمت بحل المشكلة؟
×
×
  • أضف...