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

حمزة عباد

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

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

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

1 متابع

المعلومات الشخصية

  • النبذة الشخصية
    مطور تطبيقات كاملة باستخدام Python ومكتباتها المتعددة. بالإضافة إلى المواقع الإلكترونية، تطبيقات الويب وسطح المكتب، أقوم بإنشاء أدواة الأتمتة وكشط الويب (Web scraping) وغيرها. أتعلم تقنيات JavaScript.
  • الموقع

آخر الزوار

لوحة آخر الزوار معطلة ولن تظهر للأعضاء

إنجازات حمزة عباد

عضو نشيط

عضو نشيط (3/3)

217

السمعة بالموقع

5

إجابات الأسئلة

  1. حسنا إذن سؤالك ليس عاما حول برمجة الألعاب، بل ما تريده تحديدا هو برمجة Roblox باستخدام لغة البرمجة Lua. على حد علمي، لا توفر أكاديمية حسوب حاليا دروسا للغة البرمجة Lua لأن الدروس المتوفرة على الأكاديمية معظمها ليست موجهة لتطوير الألعاب، ولأن Lua مشهورة أكثر في برمجة الألعاب. يمكنك أن تبحث في الأنترنت عن "تعلم البرمجة بلغة Lua" ورؤية النتائج التي تظهر لك. بعدما تصل إلى مستوى جيد في هذه اللغة أعتقد أنه لن يكون من الصعب عليك استخدامها في الألعاب التي تريد.
  2. من الجميل جدا أن يكون لديك هذا الحماس لتعلم البرمجة من هذه السن. هذا شيء رائع. لا أعتقد أنه يوجد سن محدد لا يمكن تعلم البرمجة قبله، فهذا الأمر يختلف من شخص إلى آخر. من الوارد جدا أن تستطيع تعلم البرمجة بلغة JavaScript حتى وأنت في هذا السن وأن تسبق من هم أكبر منك سنا. لذلك أرى أن الاشتراك في تلك الدورة ليس مشكلة، خصوصا أن الدورة سوف تبقى متاحة لك فيما بعد ويمكنك الرجوع إليها بعد سنوات، وسيتم أيضا تحديثها من فترة لأخرى لتوافق متطلبات السوق. أما بخصوص الدفع، فمادام والداك موافقان فهما من سيتكفلا بشراء الدورة، لأن المعاملات المالية تشترط كون الشخص وصل إلى عمر 18 سنة على الأقل.
  3. بالفعل، تعلم البرمجة شرط أساسي لبرمجة الألعاب ولأي نوع آخر من البرامج. لكن أصارحك القول بأن تطوير الألعاب هو مجال متقدم من مجالات البرمجة وليس شيئا يتم تعلمه من البداية. تطوير لعبة متكاملة، بالإضافة إلى التكمن التام من لغة برمجة معينة، سوف يتطلب استخدام مكتبة تعمل كمحرك ألعاب، مثل Unity أو Unreal Engine أو Godot. في هذا المجال، سوف تحتاج أيضا تمكنا من بعض أمور الفيزياء، مثل قوانين الحركة والسرعة والجاذبية. وتحتاج أيضا إلى معرفة بتصميم الأشياء والشخصيات وتحريكها بشكل صحيح. هذا أمر يحتاج إلى كثير من المعرفة والعمل وقد لا يكفي فيه شخص واحد، لذلك غالب الألعاب لا يطورها شخص واحد بل فريق متكامل، بحيث يتخصص كل شخص في مهمات معينة. بالإضافة إلى كل الأمور التقنية، اللعبة تحتاج قصة و قوانين تسير عليها من أجل إمتاع اللاعب، وهذا أمر إضافي يجب صياغته بشكل جيد قبل البدء في برمجة اللعبة. الدورات التي تقدمها أكاديمية حسوب عموما، ودورة علوم الحاسوب خصوصا لا تدخل إلى مجال الألعاب نظرا لأن هذا المجال معقد كما شرحت ولا يصلح لتعليم المبتدئين في البرمجة. لكن بعد التمكن في تلك الدورات يمكنك بعدها التخصص في برمجة الألعاب إن شئت.
  4. وعليكم السلام ورحمة الله، كلا لن تغلق الدورة. أي دورة اشتريتها سوف تبقى مفتوحة لك إلى الأبد. بل سوف تستفيد أيضا من التحديثات التي سوف تأتي لاحقا في المستقبل حتى بعد إكمالك الدراسة. للمزيد من المعلومات يمكنك مراجعة صفحة الأسئلة الشائعة: https://academy.hsoub.com/pages/faq/
  5. وعليكم السلام، إذا كنت تقصد بوتات المحادثة أو التفاعل مع API، فلديك جواب المدربة نجاح. أما إذا كان المقصود البوتات التي تستخدم الحاسوب بنفس طريقة المستخدم، أي بالضغط على لوحة المفاتيح وبالفأرة، فهنا الجواب مختلف. على الرغم من أن مجال الأتمتة والبوتات مشهور بين مطوري Python أكثر، ولكن بما أنك درست دورة تطوير التطبيقات باستخدام JavaScript، فسأحاول أن أقترح عليك مكتبات بهذه اللغة. توجد مكتبة RobotJS والتي يمكنها التحكم بحركة الفأرة والنقر بها وقراءة البكسلات الموجودة عند الفأرة، وكذلك الضغط بلوحة المفاتيح مع التحكم في سرعة الإدخال. توجد أيضا مكتبة NutJS والتي تبدو أكثر تقدما. حيث أنها بالإضافة إلى ميزات RobotJS السابقة، توفر قدرة على البحث عن النوافذ المفتوحة، قراءة محتوياتها النصية، الوصول إلى النص المنسوخ في الحافظة، التقاط صور من الشاشة، قراءة النص من الصور، والمقارنة بالصور، وغير ذلك. هذه قد تكون المكتبة الوحيدة التي تحتاج إليها لإنشاء بوتات محاكاة المستخدم.
  6. وعليكم السلام ورحمة الله، في المشاريع الكبيرة الحقيقية، لا يتم الاستغناء عن إنشاء كود خاص باختبار التطبيق. يوجد على الأقل نوعان من الاختبارات: اختبارات الوحدات (Unit tests): وفيها يتم اختبار دوال و أصناف التطبيق، وقطع كود منطقية منه، عن طريق تشغيلها باستخدام معاملات محددة ثم رؤية هل تعيد النتائج المتوقعة أم لا. اختبارات التكامل (Integration tests) : وفيها يتم اختبار التطبيق كوحدة واحدة بطريقة مشابهة لما يقوم به المستخدم الحقيقي للتطبيق، ويتم رؤية هل يقوم التطبيق بأداء الوظائف المحددة أو عرض الرسائل المتوقعة عند القيام بعملية معينة. عندما يكون لديك كود مشروع صغير (مثل أغلب المشاريع التي يتم تدريسها في الدورات)، ويكون العمل عليه من طرف شخص واحد فقط. فقد تشعر بأن إنشاء أكواد اختبار لتطبيقك سيكون مضيعة للوقت بلا فائدة. لكن في المشاريع الحقيقية التي تلبي حاجيات مئات أو آلاف المستخدمين، فهذه ضرورة ملحة. لأن الاستمرار بالعمل على المشروع من طرف عدد من المطورين في نفس الوقت سوف يؤدي بكل تأكيد إلى حصول أخطاء في أماكن غير متوقعة حتى لو كانت تلك الأماكن لم يتم التعديل عليها بشكل مباشر. لأن في المشاريع الكبيرة تكون الأجزاء مترابطة بشكل كبير وأي سهو في مكان معين يؤدي إلى ظهور مشاكل في أماكن أخرى. لذلك، فإن من وسائل اكتشاف الأخطاء مبكرا هي كتابة مثل هذه الاختبارات وإعادة تشغيلها في كل مرة يتم فيها أي تعديل على الكود. تشغيل الاختبارات يمكن أن يتم تلقائيا، وهذا ما يعرف باسم التكامل المستمر (Continuous Integration). يمكنك الاطلاع حول المزيد من المعلومات حول التكامل المستمر والنشر المستمر (Continuous Delivery) في هذا المقالات:
  7. وعليكم السلام، التعلم العميق أو التعلم الآلي كلاهما لا يعملان في الحقيقة إلا على الأعداد. فما يقوم به النموذج في الداخل هو ضرب أعداد في أعداد، وتعديل أعداد بالنسبة لقيمة أعداد أخرى، وهكذا. لذلك، فأي نوع بيانات مختلف عن الأعداد يجب أن يتم تحويله إلى أعداد. لذلك، أوّل خطوة هي دائما ما يسمى بالمعالجة القبلية (Preprocessing) التي فيها يتم تحويل البيانات الطبيعية إلى بيانات عددية. المعالجة القبلية ليست شيئا خاصا بالصورة والصوت، بل تشمل حتى النصوص أيضا لأن نماذج تعلم الآلة لا تستطيع قراءة النصوص أيضا. بل في بعض الأحيان نحتاج للقيام بالمعالجة القبلية حتى عندما تكون البيانات أعدادا. فمثلا، إن كان عندنا في بياناتنا عمود يمثل سنة الميلاد، وبجانبه عمود يمثل طول الشخص، فهذان العمودان يحتاجان أولا للتحويل إلى قيم متشابهة، وإلا فقد لن يتم التعلم بشكل صحيح. لذلك نحاول دائما أن نجعل القيم بين 0 و 1 لكل الأعمدة، وهذا ما يعرف باسم التطبيع (Normalization). توجد تقنيات مختلفة للمعالجة القبلية، وهذا يعتمد على نوع البيانات وعلى قدرات النموذج. فمثلا، إن أردنا إدخال صورة إلى نموذج تعلم آلة يستقبل بيانات عددية على شكل مصفوفة، فما يمكننا فعله هو تفكيك الصورة إلى مصفوفات حسب عرضها width (أو ارتفاعها height) ثم ربط هذه المصفوفات خلف بعضها (Concatenation) حتى تصبح مصفوفة طويلة واحدة. يعني الصورة التي أبعادها 32 * 32، تتحول إلى مصفوفة طولها 1024، حيث كل خانة من هذه المصفوفة تحوي قيمة البكسل الموافق. بالإضافة إلى ذلك، قيم البكسلات تكون من 0 إلى 255، وبما أننا نفضل دائما أن تكون القيم بين 0 و 1، فقد نقوم أيضا بعملية التطبيع لتحويلها إلى القيم المناسبة. للمزيد من المعلومات حول كيفية التعامل مع الصور في نماذج تعلم الآلة، يمكنك الإطلاع على الدليل التالي من موقع Scikit-learn، والتي هي مكتبة تعلم آلي وليست مكتبة تعلم عميق: https://scikit-learn.org/stable/auto_examples/classification/plot_digits_classification.html
  8. وعليكم السلام، لا يوجد تلازم بين استخدام لغة برمجة سهلة مثل Python وكون المبرمج ضعيفا. فهناك ملايين المطورين حول العالم يستخدمون هذه اللغة، وبعضهم قام بإنشاء مشاريع ضخمة يستخدمها الآلاف، وهم ليسوا مبرمجين ضعفاء. في بداية التعلم، يستحسن أن لا تكثر من استخدام المكتبات الجاهزة، بل يجب أن تحاول القيام بأقصى ما تستطيع بنفسك. لكن بعدما تصل إلى مستوى متقدم وتبدأ في إنجاز مشاريع للاستخدام الواقعي، فهنا وفرة المكتبات الجاهزة تصبح نقطة قوة كبيرة في لغة البرمجة، إذ أنك لن تضطر إلى "إعادة اختراع العجلة" في كل مرة. فمثلا، إذا كان لديك برنامج يتعامل مع قواعد البيانات العلائقية، فسيكون من الأحسن استخدام مكتبة توفر واجهة ORM لتسهيل التعامل مع قاعدة البيانات، بدل كتابة كود SQL بشكل يدوي، فهذا سيجعل الكود أكثر قابلية للفهم وأبسط من ناحية التعديل وأكثر تحصينا ضد هجمات حقن SQL. بالمناسبة، حتى لغة C / C++ لديها مكتبات كثيرة. وبعض مكتبات Python كانت بالأصل مكتبات C++ وتم ربطها مع Python. كمثال على هذا يمكن أن ترى مكتبات رسم واجهات المستخدم مثل Qt التي تم ربطها مع Python في مشروعي PyQt و PySide.
  9. لا يوجد جواب دقيق ولا يمكن أن يوجد. السبب أن الصفحة في تطبيق ويب ليست صفحة نصية مثل صفحات ملف PDF. الصفحة تتفاعل مع كود الواجهة الخلفية، وقد يكون فيها وظائف معقدة، وقد يكون فيها تحريكات (Animations) مميزة، وهذا كله يزيد في تعقيد الصفحة، كما أن الصفحات في كثير من الأحيان تكون مرتبطة ببعضها البعض، وتغيير في واحدة يؤثر على الصفحات الأخرى. لذلك هناك كثير من المتغيرات كما ترى. فلا يمكن أن نحسب "الزمن المتوسط للمبرمجين" في إنشاء الصفحات. إذا كنت تتوقع أنه بإمكانك إنجاز المطلوب بين يومين أو 7 أيام، فربما من الأحسن أن تقول 5 أيام، أو حتى 7 أيام، لكي تعطي لنفسك الوقت الكافي. وهذا في حالة ما لم يكن العميل مستعجلا. وإلا فحاول إنجاز العمل في أقرب الآجال.
  10. وعليكم السلام، إذا لم تكن باحثا في الذكاء الاصطناعي، فهذا ليس اختصاصك، لأن تطوير المعادلات شيء معقد، ومعظم ما سيأتي في بالك من تطويرات ستجد أن هناك من سبقك وقام بها على أغلب الظن. لذلك، فالنماذج الموجودة في مكتبات تعلم الآلة هي أكثر النماذج التي تمت مراجعتها ويمكنك أن تضمن أنها تعمل بشكل صحيح ويمكنك الاعتماد عليها. بينما لو طورت نموذجا خاصا بك فهناك احتمالية كبيرة في أن تقع في خطأ ما ويتسبب في إعطائك نتائج خاطئة يصعب إصلاحها. عندما تفهم كيف تعمل نماذج الآلة على الأمثلة التي تدرسها، يمكنك بعدها تطبيقها على مواضيع مختلفة لم يتم تدريسها، وقد يكون بعضها جديدا كليا لم يقم به أحد من قبلك. وهذا ممكن جدا، لأن المواضيع تختلف باختلاف الأماكن والأزمنة. فقد يكون هناك مشكل محدد في بلادك لا يوجد في البلدان الأخرى، وهنا يمكنك البحث عن كيفية الحصول على المعلومات اللازمة من بلادك، ثم معالجتها واستخدامها في نموذج تعلم آلة لحل ذلك المشكل. وربما تتمكن بعدها من نشر هذا النموذج كخدمة مدفوعة، أو شيء مشابه. هذا يعتبر إبداعا في المجال.
  11. وعليكم السلام، في مجال تعلم الآلة سوف تجد أن معظم الوقت يذهب في الجزء النظري والتفكير في الحل، وليس في كتابة الحل. عندما تكون عندك بيانات، فسوف تحتاج إلى معرفة ما هي المدخلات وما هي المخرجات، وكيف تقوم بتحويل المدخلات لتناسب النموذج، وما هو النموذج المختار وما هي إعداداه وكيف يعمل، وكيف تقوم بتقسيم البينات وما الذي تستخدمه للتدريب وما الذي تبقيه للاختبار، وكيف تحسب جودة النموذج. كل هذا عندما يتم تحويله إلى كود بالشكل الصحيح وعند استخدام مكتبة جيدة مثل Scikit-learn سوف ترى أنك قد تستطيع كتابته أحيانا في 10 سطور! مما يجعل قارئ تلك السطور يظن أن البرنامج بسيط. لكن الوصول إلى تلك 10 سطور يتطلب فهما عميقا يحتاج إلى ساعات أو أيام من العمل.
  12. وعليكم السلام، حسب تعريف خوارزمية Naive Bayes، فإنها تحسب احتمالية كل صنف استنادا إلى قيمة البيانات المدخلة، ثم تختار الصنف الذي يحقق أكبر احتمالية. وبما أن الاحتماليات مربوطة بالأصناف الممكنة، فإننا بالضرورة نتحدث عن مشكل فيه أصناف معروفة ومحددة مسبقا، أي أننا في مشكل من نوع Classification بكل تأكيد. لذلك فالجواب هو نعم، Naive Bayes خاصة بالـClassification. الخوارزميات التي تستخدم في الـRegression هي الخوارزميات التي تستطيع إخراج قيم عددية، مثل Logistic Regression.
  13. وعليكم السلام، الهدف في كل المشاريع (ومنها مشاريع الذكاء الاصطناعي وتعلم الآلة) يجب أن يتم وضعه قبل بداية المشروع وليس عند الانتهاء منه! هذا أمر لا يتعلق بالبرمجة ولا التقنيات، إنما هو مبدأ عام في الحياة. في فترة التعلم يجب أن تقوم بمشاريع حتى وإن كنت لن تستفيد منها بشكل مباشرة، فالهدف في البداية هو فقط التدريب. ولذلك ترى أغلب المشاريع الموجهة للمبتدئين في البرمجة عبارة عن Todo app أو Blog أو شيء من هذا القبيل. على الرغم من أنه لدينا الملايير من هذه المشاريع، إلّا أنه يستمر العمل بها من أجل التعليم. لكن عندما تنتهي من الدراسة الأساسية وتريد الدخول إلى العمل الحقيقي، فهنا يجب أن تقوم بإنشاء شيء مختلف له فائدة حقيقية. لذلك، ينطبق نفس المبدأ على مشاريع تعلم الآلة. عليك تحديد الهدف الذي تريد الوصول إليه، بعد ذلك العمل على إنشاء نماذج تساعدك في تحقيقه. فمثلا، إن كان المطلوب إنشاء موقع للتنبؤ بالروابط التي تبدو احتيالية (هذا مشروع عُرض علي وقمت به)، فهنا سوف تعمل على إنشاء نماذج تعمل على النص وتحاول تدريبها انطلاقا من مجموعة بيانات تحوي هذه الروابط، ثم دمج هذا النموذج في الموقع المطلوب إنشاؤه لكي يستخدمه الأشخاص الآخرون. كما ترى، الهدف كان واضحا منذ البداية، ثم قمنا بالعمل استنادا إلى المطلوب.
  14. بما أنك تستخدم برنامج Postman، فأسهل طريقة لفعل ذلك هي جعل البرنامج نفسه يولد لك الكود اللازم! أولا، إضغط على أيقونة توليد الكود: بعد ذلك اختر من قائمة لغات البرمجة والمكتبات خيار: Node.js - Axios والآن يمكنك نسخ الكود الظاهر واستخدامه في مشروعك بكل بساطة.
  15. وعليكم السلام، على العموم، كلما كان لدينا بيانات أكثر كلما كان ذلك أحسن. حتى إذا كنا لن نستخدم معظم البيانات الكثيرة في تدريب النموذج، فسوف نتركها كبيانات اختبار ونستخدمها للتحقق من جودة تعلمه. لكن يجب عدم إغفال نقطة مهمة وهي توازن البيانات (Data balance)، أي أن البيانات يجب أن تكون موزعة بشكل شبه متساوي على مجال الاحتمالات الممكنة، إذا لم يكن ذلك هو الحال، فقد نقع في خطأ في تقدير جودة النموذج. فمثلا، لو كانت لدينا بيانات حول العمليات البنكية، بحيث أن 97% من العمليات قانونية و 3% فقط غير قانونية، فإذا قمنا بتدريب نموذج لاكتشاف العمليات غير القانونية، وكان هذا النموذج يجيب في كل الأحوال بأن العملية قانونية، فهنا النموذج سوف يكون صحيحا في 97% من الحالات، لكن في الواقع، هذا النموذج لا يقوم بفعل شيء! في هذه الأحوال، لا ينفع تكثير البيانات مع الاستمرار على هذا الحال، فلو كانت عندنا الملايين من هذه البيانات، وكانت دائما النسبة 97%-3%، فسوف نحصل على نفس الخطأ. إحدى الحلول في مثل هذه الحالة هي تقليل البيانات الزائدة حتى تصبح النسب متكافئة. فيمكن التقليل من البيانات التي تمثل العمليات القانونية حتى تصبح نسبتها إلى المجموع 50% فقط. وعندها يمكننا أن ندرب النموذج بشكل متوازن، بحيث تكون نصف البيانات التي رآها قانونية ونصفها الآخر عكس ذلك، وعندئذ سوف يتعلم بشكل صحيح.
×
×
  • أضف...