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

Kais Hasan

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

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

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

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

    22

آخر يوم ربح فيه Kais Hasan هو سبتمبر 22 2023

Kais Hasan حاصل على أكثر محتوى إعجابًا!

آخر الزوار

3340 زيارة للملف الشخصي

إنجازات Kais Hasan

عضو نشيط

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

768

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

39

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

  1. تستعمل في حالة كنت تريد سرعة كبيرة في التنفيذ و أداء عالٍ. مثلاً شركات مثل غوغل و يوتيوب و أمازون تستعملها. و لكن بشكل عام لا يتم استعمالها لبناء ال backend بشكل كامل، و إنما كإضافات على أطر عمل أخرى، مثل node js. أو حتى يمكنك جعل كود ال node يقوم باستدعاء كود ال c++ للقيام ببعض العمليات التي تعتقد أنها تحتاج سرعة كبيرة. أيضاً يمكنك كتابة جزء من ال backend بال c++ على شكل API، بشكل أساسي يستعمل ذلك لتنفيذ الخوارزميات، أي لنفترض أن موقعك يقوم بعرض تمثيل معين لمجموعة نقاط، و هذا التمثيل يعتمد على بعض الخصائص لهذه النقاط، و هناك خوارزمية يمكنها إيجاد هذه الخصائص و لكنها تحتاج إلى سرعة عالية، هنا يمكنك كتابة API تقوم بذلك فقط. هناك إطار عمل يساعدك على ذلك و هو cpp-httplib. بشكل عام في حال كنت مبتدئ فليس من الجيد أن تبدأ بتعلم ال backend عن طريق ال c++، فهي معقدة جداً و تحتاج خبرة كبيرة، لذلك لا تستعملها ما لم تكن بحاجة ماسة لها.
  2. مثالك هذا بالكامل لا يفضل استعمال lambda فيه، يمكن استعمال تابع عادي يقوم بما تريده. استعمال lambda يتضح أكثر عندما تريد ما ندعوه callback و هو تابع يتم استدعاءه من قبل تابع آخر، ستتعلم هذا في دروس متقدمة، الآن يمكنك البقاء على ما كتبته و لكنني وضحت المشكلة حتى تعرف لاحقاً عندما تتعلم ما يلزم أنه لا يجب عليك استعمال متغير يحوي قيمة lambda.
  3. الخط هنا لا يدل على خطأ و إنما على مخالفتك أحد النصائح الخاصة ببايثون. هذا لن يؤثر على تنفيذ الكود و لكن عدم اتباع الطرق المنصوح بها لكتابة الكود قد يجعل من الصعب على غيرك قراءة الكود الخاص بك أو حتى قد يجعل الكود الخاص بك أكثر عرضة للأخطاء. هنا لا يجب إسناد lambda إلى متغير، ﻷنك بذلك تكون خالفت السبب الأساسي لوجودها و هو إنشاء تابع بدون اسم لتسهيل العمليات التي نريد فيها هذا التابع لمرة واحدة. في حال أسندتها إلى اسم فهي ستظل موجودة إلى نهاية البرنامج و سيكون من الممكن الوصول إليها أكثر من مرة. لذلك من الأفضل هنا أن تستعمل تابع عادي بدلاً منها. طبعاً لا مشكلة حالياً لغاية تعليمية أن تقوم باستعمالها و لكن يجب أن تضع ذلك في الحسبان و ألا تستعملها بهذه الطريقة بعد أن تتقن كيفية كتابتها.
  4. من الكتب الجيدة جداً في ال c++ هو سلسلة Primer، فهي تحوي على كافة المواضيع الأساسية. كما أنها تبدأ من مستوى بسيط و تزيد التعقيد تدريجياً، و أعتقد هذا مناسب للجميع. بالإضافة إلى كل ما سبق فهي تحوي تمارين قريبة للواقع، بحيث أنك عند إنهاءه ستكون قادر على إنشاء برامج واقعية و ليس فقط برامج بسيطة. المشكلة الوحيدة هي عدد الصفحات الكبير، و لكن هذا طبيعي للغة مثل c++. رابط الكتاب: https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113?tag=hackr-20&geniuslink=true
  5. و عليكم السلام، إن الأكاديمية موجهة للجمهور العربي و من الطبيعي استعمال اللغة العربية و تعريب المصطلحات، يتم ذكر المصطلح الأنكليزي دائماً حتى تتعرف عليه إن قرأته في مكان آخر. جودة الدورة في المحتوى الخاص بها و الأفكار و طريقة العرض، اللغة مجرد وسيلة لنقل ذلك. لماذا يصبح المصطلح قابل للنسيان اذا كان باللغة العربية؟ المصطلحات لها معنى، مثلاً وراثة يوضح مفهوم أن صنف يأخذ من صنف آخر.
  6. المشكلة هنا غالباً أنك تقوم بتغيير الحجم بشكل بسيط عن طريق تغيير الأبعاد فقط، هذا سيخرب ما ندعوه بال aspect ratio الخاص بالصورة، و هو نسبة بين عرض و ارتفاع الصورة، و تغييرها سيؤدي إلى تشوه الصورة. الحل هو التحجيم بناء على ذلك، أي تغيير الحجم مع الحفاظ على ال aspect ratio، أي برنامج تعديل على الصور حتى paint3d الموجود ضمن ويندوز بشكل افتراضي يمكنه القيام بذلك. لكن هنا قد لا يمكنك الوصول إلى الحجم الذي تريده، فالحفاظ على ال aspect ratio يضع قيوداً على تغيير الحجم، لذلك هناك طريقتين: جعل أطول بعد للصورة مساوٍ لأقصر بعد تريده، هذا سيؤدي إلى جعل البعد الآخر أصغر من المطلوب و بالتالي سيبقى فراغ صغير، غالباً هذا الفراغ غير مؤثر كثيراً، و ذلك لأنه عند استعمال الصورة غالباً تريد أحد الأبعاد أن يكون مساوٍ لقيمة معينة و ليس البعدين، فنقوم فقط بتغيير ذلك البعد مع المحافظة على ال aspect ratio. الطريقة الثانية هي في حال كنت تريد الأبعاد بالضبط، و الحل هو أن نقوم بتغيير أصغر بعد في الصورة ليساو أكبر بعد نريده، و ستصبح صورتنا أكبر بقليل من المطلوب فنقوم بقصها، ذلك ممكن لأنه غالباً يمكنك التخلص من بعض الحدود بدون التأثير على فكرة الصورة. و لكن هذا يفترض أن تجد صورة قريبة نظرياً مما تريده، أي مثلاً لنفترض تريد صورة طولية (كخلفية الموبايل مثلاً)، فلن ينجح أن تجلب صورة عريضة و تطبق ما سبق، عليك على الأقل جلب صورة طولية بحيث لا يكون هناك فرق كبير في ال aspect ratio بين ما تريده و ما لديك.
  7. السبب هو أنك كتبتيه خارج العنصر input، لاحظي العنصر input ينتهي عند القوس < و بالتالي يجب عليك وضع ذلك قبل هذا القوس حتى يكون ضمن العنصر input.
  8. بما أنك لا تعرفين الجواب فالجواب هو c++، استعمال لغة السي يتم في حالات خاصة جداً و يجب أن يكون الشخص خبيراً جداً ليقوم بذلك، ما عدا ذلك قومي باستعمال c++، حيث يمكنك اعتبارها تطوير للغة السي. لغة السي قد تحتاجين لها للتعامل مع الهاردوير في حالات خاصة، و لكن غالباً c++ تكفي لذلك. أيضاً لغة السي أصبحت قديمة و مشاكلها كثيرة.
  9. قبل رسم هذه الصناديق يفترض أنه يوجد ما توقعه النموذج من أصناف، بالتالي كل ما عليك القيام به هو أخذ ذلك الخرج و عد عدد التوقعات التي تساوي person. غالباً النموذج يتوقع ذلك بشكل عددي، لذلك عليك معرفة ما هو رقم الصنف person حتى يمكنك عد التوقعات التي تمثله. اذا كان الكود هو نفسه الذي قمتي بالسؤال عنه سابقاً، فيفترض أنه ضمن هذه الحلقة: for out in outs: for detection in out: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection[0] * Width) center_y = int(detection[1] * Height) w = int(detection[2] * Width) h = int(detection[3] * Height) x = center_x - w / 2 y = center_y - h / 2 class_ids.append(class_id) # هنا تحديداً confidences.append(float(confidence)) boxes.append([x, y, w, h]) في المكان الذي وضعت تعليق عنده، لديك ال id الخاص بالصنف، و كما يبدو من تابع الرسم فإنه يوجد مصفوفة اسمها classes فيها الأسماء التي تقابل كل id و لذلك يمكنك معرفة فيما إذا كان هذا التوقع هو person أما لا.
  10. كما يبدو من رسالة الخطأ أنك قمت بكتابة myapp.urs بدلاً من myapp.urls، أعتقد أنك قمت بذلك ضمن الملف urls.py الخاص بالتطبيق الأساسي، أي ضمن include. في حال لم تكن قد قمت بهذا الخطأ فمن فضلك شارك ملفات المشروع معنا لنتحقق منه.
  11. كل ما عليك القيام به هو وضع dropdown ضمن ال dropdown مع معالجة ذلك في جافاسكربت، يمكنك القيام بذلك بشكل مشابه لما يلي: <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script> <style> .dropdown-submenu { position: relative; } .dropdown-submenu .dropdown-menu { top: 0; left: 100%; margin-top: -1px; } </style> </head> <body> <div class="container"> <div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">Example Dropdown <span class="caret"></span></button> <ul class="dropdown-menu"> <li><a href="#">Profile</a></li> <li class="dropdown-submenu"> <a class="test" href="#">Language <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="#">English</a></li> <li><a href="#">Arabic</a></li> </ul> </li> <li><a href="#">Log out</a></li> </ul> </div> </div> <script> $(document).ready(function(){ $('.dropdown-submenu a.test').on("click", function(e){ $(this).next('ul').toggle(); e.stopPropagation(); e.preventDefault(); }); }); </script> </body> </html> لاحظ هنا كيف وضعنا عنصرين ضمن ال li، فعلياً سيتم عرض أول عنصر، و لكن عند الضغط قمنا بكتابة كود js يقوم بمعالجة ذلك و إظهار مجموعة الخيارات الثانية. كود ال css لتغيير مواقع ال dropdown، في حال لم نضعه ستظهر الثانية فوق الأولى لذلك قمنا بإزاحتها قليلاً.
  12. سأفترض أنك المستوى الذي تريدينه هو مبتدئ. بعض أهم الأسئلة التي يمكنك محاولة حلها هي كما يلي: اكتبي برنامج يقوم بحساب أكبر عنصر في لائحة. (أيضاً أصغر عنصر). اكتبي برنامج يقوم بالتحقق فيما إذا كان عدد مكرر في لائحة. اكتبي برنامج يقوم باستقبال دخل عددي من المستخدم يمثل عدد عناصر لائحة، ثم يستقبل هذه العناصر ضمن سطر واحد، و يقوم بطباعة مجموع هذه الأعداد. اكتبي برنامج يقوم بحساب الحد رقم n من متتالية فيبوناتشي (يمكنك البحث عنها على غوغل لمعرفة ما هي) و الرقم n هو رقم يجب على المستخدم إدخاله. اكتبي برنامج لحساب n للأس m حيث أنهما مدخلان من قبل المستخدم.
  13. ما زال السؤال غير مفهوم، هل تريدين منا إعطاءك أسئلة تقومين بكتابة البرامج لها؟
  14. مرحباً شهد، سؤالك غير واضح، هل يمكنك إضافة بعض التفاصيل لشرح ما تريدينه بالضبط؟
  15. vscode هو محرر أكواد و ليس بيئة متكاملة. لإنشاء exe عليك استعمال كومبايلر في لغة c++، مثلاً يمكنك استعمال visual studio و ليس visual studio code. أما في حال كنت تستعمل بايثون فيمكنك استعمال المكتبة auto-py-to-exe و هي تسمح لك بالقيام بذلك من خلال واجهة و ليس فقط من سطر الأوامر مما يسهل عليك العمل. يمكنك الإطلاع عليها من هنا: https://pypi.org/project/auto-py-to-exe/
×
×
  • أضف...