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

عبدالباسط ابراهيم

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

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

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

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

    11

أجوبة بواسطة عبدالباسط ابراهيم

  1. بالتأكيد. هذا شرح مفصل حول الفرق بين C ++ و Python للتعلم الآلي:

    ‌C++ ‌‌:

    • هي لغة برمجة عامة موجهة للأجهزة بمعنى أنها تدعم البرمجة الفعالة والتحكم المباشر في الذاكرة والأجهزة.
    •  توفر أداءً أسرع بكثير مقارنة بـ Python بسبب التشغيل المباشر والتحكم المباشر في الذاكرة.
    • تستخدم لبرمجة الروبوتات والتطبيقات التي تتطلب أداءً عاليًا.
    •  تدعم الوراثة والتجريد والبرمجة القائمة على الكائنات.
    •  توفر كتبا مكتبات مختصة خاصة بالتعلم الآلي وعلوم البيانات مثل OpenCV و TensorFlow.
    • برمجتها أكثر تعقيدًا وتتطلب معرفة أكبر بالذاكرة والأجهزة.

    Python:

    • لغة برمجة مفسرية سهلة القراءة والكتابة والتعلم. 
    • يعتبر أبطأ من C ++ بسبب التشغيل التفسيري بدلاً من التشغيل المباشر.
    • تستخدم عمومًا لتطوير التطبيقات التي لا تتطلب أداءً عاليًا مثل التعلم الآلي وتحليل البيانات.
    • تدعم الوراثة والتجريد والبرمجة القائمة على الكائنات.
    • لديها مكتبات مخصصة للتعلم الآلي مثل  NumPy، SciPy، TensorFlow و Keras.
    • برمجتها أسهل ويتطلب تعلم أقل حول تفاصيل الأجهزة والذاكرة.

    هناك العديد من الدورات التدريبية لتعلم الذكاء الاصطناعي، بعضها باللغة العربية وبعضها باللغة الإنجليزية عليك فقط البحث

    • Machine Learning Nanodegree أكبر كورس عربي لتعليم الألة والذكاء الأصطناعي لتأهيل مليون عالم بيانات عربي

  2. بتاريخ 19 ساعة قال Othman Khalid:

    هل يوجد موقع online أو برنامج اضع فيه المادة التعليمة وانسق المادة التعليمية من خلاله بدل التشعبات الكثيرة هذه

    نعم، هناك العديد من منصات إدارة المحتوى التعليمي (CMS) التي توفر المتطلبات التي ذكرتها. ومن بين هذه المنصات:

    • Moodle: هو نظام إدارة التعلم المفتوح المصدر الذي يتيح إنشاء صفحات تعليمية ومواد تعليمية متنوعة، بما في ذلك الصور والفيديو والصوت والأكواد الملونة والمزيد. كما يتضمن Moodle أدوات لإدارة الدورات والمناقشات والتعليقات والمهام والتقييمات.
    • Blackboard: هو نظام إدارة التعلم المستخدم على نطاق واسع في المؤسسات التعليمية، ويتيح إنشاء صفحات تعليمية ومواد تعليمية متنوعة، بما في ذلك الصور والفيديو والصوت والأكواد الملونة والمزيد. كما يتضمن Blackboard أدوات لإدارة الدورات والمناقشات والتعليقات والمهام والتقييمات والاختبارات.
    • Schoology: هي منصة إدارة التعلم السحابية التي تتيح إنشاء صفحات تعليمية ومواد تعليمية متنوعة، بالإضافة إلى إدارة الدورات والمناقشات والتعليقات والمهام والتقييمات والاختبارات. وتتميز Schoology بتصميمها البسيط والمستخدم الودي، بالإضافة إلى توفير أدوات للتعاون بين الطلاب والمعلمين وأولياء الأمور.
    • Edmodo: هي منصة إدارة التعلم السحابية التي تتيح إنشاء صفحات تعليمية ومواد تعليمية متنوعة، بالإضافة إلى إدارة الدورات والمناقشات والتعليقات والمهام والتقييمات.وتتميز Edmodo بتوفير مجموعات دراسية وتبادل المواد التعليمية والتفاعل بين الطلاب والمعلمين، وتوفير ميزات للتعاون والتواصل بين الأعضاء.

    يجب الإشارة إلى أن هذه المنصات تختلف في التصميم والوظائف والتكنولوجيا المستخدمة، وينبغي اختيار المنصة التي تناسب الاحتياجات التعليمية الخاصة بك والتي تتوافق مع المتطلبات التقنية. كما يجب النظر في التكاليف والتوافق مع أنظمة التعلم الإلكتروني المستخدمة في المؤسسة التعليمية.

  3. بالإضافة للشرح السابق ها هو مثال عملي على توضيح دالة WINDOW:

    نفترض أن لدينا جدول employees مع الأعمدة التالية:

    id, name, department, salary

    بحيث يوجد عدة موظفين في كل قسم

    لحساب ترتيب الموظفين حسب الراتب داخل كل قسم، يمكننا استخدام الاستعلام التالي:

    SELECT id, name, department, salary
         , DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) dr
    FROM employees

    الناتج سيكون مثل هذا:

    id - name - department - salary - dr
    1 - John - Marketing - 5000 - 1
    2 - Jane - Marketing - 4000 - 2 
    3 - Tom - Marketing - 3000 - 3
    4 - Sue - IT - 6000 - 1 
    5 - Kent - IT - 5000 - 2
    6 - Ben - HR - 7000 - 1 
    7 - Amy - HR - 6000 - 2

    حيث تم ترتيب الموظفين حسب الراتب داخل كل قسم (Marketing, IT, HR) فـJohn لديه أعلى راتب في قسمه Marketing فحصل على الترتيب 1 والخ..

    كما يفضل الإطلاع على المصادر التالية

     

    • أعجبني 1
  4. بشكل أوضح  في هذا المثال، يتم استخدام حلقتين داخل بعضهما البعض لإنشاء مربع مكون من 8 صفوف و8 أعمدة.

    الحلقة الخارجية تتكرر 8 مرات، وتحتوي الحلقة الداخلية أيضًا على 8 تكرارات. في كل مرة يتم تكرار الحلقة الداخلية، يتم طباعة رقم الصف الحالي.

    وبما أن الحلقة الخارجية تتكرر 8 مرات، فسيتم طباعة الأرقام من 0 إلى 7 في كل صف. وهذا يعني أنه في كل صف، سيتم طباعة الأرقام من 0 إلى 7.

    يمكن تصور هذا المثال بأنه يبدأ في الزاوية العلوية اليسرى من المربع، ويتم طباعة الأرقام في كل صف من اليسار إلى اليمين، ثم يتم الانتقال إلى الصف التالي وتكرار العملية حتى النهاية.

    مثلا، في الصف الأول، سيتم طباعة الأعداد من 0 إلى 7، وفي الصف الثاني، سيتم طباعة الأعداد من 0 إلى 7 مرة أخرى، وهكذا حتى الصف الثامن.

    وبالتالي، سيتم طباعة مربع مكون من 8 صفوف و8 أعمدة، وكل صف يحتوي على الأرقام من 0 إلى 7.

    • شكرًا 1
  5. ليس بالضرورة ان تحفظ كل التفاصيل التي يتضمنها الفيديوهات والدروس للحصول على شهادة من اكاديمية حسوب.

    فالأكاديمية لا تمنح الشهادات اعتمادا على الحفظ والتذكر لكل التفاصيل، بل يتم التركيز على فهم المفاهيم الأساسية والقدرة على تطبيقها. ما تحتاجه فقط للحصول على الشهادة هو:

    • فهم المحتوى العام للدورة ومعرفة المفاهيم والأفكار الرئيسية.
    • معرفة كيفية تطبيق هذه المفاهيم وتوظيفها في الممارسة العملية.
    • القدرة على حل أسئلة الاختبار النهائي للدورة التي تشمل على أسئلة حول المفاهيم وأسئلة تطبيقية وفي بعض الأحيان أسئلة حول حل مشكلة معينة.

    مثال عملي على عدم حاجة الحفظ الدقيق للتفاصيل:

    مثلا في درس عن نظام التشغيل ويندوز.

    • قد يتضمن الدرس تفاصيل عن الإصدارات المختلفة من ويندوز ومميزات كل إصدار.
    • ولكن ليس من الضروري حفظ اسم كل إصدار وتاريخ إصداره وكل التفاصيل،

    المطلوب فقط:

    • معرفة أن هناك إصدارات مختلفة لويندوز.
    • الفهم العام للفرق بين الإصدارات الرئيسية.
    • معرفة بعض المميزات الجديدة في الإصدارات الأحدث.
    • شكرًا 1
  6. بشكل عام فإن الدورة تغطي المحتوى الأساسي لـ CSS والذي يعتبر ضروريا لمن يبدأ في تعلمه. تشمل مفاهيم أساسية مثل الأختصارات والألوان والخلفيات والهياكل والفهارس وغيرها.

    لكن طبعا هناك الكثير من المعلومات المتقدمة  تطبيقات CSS المتقدمة، ونمط Floats وFlexbox وGrid، وأشكال CSS ، وCSS Animations و Transitions وغيرها لم تجدها في المسار أساسيات css 

    ولكن يتم شرح المفاهيم المتقدمة السابقة في صورة تطبيقات عملية مما يجعل التعلم من هذه الدورة بالطريقة الأفضل هو نهلم الأساسيات ثم تعلم المفاهيم المتقدمة من خلال التطبيق العملي في هذه المسارات 

    • بناء واجهة مستخدم تشبه موقع YouTube
    • صفحة قريبًا الانطلاق
    • صفحة منتج
    • صفحة شركة
    • صفحة تطبيق جوال
    • صفحة شخصية
    • تطوير متجر إلكتروني
    • تطوير موقع شركة
    • تطوير لوحة تحكم
    • بناء مواقع ثابتة باستخدم Hugo
    • تطوير موقع أخباري
  7. xampp يخزن المشاريع في مسار محدد على القرص الصلب لجهازك. 
    عادةً ما يكون المسار إما:
    C:\xampp\htdocs

    إذا تم حذف جميع الملفات الموجودة داخل هذا المسار عند حذف xampp .لحسن الحظ ، إذا لم تقم بتفريغ سلة المهملات ، فمن الممكن استعادة ملفاتك إذا كنت تحتفظ بنسخ احتياطية منها.
    كل ما عليك فعله هو:

    •  فتح سلة المهملات وتحديد الملفات الخاصة بـ xampp أو المشاريع.
    • ضغط الزر الأيمن على الملف واختر استعادة.

    إذا لم يعد بإمكانك استعادة الملفات ، فمن المهم في المستقبل إنشاء نسخ احتياطية من المشاريع على أماكن خارجية مثل:
    - سحابة شخصية (Dropbox، Google Drive، إلخ)
    - نظام تحكم في النسخ الاحتياطية (Github، Gitlab)
    - قرص خارجي

    و يمكنك استخدام برامج استعادة الملفات المحذوفة لاسترداد المشاريع الخاصة بك من جهازك. من الأدوات الشائعة التي يمكنك استخدامها:

    • Recuva : هو برنامج مجاني وفعال لاسترداد الملفات المحذوفة. فهو يقوم بتحليل القرص عن بعد للبحث عن جميع الملفات التي لم يتم إعادة تخصيص المساحات الخالية بعد.
    • DriveScanner: يستعيد الملفات بمجرد حذفها من سلة المهملات وحتى استبدالها. لكنه قد يكون أقل فعالية بعد أسبوع من الحذف.

    تأكد فقط من عدم تثبيت أي برامج جديدة أو تحديث النظام قبل البدء في عملية استرداد البيانات. قم بتثبيت أحد برامج استعادة البيانات على وحدة تخزين محمولة وقم بتشغيله مباشرةً لزيادة فرص العثور على الملفات.

  8. قبل التحويل إلى Vite يجب أن تعرف أن Vite يركز على توفير تجربة أسرع وأكثر إنتاجية عند بناء تطبيقات JavaScript غنية. إذا كنت تطور تطبيقًا من نوع صفحة واحدة (SPA)، بما في ذلك تلك المطورة باستخدام أدوات مثل Inertia ، فإن Vite سيكون الخيار الأمثل.

    يعمل Vite بشكل جيد أيضًا مع تطبيقات تقليدية تم تجميعها من جانب الخادم مع JavaScript ، بما في ذلك تلك التي تستخدم Livewire. ومع ذلك ، فإنه يفتقد بعض الميزات التي يدعمها Laravel Mix ، مثل القدرة على نسخ الأصول العشوائية إلى البناء التي لا ترتبط مباشرة في تطبيق JavaScript الخاص بك.

    وبالإضافة للمصادر السابقة يفضل الإطلاع على المصادر التالية

  9. موقع مكالمات فيديو أمثلة: Zoom و Skype و Microsoft Teams 

    التقنيات المستخدمة في الواجهة الأمامية والخلفية:

    الجهة الأمامية:

    • React / NextJs
    • Redux / Redux Toolkits
    • Apollo-Client / REST API - تنفيذ طلبات باستخدام GraphQL أو REST
    • react motion / spring للرسوم المتحركة
    • WebRTC - للاتصال في الوقت الفعلي
    • socket.io-client - للبيانات في الوقت الفعلي
    • اختياري: اختبارات وحدة ، اختبارات النهاية إلى النهاية ، اختبارات التكامل مع مكتبة اختبار React ، Cypress

    الجهة الخلفية:

    • مصادقة مع Passportjs
    • تفويض باستخدام JWT
    • MongoDB مع Mongoose ، Postgres مع Prisma أو MySQL
    • Apollo-Server / REST API - تنفيذ طلبات باستخدام GraphQL أو REST API
    • socket.io - للبيانات في الوقت الفعلي
    • اختياري: اختبار الوحدة باستخدام Jest

    تطبيق الدردشة  realtime أمثلة: Slack و Whatsapp و Telegram و Discord

    الجهة الأمامية:

    • React / NextJs
    • Redux / Redux Toolkits
    • Apollo-Client / REST API
    • socket.io-client
    • emoji-mart

    الجهة الخلفية:

    • مصادقة باستخدام Passport js
    • تفويض باستخدام JWT
    • MongoDB مع Mongoose ، Postgres مع Prisma أو MySQL
    • Apollo-Server/REST API
    • socket.io

    وبالطبع يفضل بناء متجر إلكتروني حيث يتم استخدام مهارات وتقنيات عديدة مثل 

    الجهة الأمامية:

    • D3.js
    • stripe مع use-shopping-cart للدفع
    • socket.io-client

    الجهة الخلفية:

    • MongoDB مع Mongoose ، Postgres مع Prisma أو MySQL
    • Cloudinary API - لتحميل الصور
    • stripe
    • socket.io
    • أعجبني 1
  10. بعد تعلم Machine Learning، يمكنك العمل في العديد من المجالات التي تستخدم هذه التقنية، مثل:

     تحليل البيانات و تطوير البرمجيات و التعلم الآلي و مجالات أخرى مثل التعرف على الصوت والصورة والتحكم على المحتوى والترجمة الآلية والكشف عن الاحتيال والأمن السيبراني والطب الحيوي وغيرها.

    بالنسبة للعمل على موقع العمل الحر أو عن بعد، فإن العديد من الشركات والمؤسسات والمواقع تبحث عن خبراء في مجال Machine Learning للعمل عن بعد أو على أساس عقود مؤقتة أو دائمة. ومن خلال الإنترنت يمكنك العثور على العديد من الفرص الوظيفية والمشاريع المستقلة.

    هناك العديد من المواقع التي تعرض فرص عمل في مجال Machine Learning، ومن بينها:

    • LinkedIn: يمكنك استخدام LinkedIn للبحث عن فرص عمل في مجال Machine Learning، ويمكنك أيضًا إنشاء ملف شخصي قوي لنفسك وتوسيع شبكتك المهنية.
    • Indeed: يوفر موقع Indeed فرص عمل في مجال Machine Learning وتحليل البيانات والذكاء الاصطناعي والمزيد.
    • Glassdoor: يعرض موقع Glassdoor الوظائف في مجال Machine Learning ويتيح لك قراءة تقييمات الشركات وتجارب الموظفين السابقين.
    • Kaggle Jobs: يعرض موقع Kaggle Jobs الوظائف في مجال التعلم الآلي والبيانات ويوفرأيضًا فرصًا للمشاركة في مسابقات وتحديات Machine Learning.
    • وبالطبع يوجد الكثير من مواقع العمل الحر مثل lsjrg

    أما بالنسبة للمسابقات التي تقدمها الشركات في مجال Machine Learning، هناك العديد من مسابقات Machine Learning التي تقدمها الشركات والمنظمات:

    • Kaggle: أكبر منصة لمسابقات المعرفة الآلية والتعلم الآلي. يتم تنظيم العديد من المسابقات على مدار السنة حول مشاكل مختلفة.
    • KDD Cup: مسابقة كبيرة تنظمها مؤتمر KDD للمعرفة الاستكشافية والتعلم الآلي.
    • Analytics Vidhya: شركة تنظم العديد من مسابقات التعلم الآلي المجانية وذات الجوائز.
    • DrivenData: منصة تقدم العديد من التحديات لحل مشاكل العالم الحقيقي.
    • Microsoft: تقدم مسابقة للطلاب في مجالات الذكاء الاصطناعي والتعلم الآلي.
    • Anthropic: شركة تنظم العديد من مسابقات التعلم العميق على مدار السنة.
    • AI For Good: مسابقة تركز على استخدام الذكاء الاصطناعي لخدمة الإنسانية.

    هذه بعض المسابقات الرئيسية في مجال التعلم الآلي والتي تقدمها الشركات، وهناك الكثير أيضًا حسب اهتمامك وتخصصك.

    • أعجبني 1
  11. من المصادر الممكنة للحصول على مجموعات بيانات لتدريب الشبكات العصبونية بالإضافة للمصادر في التعليق السابق:

    •  Kaggle: يعد Kaggle واحدًا من أشهر المواقع المتخصصة في تنظيم المسابقات الخاصة بالتعلم الآلي وعلوم البيانات. يقدم الموقع أيضًا مجموعات البيانات المختلفة للتنزيل.
    • UCI Machine Learning Repository: يوفر مستودع UCI العديد من مجموعات البيانات المتاحة للتنزيل مجانًا. تم جمع معظم هذه المجموعات من مختلف المواقع على الويب وهي مناسبة للتدريب والاختبار للعديدة من النماذج العصبونية.
    • Google Dataset Search: يوفر محرك بحث Google Dataset Search مجموعات البيانات المتاحة على الويب من مصادر مختلفة. يمكن استخدامه للعثور على مجموعات البيانات المناسبة لتدريب الشبكات العصبونية.
    • OpenML: يعد OpenML منصة علم البيانات المفتوحة المصدر. يتضمن الموقع مجموعات بيانات واسعة النطاق متاحة للتنزيل والتدريب.
    • GitHub: يمكن العثور على مجموعات البيانات المتاحة للتدريب على الشبكات العصبونية على GitHub، والتي يتم تحميلها ومشاركتها من قبل المجتمع العلمي.
    • ImageNet: يعد ImageNet أحد أكبر مجموعات البيانات المتاحة للتدريب على شبكات العصبونات العميقة. يحتوي على أكثر من 14 مليون صورة في مجموعات فئات مختلفة.
    • CIFAR-10 و CIFAR-100: تعد CIFAR-10 و CIFAR-100 مجموعات بيانات مشهورة لتدريب شبكات العصبونات العميقة في مجال الرؤية الحاسوبية. تحتوي CIFAR-10 على 60،000 صورة ملونة مقسمة إلى 10 فئات، في حين تحتوي CIFAR-100 على 100 فئة.
    • MNIST: تعد MNIST واحدة من أشهر مجموعات البيانات المستخدمة لتدريب شبكات العصبونات العميقة في مجال التعرف على الأرقام المكتوبة باليد. تتكون من 60،000 صورة للتدريب و 10،000 صورة للاختبار.
    • COCO: تعد COCO منصة للكشف عن الصور وتتضمن مجموعة واسعة من مجموعات الصور المتاحة للتدريب على شبكات العصبونات العميقة في مجال الكشف عن الصور.
    • TensorFlow Datasets: توفر TensorFlow Datasets مجموعات بيانات جاهزة للاستخدام مع TensorFlow. تحتوي المجموعات على مجموعة واسعة من المجالات، بما في ذلك الرؤية الحاسوبية والتعلم الآلي.

    هذه بعض المصادر التي يمكن استخدامها للحصول على مجموعات بيانات لتدريب شبكات العصبونات العمينية، ومن المهم الاختيار المناسب لمجموعة البيانات بناءً على الهدف المطلوب ونوع النموذج الذي يتم تدريبه.

    • شكرًا 1
  12. اللغة البرمجية المستخدمة ليست العامل الوحيد الذي يحدد سرعة البرنامج. بالإضافة إلى لغة البرمجة، يتأثر أداء البرنامج بعدة عوامل مثل 

    بالطبع، يمكننا التعمق أكثر في المعلومات المتعلقة بسرعة البرامج وكيفية تحسينها. عندما يتعلق الأمر بسرعة البرامج، يمكن تقسيم العوامل المؤثرة على الأداء إلى عدة فئات، من بينها:

    • لغة البرمجة: تختلف لغات البرمجة في كفاءتها في تنفيذ البرامج، وذلك يعود إلى العديد من العوامل، مثل طريقة تحويل الشفرة إلى لغة آلة (compiling)، وكفاءة إدارة الذاكرة، والتعامل مع المعالج والنظام المضيف. ومن بين اللغات البرمجية التي تعتبر سريعة في التنفيذ: C++, C، Rust، و Assembly.
    • هياكل البيانات: يتأثر أداء البرنامج بشكل كبير بالهياكل البيانية المستخدمة لتخزين البيانات. يجب استخدام هياكل بيانات فعالة ومناسبة للغرض المطلوب، مثل القوائم المتسلسلة، الأشجار، الجداول الهاش، وأيضًا قواعد البيانات ذات الأداء العالي.
    • تنفيذ الخوارزميات: يجب استخدام الخوارزميات المناسبة للغرض المطلوب والتأكد من تحسينها بشكل صحيح. يجب أن تكون الخوارزميات فعالة ومناسبة للبيانات المعالجة وتحقيق النتائج المطلوبة.
    • كتابة الشفرة المصدرية: يجب كتابة شفرة مصدرية جيدة ومنظمة وبدون أخطاء. يجب تجنب استخدام الحلول المؤقتة والتكرارات والأخطاء الشائعة في البرمجة والتأكد من استخدام المتغيرات والدوال بشكل صحيح. يجب أيضًا تجنب استخدام المكتبات والإضافات غير الضرورية.
    • الأجهزة المستخدمة: تؤثر الأجهزة المستخدمة في سرعة البرنامج. يجب تحسين أداء الأجهزة والتأكد من تحديثها وإصلاح الأخطاء وإزالة البرامج الضارة.
    • العمليات المتزامنة: تؤثر العمليات المتزامنة في سرعة البرامج. يجب تجنب تشغيلعمليات متزامنة غير ضرورية وتنظيمها بشكل صحيح، وكذلك تحسين طريقة تخزين البيانات على القرص الصلب.
    • تقليل الخطأ: يجب تجنب الأخطاء في البرنامج، وتحسين جودة الشفرة المصدرية، واستخدام أدوات التحليل والاختبار لتحديد الأخطاء وتصحيحها.

    وبشكل عام، يمكن تحسين سرعة البرنامج من خلال تحديد العوامل التي تؤثر على الأداء وتحسينها بشكل صحيح. يجب النظر في جميع العوامل المذكورة أعلاه وتحسينها بشكل مناسب لتحقيق أداء أفضل للبرنامج.

    • أعجبني 1
  13. يمكن استخدام عدة طرق لرفع تطبيق ويب على سيرفر داخلي للشركة، وفيما يلي سأشرح أبرز الطرق بالتفصيل:

    •  البريد الإلكتروني:

    يمكن للمبرمج إرسال ملفات التطبيق عبر البريد الإلكتروني إلى شخص مسؤول داخل الشركة. يتم تضمين جميع الملفات والمستندات اللازمة لتشغيل التطبيق في رسالة البريد الإلكتروني. يجب إرسال رسالة بريد إلكتروني توضح الخطوات اللازمة لتثبيت التطبيق على السيرفر الداخلي للشركة.

    •  خدمات السحابة:

    يمكن استخدام خدمات السحابة المشهورة مثل Dropbox أو Google Drive لرفع ملفات التطبيق. يتم تحميل جميع الملفات والمستندات اللازمة لتشغيل التطبيق على حساب اشتراك المبرمج في الخدمة. يتم مشاركة رابط التنزيل مع شخص مسؤول داخل الشركة لتنزيل جميع الملفات والمستندات المطلوبة لتثبيت التطبيق على السيرفر الداخلي للشركة.

    •  File Transfer Protocol (FTP):

    يمكن استخدام برامج إدارة الملفات عن بعد مثل FTP لرفع الملفات على السيرفر الداخلي للشركة. يتم توفير بيانات اعتماد (credentials) للمبرمج للوصول إلى السيرفر ورفع الملفات. يجب التأكد من استخدام بروتوكول أمني مثل SFTP (Secure File Transfer Protocol) لتشفير الاتصال وحماية البيانات من الاختراق.

    •  Remote Desktop Connection:

    يمكن استخدام Remote Desktop Connection للاتصال بجهاز الكمبيوتر الداخلي للشركة من جهاز الكمبيوتر الخاص بالمبرمج. يتم توفير بيانات اعتماد (credentials) للمبرمج للوصول إلى جهاز الكمبيوتر الداخلي للشركة وتثبيت التطبيق مباشرة على السيرفر.

    •  Virtual Private Network (VPN):

    يمكن تثبيت VPN داخلي للشركة للسماح للمبرمج بالوصول إلى السيرفر الداخلي للشركة من مكان بعيد. يتم توفير بيانات اعتماد (credentials) للمبرمج للوصل إلى الشبكة الداخلية للشركة عبر VPN وتثبيت التطبيق مباشرة على السيرفر. يجب التأكد من تطبيق بروتوكول أمني مثل SSL (Secure Sockets Layer) أو TLS (Transport Layer Security) لتشفير الاتصال وحماية البيانات من الاختراق.

     

  14. بجانب الطريقة  الموجودة في التعليق السابق هذه هي الخطوات لتصدير عدة مقاطع في نفس الوقت في برنامج Wondershare Filmora X:

    •  افتح مشروعك في برنامج Filmora X. تأكد من أن جميع المقاطع التي تريد تصديرها مضافة إلى شريط الوقت.
    •  اضغط على زر "Export" في الأعلى. سيفتح نافذة التصدير.
    •  تحت "وضع التصدير"، اختر "Multiple" من القائمة المنسدلة. 
    • اختر تنسيق الملف الناتج (مثل MP4 أو WEBM أو MOV)، وأدخل اسم سابق لتصدير الملف. سيضيف البرنامج أرقامًا تلقائيًا بعد السابق لكل مقطع تصدره.
    • حدد مكان تخزين الملفات التي سيتم حفظ المقاطع فيها.
    •  تحت "المقاطع للتصدير"، اختر "Selected" إذا أردت تصدير مقاطع محددة فقط. ثم اضغط على Ctrl وانقر فوق المقاطع التي تريد تصديرها في شريط الوقت.
    • إذا أردت تصدير جميع المقاطع في شريط الوقت، اختر "All" تحت "المقاطع للتصدير".
    • ضبط أي إعدادات تصدير أخرى كحجم الفيديو/ الدقة، معدل البت، الخ.
    • اضغط على زر "Export" في الأسفل. سيقوم Filmora X بتصدير كل مقطع بشكل فردي إلى المكان الذي حددته، مع إضافة رقم تسلسلي إلى اسم السابق الذي حددته.

    هذه هي الخطوات لتصدير عدة مقاطع في وقت واحد من مشروع في برنامج Filmora X. 

  15. Web Storage (local storage/session storage):
    عادةً، يتم وضع JWT في local storage للمتصفح وهذا يعمل بشكل جيد لمعظم الحالات.

    عند تسجيل دخول المستخدم باستخدام اسم المستخدم وكلمة المرور، يتضمن جسم الاستجابة access_token JWT. بعد ذلك، تحتاج إلى التعامل مع هذا الاستجابة في كود الجانب العميل. يمكن حفظ هذا التوكن في localStorage أو sessionStorage.

    كلاًّ من localStorage وsessionStorage يمتدان من Storage. الفرق الوحيد بينهما هو احتفاظ البيانات:

    localStorage - تحتفظ البيانات حتى يتم حذفها بشكل صريح. يتم حفظ التغييرات التي تم إجراؤها وتتوفر لجميع الزيارات الحالية والمستقبلية للموقع.

    sessionStorage - يتم حفظ التغييرات التي تم إجراؤها وتتوفر للصفحة الحالية، بالإضافة إلى الزيارات المستقبلية للموقع على نفس النافذة. بمجرد إغلاق النافذة، يتم حذف التخزين.

    عيوب Web Storage:
    على عكس الكوكيز، يكون الlocal storage محصورًا في نطاق محدد ولا يمكن الوصول إلى بياناته من أي نطاق آخر بما في ذلك النطاقات الفرعية. يمكن الوصول إلىWeb Storage عبر JavaScript في نفس النطاق، لذلك قد يكون عرضة لهجمات cross-site scripting (XSS).

    يجب على المطور التأكد من إرسال التوكن دائمًا عبر HTTPS وليس HTTP.

    استخدام الكوكيز:
    يمكن أيضًا استخدام الكوكيز لتخزين التوكن. يختلف الطريقة الدقيقة لضبط الكوكيز اعتمادًا على لغة الجانب العميل التي تستخدمها.

    هناك خيارات مختلفة للتحكم في مدة حياة الكوكيز:

    يمكن تدمير الكوكيز بعد إغلاق المتصفح (كوكيز الجلسة).
    يمكن تنفيذ فحص على الجانب الخادم (وعادة ما يتم ذلك من قبل إطار العمل الذي يتم استخدامه)، ويمكن تنفيذ انتهاء الصلاحية أو انتهاء الصلاحية المتزايدة.
    يمكن أن يكون هناك صلاحية انتهاء للكوكيز  (لا تتم تدميرها بعد إغلاق المتصفح) 
    يمكن قراءة الكوكيز من قبل كود JavaScript والكود الخادم أو فقط الكود الخادم إذا تم تعيين العلم httpOnly.
    عيوب الكوكيز:
    يبلغ الحد الأقصى لحجم الكوكيز 4 كيلو بايت فقط، لذلك قد يكون هذا مشكلة إذا كان هناك العديد من المطالبات المرفقة بالتوكن.
    قد يكون الكوكيز عرضة للهجمات عبر الطلبات المزيدة (CSRF أو XSRF). يحدث هذا النوع من الهجمات عندما يتسبب موقع ويب خبيث في إجراء عمل غير مرغوب فيه على موقع موثوق به حيث يكون المستخدم مسجل الدخول حاليًا. وهذا يستغل كيفية تعامل المتصفح مع الكوكيز. يجعل استخدام حماية CSRF لإطار تطبيق الويب الخاص بك الكوكيز خيارًا آمنًا لتخزين التوكن. يمكن أيضًا الحد من CSRF بشكل جزئي من خلال فحص رأس HTTP Referer و Origin.

    يمكن أن يكون استخدام الكوكيز صعبًا في حالة تطبيق يتطلب الوصول عبر النطاقات المختلفة. تتضمن خصائص الكوكيز (Domain/Path) التي يمكن تعديلها للسماح لك بتحديد مكان يسمح باستخدام الكوكيز.

  16. هذا هو مثال للتحقق من اسم المستخدم وكلمة المرور في PHP وعرض الأخطاء بلون أحمر:

    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $username = $_POST['username'];
        $password = $_POST['password'];
        
        $conn = new mysqli('host', 'user', 'password', 'database');
        
        $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
        $result = $conn->query($sql);
        
        if ($result->num_rows == 1) {
            // Login success
            header('Location: /home.php');
        } else {
            // Login failed
            echo '<p style="color:red">Invalid username or password!</p>';
        }
    }

    هذا الكود يقوم بما يلي:

    • يتحقق من طريقة الإرسال POST
    • يأخذ قيم اسم المستخدم وكلمة المرور المرسلة من النموذج
    • يقوم بإجراء استعلام SQL للتحقق من وجود سجل مطابق في قاعدة البيانات
    • إذا وجد سجل واحد مطابق، يتم توجيه المستخدم إلى صفحة المنزل
    • إذا لم يعثر على سجلات مطابقة، يعرض رسالة خطأ باللون الأحمر

    هذا سيضمن عرض رسالة الخطأ بلون أحمر إذا كان اسم المستخدم أو كلمة المرور غير صحيحة.

    يمكنك تطبيق هذا الكود على صفحتك تسجيل الدخول للتحقق من بيانات المستخدم وإظهار الأخطاء بهذه الطريقة.

    • شكرًا 1
  17. "guest@" ليس دالة ولا متغير في البرمجة بشكل عام، ولا يمكن الإجابة على السؤال بدقة دون معرفة السياق الذي تم استخدام هذا المصطلح فيه. ولكن يبدو أنه خاص بإطار العمل laravel لذلك

    كجزء من إصدار Laravel 5.5، قدمت Laravel توجيهات جديدة في Blade تسمى @auth و @guest. كما يوحي الاسم، كل منهما يمكن أن يكون مفيدًا لتحديد ما إذا كان المستخدم الحالي مصادقًا أم زائرًا.

    في الإصدارات السابقة من Laravel، كنا نستخدم التوجيهة @if مع Auth()->check() للتحقق من حالة المصادقة للمستخدم. ولكن التوجيهات الجديدة تجعل الكود أكثر نظافة، لنرى كيف يمكننا استخدامها.

    الآن يمكننا التحقق بسرعة مما إذا كان المستخدم الحالي مصادقًا أو زائرًا:

    // باستخدام @guest
    @guest
    guest stuff here
    @else
    logged user stuff here
    @endauth
    
    // باستخدام @auth
    @auth
    logged user stuff here
    @else
    guest stuff here
    @endauth

    الطريقة القديمة للتحقق من حالة المصادقة:

    @if (auth()->check())
    @endif

     

  18. تستطيع تحديد عدد معين من السجلات الجديدة في Django باستخدام:

    - Model Manager
    - Limiting queryset

    في حالتك، يمكنك عمل التالي:

    •  أنشئ Manager خاص بـ Flashcard
    from django.db import models
    
    class FlashcardManager(models.Manager):
        def create_flashcards(self, num):
            for i in range(num):
                Flashcard.objects.create()
    
    class Flashcard(models.Model):
        objects = FlashcardManager()  
        # use the custom manager


     استدعي `.create_flashcards(10)` كل يوم لإنشاء 10 فلاش كارد فقط.

    from .models import Flashcard 
    
    Flashcard.objects.create_flashcards(10)

    يمكن أيضًا استخدام `.bulk_create()` وتحديد عدد السجلات:

    Flashcard.objects.bulk_create([Flashcard() for i in range(10)])

    أو استخدام `queryset.limit()`:

    for i in range(10):
        Flashcard.objects.create() 

    هذه الطرق ستضمن إنشاء 10 فلاش كارد فقط كل يوم. تستطيع اختيار الطريقة المناسبة لك.

  19. تطوير الويب مستمر لسنوات لعدة أسباب:

    • يستمر الطلب على مهارات تطوير الويب في النمو كلما تحولت المزيد من الشركات إلى الإنترنت وزادت من وجودها على الإنترنت. يدفع نمو التجارة الإلكترونية ووسائل التواصل الاجتماعي وتطبيقات الويب المتنقل هذا الطلب.
    • الويب يتطور باستمرار مع تقنيات وإطارات ولغات جديدة. هذا يعني أن مطوري الويب لديهم العديد من الفرص للتعلم المستمر والنمو وتطوير مهاراتهم. يحافظ على العمل مثير للاهتمام ومشوق.
    • هناك تخصصات متعددة ضمن تطوير الويب، بدءاً من التطوير الأمامي إلى الخلفي، إلى تطوير الجزء الكامل. هذا يتيح لمطوري الويب إيجاد تخصصات ضيقة تتوافق مع اهتماماتهم وقدراتهم.
    • رواتب تطوير الويب نسبيا عالية مقارنة بمهن أخرى، وفرص العمل عن بعد والعمل الحر توفر مرونة.

    ولكن يؤثر الذكاء الاصطناعي (AI) على تطوير الويب وتخلق فرص عمل جديدة في هذا المجال. ويعتبر أحد المجالات التي يؤثر فيها الذكاء الاصطناعي بشكل كبير يمكنك قراءة المزيد من المقالات في التعليق السابق بدلاً من التكرار

    • أعجبني 1
  20. كما في التعليقات السابقة فهذا الأمر يرجع إليك من خلال معرفة مميزات وعيوب كل مجال كما يلي

    تطوير الويب:

    • مجال واسع ومتنوع يشمل تطوير مواقع الويب والتطبيقات المستندة إلى الويب.
    • مطلوب للغاية بسبب انتشار الإنترنت واعتماد العديد من الشركات على الحضور على الإنترنت.
    • تحتاج إلى مهارات في لغات مثل HTML & CSS & JavaScript.
    • فرص العمل واسعة وتشمل وكالات الإعلانات وشركات التسويق ووسائل الإعلام وكبرى الشركات.
    • العيب الرئيسي هو المنافسة العالية وسرعة تغير التقنيات.

    تطوير التطبيقات:

    • يشمل جميع أنواع التطبيقات سواء كانت موجهة لأجهزة أندرويد أو آي أو إس.
    • هناك عدد كبير ومتزايد من التطبيقات، لذلك فرص العمل واسعة.
    • يتطلب فهما عميقا لأنظمة التشغيل وأدوات البرمجة التي تدعم كل منصة.
    • المنافسة عالية بسبب شعبية تطبيقات الهاتف.

    هندسة البرمجيات:

    • مجال مستقر ومهني يهتم بعملية تصميم البرمجيات وضمان جودتها.
    • المهندسون يطورون وينفذون اللوائح والممارسات الجيدة لتطوير البرمجيات بكفاءة.
    • أساليب العمل منهجية ومنظمة تستخدم أدوات مثل UML.
    • فرص العمل متاحة في جميع القطاعات الصناعية والدخل جيد.
    • تكون عملية تطوير البرمجيات أكثر كفاءة وفعالية.

    الذكاء الاصطناعي:

    • مجال في طور النمو بسرعة مع تزايد الحاجة إلى تقنيات الذكاء الاصطناعي.
    • تحديات برمجية مثيرة للاهتمام كالروبوتات والتعلم الآلي.
    • فرص العمل كبيرة في القطاعات الصناعية الرئيسية.
    • المهارات الرياضية والإحصائية ضرورية.
    • جديد نسبيا، ولكن لديه مستقبل واعد.
    • أعجبني 1
  21. تستخدم قوالب Django علامات {% if %} و {% endif %} لإنشاء عبارات if. يتمثل بناء الجملة الأساسي لعبارة if في الشكل التالي:

    {% if variable %}
    <!-- الكود الذي يتم تنفيذه إذا كانت القيمة المحددة للمتغير صحيحة -->
    {% endif %}


    يمكن استخدام أي متغير صالح للقالب داخل عبارة if، مثل المتغيرات المرسلة من العرض أو المتغيرات التي تم حسابها في القالب.

    مثال بسيط على عبارة if في قالب Django
    أحد الأمثلة البسيطة والشائعة في استخدام عبارة if في قالب Django هو عندما ترغب في التحقق مما إذا كان المستخدم المتصل حاليًا بالموقعد أم لا، ومن ثم توفير الخطوات اللازمة بناءً على حالة المصادقة. هكذا يتم تنفيذه:

    <h1>مرحبًا بك في موقعي</h1>
    
    {% if user.is_authenticated %}
        <p>مرحبًا، {{ user.username }}</p>
        <p><a href="{% url 'logout' %}">تسجيل الخروج</a></p>
    {% else %}
        <p>أنت غير مسجل الدخول.</p>
        <p><a href="{% url 'login' %}">تسجيل الدخول</a></p>
    {% endif %}


    في هذا المثال، تقوم عبارة if بفحص خاصية user.is_authenticated لتحديد ما إذا كان المستخدم قد سجل الدخول أم لا. اعتمادًا على النتيجة، سيتم عرض محتوى مختلف في القالب. إذا كان المستخدم قد سجل الدخول، سيتم عرض "مرحبًا [اسم المستخدم]" ورابط تسجيل الخروج، وإلا فسيتم عرض "أنت غير مسجل الدخول" ورابط تسجيل الدخول.

    {% else %} و {% elif %}
    بالإضافة إلى الجملة if الأساسية، تدعم قوالب Django أيضًا استخدام علامات {% else %} و {% elif %}.

    يمكن استخدام علامة {% else %} لتحديد كود يتم تنفيذه إذا لم يتم تلبية الشرط في عبارة if، كما فعلنا في المثال السابق، بينما يمكن استخدام علامة {% elif %} لتحديد شروط إضافية يتم فحصها.

    ولكن إذا كنت تريد ربط عدة عبارات if معًا باستخدام علامة {% elif %} للتحقق من شروط إضافية، فيمكنك استخدام الشكل التالي:

    {% if variable == 5 %}
        <p>المتغير يساوي 5.</p>
    {% elif variable == 10 %}
        <p>المتغير يساوي 10.</p>
    {% else %}
        <p>المتغير لا يساوي 5 أو 10.</p>
    {% endif %}

     

  22. يمكن أن تواجه مشكلة في عدم ظهور النتيجة في المتصفح بسبب استخدام أسلوبين مختلفين لتحميل نفس الملف `home.glb`. يتم استخدام `model-viewer` element في HTML و `GLTFLoader` في Three.js لتحميل الملف وعرضه. يجب استخدام الأسلوب الواحد لتحميل الملف، وإما استخدام `model-viewer` أو `GLTFLoader`.

    إذا كنت تريد استخدام `model-viewer`، يمكنك إزالة كود `GLTFLoader` في Script.js واستخدام العنصر `model-viewer` في HTML:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>3D</title>
    </head>
    <body>
        <div class="container">
            <model-viewer src="./home.glb" auto-rotate camera-controls alt="cube"></model-viewer>
        </div>
    </body>
    </html>

    بينما إذا كنت تريد استخدام GLTFLoader، فيمكنك إزالة العنصر model-viewer من HTML وتغيير كود Script.js إلى الشكل التالي:

    import * as THREE from 'three';
    import {OrbitControls} from 'three/examples/jsm/controls/OrbitControls'
    import {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader';
    import {DRACOLoader} from 'three/examples/jsm/loaders/DRACOLoader';
    
    const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
    const renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);
    
    const controls = new OrbitControls(camera, renderer.domElement);
    camera.position.set(0, 0, 5);
    controls.update();
    
    const loader = new GLTFLoader();
    const draco = new DRACOLoader();
    draco.setDecoderPath('/examples/jsm/libs/draco/');
    loader.setDRACOLoader(draco);
    
    // Load a glTF resource
    loader.load(
    '/home.glb',
      gltf => {
        gltf.scene.scale.set(.1,.1,.1);
        scene.add(gltf.scene);
      },
      xhr => {
        let percent = xhr.loaded / xhr.total * 100;
        console.log(`${percent}% of home model loaded.`);
      },
      error => {
        console.error(error);
      }
    );
    
    function animate() {
      requestAnimationFrame(animate);
      renderer.render(scene, camera);
    }
    
    animate();

    ويجب أن يتم تضمين الملفات اللازمة لـ OrbitControls و GLTFLoader و DRACOLoader لضمان عمل الكود بشكل صحيح.

  23. السبب في جعل الصنف الأول "abstract" هو أنه يعمل كصنف أساسي أو واجهة للصنف الآخر الذي يمتد منه. في هذه الحالة، يهدف "NewestBooksState" إلى كونها واجهة مشتركة لجميع الحالات الممكنة التي يمكن أن يكون عليها "NewestBooksCubit".

    بجعل "NewestBooksState" مجرد صنف أساسي، فلا يمكن إنشاؤه مباشرة، ولكن يمكن تمديده من خلال صنف آخر لتعريف حالات أكثر تحديداً. هذا هو نمط شائع في إدارة الحالة بنمط Cubit أو BLoC، حيث يكون الحالة الأساسية مجردة، وتمتد الحالات الفعلية منها لتمثيل حالحالات المختلفة للتطبيق.

    بالإضافة إلى ذلك، بتنفيذ صنف "Equatable" والتعديل على الطريقة "props"، يمكّن ذلك من مقارنة الحالات المختلفة بسهولة عن طريق مقارنة خصائصها. وهذا مهم عندما يصدر Cubit حالة جديدة ونريد التحقق من ما إذا كانت مختلفة عن الحالة السابقة وتحريك التحديثات وفقًا لذلك.

    كما أن استخدام الفئة المجردة abstract class في بلوك (BLoC) له عدة فوائد:

    • تنظم الحالات (states) في هيكل تراثي. يمكن للفئة المجردة ان تكون اب لجميع الحالات، وبالتالي تربط بينها.
    • تجبر على تطبيق الوظائف التي يحتويها الفئة الأب abstract class في الفئات المشتقة منها. مثلا يمكن تعريف وظيفة abstract في الفئة الأب، ثم تطبيقها في الفئات البنات.
    • تسهل اضافة فئات جديدة مشتقة لأن التركيبة والقواعد الأساسية يتم وضعها في الفئة الأب.
    • تساعد في اعادة الإستخدام لأن الفئة الأب تحتوي على المنطق المشترك بين الحالات، ويمكن استخدام نفس المنطق في سياقات مختلفة.
    • في المثال الذي أعطيته، تم استخدام abstract class لتنظيم حالات الكيوبت (cubit) في هيكل تراثي. وهذا يسهل الحفاظ على الكود وتطويره فيما بعد.
    • الفرق بين الParameters والArguments:

    في هذا المثال، لدينا دالة تسمى "addNumbers" تقوم بإضافة رقمين وإرجاع النتيجة:

    function addNumbers(num1, num2) { return num1 + num2; }

    يتم تعريف المتغيرات num1 و num2 كـ parameters في تعريف الدالة. وعند استدعاء الدالة، يتم تمرير الـ arguments وهي القيم الفعلية التي يتم إدخالها إلى الدالة، كما هو موضح في المثال التالي:

    var result = addNumbers(5, 10); console.log(result); // النتيجة هي 15

    في هذا المثال، يتم تعريفالـ parameters num1 و num2 في تعريف الدالة "addNumbers". وعند استدعاء الدالة باستخدام الـ arguments 5 و 10، تتم إسناد القيم 5 و 10 إلى المتغيرات num1 و num2 على التوالي، وتقوم الدالة بإضافة المتغيرين وإرجاع النتيجة 15.

    • الفرق بين الDeclaration والInitialization:

    في هذا المثال، لدينا متغير يسمى "name" يتم تعريفه في الكود وإسناد قيمة له في وقت لاحق:

    var name; name = "John"; console.log(name); // النتيجة هي "John"

    في هذا المثال، يتم استخدام الـ Declaration لتعريف المتغير "name" دون تحديد قيمة محددة له. ويتم استخدام الـ Initialization لإسناد القيمة "John" إلى المتغير "name" في الوقت الذي يتم فيه تعريفه، ويتم ذلك باستخدام علامة الـ "=" لإسناد قيمة "John" إلى المتغير "name". وبعد ذلك، يتم طباعة قيمة المتغير باستخدام console.log()، وتكون النتيجة "John".

    • الـ Execution Context:

    في هذا المثال، لدينا دالة تسمى "greet" تقوم بطباعة رسالة ترحيب باستخدام المتغير "name":

    function greet(name) {
      console.log("Hello, " + name + "!");
    }
    
    var message = "Welcome to my website!";
    greet("John");

    عند استدعاء الدالة "greet" باستخدام الـ argument "John"، يتم إنشاء Execution Context جديد يحتوي على المتغيرات التالية:

    المتغير "name" الذي تم تعريفه كـ parameter في دالة "greet".

    المتغير "message" الذي تم تعريفه في المستوى العلوي من الكود.

    يتم إنشاء Lexical Environment جديد لكل Execution Context، والذي يحتوي على الـ Identifier bindings التي تم تعريفها في هذا النطاق. في هذا المثال، يتم الوصول إلى المتغير "name" من خلال Lexical Environment الخاص بـ Execution Context الذي تم إنشاؤه لدالة "greet"، بينما يتم الوصول إلى المتغير "message" من خلال Lexical Environment العلوي للكود.

    •  الـ Lexical Environment:

    في هذا المثال، لدينا دالة تسمى "calculateArea" تقوم بحساب مساحة المستطيل باستخدام المتغيرات "width" و "height":

    ini

     

    function calculateArea(width, height) {
      var area = width * height;
      return area;
    }
    
    var width = 5;
    var height = 10;
    var result = calculateArea(width,height);
    console.log(result); // النتيجة هي 50

    في هذا المثال، يتم تعريف المتغيرات "width" و "height" في المستوى العلوي من الكود، وتتم إسناد القيم 5 و 10 إلى المتغيرات على التوالي. وعند استدعاء الدالة "calculateArea" باستخدام الـ arguments "width" و "height"، يتم إنشاء Execution Context جديد يحتوي على المتغيرات التالية:

    المتغير "width" الذي تم تعريفه في المستوى العلوي من الكود.

    المتغير "height" الذي تم تعريفه في المستوى العلوي من الكود.

    المتغير "area" الذي يتم تعريفه داخل الدالة "calculateArea".

    يتم إنشاء Lexical Environment جديد لكل Execution Context، والذي يحتوي على الـ Identifier bindings التي تم تعريفها في هذا النطاق. في هذا المثال، يتم الوصول إلى المتغيرات "width" و "height" من خلال Lexical Environment العلوي للكود، بينما يتم الوصول إلى المتغير "area" من خلال Lexical Environment الخاص بـ Execution Context الذي تم إنشاؤه لدالة "calculateArea". وتتم إدارة المتغيرات في هذه الـ Lexical Environment، ويتم الوصول إليها من خلال الـ Execution Context الخاص بها.

    يمكنك الإطلاع على المزيد من المعلومات من خلال المقالة التالية

     

    • أعجبني 1
  24. بتاريخ 13 ساعة قال Mohamed Abdel Moaty:

    شكرا لك علي سرعة الاستجابة 

    ولكن ليس هناك طريق لستخدام الكل في رابط الواحد بهذا الشكل 

    RewriteRule ^egyp/(.*)/(.*)/(.*)/$ egypt.php?id=$1&id1=$2&id3=$3

    يمكنك استخدام الحل التالي

    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^egypt/(.*)$ egypt.php/$1 [L]

    في هذا المثال، يتم استخدام الشرط %{REQUEST_FILENAME} !-f لتحويل الروابط التي لا تشير إلى ملفات في الموقع، والشرط %{REQUEST_FILENAME} !-d لتحويل الروابط التي لا تشير إلى مجلدات في الموقع، وذلك لتجنب تحويل الروابط الثابتة في الموقع.

    يتم استخدام النمط ^egypt/(.*)$ لتحويل جميع الروابط التي تحتوي على متغيرات إلى صفحة واحدة egypt.php.يتم استخدام خاصية RewriteCond لفحص الشرط %{REQUEST_FILENAME} !-f و%{REQUEST_FILENAME} !-d للتأكد من عدم وجود ملف أو مجلد بالاسم المطلوب في الطلب، وهذا يضمن تحويل الروابط فقط إذا لم يتم العثور على ملف أو مجلد بهذا الاسم في الموقع.

    يتم استخدام الشرط [L] في نهاية القاعدة RewriteRule لإيقاف تطبيق أي قواعد أخرى إذا تم تحويل الرابط بنجاح.

    يجب أن يتم وضع هذه القاعدة في ملف .htaccess ووضع الملف في المجلد الرئيسي لموقع الويب. يجب التأكد من تفعيل إعادة الكتابة RewriteEngine في ملف htaccess وأن يكون الملف قابل للقراءة والكتابة من قبل المستخدم المسؤول عن الخادم.

×
×
  • أضف...