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

عبد الوهاب بومعراف

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

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

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

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

    2

كل منشورات العضو عبد الوهاب بومعراف

  1. صحيح أنّ دروس البرمجة لمختلف دورات أكاديمية حسوب هي متاحة مدى الحياة، بما فيها التحديثات الدورية التي يتمّ القيام بها. لكنّ هذا الأمر لا يجب أن يجعل الطالب يتكاسل وينقطع عن الدراسة لفترات طويلة دون عذر أو سبب وجيه يمنعه من ذلك، خاصة أنّ الدروس هي عبارة عن مسارات وفي أغلب الأحيان تكون هذه المسارات مترابطة فيما بينها، والانقطاع قد يكون عاملا سلبيا للتعلم. يمكنك مراجعة المسارات مسارا بمسار، للتأكد من أنك قد فهمت دروسه، يمكنك تذكر ذلك من خلال العنوان، في حال كنت قد فهمت الدرس من قبل جيدا فلن يكون صعبا تذكره يمكنك تسريع الفيديو وفي حال واجهتك صعوبة ما فقط اطرح سؤالك مباشرة أسفل الدرس أين ستجد صندوقا للتعليقات مثل الذي تراه هنا.
  2. نبدأ العد من الصفر في المصفوفات لأن ذلك يتماشى مع كيفية تخزين البيانات في الذاكرة، ويجعل العمليات الحسابية على الفهارس أبسط وأسرع عندما تعرّف مصفوفة في C يتم تخزين العناصر بجانب بعضها في الذاكرة، لكل عنصر عنوان في الذاكرة لنفترض أن أول عنصر موجود في العنوان 1000 في الذاكرة، وأضفنا أربعة عناصر جديدة بعده على افتراض أنّه إذا كان كل عنصر يأخذ 4 بايت، فكل عنصر جديد يبدأ بعد 4 بايت من السابق ومنه ستكون كالتالي: 1004 1008 1012 1016 فعندما تشير إلى المصفوفة arr فإن arr هو في الواقع العنوان الأول في الذاكرة 1000 وكل من: arr[0] تعني "العنصر الأول بدءا من العنوان الأساسي" أي: 1000 + 0 * 4 = 1000 arr[1] تعني "العنصر الثاني بدءا من العنوان الأساسي" أي: 1000 + 1 * 4 = 1004 arr[2] تعني "العنصر الثالث بدءا من العنوان الأساسي" أي: 1000 + 2 * 4 = 1008 لاحظ أن الصيغة بسيطة عند استخدام الصفر: عنوان العنصر = العنوان الأساسي + الفهرس × حجم العنصر أما إذا بدأنا الفهرس من 1، فستصبح الصيغة أكثر تعقيدا (ستحتاج إلى index - 1 في كل مرة) مما يجعل الحساب أصعب.
  3. وعليكم السلام ورحمة الله pickle هي مكتبة مدمجة في بايثون تستخدم لتحويل الكائنات مثل القوائم والقواميس والأشياء إلى سلسلة من البايتات بحيث يمكن تخزينها على القرص أو نقلها عبر الشبكة واستعادتها لاحقا بنفس الحالة. أما joblib فهي مكتبة مبنية على pickle ولكنها محسنة لتخزين واسترجاع الكائنات الكبيرة خاصة تلك التي تحتوي على بيانات رقمية ضخمة مثل مصفوفات Numpy باستخدام تقنيات مثل الضغط وال memory mapping لتحسين الأداء. والفارق الرئيسي بينهما أنّ pickle تعتبر خيارا مناسبا للتعامل مع الكائنات الصغيرة والمتوسطة الحجم بينما تقدّم joblib أداء أفضل عند التعامل مع بيانات ضخمة أو كائنات معقدة لاعتمادها على تقنيات متقدمة لتسريع عمليات التخزين والاسترجاع مما يجعلها الخيار الأمثل في تطبيقات تعلم الآلة والبيانات الكبيرة.
  4. نعم يمكنك ذلك، حيث يمكن للفرع الرئيسي الإشراف على الدخل والفواتير وإدارة الفروع الجديدة عبر واجهة تحكم مركزية، و من حيث الأمان فإن Django يوفر ميزات قوية مثل التصدي لهجمات SQL Injection، وإدارة الجلسات، ونظام المصادقة القوي، ولكن يجب عليك اتباع أفضل ممارسات الأمان مثل استخدام HTTPS، وتحديد صلاحيات المستخدمين بدقة، وتطبيق جدران حماية على قاعدة البيانات. بالنسبة للاستضافة يفضل استخدام خوادم سحابية قوية مثل AWS، أو DigitalOcean لضمان تحمل الضغط العالي وتدفق البيانات بين الفروع، أما عن تحويل المشروع إلى تطبيق يمكن تنزيله على الجوال والكمبيوتر، فيمكنك ذلك من خلال تحويل الواجهة إلى تطبيق ويب تفاعلي PWA أو استخدام تقنيات مثل React Native أو Flutter لتطوير تطبيقات مخصصة تتصل بالـ API الخاصة بالمشروع.
  5. مرحبا محمد، الدورة تحتوي على عشرة مسارات، و تكون الدروس في المسارات تطبيقية أي أنك ستقوم بالتطبيق مع المدرب حتى تترسخ المعلومات لديك، أما المشاريع الفعلية فيوجد حوالي 7 مشاريع في مجالات مختلفة و أطر عمل مختلفة، و بهذه الطريقة يكون لديك علم بأغلب الطرق التي يمكنك من خلالها إنجاز مشروع بلغة بايثون.
  6. أكيد إضافة Dropout و Batch Normalization لكل طبقة في الشبكة العصبية قد يؤثر سلبا على أداء النموذج، حيث يلعب كل منهما دور مختلف في تحسين التدريب، فمثلا Dropout يساعد في تقليل overfitting عن طريق تعطيل بعض الوحدات العصبية عشوائيا، ولكن تطبيقه على كل طبقة قد يؤدي إلى فقدان كبير للمعلومات وإبطاء عملية التعلم، و في المقابل Batch Normalization يعمل على استقرار التوزيع وتسهيل التدريب، ولكنه قد يتعارض مع Dropout، حيث إن الأول يحاول تثبيت التوزيع بينما الثاني يضيف عشوائية، لذا يفضل استخدام Batch Normalization في الطبقات العميقة لتحسين استقرار النموذج، بينما يستخدم Dropout بحذر في الطبقات المخفية فقط، مع تجنب وضعه مباشرة بعد Batch Normalization، و الجمع بينهما بشكل غير مدروس قد يؤدي إلى بطء التدريب وضعف الأداء، لذا من الأفضل تجربة تكوينات مختلفة لمعرفة التوازن الأمثل الذي يناسب البيانات والنموذج.
  7. لا يوجد مسار أو دورة تغطي كل شيء بشكل كامل، و بالتأكيد من الطبيعي أن تحتاج إلى التعمق بنفسك من مصادر خارجية، وهذا جزء أساسي من التعلم الفعال، أنصحك بالبحث في الكتب والمقالات العلمية، وحل المشاريع العملية، و حتى قراءة الأوراق البحثية في المجال، كما يمكنك الانضمام إلى مجتمعات المهتمين بالرؤية الحاسوبية على GitHub وReddit، حيث ستجد مناقشات قيمة وأحدث التطورات، و الأهم هو أن تحدد الجوانب التي تشعر أنها غير واضحة وتبحث عنها بشكل موجه خصوصا عبر المصادر المفتوحة.
  8. تعتمد ResNet على الروابط المتبقية التي تسمح للبيانات بتجاوز بعض الطبقات، مما يساعد في حل مشكلة تراجع التدرج عند تدريب الشبكات العميقة، و بدلا من تعلم إخراج جديد بالكامل تتعلم كل طبقة الفرق بين المدخلات والإخراج المطلوب، مما يسهل تدريب شبكات عميقة جدا مثل ResNet-50 و ResNet-101 و ResNet-152. أما في DenseNet، كل طبقة تتصل بجميع الطبقات السابقة، مما يعزز إعادة استخدام الميزات ويجعل الشبكة أكثر كفاءة في التعلم، و هذا يقلل من عدد المعاملات المطلوبة مقارنة بـ ResNet، حيث تعتمد كل طبقة على الميزات المستخرجة سابقا بدلا من إعادة حسابها، و تساعد هذه البنية في تحسين انتقال المعلومات داخل الشبكة، مما يجعلها فعالة مع بيانات أقل.
  9. نعم يمكنك استخدام ReLU في الطبقات المخفية حتى لو كنت تعمل على مهمة تصنيف، و في الواقع ReLU هو أحد أكثر دوال التفعيل شيوعا في الطبقات المخفية لشبكات التعلم العميق، لأنه يساعد في التغلب على مشكلة تلاشي التدرج ويجعل عملية التدريب أكثر كفاءة مقارنة بدوال مثل Sigmoid أو TanhK، ولكن في الطبقة الأخيرة يعتمد اختيار دالة التفعيل على نوع التصنيف، حيث إذا كان التصنيف ثنائيا، فيفضل استخدام Sigmoid، أما إذا كان متعدد الفئات، فإن Softmax هو الخيار الأمثل.
  10. الفرق هو أن confusion_matrix تستخدم لحساب مصفوفة الالتباس فقط، بينما ConfusionMatrixDisplay تستخدم لعرضها بصريا، أي أن confusion_matrix ترجع مصفوفة من القيم العددية توضح أداء النموذج في تصنيف البيانات، لكنها لا تعرضها بشكل رسومي، أما ConfusionMatrixDisplay فهي أداة تأخذ هذه المصفوفة كمدخلات وتقوم برسمها كمخطط بياني باستخدام Matplotlib، مما يسهل تحليل الأخطاء وفهم أداء النموذج بصريا.
  11. يمكنك استخدام eval في PHP، ولكنه غير مستحسن لأنه قد يؤدي إلى ثغرات أمنية إذا كان هناك أي مدخلات غير آمنة بهذا الشكل: <?php $chance = "a > 0"; $a = 5; // قيمة المتغير a if (eval("return $chance;")) { echo "ok"; } else { echo "not ok"; } ?>
  12. وسائل الدفع التي يتم قبولها هي بايبال أو بطاقة فيزا، يمكنك الطلب من أحد أقربائك و الذين يملكون هذه البطاقة أن يقومو بالدفع بدل عنك، كما يمكنك التواصل مع مركز المساعدة لأي معلومات أخرى: https://support.academy.hsoub.com/conversations
  13. نعم إذا كان العمود يحتوي على قيم فريدة لكل عينة ولا يحمل أي معلومات مفيدة للنموذج، فيمكن حذفه من البيانات قبل تدريب النموذج. وذلك لأن هذه القيم الفريدة لا تساعد النموذج في التعلم أو التعميم، بل قد تؤدي إلى overfitting إذا تم استخدامها، قبل الحذف تأكد أن العمود لا يحتوي على معلومات مفيدة.
  14. الأفضل يعتمد على الهدف والغاية من إنشائها لكن يبقى استخدام الأدوات الجاهزة مثل TensorFlow أو PyTorch هو الخيار الأمثل إذا كنت تريد توفير الوقت والتركيز على النتائج أو بناء نموذج عملي بسرعة ودقة أما بناء شبكة عصبية من الصفر ضروري فقط إذا كنت تدرس المفاهيم الأساسية أو تحتاج إلى تخصيص عميق لا توفره الأدوات الجاهزة وللتطبيق العملي يوصى باستخدام الأدوات الجاهزة لأنها فعالة ومدعومة بأفضل الممارسات يمكنك مراجعة أكثر من هنا:
  15. الشبكة العصبية (Neural Network) هي نموذج حوسبي مستوحى من طريقة عمل الدماغ البشري، تستخدم في تحليل الأنماط وحل المشكلات المعقدة وتتكون من طبقات من الوحدات (أو الخلايا العصبية) التي تعالج البيانات عن طريق تعلم الأوزان والانحيازات. بحيث تنقسم الشبكة إلى طبقة إدخال (لإدخال البيانات)، طبقات مخفية (للقيام بالمعالجة)، وطبقة إخراج (لإنتاج النتائج) وتستخدم الشبكات العصبية في تطبيقات مثل التعرف على الصور، معالجة اللغة الطبيعية، وأنظمة التوصية مثلا لإنشاء شبكة عصبية تصنف البيانات الثنائية، يمكن استخدام مكتبة TensorFlow تبنى الشبكة بطبقة إدخال بها 10 ميزات، طبقتين مخفيتين (32 و16 خلية عصبية)، وطبقة إخراج بوظيفة تفعيل Sigmoid وتدرّب الشبكة باستخدام خوارزمية Adam وخسارة Binary Crossentropy وتقيّم للحصول على دقة الأداء. فإنشاؤها يتم بعدة مراحل ببرمجة بسيطة باستخدام مكتبة مثل TensorFlow في Python أين تعرّف شبكة بها 3 طبقات واحدة تأخذ بيانات الصورة، واثنتان لتحليلها، والأخيرة تعطي النتيجة ثم تدرب الشبكة باستخدام صور معروفة كصور لقطط وكلاب حتى تتعلم ثم تختبرها على صور جديدة لترى النتيجة وهكذا وهذه المقالة تشرح مثالا جيدا أنصحك بمراجعته:
  16. تحليل السلاسل الزمنية في بايثون هو دراسة البيانات التي تم تسجيلها على فترات زمنية متتالية لاكتشاف الأنماط، الاتجاهات، والتقلبات، بهدف التنبؤ بالقيم المستقبلية أو فهم العلاقات الزمنية ويستخدم في تحليل البيانات لفهم الاتجاهات (Trends) والموسمية (Seasonality) وتوقع البيانات المستقبلية مثل المبيعات أو الأسعار بالإضافة إلى كشف الشذوذ وتحسين اتخاذ القرارات بناء على البيانات الزمنية بحيث يتم استخدام مكتبات مثل pandas لمعالجة البيانات، وmatplotlib للتصور، وstatsmodels أو prophet لبناء النماذج الإحصائية والتنبؤية. و لغة بايثون تسهّل هذا التحليل بفضل أدواتها القوية والمرنة لمعالجة وتحليل السلاسل الزمنية بدقة وفعالية يمكن مراجعة هذه المقالة لمزيد من التفاصيل حول الموضوع:
  17. المشكلة في استعلامك هو أنه يتحقق فقط من أقصى تاريخ، بينما المطلوب هو الحصول على آخر سعر قبل التاريخ المحدد لذا عدله للتالي: SELECT product_id, COALESCE( (SELECT new_price FROM Products p2 WHERE p2.product_id = p1.product_id AND p2.change_date <= '2019-08-16' ORDER BY change_date DESC LIMIT 1), 10 ) as price FROM Products p1 GROUP BY product_id; بحيث نستخدم استعلام فرعي للحصول على آخر سعر قبل '2019-08-16' و COALESCE يرجع 10 إذا لم يجد سعرا قبل التاريخ المحدد وأخيرا ORDER BY change_date DESC LIMIT 1 يجلب أحدث سعر.
  18. هذا الخطأ يحدث أثناء بناء (build) تطبيق Flutter وتحديدا عند عملية إنشاء kernel snapshot وغالبا ما يكون السبب هو في مشاكل في الملفات المؤقتة للمشروع أو تعارض في الإصدارات أو مشكلة في تثبيت Flutter لذا أرجو أولا القيام بتنظيف المشروع: flutter clean ثم قم بحذف ملف pubspec.lock: rm pubspec.lock بعدها قم بتحديث التبعيات: flutter pub get وأعد تشغيل Android Studio أو VS Code أو أيا كان IDE الذي تستخدمه ثم حاول بناء المشروع مرة أخرى: flutter run إذا استمرت المشكلة يمكنك تجربة للتحقق من صحة تثبيت Flutter باستخدام الأمر: flutter doctor ثم تحديث Flutter إلى آخر إصدار: flutter upgrade
  19. أيّة دروس تقصد إن كانت متعلقة بالدورات فأرجو طرح أسئلتك أسفل الدرس الخاص به في صندوق التعليقات المخصص لذلك. وفي حال كانت خارجية يمكنني توجيهك لكيفية حل المشكلة من خلال إنشاء صفحة HTML تحتوي على أقسام لكل مثال وكل قسم يحتوي على عنوان وكود برمجة داخل عنصر <pre> للحفاظ على التنسيق. مع إضافة أزرار نسخ بجانب كل كود ثم تفعيلها باستخدام JavaScript عبر وظيفة تستخرج النص وتنسخه إلى الحافظة باستخدام navigator.clipboard يمكن أيضا تنسيق الصفحة باستخدام CSS ثم اختبار الصفحة في المتصفح للتأكد من عرض الأكواد وعملية النسخ بشكل صحيح بعد ذلك يمكنك حفظ الملف وتشغيله للاستخدام أثناء الدروس.
  20. بالنسبة للمشاريع فهو يتم عملها بالتزامن مع المدرب، كل ما عليك فعله هو متابعة الشروحات مع المدرب وعمل الواجبات والمشاريع ورفع الأكواد تلك وفقا لما تم شرحه من قبل يمكنك الاطلاع على الكيفية من هنا: بما أنك في بداياتك فأرجو التركيز على التطبيق العملي مع المدرب، يمكنك أخذ قسط من الراحة بين كل مسار وآخر للتأكد من أنك قد فهمته جيدا وفي حال لم تفهم شيء سيكون هنالك صندوق للتعليقات مثل الذي هنا أسفل كل درس يمكنك طرح أي استفسار أو مشكلة واجهتك وسنجيبك عليها.
  21. يستخدم CoxPHFitter كنموذج تناسبي لتحليل تأثير المتغيرات المستقلة على زمن البقاء، حيث يمكنه التعامل مع متغيرات متعددة ويعطي معلمات تتعلق بخطر الحدث من جهة أخرى يستخدم KaplanMeierFitter لتقدير ورسم منحنيات البقاء بناء على بيانات البقاء مما يتيح للمستخدم رؤية احتمالية البقاء مع مرور الوقت أما logrank_test فهو اختبار إحصائي يستخدم لمقارنة منحنيات البقاء بين مجموعتين أو أكثر، لتحديد ما إذا كانت هناك اختلافات ذات دلالة إحصائية في زمن البقاء. يمكن اعتبار CoxPHFitter نموذجا يستخدم لفهم كيف تؤثر عوامل معينة مثل العمر أو الجنس أو نوع العلاج على الوقت حتى حدوث حدث معين مثل الوفاة أو الانتكاسة بحيث يمكننا من خلاله معرفة أي العوامل لها تأثير أكبر على البقاء. بينما KaplanMeierFitter تستخدم لرسم منحنى يُظهر كيف تتغير احتمالية البقاء بمرور الوقت في حين يستخدم logrank_test يستخدم عندما نريد مقارنة مجموعتين لمعرفة ما إذا كانت هناك اختلافات في أوقات البقاء مثلا إذا كان لدينا مجموعتين من المرضى يتلقون علاجات مختلفة، يمكننا استخدام هذا الاختبار لمعرفة ما إذا كان أحد العلاجين أفضل من الآخر.
  22. وعليكم السلام ورحمة الله تعالى وبركاته، الفكرة تعتمد على إضافة الربح في الجدول الحالي كما يلي في جدول invoice_details ستحتاج الكمية المباعة (quantity)، سعر البيع (selling_price) ثم سعر الشراء (buying_price) ويجب أن تعدل query الاستعلام لجلب أسعار البيع والشراء من خلال إضافة عمود "الربح" في جدول عرض البيانات وعند فاتورة المبيعات فقط نحسب: الربح = الكمية × (سعر البيع - سعر الشراء) وفي نهاية الجدول تقوم بجمع كل أرباح المبيعات وتعرض إجمالي الربح للصنف.
  23. هذا راجع لنوع الشركة خاصتكم ولسياستكم المتعلقة بالتوظيف، لكن في حال عدم توفره شخصيا داخل الشركة يمكنكم توظيف مستقلين لأداء الغرض بحيث تختصر عليك خارطة الطريق لتتفرغ لمسؤوليات أخرى وتستفيد في نفس الوقت من خبرة سنوات وفي نفس الوقت يمكنك تخصيص وقت للتعلم بحيث لا تتأثر مسؤولياتك الأخرى، فالبرمجة رحلة طويلة وليست بالسهلة لكن نتائجها مثمرة وتأتي نتيجة تعب واجتهاد، وكما قلت لك هذا راجع إلى سياسة التوظيف الخاصة بكل شركة، يمكن أن تجد ظالتك في مواقع كمستقل وخمسات. وبالنسبة لتعلمك أنت أقترح عليك مراجعة هذه المقالة:
  24. بالنسبة إلى الروابط التي أشرت إليها يبدو أنها غير صالحة ولا تعمل لذا لا يمكن الاطلاع عليها حاليا، ولكن بناء على وصفك فإن فكرة إعداد جدول حول تطبيق توصيل الطعام تعد خطوة جيدة خاصة في ظل غياب منافسين بارزين في السوق المحلي فإذا كان الجدول يبرز الميزات الأساسية للتطبيق والفرص الموجودة في السوق مع مقارنة بسيطة بالخدمات المتوفرة فهو بداية موفقة مع الرغم من أنه يمكن التحسين أكثر لذا تأكد من تضمين بيانات واضحة حول كيفية تلبية احتياجات المستخدمين، والتحديات المحتملة، والخطط لتجاوزها.
  25. يمكنك استخدام بوابة دفع تدعم Split Payments مثل Stripe Connect أو PayPal for Marketplaces عبر إنشاء نموذج لتخزين معلومات الدفع الخاصة بالمستخدم مثل حساب Stripe أو PayPal ثم توفير واجهة لتسجيل وربط الحسابات عبر API الخاص ببوابة الدفع. وعند إتمام عملية الشراء تستخدم ميزة Transfer API أو Payouts API لتقسيم المدفوعات بينك وبين البائعين مباشرة مع التأكد من الامتثال للقوانين المحلية والضرائب وتوفير لوحة تحكم للمستخدم لإدارة أرباحه وسحبها بسهولة.
×
×
  • أضف...