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

Kais Hasan

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

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

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

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

    22

كل منشورات العضو Kais Hasan

  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/
  16. المشكلة أنك لم تضيفي average='micro' إلى ال precision و ال recall كما قمتي بذلك من أجل ال f1score. عليك إضافة هذا البارامتر إلى كل هذه التقييمات لأنها بشكل افتراضي تعتبر أن البيانات لها labels ثنائية، أي لدينا فقط صنفان (مثلاً قطة و كلب) و لكن هنا لدينا عدة أصناف و بالتالي يجب تمرير هذا البارامتر.
  17. يمكنك إزالة الخاصية required و وضع قيمة افتراضية لهذه البارامترات عن طريق الخاصية default. هذا يفترض أن يحل المشكلة الخاصة بك، بحيث في حال لم تقومي بإضافة هذه البارامترات يستعمل ما وضعتيه في ال default. مثلاً: ap.add_argument('-w', '--weights', default="yolov3.weights", help = 'path to yolo pre-trained weights')
  18. من الجيد دائماً عند القيام ببرنامج خاص بالخرائط استعمال google map api، فهي تسمح لك بجلب خريطة تفاعلية و القيام ببعض التعديلات عليها. مثلاً عندما تقول أن المستخدم سيرفع ملف مواقع، عليك أن تحدد الشكل الخاص بمحتوى هذا الملف، و بناء عليه تقوم بمعالجته و إرسال طلبات لل api لإضافة مواقع معينة. باقي العمليات نفس المبدأ، عليك القيام ببعض المعالجة لوحدك و من ثم إرسال الطلب المناسب لل api. لكن هناك مشكلة في حساب الموقع بين كل نقطة و أخرى، سيكون هناك الكثير من النقاط و بالتالي حساب المسافة سيكون معقد جداً من الناحية الحسابية و غير ممكن.
  19. لا، نحن نقوم بالوراثة من المودل الأصلي و بالتالي كل خصائصه تبقى كما هي.
  20. في حال كانت الأكاديمية لا تقدم دروساً يمكنك نشر عرضك على مستقل، فهناك الكثير من الخبراء في هذا المجال هناك، حتى المدربون لديهم حسابات على مستقل و بالتالي من الممكن أن يقدم أحدهم عرض على طلبك.
  21. التعديل لا يتم على النسخة التنفيذية، و إنما يتم على الكود المصدري الذي قمت بتطويره. أنت تقول أنك صممت تطبيق flutter بالتالي لديك الكود، إخراج نسخة تنفيذية منه لا يعني أنه يجب أن تكمل التطوير منها، هي فقط ناتج مرحلي، و عملية التطوير تستمر على الكود المصدري. و المراحل التالية لإنشاء نسخة apk هو أن تقوم بمحاولة نشرها على Google Play، فهذا سيتيح لغيرك تنزيلها و استعمالها، كما قد يدر عليك المال في حال كان تطبيقك يتضمن إعلانات مثلاً. و لكن بالطبع عليك تقديم محتوى فريد لتصل إلى الكثير من المستخدمين. يمكنك أيضاً عرض التطبيق على أصدقاءك و معارفك و أخذ آرائهم، فقد يكتشف أحدهم خطأً قد غفلت عنه، أو يرى أحدهم أن الواجهة ليست سهلة الاستخدام، لذلك أخذ أراء الآخرين مهم جداً في هذا الأمر.
  22. كما هو مذكور في التوثيق الخاص بدجانغو، يجب عليك القيام بذلك في بداية المشروع قبل أي عملية migration و إلا سيصبح من الصعب جداً تعديل ذلك. بشكل عام يتم إنشاء تطبيق خاص بالمستخدمين (عادة نسميه accounts) و ضمن ال models.py نضع ما يلي: from django.db import models from django.contrib.auth.models import AbstractUser class User(AbstractUser): gender = models.BooleanField(default=True) # True for male and False for female # you can add more fields here. ضع الخصائص التي تريدها. ثم يجب عليك إخبار دجانغو بأن هذا الصنف هو ما تريد استعماله من أجل حساب المستخدم، و يمكن ذلك عبر إضافة ما يلي إلى ملف الإعدادات settings.py: AUTH_USER_MODEL = 'accounts.User' طبعاً في حال اخترت تسمية التطبيق الخاص بالحسابات غير accounts عليك تغيير ذلك فيما سبق. أما من أجل إعدادات الوصول و السماحية فأبسط طريقة هي أن تقوم بإضافة حقل إلى المستخدم يدل على صلاحيته و عند وجود عملية تحتاج صلاحية تتحقق من هذا الحقل.
  23. دورة علوم الحاسوب هي دورة أساسيات تحتاجها في أي عمل، و لكنها لوحدها لا تمكنك مثلاً من تصميم موقع ويب، أو كتابة تطبيق سطح مكتب. يفضل أن تأخذ دورة أخرى في المجال الذي ترغب بالعمل فيه. بالطبع قد تجد أعمال كشرح دروس أو أعمال بسيطة بلغات برمجة تعرفها و لكن الشخص الذي سيوظفك مثلاً لتصميم موقع ويب عليه أن يرى أنه لديك مشاريع في هذا المجال حتى يثق بك، أو شهادة ضمن هذا المجال.
  24. أعتقد ما تقصدينه هو محرر أكواد بايثون و يمكن عن طريقه تنفيذ برامج بايثون. في هذه الحالة هناك عدة خيارات ممكنة، بعضها يعطيك خيار كتابة برامج بلغات أخرى أيضاً، سأذكر أهمها بحيث يمكنك الاختيار بينها: https://www.online-python.com/ https://www.programiz.com/python-programming/online-compiler/ https://replit.com/languages/python3 https://www.onlinegdb.com/online_python_compiler https://ideone.com/ https://codesandbox.io/ في حال كنتي تريدين شيء بسيط فأنصحك بأول خيار، أما في حال كنتي تريدين تنزيل مكتبات أيضاً و بيئة برمجية كاملة فالخيار الأخير هو الأفضل.
  25. هناك بعض الشركات التي توفر خيار البدء بشكل تدريبي لمن لديه معلومات أساسية جيدة و لكن ليس لديه الخبرة في المجال، بالتالي يمكنك أن تحصل على هكذا فرصة. و لكن هذه الفرص قليلة جداً. لذلك في حال أردت العمل في باك ايند عليك أيضاً أخذ كورس باك ايند، و القيام ببعض المشاريع حتى يكون لديك أكثر من مشروع مما يزيد من فرصك في القبول. حالياً ركز على الأساسيات و عندما تنهيها يمكنك أخذ كورس باك ايند.
×
×
  • أضف...