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

Adnane Kadri

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

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

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

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

    52

كل منشورات العضو Adnane Kadri

  1. الاختصار في تقديم رؤوس أقلام دون التوسع مقصود، فبعض مفاهيم البرمجة يمكن التوسع في شرحها والتعرض لها بشكل شاسع جدا، الأمر الذي يبعد الطلبة عن مضمون المسار في نفسه ويشتتهم، وهو دراسة الأساسيات. ولذلك تجد الدورات تتحدث عن الأهم فقط. اذ أن مستواهم يناسب ذلك، والغلو في الشروحات والتعرض لمفاهيم أكثر تعقيدا قد يبعدهم حتى عن فهم المضمون الرئيسي للدرس. هذا بجانب أنهم لا يحتاجونها في بادئ الأمر. يتم الاعتماد على التدرج في طرح المادة العلمية بحسب تعقيدها، فالدورة لازالت طويلة ولا يجب عليك الاستعجال. فقد تأخذ من الأساسيات في مسارات هي غير مسارات الأساسيات. أيضا، يمكنك طلب المساعدة أو التوضيح بخصوص أي جزئية لم تفهمها في قسم تعليقات الطلبة وسوف يتابع معك المدربون.
  2. الخطأ الذي تحتويه الرسالة يشير إلى عدم تطابق التوقيع (signature) لدالة الـ useReducer مع الـ reducer الخاص بك. يبدو أن هناك عدم تطابق في نوع المعاملات الممررة عبر الـ useReducer. يحتمل أن يكون ذلك بسبب أن الوظيفة reducerFunction تعيد undefined بشكل افتراضي، أضف استعلام return الى عبارة default: default: return state;
  3. استفسارك صائب وفي محله، ولكن كلتا الطريقتين تمتلك ميزات تختلف بها عن الأخرى، بحيث أن تعلم تقنيات الويب آر تي سي: يمكنك من إنشاء أنموذج مصغر MVP يتم التوسع فيه مستقبلا يخدم معايير مثل قابلية التوسع وقابلية التخصيص والصيانة وما الى ذلك. يغنيك من امتلاك ميزات جانبية لا تخدم حالات استخدام معينة لديك، بحيث يكون تطوير النظام موجها بحالات الاستخدام التي لديك. خيار مجاني وسهل. في حين أن استعمال خيارات جاهزة لبث الفيديوهات من مثل الذي ذكرت يعطيك: اختصارا للوقت والجهد الماما بميزات عدة قد يأخذ العمل عليها منك وقتا التخلص من مشاكل الصيانة والمتابعة الدورية أجد أيضا أن مبالغ الاشتراكات المطلوبة مرتفعة قليلا مقابل مثل هاته الخدمات، قد يكون من الصائب البحث عن بدائل أقل كلفة. نذكر مثلا: Google Cloud Pub/Sub Azure Media Services Wowza Streaming Engine IBM Watson Media عن نفسي، كنت لأفضل اعتماد اشتراك مؤقت ضمن أي خدمة مدفوعة من الخدمات المذكورة أعلاه لاختبار تجربة العملاء، وفي نفس الوقت العمل بشكل موازي على أنموذج خاص بكم يتم تطويره كمنتج مستقل تماما، وأخيرا اعتماده بشكل تدريجي والتطوير فيه مستقبلا. خصوصا وأن حالة الاستخدام المراد خدمتها ها هنا بسيطة تقريبا، فأنت تبحث عن بث فيه مشاركة للشاشة والمايكات فقط. بل وحتى أن اعتماد Google meet للقيام بمثل هاته الاجتماعات يعد خيارا جيدا، فهو في الأخير يخدم حالة الاستخدام المراد العمل عليها. خذ الأمر بسلاسة ومرونة، ركز فقط على انشاء برمجيات تستوفي شروط الشيفرة النظيفة كل شيء فيها قابل للاستبدال، الصيانة، التوسع والتطوير. وكل شيء سيكون بسيطا.
  4. يمكنك الاستعانة بقراءة الخاصية insert_id للتحصل على آخر معرف ID تم ادراجه بقاعدة البيانات، استعملي ذلك بعد استعلام الادراج الخاص بك بشكل مباشر، فيكون: //شيفرة الإدراج $targetId = $conn->insert_id; echo 'المعرف الخاص بآخر صف مدرج هو: '.$targetId; طبعا يمكنك التوسع في الفكرة أكثر، مثل طباعة المتغير أو استعماله بشكل آخر.
  5. هل تقصد بحسب التوثيق الرسمي؟ لا يتوفر ذلك. هي مجرد طريقة لاستعمال التابع directive وللتعامل مع واجهة التطبيق البرمجية لكائن Vue فقط، ابحث عن how to register global directive in vue js وستجد أمثلة مشابهة.
  6. مشكلتك تحديدا كانت في أنك قد أنشات نموذج Vue في حين أنك قد قمت بتهيئة الموجه directive في Vue instance آخر تماما. // directives.js // first vue instance const app = createApp(App) و: import glob from './directives' glob() // main.js // second vue instance const app = createApp(App) وبما أن الثاني هو ما يتم عمل mount له مع المكون الجذر app# فلن يتم بطبيعة الحال التعرف على الأول، وبالتالي لن يتم تسجيل الموجه أبدا.
  7. حسن، فيما يلي الطريقة الصحيحة لذلك: عدل ملف directives.js ليصبح: const globalexternal = { mounted: function (el) { el.placeholder = 'Global Custom Directive from external file' } } export default globalexternal; في ملف main.js قم باستيراد الموجه وسجله باستعمال التابع directive: import globalexternal from './directives' const app = createApp(App) app.directive('globalexternal' ,globalexternal) app.mount('#app') استعمل الموجه في أي ملف فرعي: <input v-globalexternal style="width: 370px" />
  8. لا أظن أن هنالك تغيير من حيث استعمال الموجهات directives ما بين vue 3 و vue 2 . يحتمل أن يكون ذلك بسبب استعمال الخطاف mounted، جرب استعمال beforeMount أو created: app.directive('globalexternal', { created: function (el) { أيضا قد تكون المشكلة بسبب طريقتك في الوصول الى الخاصية placeholder، فالعنصر المستقبل كمعامل أول el هو عنصر DOM الذي يتم ربطه بالموجه bound element. جرب استعمال السياق التالي: mounted: function (el) { el.setAttribute('placeholder' ,'Global Custom Directive from external file') }
  9. سؤالك عام جدا، ويخضع للكثير من المتغيرات الأخرى. ولكن فيما يلي توجيه عام للقيام بذلك: قم باستلام بيانات المستخدم من النموذج form. قم بإنشاء اتصال مع قاعدة البيانات. قم بإجراء التحقق من نوع المستخدم، وذلك بحسب قيمة حقل الادخال الخاص بالنوع. قم بتحضير الاستعلام وتنفيذ عملية الادراج. تحقق من نتيجة الاضافة وتصرف بناءا عليها، كعرض رسالة نجاح أو اعادة توجيه الى صفحة جديدة. أغلق اتصال قاعدة البيانات. فيما يلي مثال عملي: <?php // استلام بيانات المستخدم من النموذج $userType = $_POST['user_type']; $username = $_POST['username']; $password = $_POST['password']; // الاتصال بقاعدة البيانات $conn = mysqli_connect("localhost", "username", "password", "database_name"); if (!$conn) { die("فشل الاتصال بقاعدة البيانات: " . mysqli_connect_error()); } // إجراء التحقق من نوع المستخدم والإضافة إلى الجداول المناسبة if ($userType == 'doctor') { // إضافة الطبيب إلى جدول الأطباء $query = "INSERT INTO doctors (username, password) VALUES ('$username', '$password')"; $result = mysqli_query($conn, $query); // إضافة الطبيب إلى جدول المستخدمين $query = "INSERT INTO users (username, password, user_type) VALUES ('$username', '$password', 'doctor')"; $result = mysqli_query($conn, $query); } elseif ($userType == 'patient') { // إضافة المريض إلى جدول المرضى $query = "INSERT INTO patients (username, password) VALUES ('$username', '$password')"; $result = mysqli_query($conn, $query); // إضافة المريض إلى جدول المستخدمين $query = "INSERT INTO users (username, password, user_type) VALUES ('$username', '$password', 'patient')"; $result = mysqli_query($conn, $query); } // التحقق من نتيجة الإضافة if ($result) { echo "تمت عملية الإضافة بنجاح!"; } else { echo "حدث خطأ أثناء الإضافة."; } // إغلاق اتصال قاعدة البيانات mysqli_close($conn); ?>
  10. مشكلتك غير واضحة فهي مشكلة عامة، ولكن يرجح أن الخطأ خاص باستهداف مسار POST باستخدام GET باطار عمل لارافيل. يحدث مثل هذا عادة عند نسيان تصريح الخاصية method بالنسبة لعنصر form معين تحاول تقديمه. فيأخذ ذلك السلوك الافتراضي وهو اعتماد GET كطريقة للطلب. ابحث عن عنصر form المرافق وقم باسناد قيمة POST لهاته الخاصية method: <form method="POST" قد يكون أيضا من الضروري تصريح حقل يحدد نوع الطلبية: طريقة أولى: @method('POST') طريقة ثانية: input type="hidden" name="_method" value="POST"> وطبعا لا تنسى حقل csrf لطلبيات POST: @csrf
  11. باختصار: Auto fill: يُستخدم لوصف تعبئة العناصر أو التوزيع التلقائي للمحتوى في مساحة محددة. بحيث أنه يقوم بتعبئة المساحة المتاحة بالعناصر بشكل تلقائي حتى لا تبقى فراغات فارغة. Auto fit: يُستخدم لوصف ضبط حجم العناصر بشكل تلقائي لملاءمة المساحة المتاحة. بحيث أنه يقوم بضبط حجم العناصر بحيث تناسب المساحة المتاحة بدون تشويه أو تغيير النسب الأصلية للعناصر. على سبيل المثال: إذا كان لديك معرض بشكل شبكة grid لعرض الصور، فيمكنك استخدام "Auto fill" لملء المساحة المتاحة بالصور بتوزيع تلقائي، بينما يمكنك استخدام "Auto fit" لضبط حجم الصور بحيث تتلاءم بشكل تلقائي داخل المساحة دون تشويهها. ويمكننا القول إن "fit" يركز على ضبط حجم المحتوى ليتناسب مع المساحة المتاحة، بينما "fill" يركز على تعبئة المساحة المتاحة بالعناصر. فالأولى تهتم بمحتوى العنصر في حين أن الثانية تهتم بالعنصر نفسه.
  12. هل فكرت في استخراج معرف التشخيص الجديد بعد انشاءه؟ سيمكنك بعد ذلك استعماله في حقن ترقيد admit جديد يخصه: // إدراج البيانات في جدول التشخيص $sql = "INSERT INTO diagnosis (doctor_id, nutrition_id, patient_id, date, diabetess, state, fats_checkup, hypertension, allergy, dia_description, med_description) VALUES ('$doctor_id', '$nut_id', ' $p_id', '$date', '$diabetess', '$states', '$fats_checkup', '$hypertension', '$allergy', '$dia_description', '$med_description')"; $result = mysqli_query($conn, $sql); // إستعلام للحصول على معرف التشخيص الجديد $last_id = $conn->insert_id; // إدراج البيانات في جدول الترقيد $sql2 = "INSERT INTO admit (dia_id, nut_id, dormitory, room) VALUES ('$last_id', '$nut_id', '$dormitory', '$number_room')"; $result2 = mysqli_query($conn, $sql2);
  13. لا. لا يتوفر ذلك بشكل مباشر، ولكن لما لا تقوم باعتماد ملخصات شخصية تكون لك مرجعا وتعينك على استعياب الدروس وفهمها؟ الحظ أن دورات الأكاديمية كلها مقسمة الى مسارات وتبويبات ودروس، سيساعدك هذا كثيرا في ذلك. فيما يلي بعض الخطوات العملية لذلك: حدد الموضوع: يمكن ان يكون عنوان مسار أو باب كامل أو دورة كاملة ان شئت. قم بتجميع المعلومات: وهذا كمرحلة أولية تسبق كل مراحل النمذجة والتنظيم. ولا يكون هذا إلا بالتركيز والتأكد من هضم كل ما يتعرض له المدرب في الفيديو. قم بتنظيم المعلومات: وذلك باعتماد رؤوس أقلام ومعلومات مقتضبة ودالة تذكر وتشير الى مفاهيم اكثر اتساعا. استخدم الرسوم التوضيحية: مثل الدوائر والأسهم وما الى ذلك. استخدم الألوان والتنسيقات: أعط الأبواب لونا معينا والدروس أو الجزئيات ألوان أخرى مثلا. حسن الورقة: اعرض الورقة على مدربين وخذ رأيهم واستمع لتوجيهاتهم واقتراحاتهم في التحسين.
  14. رسالة الخطأ تشرح نفسها، فالمشكلة تبدأ أولا بتنبيه يشير إلى عدم التعرف على متغير باسم nmaes$ ثم مشكلة بخصوص تمرير قيمة NULL كمعامل أول للوظيفة array_pad في حين أن هاته الوظيفة تتوقع استقبال مصفوفة كمعامل أول، الأمر الذي يؤدي الى ظهور هاته المشكلة وتعطل تنفيذ الشيفرة. لحل المشكلة ستحتاج إما: تصريح متغير nmaes$ بشرط أن يكون مصفوفة. تمرير مصفوفة الى الوظيفة array_pad ولذلك فإن كلا الحلين التالين صحيح: 1: $nmaes = ['Lorem', 'Upsum', 'Doler' ,'sit']; echo '<pre>'; print_r(array_pad($nmaes, 5, 'Test')); echo '</pre>'; 2: echo '<pre>'; print_r(array_pad(['Lorem', 'Upsum', 'Doler' ,'sit'], 5, 'Test')); echo '</pre>'; توثيق array_pad()‎ في PHP بحسب ويكي حسوب
  15. يحدث ذلك بسبب عدم دعم ترميز utf8 الذي تندرج تحت رموز الأحرف العربية، جرب القيام بتعيين خاصية charset لـ nodemailer لتصبح utf-8: const mailOptions = { from: 'your-email@example.com', to: 'recipient@example.com', subject: 'عنوان البريد الإلكتروني', text: 'نص البريد الإلكتروني', charset: 'utf-8' // تعيين ترميز النص إلى UTF-8 }; أيضا قد يكون من العملي تحديد نوع المحتوى عن طريق الخاصية conentType: const mailOptions = { from: 'your-email@example.com', to: 'recipient@example.com', subject: 'عنوان البريد الإلكتروني', html: '<p>نص البريد الإلكتروني</p>', contentType: 'text/html; charset=utf-8' // تعيين Content-Type وترميز النص };
  16. تشير المشكلة الى موضع خطأ بخصوص سياق الاستعلام لديك، هذا الخطأ عام ولا يمكن تشخيص المشكلة المتسببة فيه إلا بعد الاطلاع على الاستعلام الذي تقومين به أو كامل نص رسالة الخطأ. ولذلك، تأكدي من استعمال سياق صحيح في توصيف استعلامات الادراج لديك، خصوصا الفواصل والأقواس.
  17. ما تشير إليه يسمى Utility classes وهي كلاسات مساعدة يتم تحديد نطاقها لخاصية CSS واحدة مثل خاصية نمط النص أو خاصية لون الخلفية أو خاصية الهامش أو الحد ما الى ذلك. وبوتسراب بدوره يتوفر على سلسلة منها نعم. فهو بشكل أساسي يتوفر على كلاسات مساعدة في كل من: الحدود Borders / سمك الحدود Border Width / لون الحدود Border Color / نوع الحدود Border Radius كلاسات التعويم Float and Clearfix / Responsive Floats التوسيط Center Align العرض والارتفاع Height and Width كلاسات التباعد Spacing، مثل الهوامش والحواشي Paddings and Margins الضلال Shadows محاذاة العناصر على المحور العمودي Alignment الظهور Visibility الألوان Colors ألوان الخلفيات Background Colors بخصوص كلاسات التباعد، فهي تتوفر على مقاسات من 0 الى 5 ولا يمكن استعمال أكثر من ذلك بصورة مباشرة. ولكن سيمكنك بطبيعة الحال استعمال كلاسات مخصصة تصفها وحدك. على عكس أطر عمل utility-first مثل Tailwindcss الذي يمكن فيه مثل هاته الأمر بصورة عادية جدا.
  18. في جافاسكربت، لا يمكن ذلك بصورة مباشرة إذ أنك ستحتاج إما الاعتماد على عميل البريد الالكتروني في تطبيق العميل لتأكيد الإرسال: let body = document.querySelector('#mailbody').value let subject = document.querySelector('#mailsubject').value window.open(`mailto:test@example.com?subject=${subject}&body=${body}`); وهو حل عملي في أغلب الحالات، أو استعمال طلبية اجاكس لإرسال الطلب الى خادمك للتعامل معه في جهة الخادم. أو استعمال خدمات طرف ثالث تقوم لك بذلك من مثل مكتبة EmailJS.
  19. ليس تماما، بل يمكن اعتبارها توطئة لأي تخصص في تخصصات علوم الحاسب وتطوير البرمجيات بما في ذلك تطوير الألعاب. فهي لا تختص بتطوير الألعاب على وجه الخصوص. أما المسارات العملية التي تعنى بألعاب فهي مسارات تطبيقية تتبع بمسار تعلم سكراتش، ولذلك فهي تطبيقات عملية لمفاهيم البرمجة وعلوم الحاسب من مثل الشروط والكتل البرمجية ومخططات التدفق وما الى ذلك. وهذا كله في المسار الأول فقط. اذ ان المسارات اللاحقة تعنى بالمزيد من الجزئيات والتفرعات في علوم الحاسب هي: أساسيات البرمجة. أنظمة التشغيل ولينكس. قواعد البيانات. عالم الويب. البرمجة كائنية التوجه. الخوارزميات وبنى المعطيات. أنماط التصميم. أساسيات هندسة البرمجيات.
  20. بالمختصر، قواعد البيانات (Databases) تشير إلى مجموعة من البيانات المنظمة والمخزنة بطريقة مرتبة ومترابطة في مستودع (Database) واحد أو أكثر. يتم استخدام قواعد البيانات لتخزين وإدارة البيانات بطريقة منظمة تسمح بإجراء الاستعلامات والتحديثات والعمليات الأخرى على البيانات. تشمل قواعد البيانات أنواعًا مختلفة مثل قواعد البيانات العلائقية (Relational Databases) مثل MySQL وقواعد البيانات غير العلائقية (Non-Relational Databases) مثل MongoDB. أما هياكل البيانات (Data Structures) فهو تفرع يشير إلى طرق تنظيم وتخزين البيانات في الذاكرة أو التخزين. بحيث تساعد هياكل البيانات في تحسين أداء وكفاءة العمليات على البيانات مثل البحث والإدخال والحذف. تشمل هياكل البيانات أشكالًا مختلفة مثل القوائم المتسلسلة (Linked Lists) والأشجار (Trees) والمصفوفات (Arrays) وغيرها. تلخيص: قواعد البيانات تشير إلى نظام لتخزين وإدارة البيانات بينما هياكل البيانات تشير إلى الطرق والترتيبات المستخدمة لتنظيم وتخزين البيانات في الذاكرة أو التخزين. أما قواعد البيانات تستخدم هياكل البيانات كأساس لتنظيم وتخزين البيانات داخلها.
  21. الاختيار بدرجة اولى يعتمد على احتياجاتك وميزانيتك بدرجة ثانية، تتباين الاختيارات عادة بين: استضافة مشتركة (Shared Hosting): تعتبر خيارًا اقتصاديًا حيث يتم استضافة موقعك على خادم مشترك مع مواقع أخرى. تحتاج إلى التأكد من توفر مساحة تخزين كافية وعرض نطاق كافٍ لاستيعاب الزوار المتوقعين وتلبية احتياجاتك. بعض مقدمي الخدمة المشتركة المشهورين هم Bluehost وSiteGround وHostGator. استضافة افتراضية خاصة (VPS Hosting): توفر موارد مخصصة أكثر من الاستضافة المشتركة، حيث يتم تخصيص جزء من الخادم لموقعك. هذا يمنحك سيطرة أكبر على الموارد وأداء أفضل. يمكنك النظر في خيارات مثل DigitalOcean وVultr وLinode. استضافة سحابية (Cloud Hosting): تعتمد على البنية التحتية السحابية لتوفير استضافة موقعك. تتميز بالمرونة والقدرة على التوسع حسب الحاجة. خيارات الاستضافة السحابية المعروفة تشمل Amazon Web Services (AWS) وGoogle Cloud وMicrosoft Azure. استضافة خادم مخصص (Dedicated Server Hosting): تحصل على خادم مخصص بالكامل لموقعك دون مشاركته مع مواقع أخرى. هذا يوفر أعلى مستوى من الأداء والتحكم. يعتبر استضافة الخوادم المخصصة خيارًا متقدمًا ومكلفًا. أما الاختيار الأصوب والمنصوح به دوما هو البدء مع استضافة مشتركة والترقية الى واحدة من الثلاث الأخرى، وهذا لذات الأسباب المشار اليها سابقا، فالاستضافات المشتركة عادة ما تكون ميزانيتها محدودة او اقل من باقي الخطط بميزات عدة.
  22. المستودعات متوفرة كمرجع أثناء وبعد العمل على المشاريع التطبيقية، فقد يحدث أن يكون هنالك جزئية سقطت من الطالب أثناء الممارسة التطبيقية. هنا ستكون له هاته المسارات بمثابة المرجع الذي يقارن فيه شيفرتها مع شيفرته ويشخص أخطاءه. وقد يستعملها المدربون أيضا لإرشاد الطلبة إلى ذلك. قد يوجد أيضا بعض ملفات الأصول مثل المكتبات والصور وملفات الخطوط وغيرها، تلك التي يحتاج الطالب استخراجها أو العمل بها تلافيا لأي مشاكل قد تحدث بسبب استعمال اصدارات أو نسخ أخرى من هاته المكتبات والصور والملفات. هذا بجانب استعمالات غيت هب الاعتياديات من مثل التحكم في الاصدارات، والتراجع واستعادة نسخ معينة، أو تسجيل التطويرات ومتابعتها وما الى ذلك من استعمالات.
  23. من الصعب الإحاطة بكل خطوات العملية في إجابة مقتضبة ولكن فيما يلي بعض الخطوات العامة التي تمكنك من القيام بذلك: قومي بتجهيز نموذج استمارة form به جميع مدخلات الطلب، مثل: اسم الطبيب، اسم الممرض، اسم المريض .. الخ. قوم بإضافة حقل select يحمل فئات المستخدمين. قومي باستعمال جافاسكربت للاستماع لحدث تغيير قيمة حقل select. بحسب قيمة هذا الحقل قومي بتبديل إظهار وإخفاء الحقول الخاصة بكل فئة من المستخدمين، مثال: لما يختار المستخدم فئة طبيب يتم اخفاء جميع الحقول الأخرى واظهار تلك الخاصة بالطبيب فقط. الآن ما عليك إلا تقديم الاستمارة والتعامل مع المدخلات كل بشكل منفصل بحسب نوع الحقل، فإذا كانت فئة المستخدمين هي فئة الأطباء نقوم بفحص المدخلات الخاصة بالأطباء فقط، مثل: اسم الطبيب، تخصصه الدراسي، مدة عمله، المصلحة التي ينشط فيها أو أي حقول أخرى تشتغلين عليها.
  24. نعم، وهو المطلوب، فلن تحتاج في المسار الأول إلا الإلمام بهاته المعارف، أما التطبيق العملي فيكون في المسارات اللاحقة. والدورة لا تؤخذ من مسار او اثنين بطبيعة الحال بل تتكامل مع بعضها مسارا بمسار، ولا يمكن بأي شكل من الأشكال استعجال الأمر أو محاولة التطبيق بعد اكتساب بعض المعارف النظرية فقط. بخصوص المجتمعات البرمجية، يمكنك الاطلاع على مجتمعات حسوب IO. بها الكثير من المتخرجين والطلبة والمدربين.
  25. قم بوضع ملف contact.php وضعه على نفس مستوى هذا الملف، ثم قم بتصريح الخواص action و method لتعريف المسار المستهدف وطريقته: <form action="contact.php" method="POST"> الآن بعد الضغط على زر submit وتقديم النموذج سيتم ارسال الطلب الى صفحة contact.php بطريقة POST بالبيانات التي تدخلها في الحقول داخل form. سيمكنك استقبال هاته البيانات في ملف contact.php والقيام بباقي العملية، لنقل أننا نريد استقبال قيمة email: <?php $email = $_POST['email']; الآن لنقم بإرسالها الى الايميل بوساطة الدالة mail في php: mail("youremail@gmail.co","example", 'الإيميل المدخل هو: ' . $email); طبعا فإن هذا هو منطق العملية بشكل عام ونمذجة بسيطة لها، سيمكنك التوسع فيها بإضفاء المزيد من المتغيرات أو استعمال تفاصيل أكثر. يمكنك الاستزادة بالاطلاع على:
×
×
  • أضف...