-
المساهمات
15399 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
403
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
طرق الدفع المتاحة هي البطاقة الإئمتانية من نوع credit card أو Debit card وليس بطاقة مسبقة الدفع Prepaid، أو الدفع من خلال باي بال. لكن في بال عليك بإمتلاك حساب يمكنك حساب يسمح بالشراء من خلال رصيد باي بال، أو يمكنك ربط حساب باي بال بحساب بنكي أو بطاقة للدفع من خلالهم وذلك عبر باي بال. ويوجد طريقة أخرى وهي بطاقة الهدية حيث يمكن لشخص شراء بطاقة بتكلفة الكورس ويمكنك استخدامها لشراء أي كورس تريد. ويوجد أيضًا العرض الصيفي لا تنسى تفقده.
- 2 اجابة
-
- 1
-
-
لا ليس علاقة من قريب أو من بعيد بالوظيفة، هي أمر لقياس مدى نشاطك على الأكاديمية فقط، الأمر مشابه لموقع Stack Overflow في حال قمت بتصفحه من قبل ستجد أن لكل عضوة نقاط سمعة.
- 4 اجابة
-
- 1
-
-
في بداية عملية التعلم كل ما عليك التركيز عليه هو التعلم وليس محاولة إنهاء الدورة واستكمالها، وأعلم أن الأمر صعب فالجميع في البداية متحمس ويريد إنهاء الدورة في أسرع وقت ويريد تنفيذ المشاريع ونشرها. لكن بدون عملية التعلم البطيئة في البداية لن تتمكني من الإسراع في النهاية، بل ستسيري بنفس السرعة وستعودي للمراجعة والدراسة مرة أخرى. لذلك بعد كل درس عليك بسؤال نفسك هل فهمت الدرس بشكل جيد؟ نعم؟ إذًا عليك بالتطبيق بمفردك على نفس المسائل والنماذج التي قام بها المدرب أو مسائل ونماذج مشابهة ومحاولة التعديل على الكود وتعديله لفهم الكود. في حال واجهتك مشكلة في الحل ماذا نفعل؟ أولاً قبل تنفيذ أي مشروع أو حل مسألة، علينا بالتفكير في طريقة الحل وخطوات تنفيذ المشروع، ثم كتابة الكود هي أخر خطوة، وأيضًا عليك بتقسيم المسألة أو المشروع إلى مهام صغيرة ثم تنفيذها وعدم النظر إلى الأمر كما هو بصورته الكاملة. ولا مشكلة في البداية إذا استغرقتي ساعة مثلاً أو ساعتين لحل مسألة، فأنت ما زلت تتعلمين وبحاجة إلى التفكير أولاً ومحاولة الحل ثم البحث عن طريقة للحل مثل البحث عن دالة معينة أو طريقة كتابة أمر معين وهكذا، أو مشاهدة شرح على اليوتيوب يشرح أمر أنت بحاجة إليه لحل المسألة. لكن لا تقضي اليوم كله في مسألة مثلاً، بل المطلوب منك هو المحاولة والبحث من أجل التعلم، وفي حال تم حل نصف المسألة مثلاً أو تم تنفيذها لكن لم تعمل بشكل سليم تمامًا فلا مشكلة، يمكنك رؤية الحل ومشاهدة الشرح بعد المحاولة.
-
أهلا بك ياسمين، جميع دورات أكاديمية حسوب هي دورات مدفوعة، وتكلفة الدورة هي 290 دولار، وحاليًا يوجد العرض الصيفي للحصول على دورتين بتكلفة دورة واحدة فقط. وأيضًا عند إشتراكك بإحدى الدورات، سيتاح لك الوصول إلى المسار الأول من جميع الدورات الأخرى لدراسته بشكل مجاني. وإذا كنتي تواجهين مشكلة في الإشتراك فعليك بالتواصل مع مركز المساعدة في أكاديمية حسوب وسيتم مساعدتك.
-
عليك أولاً بتهيئة حسابك على GitHub ونشر المشاريع التي قمت بتنفيذها وبالطبع أنت قمت بذلك طالما أنك حصلت على الشهادة. ويتبقى خطوة إضافة صور في ملف Readme لإظهار المشروع وتفاصيله وأيضًا إضافة رابط حي لتصفح المشروع على استضافة مجانية مثل Netlify أو GitHub pages وغيرهم. بعد ذلك عليك بإنشاء حساب على LinkedIn وإعداداه بشكل جيد وإضافة المهارات الخاصة بك وإضافة فترة دراستك في الأكاديمية على أنها Internship أيضًا وضع الفترة التي قمت بدراسة تلك الدورة بها. وبعد ذلك عليك بإنشاء CV بشكل جيد وضع معلوماتك به لكن عليك بقراءة التالي لتفهم ما يتم كتابته: ثم عليك بالبحث عن إعلانات الـ Internship المتاحة على مواقع التوظيف مثل LinkedIn وIndeed وغيرهم، وأيضًا قد يفيدك السؤال في مجموعة برمجة يتم بها الإعلان عن وظائف والسؤال عن توفر Internship وتوفير رابط لحسابك على LinkedIn أو رابط للـ CV وبالطبع بداخل الـ CV عليك بوضع روابط للـ LinkedIn وGitHub.
- 5 اجابة
-
- 1
-
-
بإمكانك تعديل الأشكال والألوان وتغيير التصميم العام باستخدام CSS وتخصيص العناصر باستخدام JavaScript. أو إضافة صفحات مخصصة جديدة في واجهة لارافل نوفا، باتباع الخطوات التالية: عليك بإنشاء ملف طلب جديد للصفحة المخصصة باستخدام الأمر php artisan nova:resource في موجه الأوامر (Command Line)، وذلك الأمر سيولد ملف طلب جديد يمثل صفحة المورد المخصص. php artisan nova:resource MyCustomPage ثم، انتقل إلى ملف الطلب الذي تم إنشاؤه في المسار app/Nova/MyCustomPage.php وقم بتحريره لتحديد اللوحة والمعالج المرتبط بالصفحة المخصصة. // app/Nova/MyCustomPage.php namespace App\Nova; use Laravel\Nova\Resource; use Laravel\Nova\Fields\Text; class MyCustomPage extends Resource { public static $displayInNavigation = false; public function fields(Request $request) { return [ Text::make('Title'), ]; } } ثم قم بتسجيل الصفحة المخصصة في ملف التحكم (NovaServiceProvider) الخاص بك في المسار app/Providers/NovaServiceProvider.php باستخدام الأسلوب nova::resources. // app/Providers/NovaServiceProvider.php use App\Nova\MyCustomPage; protected function resources() { return [ MyCustomPage::class, ]; } وبتلك الخطوات، ستظهر صفحة المورد المخصصة الخاصة بك في واجهة لارافل نوفا.
-
للأسف طالما أن الأمر له علاقة بالكود البرمجي فلن تتمكن من فعل شيء، حيث أنك بحاجة إلى معرفة برمجية باللغة التي تم كتابة البوت بها لإكتشاف الأخطاء بالكود والتعديل عليه. ولذلك عليك بتعيين مبرمج ملتزم وبتقييمات جيدة من على موقع مستقل أو خمسات، وشرح الأمر له وسيتم حل مشكلتك، أو يمكنك الرجوع للمبرمج الذي قام بتنفيذ البوت وسؤاله عن حل للمشكلة.
-
هناك نقطة هامة يجب استيعابها، وهي أنه يوجد مستويات مختلفة من CSS وأيضًأ أي لغة برمجية أخرى، وأٌقصد بالمستويات أن هناك مستوى خاص بالأساسيات ويتم شرحه في الدورات الخاصة بمن لا يعلم أي شيء عن البرمجة ويريد تعلم تطوير الواجهة الأمامية. وهناك مستوى متوسط تكتسبه من خلال تنفيذ مشاريع بعد تعلم أساسيات وHTML، لذلك لا تكتفي بما تقدمه لك أي دورة، بل ستجد على اليوتيوب نماذج ومشاريع كثيرة للتطبيق على HTML وCSS فقط ولا تخف أبدًا من تعلم أشياء جديدة فذلك هو المطلوب من تنفيذ تلك المشاريع، فإن لم تتعلم أشياء جديدة وتخلق تحدي لنفسك فما الفائدة؟ وتستطيع دائمًا محاولة التفكير في كيفية التنفيذ بناءًا على ما تعلمته وما تعرفه، وإذا تعذر الأمر عليك تستطيع البحث عن خصائص CSS التي تمكنك من تنفيذ ما تريد أو مشاهدة الشرح في الفيديو الذي تتابعه، ثم محاولة التطبيق بمفردك. وأيضًا تستطيع السؤال هنا بعد البحث وسيتم مساعدتك وتوجيهك، وستجد في موسوعة حسوب شرح لخصائص CSS وHTML: https://wiki.hsoub.com/الصفحة_الرئيسية وأيضًا الدروس والمقالات في أكاديمية حسوب: https://academy.hsoub.com/programming/html/ https://academy.hsoub.com/programming/css/ وقد أوضحك تلك النقطة في النقاش التالي: وبخصوص التطبيق تستطيع العثور على نماذج وتصاميم للتطبيق عليها من خلال المواقع في النقاش التالي:
-
أولاً عليك باستيعاب أن البرمجة هي عملية كتابة التعليمات البرمجية التي تخبر الجهاز الإلكتروني بما يجب فعله، والأجهزة الإلكترونية لا يمكنها أن تعمل بدون برمجة. ومثلاً ماكينة تصوير المستندات تحتاج إلى برمجة حتى تعرف كيفية نسخ المستندات، البرمجة هي التي تسمح لماكينة تصوير المستندات بمعرفة كيفية استخدام المكونات الإلكترونية الخاصة بها لإنشاء نسخة من المستند. وتلك الماكينة تحتوي على مجموعة من الأجزاء الإلكترونية مثل المعالج والذاكرة والحساسات والمحركات والمستشعرات والواجهات والشاشة وغيرها، وتلك الأجزاء تعمل سويًا لتحويل المستندات الورقية إلى صور رقمية وطباعتها أو حفظها على وسائط تخزين. وهناك العديد من لغات البرمجة المختلفة التي يمكن استخدامها لبرمجة الأجهزة الإلكترونية، وبعض لغات البرمجة الأكثر شيوعًا هي C و C++ و Java و Python، وكل لغة برمجة لها نقاط قوتها وضعفها الخاصة. وكمثال لغة C هي لغة برمجة سريعة وفعالة، لكنها قد تكون صعبة التعلم، أما لغة Python هي لغة برمجة سهلة التعلم، لكنها قد لا تكون سريعة أو فعالة مثل لغة C.
- 3 اجابة
-
- 1
-
-
أنت غطيت موضوعات هامة في الفروع الأساسية للرياضيات التفاضلية والتكاملية، ولا يزال هناك الكثير من المواضيع والمفاهيم التي يمكنك استكشافها في هذا المجال إذا كنت ترغب في تعميق معرفتك ومنها: تعلم كيفية التفاضل والتكامل للدوال التي تحتوي على أكثر من متغير، وكيفية حساب المشتقات الجزئية والتكاملات المزدوجة والثلاثية. معادلات الانحدار والتكامل وتلك المواضيع تستخدم بشكل شائع في تعلم الآلة والذكاء الاصطناعي. يتم استخدامها لإنشاء نماذج تنبؤية وتحليل البيانات. يمكن استخدام الرياضيات في حل مشاكل برمجة وإنشاء نماذج محاكاة لتجربة أنظمة معقدة. التحويلات المركبة والتحليل المرتبط بالرياضيات مثل تحليل فورييه وتحويل لابلاس، وهي مفاهيم هامة لتحليل الإشارات ومعالجة الإشارات الرقمية. معادلات الانفصال الجزئي ويستخدم هذا النوع من المعادلات في العديد من التطبيقات في العلوم الهندسية والفيزيائية. بالطبع، لا توجد حاجة للانتقال إلى تلك المواضيع فورًا، تستطيع اختيار موضوع يثير اهتمامك والاستمرار في تعلمه بشكل تدريجي، ويُفضل أن تكمل فهمك للمواضيع الأساسية جيدًا قبل الانتقال إلى المواضيع المتقدمة، كما أنصحك بحل مشاكل وتطبيقات متنوعة لكل موضوع تدرسه لتعزيز فهمك بشكل عملي.
-
المشكلة تتعلق بمشكلة في إنشاء ملف keystore الذي يستخدم لتوقيع التطبيقات عند تشغيلها على أجهزة AndroidK ,يجب أن يتم إنشاء هذا الملف بشكل صحيح لكي يعمل التطبيق بشكل صحيح، وذلك من خلال التالي: تحقق من أن Flutter SDK و Android Studio و Java Development Kit (JDK) مثبتة بشكل صحيح على جهاز الكمبيوتر الخاص بك وأن كلها مثبتة في مسارات صحيحة. تأكد من أنك قمت بإعداد Flutter SDK وفقًا للتعليمات الخاصة بالتثبيت الصحيح وتم تعيين متغير البيئة "PATH" بشكل صحيح لمجلد الأدوات الخاص بـ Flutter. تحقق من أن Android Studio مثبت بشكل صحيح وقد تم تثبيت Android SDK ومحدث بآخر إصدار. قم بفتح Android Studio وتحديث الـ Flutter و Dart plugins إلى أحدث إصدار إذا كان ذلك متاحًا. قم بإعادة تشغيل Android Studio بعد التحديثات. في حال كنت تقوم بتوقيع التطبيق لأول مرة، تأكد من أنك قمت بإنشاء ملف keystore بشكل صحيح باستخدام أداة keytool. يمكنك استخدام الأمر التالي في الطرفية لإنشاء ملف keystore: keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias وسيُطلب منك إدخال بعض المعلومات الشخصية أثناء إنشاء المفتاح، وبعد إنشاء الملف بنجاح، يُفضل وضعه في مجلد يسهل الوصول إليه ومناسب لأغراض النشر، وقم بتكوين Android Studio لاستخدام ملف keystore الجديد عند توقيع التطبيق. يمكنك فعل ذلك من قائمة "Build" ثم "Flutter" ثم "Configure Signing"، وبعد ذلك اختر الملف keystore الذي قمت بإنشائه. وفي حال ما زلت تواجه مشكلة، بإمكانك تشغيل البرنامج مع خيار "--stacktrace" للحصول على المزيد من تفاصيل الأخطاء والمشاكل التي قد تساعد في تحديد المشكلة بشكل أدق.
-
من الأفضل تعيين شخص متخصص في التسويق من على مواقع العمل الحر مثل خمسات ومستقل، وشرح ما تريده. وفي حال لم يتوفر ميزانية في الوقت الحالي، فتستطيع التسويق بنفسك من خلال إنشاء محتوى والتفاعل في المجموعات المهتمة بمنتجاتك على وسائل التواصل ومحاولة إنشاء محتوى هناك أيضًا وبناء قاعدة عملاء لك وإنشاء مجموعة على التيليجرام أو واتساب وهكذا. وتستطيع قراءة مقالات لتعلم طرق التسويق لمتجرك، ويوجد في أكاديمية حسوب قسم خاص بذلك: التسويق والمبيعات
-
ليس مطلوب منك كمطور واجهات أمامية Front-End developer تصميم واجهة المستخدم، فتلك هي وظيفة مصمم واجهات المستخدم UI\UX. لكن المطلوب منك هو المعرفة بأساسيات التصميم الجيد لواجهة المستخدم، وإمتلاكك حس فني وذلك يأتي برؤية تصماميم المواقع بكثرة أي التغذية البصرية وتنفيذ المشاريع. وقد أوضحت تلك النقطة في النقاش التالي: وفي الشركة من المفترض أن تستلم التصميم من المصمم وتعمل على تنفيذه، وفي مقابلة العمل سيتم سؤالك عن اللغات والتقنيات التي تعمل بها. ولكن بالطبع ليس كل المشاريع يتم بها استخدام Bootstrap بل يمكن استخدام Tailwind أو غيره من إطارات CSS أو حتى العمل بدون إطار CSS وذلك يرجع لطبيعة عمل الشركة وحجم الأعمال الخاصة بها. لذلك عليك بالتركيز على الأساسيات وهي HTML, CSS, JS والتي ستؤهلك للتعلم والعمل بأي شيء.
-
بالطبع يمكنك ذلك وبإمكانك تحسين وإضافة مزايا جديدة لتلك الأعمال، وأيضًا إذا أردت تنفيذ مشاريع أخرى، فتستطيع البحث عن تصميم يعجبك أو استلهام التصميم من المواقع التي يتم بها نشر تصماميم للمواقع، ثم القيام بتنفيذ التصميم الذي اخترته وتحويله إلى كود ونشر الموقع على استضافة مثل netlfiy ووضعه في معرض أعمالك. وكنصيحة حاول تغيير الشعار مثلآ وتغيير اسم المشروع وتغيير بعض الألوان إن استطعت أو أبقي عليها كما هي، واٌقصد بذلك أن يكون لديك مشروع مختلف حتى ولو قليلاً. وتجنب وضع نماذج بسيطة، بل مشاريع كاملة.
- 2 اجابة
-
- 1
-
-
رسالة الخطأ تعني أن المكون App تم استيراده في ملف index.js ولكن لم يتم استخدامه، وذلك صحيح، حيث أنك قمت بكتابة المكون بحرف صغير كالتالي app وليس App عليك بتعديل الكود وسيتم عرض المكون: import React from 'react'; import ReactDOM from 'react-dom'; import App from './app'; ReactDOM.render(<App />, document.getElementById('root'));
- 2 اجابة
-
- 1
-
-
ما التابع السحري (Magic Method) هو مصطلح يشير إلى مجموعة من الدوال الخاصة التي تحمل اسمًا خاصًا بدايةً ونهايةً بشرطة سفلية (underscore) من كلا الجانبين. وتعمل تلك الدوال الخاصة في ظروف محددة عند حدوث أنواع معينة من الأحداث في الكلاس، مثل إنشاء الكائنات، الجمع بينها، تحويل الأنواع، وغيرها. والتابع السحري الأكثر شيوعًا هو __init__() الذي يُستخدم لبناء المُثيلات (الكائنات) عند إنشائها من الكلاس، وعند استدعاء الكلاس لإنشاء كائن جديد، سيتم تفعيل هذا التابع للقيام بإعداد الكائن، وإليك مثال: class MyClass: def __init__(self, value): self.value = value print("تم إنشاء كائن!") obj1 = MyClass(10) # سيطبع: تم إنشاء كائن! بالإضافة إلى __init__()، هناك العديد من التوابع السحرية الأخرى مثل __str__() لتمثيل الكائن على شكل سلسلة نصية عند استخدام print()، و __add__() لتحديد سلوك الجمع بين كائنين من نوع الكلاس. وباستطاعتك استخدام التوابع السحرية عندما تريد تغيير سلوك الكائنات في الكلاس ليتماشى مع احتياجاتك. مثلاً إن كان لديك كلاس يمثل متجرًا على الإنترنت وتريد تعريف سلوك الجمع بين عناصر المتجر، فيمكنك استخدام التابع السحري __add__() لأنه سيتم استدعاؤه عند استخدام العملية الحسابية + بين كائنين من هذا الكلاس.
-
هناك إضافات خاصة بالخصومات بالفعل مثل إضافة honey وغيرها من الإضافات والتي تظهر لك الخصومات المتاحة لأي موقع في حال توافرات أثناء تصفح للموقع. وبالنسبة للكورسات، وكل ما تحتاجه هو تفقد هل يوجد عروض على المنصة المقدمة للكورسات أم لا، وفي حال لم يوجد عليك بالبحث على جوجل عن اسم الموقع ثم coupons بجانبه مثال : edx coupons وهكذا وسيظهر لك نتائج لكوبونات الخصم المتوفرة. وأيضًا يوجد عروض في الفترة الصيفية أو في يوم الجمعة البيضاء وهي أخر جمعة في شهر نوفمبر وعامًة تبدأ العروض قبل ذلك عليك بالمتابعة وتستمر العروض لفترة 10 أيام على المواقع حتى نهاية نوفمبر وقد تستمر تبعًا للموقع.
-
الرياضيات مثل الكود بحاجة إلى الفهم والاستيعاب ثم التطبيق العملي والتطبيق لا يقل أهمية عن الفهم، ,وفي الرياضيات من المفيد كتابة النقاط الهامة مثل القواعد والملاحظات وخلافه التي تساعدك في الحل والأمر أشبه بالملخصات في أيام الدراسة. الأمر الذي يعود عليك بالنفع في حالة أردت تذكر أمر ما أو المراجعة وفهم الأمر بشكل أعمق حيث أنك ستكتب القواعد والملاحظات وشرح بسيط لها من خلال فهمك. وبالإضافة إلى ما سبق بإمكانك الإعتماد على أدوات التعلم التفاعلي عبر الإنترنت أو تطبيقات الهاتف المحمول التي تتيح لك التفاعل مع الرياضيات وتجربة التغييرات في الوقت الفعلي. أما في الكود فلا حاجة إلى كتابة كل شيء فلديك الإنترنت تستطيع البحث عما تريد، لكن عليك الفهم والاستيعاب والحفظ في البداية وفي حال نسيت تستطيع البحث وأنصحك بقراءة التالي:
- 3 اجابة
-
- 1
-
-
أنت تحاول قفز خطوات وعدم السير خطوة خطوة في الطريق الصحيح، أولاً عليك بتعلم الرياضيات الأساسية المطلوبة لمجال الذكاء الاصطناعي وهم الجبر الخطي والتفاضل والتكامل ولإحتمالات والتحليل الرياضي. وبإمكانك البحث على اليوتيوب عن تلك الأساسيات وتعلمها وستجد محتوى بالعربية والإنجليزية. أما بخصوص كورس ذكاء اصطناعي من جوجل فهو (Google AI Education)، وتستطيع البحث على اليوتيوب عن دورات للذكاء الاصطناعي باللغة العربية لتسهيل الأمر عليك في حال كنت تواجه صعوبة في الإنجليزية لكن الدورات الإنجليزية أفضل بالطبع ومنها شهادة الذكاء الإصطناعي من جامعة ستانفورد (Machine Learning AI Certification).
- 9 اجابة
-
- 1
-
-
بعد إنتهائك من دورة تطوير واجهات المستخدم، ستتعلم التالي: html- CSS- JavaScript - Bootstrap - jQuery - Sass وستجد مشاريع مناسبة لك على مواقع العمل الحر مثل مستقل وخمسات، لكن عليك بعرض نفسك بشكل جيد على تلك المواقع وقد تحدثت عن ذلك هنا: https://io.hsoub.com/android_programming/149617-مرحبا أما بخصوص الشركات فقد أخبرتك من قبل طالما أنك في مصر، فتستطيع تعلم Angular وهو إطار للواجهة الأمامية وستحصل على وظيفة في فترة أقل من React، حيث أن الشركات تتطلب إطار أو مكتبة للواجهة الأمامية وليس اللغات الأساسية HTML, CSS, JS وبالطبع هم حجر الأساس الذي يؤهلك لتعلم أي شئ ولا تهملهم بل ركز بشدة على الأساسيات.
-
أنت تتحدث عن مجالين مختلفين تمامًا، فتخصص الهندسة يتضمن هندسة مدنية، معمارية، ميكانيكية وكهربية وهندسة برمجيات وغيرهم. أما حاسبات ومعلومات فهى كلية خاصة بالبرمجة والذكاء الاصطناعي. لذلك عليك بتحديد ما تريد وهو أمر صعب بالطبع، ونصيحتي إليك قم بدراسة مجال البرمجة لمدة أسبوع على الأقل لتفقده وكتابة الكود بيديك والدراسة لمدة 6 ساعات يوميًا على الأقل لتستطيع التحديد بناءًا على معرفة صحيحة. وتستطيع البدء مثلاً بتعلم أساسيات لغة بايثون أو C++ والأفضل دراسة C++ لأنك ستتعرض لها في الكلية وهي الأساس الصحيح لتعلم البرمجة لكنها أصعب، فإذا وجدت الأمر صعب بالنسبة لك أو أنك لا تفضل مجال البرمجة. فهنا تتجه لكلية الهندسة، ولمعلوماتك قسم البرمجيات بها سيؤهلك لتصبح Embedded Software Engineer لتعمل في شركة مثل Valeo.
- 3 اجابة
-
- 1
-
-
الطريقة الأولى لحل المشكلة هي باستخدام مفهوم الـ "حذف المتوالي" (Cascading Delete) في MongoDB، وعند حذف عنصر من Model Product، يمكنك تعيين خاصية تؤدي إلى حذف جميع العناصر المرتبطة به في Model Cart تلقائيًا. والأمر يعتمد على كيفية تطبيقك للعلاقة بين Model Product و Model Cart في تطبيقك، فإذا كنت تستخدم مرجعًا يشير إلى عنصر في Model Product في Model Cart (مثل استخدام ObjectId)، فتستطيع الاستفادة من خاصية "onDelete" في واجهة العلاقة للقيام بذلك. وإليك مثال على كيفية تحقيق حذف المتوالي بين Model Product و Model Cart باستخدام مكتبة Mongoose في Node.js، ولنفترض أن لديك مودل Product ومودل Cart مثل التالي: // Product Model const mongoose = require('mongoose'); const productSchema = new mongoose.Schema({ name: String, // ... other product properties }); const Product = mongoose.model('Product', productSchema); module.exports = Product; مودل Cart: // Cart Model const mongoose = require('mongoose'); const cartSchema = new mongoose.Schema({ products: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Product' }], // ... other cart properties }); const Cart = mongoose.model('Cart', cartSchema); module.exports = Cart; بإمكانك إضافة خاصية "onDelete" في علاقة Model Cart مع Model Product لتحقيق حذف المتوالي: const cartSchema = new mongoose.Schema({ products: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Product', onDelete: 'CASCADE' }], // ... other cart properties }); وبذلك عندما يتم حذف عنصر من Model Product، سيقوم MongoDB تلقائيًا بحذف جميع العناصر المرتبطة به في Model Cart بفضل الخاصية "onDelete" التي تم تعيينها في واجهة العلاقة. والخاصية "onDelete" ليست جزءًا من MongoDB نفسها، بل هي خاصية تقدمها مكتبة Mongoose لتسهيل التعامل مع قواعد البيانات. لذلك، ويجب التأكد من استخدام Mongoose أو أي مكتبة أخرى تقدم تلك الخاصية حتى تتمكن من الاستفادة من الحذف المتوالي. الطريقة الثانية هي باستخدام طريقة deleteMany() مع استعلام يحدد كل العناصر التي تريد حذفها، وكمثال: const productsCollection = db.collection('products'); const cartsCollection = db.collection('carts'); // Find all products that are in the cart const productsInCart = cartsCollection.find({ productId: { $in: productsCollection.distinct('id') } }); // Delete all products that are in the cart productsInCart.deleteMany(); سيعمل الكود السابق على حذف جميع المنتجات التي توجد في عربة التسوق، بالإضافة إلى إمكانية استخدام طريقة deleteOne() لحذف عنصر واحد فقط. أي إن كنت تريد حذف المنتج الذي له معرف 1234567890, فالطريقة كالتالي: const productsCollection = db.collection('products'); // Delete the product with id 1234567890 productsCollection.deleteOne({ id: 1234567890 }); والقرار بين استخدام "حذف المتوالي" باستخدام خاصية "onDelete" في واجهة العلاقة أو استخدام deleteMany() و deleteOne() يعتمد على حاجتك الفعلية وتصميم قاعدة البيانات والتطبيق الخاص بك، وسأوضح لك الفرق بالمقارنة بينهم: استخدام حذف المتوالي (onDelete): المزايا: يقوم بالحفاظ على سلامة علاقات البيانات بطريقة أكثر تلقائية، وعند حذف عنصر من Model Product، ستتم إزالة العناصر المرتبطة به من Model Cart تلقائيًا دون الحاجة إلى كتابة الكود يدويًا. أكثر ملاءمة وسهولة للتطبيقات التي تعتمد بشكل كبير على العلاقات وتحتاج إلى تنظيم بياناتها بشكل جيد. العيوب: يتطلب استخدام مكتبة معينة (مثل Mongoose) التي تدعم هذه الخاصية، وإذا قررت استخدام مكتبة أخرى قد لا تكون تلك الخاصية متاحة. استخدام deleteMany() و deleteOne(): المزايا: تحكم أكبر بالعملية وأوضح للمطورين، وتستطيع كتابة الكود بشكل دقيق لحذف العناصر المطلوبة بناءًا على متطلبات تطبيقك. قابل للتطبيق دون الحاجة إلى مكتبة خاصة بـ "حذف المتوالي". العيوب: أكثر تعقيداً في بعض الحالات، خاصة إذا كان لديك عدة نماذج مرتبطة بعلاقات معقدة. وببساطة إن كانت علاقاتك معقدة وتعتمد على عمليات حذف متعددة في عدة نماذج، فمن الأفضل استخدام deleteMany() و deleteOne() لتحكم أكبر في العملية، أما إذا كانت العلاقات بسيطة وترغب في تبسيط عملية الحذف، فالحذف المتوالي باستخدام "onDelete" هو الخيار الأمثل.
- 1 جواب
-
- 1
-
-
إذا كان لديك أي استفسار أو ترغب بتوضيح أي معلومة ما عليك سوى السؤال تحت الفيديو وسيجيبك المدربون خلال أقل من نصف ساعة في جميع الأوقات؛ وإذا حدثت معك مشكلة برمجية لم تستطع حلها بنفسك فيمكنك أن ترفق مشروعك لنفحصه لك وندلك على المشكلة وطريقة الحل، ونخبرك كيف أصلحناها لتكتسب مهارة حل المشكلات البرمجية. وبعد منحك الشهادة سنمنحك باقة كتابة السيرة الذاتية في موقع بعيد بقيمة 99$ مجانًا. سيجري لك فريق أخصائيي التوظيف مقابلة صوتية يتعرف فيها على مهاراتك، ويكتب لك أفضل سيرة ذاتية مخصصة لك؛ ثم سيتابع معك لضبط حسابك على مستقل وبعيد ويقدم لك نصائح مخصصة للحصول على عملك الأول. وبخصوص دورة بايثون بشكل خاص، فستجد أنها تغطي المهارات المطلوبة في وصف الوظيفة على مواقع التوظيف، وقد تم توضيح ذلك هنا:
- 5 اجابة
-
- 1
-
-
في دالة compareCar، يجب أن تقوم بالمقارنة بين جميع خصائص الكائنين car و car1، لذلك يحتاج الدالة إلى إجراء حلقة للتحقق من جميع الخصائص. عند التحقق من الخصائص، يجب استخدام [] بدلاً من . للوصول إلى قيمة الخاصية، لأن اسم الخاصية غير معروف مسبقًا. عند التحقق من قيمة الخاصية، يجب استخدام === للمقارنة بين القيم وليس == لأن === يقارن أيضًا نوع القيمة. وإليك الحل الصحيح: let car = { make: 'kia', model: 'rio', year: 1999 }; let car1 = { make: 'kia', model: 'rio', year: 1999 }; let compareCar = function(car, car1) { // الحصول على مفاتيح الكائنين let keys1 = Object.keys(car); let keys2 = Object.keys(car1); // التحقق مما إذا كان عدد المفاتيح متساويًا if (keys1.length !== keys2.length) { return false; } // مقارنة مفاتيح وقيم الكائنين for (let key of keys1) { if (car[key] !== car1[key]) { return false; } } return true; }; let result = compareCar(car, car1); console.log(result); // النتيجة: true وبخصوص سؤالك عند استخدام && في الشرط، فإنه يقوم بتقييم الشرط بالكامل قبل أن يقرر إذا ما كان يجب تنفيذ الجزء الذي يليه أم لا. وفي حالة الشرط car.key === car1.key && car[key] === car1[key]، الجزء الأول car.key === car1.key يقارن بين الخاصية key في الكائن car والكائن car1. لكن في تلك الحالة، لا يوجد خاصية اسمها key موجودة في كلا الكائنين، لذلك يتم رفع خطأ key is not defined، ولا يتم الوصول للجزء الثاني من الشرط. بالنسبة لاستخدام ||، عند استخدامه في الشرط car.key === car1.key || car[key] === car1[key]، فإنه يقوم بتقييم الشرط وإذا كان أي جزء من الشرط صحيحًا (بمعنى أن الخاصية key موجودة في أحد الكائنين)، فإنه يعتبر الشرط صحيحًا دون الحاجة للتحقق من الجزء الثاني من الشرط. ولذلك لا يظهر خطأ key is not defined عند استخدام ||. لحل المشكلة والقيام بالمقارنة بطريقة صحيحة، تستطيع استخدام الأسلوب الذي قمت بتصحيحه في الكود السابق باستخدام حلقة for لمقارنة جميع الخصائص.
- 6 اجابة
-
- 1
-