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

Kais Hasan

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

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

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

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

    24

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

  1. مرحبًا أحمد، يوجد في دورة علوم الحاسب ذكر لبعض الخوارزميات، و لكن الهدف الرئيسي منها هو تعليمك التفكير المنطقي و الذي هو الأكثر أهمية حتى يمكنك حل مختلف المسائل البرمجية بما فيها ال leetcode. بالطبع قد تضطر لتعلم بعض الخوارزميات و لكن بدون التفكير المنطقي لن تستطيع تطبيقها بما يناسبك. لذلك يمكنك اعتبار الدورة مفيدة حتى يمكنك لاحقًا حل المسائل في leetcode و لكنك ستحتاج إلى دراسة بعض الخوارزميات بعد الدورة. تحياتي.
  2. مرحبًا مجددًا، لا توجد آلية محددة بشكل مسبق للقيام بذلك. أي لا يمكنك استعمال قالب جاهز تطبقه على كافة الأمور و إلا لما كان هناك مبرمجون و مهندسو برمجيات. الأدوات التي تحتاجها هي أن تحسن من مهارتك في حل المشكلات problem solving، تحسين معلوماتك العامة في علوم الحاسوب، و أن تكون تتقن لغة برمجة معينة حتى تستطيع تحويل فكرتك إلى كود قابل للتنفيذ. بالتالي الأمر يحتاج إلى بناء خبرة و مهارات. بشكل عام حاول القيام بالكثير من المشاريع و خلال هذه المشاريع ستواجهك مشاكل كثيرة و عندها ستتعلم كيفية حلها، سواء كان الحل برمجي بسيط أم يحتاج إلى خوارزمية بسبب أن الحل البسيط بطيء في التنفيذ أو يستهلك الكثير من الذاكرة. تحياتي.
  3. مرحبًا أحمد، إن وظائف الخوارزميات كثيرة و من الصعب ذكرها كلها، كما أنها تختلف بحسب نمط الخوارزمية، فلكل خوارزمية هدف معين تحققه. بعض الأمثلة على استعمال بعض الخوارزميات: خوارزميات البيان graph، يستعمل البيان بشكل أساسي لتمثيل العلاقات بين مجموعة من المكونات، أبسط مثال يمكن تخيله هو عدة مدن أو مناطق و الطرق بينها، تمثيل ذلك كبيان يساعد على استعمال خوارزميات أقصر طريق لإيجاد أقصر طريق بين مدينتين. خوارزميات الأشجار تستعمل في الكثير من الأمور، مثلًا في حال كان لديك إطلاع على لغة c++ ستعرف أن ما يدعى بال map مبنية على خوارزميات الأشجار. خوارزميات الترتيب استعمالها واضح و هو في حال كان لدينا عدد معين من السجلات و نريد ترتيبها بناء على خاصية معينة. هناك الكثير من الخوارزميات الأخرى، في حال كان لديك خوارزمية معينة تريد أن تعرف أين يمكن استعمالها يمكنك ذكرها و سأكون سعيدًا بالإجابة على سؤالك. تحياتي.
  4. السعودية غير محظورة، لا داعي لل VPN. لا مشكلة في المنطقة حاليًا، لا يجب أن يكون سبب الخطأ هذا، فقط قم بالاتصال بالانترنيت قبل التنزيل. تحياتي.
  5. مرحبًا، من الصورة في المنتصف يبدو لي أنه لا يوجد اتصال بالانترنيت لديك. و لكن تحتاج إلى الانترنيت من أجل ال installer الذي غالبًا ما يقوم بتنزيل البيانات لك. في حال كنت في دولة محجوبة أيضًا من قبل oracle مثل سورية و اليمن و غيرها عليك تشغيل vpn قبل القيام بذلك. تحياتي.
  6. مرحبًا، في حال أنك تريد محتوى عربي جيد فأنصحك بمقالات أكاديمية حسوب، يمكنك الإطلاع على هذه المقالات الخاصة بشرح مختلف أنواع ال data structures تحياتي.
  7. إن المصطلح الصحيح لل SVM و الذي هو اختصار ل Support Vector Machine هو آلة الُمَّتجهات الداعمة. و هو عبارة عن أحد الخوارزميات التي يتم استعمالها في عملية التعلم للقيام بفصل العينات إلى أصناف، أي يستعمل مع مهام التصنيف. و هو يعتمد على فكرة إيجاد أفضل طريقة فصل بحيث تكون قدر الإمكان غير مبهمة، أي مثلًا تخيل أنه لدينا صنفين يمكن تمثيلهما على شكل نقاط في مستوي الإحداثيات، و يمكن فصلهما عن طريق خط مستقيم. قد يكون هناك الكثير من الحلول لذلك و لكن بعض هذه الحلول قد تجعل الخط قريبًا من بعض النقاط مما يجعل هذه النقاط مبهمة حيث أنها قريبة جدًا من الخط و لذلك لسنا متأكدين أنها فعلًا تتبع إلا الجانب الصحيح. لذلك تعمل هذه الخوارزمية على إيجاد الخط الفاصل الأبعد عن كل النقاط بحيث تحل هذه المشكلة. لفهم هذه الفكرة بشكل أوضح انظر إلى الرسمة التالية، بشكل واضح الخط الأحمر أفضل من الخط الأزرق حيث أنه يفصل النقاط بشكل أفضل. فهم كيفية عمل هذه الخوارزمية هو أمر معقد جدًا فهي تعتمد على أمور معقدة في الرياضيات و لكن ما شرحته هو تبسيط للمهمة التي تحاول هذه الخوارزمية تحقيقها. طبعًا قمت بالشرح على بعدين فقط و لكن الخوارزمية تطبق بشكل عام على دخل بعدد كبير من الأبعاد و ذلك حتى يمكنها تعلم فصل خطي في هذه الأبعاد ينعكس بشكل فصل غير خطي عند إعادته إلى بعدين فقط، هذه أمور ستتعلمها لاحقًا و لكن أردت ذكرها حتى يكون الجواب كامل. تحياتي.
  8. بشكل عام هذا طبيعي عند بداية تعلم أي شيء جديد. من الجيد أن تقومي بتدوين الملاحظات المهمة (و ليس كل التعليمات). لا مشكلة في حال نسيان تعليمات، فمن الصعب جدًا حفظها كلها و يجب تعلم كيفية البحث عنها على غوغل و غيره، فالبحث هو أحد المهارات الهامة في هذا المجال. التطبيق ثم التطبيق، حيث أن كثرة المعلومات النظرية هي ما يسبب التشتت، فكل درس يجب تطبيق ما أخذته بشكل مباشر و محاولة تعديله لمعرفة ما الذي سيحدث في كافة الحالات. أما من أجل الاختبارات فبعض الدروس تحوي على وظائف صغيرة يمكن للمتدرب القيام بها، في حال أردتي تمارين إضافية عن درس معين يمكنك دائمًا التعليق أسفل الدرس بالمفاهيم التي ترغبين في الحصول على تمارين عليها و سنقوم بتزويدك بالكثير من التمارين للتدرب عليها و التأكد أن الأفكار أصبحت مفهومة بشكل واضح. تحياتي.
  9. مرحبًا، من الجيد أن تحاول البحث عن عمل على مستقل حتى يمكنك الإطلاع على طبيعة الأعمال الموجودة و التي يمكنك القيام بها، و المسؤوليات التي ستكون على عاتقك، فقط ابحث "مدير تطوير منتجات" على مستقل و ستجد ما يناسبك، بالطبع بعضها سيكون مغلق أو تم تنفيذه و لكن من الجيد الإطلاع عليها لمعرفة ما يتوقع العميل منك. كما أن هناك فكرة ضرورية يجب أن تعرفها، و هي أن التعلم لا يتوقف، فعليك دائمًا التعلم حتى يمكنك تحسين مهاراتك و الحصول على أعمال أفضل بكثير، فهنالك الكثير من المنافسة في سوق العمل، شهادة حسوب سوف تجعلك منافسًا و إضافة مهارات أخرى عن طريق التعلم أيضًا ستجعل فرصك أكبر بكثير. بشكل عام في حال تم توظيفك من قبل شركة فهناك الكثير من المهام المنوطة بك بعضها: مسؤول عن تحديد الفرص الجديدة لتطوير منتج جديد قابل للتسويق من المفهوم إلى التوزيع. تحسين منتج موجود لتلبية احتياجات العملاء بشكل أفضل وتنشيط السوق الحالية. متابعة المنتجات بعد اطلاقها وتقييمها. العمل على رفع التقارير الدورية للمدير العام. تحياتي.
  10. مرحبًا، أتذكر أنك مشتركة بأحد كورسات حسوب الخاصة بتحليل البيانات. من الجيد حاليًا التركيز على التطبيق العملي بدلًا من مجرد مشاهدة فيديوهات كثيرة. حاولي جلب بيانات معينة من بيئتك المحلية و حاولي تحليلها بناء على ما تعلمتي من المسارات. يمكننا مساعدتك في ذلك أيضًا، لكن عليكي بذل جهد في محاولة إيجاد الحل بنفسك، مثلًا كل مشكلة حاولي ساعة على الأقل بالبحث و التجريب قبل أن تقومي بالسؤال، هذا يجعل الفائدة أكبر و التقدم أسرع بكثير. تحياتي.
  11. الخوارزمية محددة بشكل مسبق، و الدخل الخاص بها هو البيانات و عدد العناقيد، بالتالي الخوارزمية نفسها لا تستطيع القيام بذلك وضوحًا فهي تعتمد على الدخل في عملها. أي تعديل عليها لن تصبح تمامًا كما هي. بالتالي اعتبر طريقة الكوع elbow عبارة عن خوارزمية أخرى مبنية على ال k-means.
  12. مرحبًا علي، هناك العديد من الطرق لتحديد عدد العناقيد clusters، أحد هذه الطرق هي ما يسمى بطريقة المرفق elbow و هي موضحة في الصورة التالية: يتم تطبيقها عن طريق تطبيق خوارزمية k-means بعدد عناقيد مختلف كل مرة، كما تلاحظ في الصورة تم تطبيق ذلك ب 1 و 2 ... إلى ال 9.. بعد ذلك نجد المرفق للخط البياني. سبب نجاح هذه الطريقة هو أنه كما تلاحظ، زيادة عدد العناقيد إلى أكثر من 3 لم يقلل من الخطأ بشكل ملحوظ، و بالتالي في الغالب أنه لا يوجد فعليًا 4 عناقيد، و إلا كان الخطأ قد قل بشكل كبير. طبعًا ليس من الضروري رسم البيان يمكنك فقط طباعة قيمة الخطأ من أجل تجربة (بعدد عناقيد مختلف) و ملاحظة متى يتوقف الخطأ عن النزول بشكل كبير مع زيادة عدد العناقيد. بالتالي هذه الطريقة نفسها يمكنك أتمتتها، حيث يمكنك تحديد عتبة معينة لتغير الخطأ، في حال لم يتغير على الأقل بمقدار هذه العتبة توقف العملية و تحدد عدد العناقيد الأمثل بآخر قيمة سببت نزول بشكل ملحوظ. تحياتي.
  13. مرحبًا أحمد، يمكنك استعمال stripe من هنا https://stripe.com/ يوفر لك هذا الموقع كافة الميزات المطلوبة لعملية الدفع الالكتروني من فيزا و غيرها. يمكنك الإطلاع على الموقع لمعرفة التفاصيل. شخصيًا لقد قمت باستعماله مسبقًا مع متجر قمت بتطويره باستعمال دجانغو. بالطبع هو يوفر خيارات لكافة الأمور التي ترغب بها. كما يمكنك الإطلاع على التكاليف من هنا: https://stripe.com/pricing
  14. حاليًا لا يوجد فرق. بشكل عام التعلم العميق هو أحد أفرع تعلم الآلة لذلك فعليًا ستكون الشبكات العصبية في كليهما نفس المفهوم. الفرق هو في البدايات، عندما تم ابتكار الشبكات العصبية لم يكن هناك ما يعرف بالتعلم العميق، و قد بدأت الشبكات العصبية على شكل طبقتين أو ثلاثة. مع تطور القدرات الحسابية و بعض التقنيات أصبح بالإمكان إنشاء شبكات عصبية تحوي على الكثير من الطبقات و هنا بدأ ما يسمى التعلم العميق. بالتالي في الحالتين هما شبكات عصبية، في حال كان هناك طبقات كثيرة فهي أيضًا تتبع للتعلم العميق. تحياتي.
  15. من الممكن أن تستعمل بيانات مسماة و لكن بدون استعمال التسميات labels. أي مثلاً لديك بيانات لصور حيوانات و لديك لكل صورة ما هو الحيوان الموجود فيها. في حال كنت ترغب باستعمال هذه البيانات في التعلم غير الخاضع للإشراف عليك استعمال الصور فقط بدون المسميات. في اللحظة التي تستعمل فيها المسميات فإنك تقوم بتوجيه النموذج و إعطاءه معلومات معينة و بالتالي يصبح هناك إشراف ولو جزئي و تنتقل إلى أنواع تعلم أخرى كالتعلم الخاضع للإشراف Supervised learning أو مثلا التعلم الخاضع للإشراف بشكل جزئي semi-supervised learning و غيرها.
  16. الفرق ليس في نوع البيانات المستعمل و إنما في نوع المهمة حيث أن التصنيف مهمة مختلفة عن ال clustering. قد تبدو لك عملية التصنيف هي نفسها عملية تقسيم البيانات إلى أصناف و لكن الأمر ليس نفسه. في مهمة التصنيف يكون لديك علم مسبق بالأصناف التي تريد للنموذج التعرف عليها، بينما في مهمة ال clustering لا تكون لديك هذه المعلومة. بالتالي في حال كان المقصود بقولك "نوع البيانات" هو المسميات labels الخاصة بالبيانات فهذا صحيح. كما النماذج المستعملة لكل مهمة ستختلف قليلًا حيث أن النماذج التي تقوم بعملية ال clustering لا تقوم بتوقع أصناف و إنما بتعلم ميزات من البيانات بحيث يتم استعمال هذه الميزات لاحقًا لفصل البيانات إلى أصناف، بينما في مهمة التصنيف يتم توقع الأصناف بشكل مباشر. اختلاف النماذج أيضًا يؤدي إلى اختلاف طريقة التدريب، مهام التصنيف بشكل عام تتبع التعلم الموجه Supervised learning بينما مهام ال clustering فهناك الكثير من أنماط التدريب الخاص بها منها التعليم غير موجه Unsupervised learning أو التعليم ذاتي التوجيه Self-supervised learning و غيرها الكثير من الأنماط الأخرى.
  17. خوارزمية k-means تعد الأشهر لسهولة استعمالها و فهمها، حيث يمكنك فهم آلية عملها حتى لو لم تكن لديك معلومات جيدة في الرياضيات. بالطبع هي ليست الأفضل، و حاليًا يتم التوجه إلى استعمال نماذج الذكاء الاصطناعي في عملية ال clustering بدلًا من الاعتماد على خوارزميات غير قابلة للتعلم، حيث أن خوارزمية مثل خوارزمية ال k-means لا تتعلم بناء على البيانات، كما أن استعمال هذه الخوارزمية يتطلب وجود طريقة معينة يمكن من خلالها إسناد كل غرض إلى نقطة في فضاء الإحداثيات. لذلك قد تجد بعض الطرق تستعمل نماذج الذكاء الاصطناعي لإسناد كل غرض (مثلاً صورة) إلى نقطة في فضاء الإحداثيات و من ثم يتم استعمال ال k-means. أو هناك بعض الطرق التي تعتمد بشكل كلي على نماذج الذكاء الاصطناعي للقيام بذلك عن طريق تدريب النموذج بشكل ذاتي التوجيه self-supervised بحيث يقوم بتعلم الأصناف لوحده. نصيحتي لك هي أن تقوم بتطبيق أبسط تقنية في البداية و أن تنتقل لتقنية معقدة أكثر فقط في حال كان هناك مشاكل معينة تواجهك في الطريقة البسيطة. هذا سيوفر عليك الوقت و الجهد.
  18. تستعمل في حالة كنت تريد سرعة كبيرة في التنفيذ و أداء عالٍ. مثلاً شركات مثل غوغل و يوتيوب و أمازون تستعملها. و لكن بشكل عام لا يتم استعمالها لبناء ال backend بشكل كامل، و إنما كإضافات على أطر عمل أخرى، مثل node js. أو حتى يمكنك جعل كود ال node يقوم باستدعاء كود ال c++ للقيام ببعض العمليات التي تعتقد أنها تحتاج سرعة كبيرة. أيضاً يمكنك كتابة جزء من ال backend بال c++ على شكل API، بشكل أساسي يستعمل ذلك لتنفيذ الخوارزميات، أي لنفترض أن موقعك يقوم بعرض تمثيل معين لمجموعة نقاط، و هذا التمثيل يعتمد على بعض الخصائص لهذه النقاط، و هناك خوارزمية يمكنها إيجاد هذه الخصائص و لكنها تحتاج إلى سرعة عالية، هنا يمكنك كتابة API تقوم بذلك فقط. هناك إطار عمل يساعدك على ذلك و هو cpp-httplib. بشكل عام في حال كنت مبتدئ فليس من الجيد أن تبدأ بتعلم ال backend عن طريق ال c++، فهي معقدة جداً و تحتاج خبرة كبيرة، لذلك لا تستعملها ما لم تكن بحاجة ماسة لها.
  19. مثالك هذا بالكامل لا يفضل استعمال lambda فيه، يمكن استعمال تابع عادي يقوم بما تريده. استعمال lambda يتضح أكثر عندما تريد ما ندعوه callback و هو تابع يتم استدعاءه من قبل تابع آخر، ستتعلم هذا في دروس متقدمة، الآن يمكنك البقاء على ما كتبته و لكنني وضحت المشكلة حتى تعرف لاحقاً عندما تتعلم ما يلزم أنه لا يجب عليك استعمال متغير يحوي قيمة lambda.
  20. الخط هنا لا يدل على خطأ و إنما على مخالفتك أحد النصائح الخاصة ببايثون. هذا لن يؤثر على تنفيذ الكود و لكن عدم اتباع الطرق المنصوح بها لكتابة الكود قد يجعل من الصعب على غيرك قراءة الكود الخاص بك أو حتى قد يجعل الكود الخاص بك أكثر عرضة للأخطاء. هنا لا يجب إسناد lambda إلى متغير، ﻷنك بذلك تكون خالفت السبب الأساسي لوجودها و هو إنشاء تابع بدون اسم لتسهيل العمليات التي نريد فيها هذا التابع لمرة واحدة. في حال أسندتها إلى اسم فهي ستظل موجودة إلى نهاية البرنامج و سيكون من الممكن الوصول إليها أكثر من مرة. لذلك من الأفضل هنا أن تستعمل تابع عادي بدلاً منها. طبعاً لا مشكلة حالياً لغاية تعليمية أن تقوم باستعمالها و لكن يجب أن تضع ذلك في الحسبان و ألا تستعملها بهذه الطريقة بعد أن تتقن كيفية كتابتها.
  21. من الكتب الجيدة جداً في ال c++ هو سلسلة Primer، فهي تحوي على كافة المواضيع الأساسية. كما أنها تبدأ من مستوى بسيط و تزيد التعقيد تدريجياً، و أعتقد هذا مناسب للجميع. بالإضافة إلى كل ما سبق فهي تحوي تمارين قريبة للواقع، بحيث أنك عند إنهاءه ستكون قادر على إنشاء برامج واقعية و ليس فقط برامج بسيطة. المشكلة الوحيدة هي عدد الصفحات الكبير، و لكن هذا طبيعي للغة مثل c++. رابط الكتاب: https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113?tag=hackr-20&geniuslink=true
  22. و عليكم السلام، إن الأكاديمية موجهة للجمهور العربي و من الطبيعي استعمال اللغة العربية و تعريب المصطلحات، يتم ذكر المصطلح الأنكليزي دائماً حتى تتعرف عليه إن قرأته في مكان آخر. جودة الدورة في المحتوى الخاص بها و الأفكار و طريقة العرض، اللغة مجرد وسيلة لنقل ذلك. لماذا يصبح المصطلح قابل للنسيان اذا كان باللغة العربية؟ المصطلحات لها معنى، مثلاً وراثة يوضح مفهوم أن صنف يأخذ من صنف آخر.
  23. المشكلة هنا غالباً أنك تقوم بتغيير الحجم بشكل بسيط عن طريق تغيير الأبعاد فقط، هذا سيخرب ما ندعوه بال aspect ratio الخاص بالصورة، و هو نسبة بين عرض و ارتفاع الصورة، و تغييرها سيؤدي إلى تشوه الصورة. الحل هو التحجيم بناء على ذلك، أي تغيير الحجم مع الحفاظ على ال aspect ratio، أي برنامج تعديل على الصور حتى paint3d الموجود ضمن ويندوز بشكل افتراضي يمكنه القيام بذلك. لكن هنا قد لا يمكنك الوصول إلى الحجم الذي تريده، فالحفاظ على ال aspect ratio يضع قيوداً على تغيير الحجم، لذلك هناك طريقتين: جعل أطول بعد للصورة مساوٍ لأقصر بعد تريده، هذا سيؤدي إلى جعل البعد الآخر أصغر من المطلوب و بالتالي سيبقى فراغ صغير، غالباً هذا الفراغ غير مؤثر كثيراً، و ذلك لأنه عند استعمال الصورة غالباً تريد أحد الأبعاد أن يكون مساوٍ لقيمة معينة و ليس البعدين، فنقوم فقط بتغيير ذلك البعد مع المحافظة على ال aspect ratio. الطريقة الثانية هي في حال كنت تريد الأبعاد بالضبط، و الحل هو أن نقوم بتغيير أصغر بعد في الصورة ليساو أكبر بعد نريده، و ستصبح صورتنا أكبر بقليل من المطلوب فنقوم بقصها، ذلك ممكن لأنه غالباً يمكنك التخلص من بعض الحدود بدون التأثير على فكرة الصورة. و لكن هذا يفترض أن تجد صورة قريبة نظرياً مما تريده، أي مثلاً لنفترض تريد صورة طولية (كخلفية الموبايل مثلاً)، فلن ينجح أن تجلب صورة عريضة و تطبق ما سبق، عليك على الأقل جلب صورة طولية بحيث لا يكون هناك فرق كبير في ال aspect ratio بين ما تريده و ما لديك.
  24. السبب هو أنك كتبتيه خارج العنصر input، لاحظي العنصر input ينتهي عند القوس < و بالتالي يجب عليك وضع ذلك قبل هذا القوس حتى يكون ضمن العنصر input.
×
×
  • أضف...