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

Kais Hasan

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

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

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

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

    22

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

  1. السبب في ذلك أن prompt تقوم بإرجاع القيمة المدخلة على شكل string، و بالتالي عليك تحويلها قبل ذلك عن طريق تمريرها إلى Number كما يلي: x = Number(prompt("..."));
  2. إن دورة تطوير واجهات المستخدم أفضل بالنسبة لما ذكرته، فهي ترتكز على تطوير الواجهات لمواقع الويب، على عكس الدوة الثانية التي تحوي على تطوير تطبيقات أندرويد و غير ذلك أيضاً. كما أنه من غير الجيد أن تبدأ بتعلم إطار عمل بلغة ما بدون أن تكون لديك معلومات جيدة حول هذه اللغة، و هذا ينطبق على أي لغة من اللغات بما فيها الجافا سكربت، و بالتالي من المفيد أن تتعلم الأساسيات قبل أن تتعلم إطار عمل ما. كما أن الدورة الأولى و التي هي دورة تطوير واجهات المستخدم مخصصة لمن ليس لديهم معلومات في الويب و يريدون تطوير مهاراتهم في هذا المجال. بالإضافة إلى كل ما سبق، إن تطوير الواجهات الأمامية ليس فقط جافا سكربت، حيث ستحتاج إلى htmlو css و هذا مشروح في الدورة الأولى.
  3. لا يوجد أنواع من المصفوفات في بايثون، في بايثون لدينا ما يدعى باللائحة list، هذه اللائحة يمكنها أن تحوي أي غرض كان، سواء رقم، سلسلة نصية، لائحة أخرى، أو حتى تابع. بالتالي لا فكرة من التفريق بين لائحة أحادية و لائحة ثنائية، ﻷن اللائحة الثنائية ما هي إلا لائحة أحادية عناصرها لوائح، و بالتالي أصبح لدينا العمق اثنان و لهذا دعوناها بالثنائية و لكنها في النهاية مجرد لائحة. نفس الأمر ينطبق على اللوائح الثلاثية، يمكنك حتى الحصول على لوائح رباعية أو أكثر.
  4. بما أنك لا تعرف شيئاً عن البرمجة فمن الأفضل أن تبدأ بتعلم أساسيتها و أساسيات علوم الحاسب قبل أن تتخصص في مجال ما، حيث أن أي مجال يتطلب منك معرفة الأساسيات حتى تصبح جيداً فيه. يمكنك الإطلاع على دورة اساسيات علوم الحاسب التي تقدمها الأكاديمية فهي مناسبة جداً لحالتك، حيث من خلالها يمكنك تعلم أساسيات البرمجة و الحاسوب بشكل عام، بالإضافة إلى مهارات مثل التفكير المنطقي و الذي ستلزمك كثيراً في أي مجال. من ناحية العمل فمن الصعب قليلاً إيجاد أعمال حرة في هذا المجال، أي أن أغلب الأعمال تكون في شركات و الشركات تتطلب أن يكون عمرك على الأقل 18 سنة، كما أن أغلب الشركات تطلب أن يكون لديك شهادة بكالوريوس في مجال علوم الحاسب لذلك نصيحتي لك أن تكمل تعليمك الجامعي، و لكن يمكنك طبعاً القيام ببعض الأعمال و في حال كانت جيدة جداً قد يتم قبولك بلا شهادة جامعية، و لكن لا تعتمد على ذلك و احصل على الشهادة.
  5. يبدو أن السؤال خاص بأحد الدروس من أحد الدورات، من فضلك قم بطرح الأسئلة الخاصة بدرس ما أسفل ذلك الدرس. و لكن كجواب على سؤالك بشكل عام فإن عملية التحقق يمكن وضعها في 3 أماكن و ذلك حسب أهمية هذا التحقق و هذه الأماكن بالترتيب من الأضعف إلى الأقوى: لدى المستخدم، هذا يتم مثلاً عندما تقوم بإدخال بريد الكتروني ليس له النمط العام لأي بريد الكتروني، أو عندما تحاول إدخال نص في مربع إدخال يقبل أعداد فقط. هذا النوع من التحقق جيد لتخفيف العبء على السيرفر من ناحية الطلبات الخاطئة و يساعد المستخدم على معرفة ما الذي عليه إدخاله بشكل أسرع و بالتالي يعطي تجربة جيدة للمستخدم. لكن هذا النوع يمكن تجاوزه بسهولة عن طريق إرسال طلب بشكل مباشر بدلاً من استعمال المتصفح و الكثير من الطرق الأخرى و بالتالي من غير الجيد استعماله للأمور الحساسة. في السيرفر، هذا يتم بعد إرسال المستخدم لبياناته يقوم السيرفر بالتحقق من هذه البيانات و من أنها تراعي الشروط المطلوبة. هذا أكثر أماناً من الطريقة السابقة و دائماً يمكن استعماله للأمور الحساسة و لكن الخطأ البرمجي هنا قد يسبب مشاكل غير ملحوظة. في قاعدة البيانات، هذا النوع مهم جداً لضمان أنه حتى في حال حدوث خطأ برمجي لن يتم إدخال بيانات غير مناسبة إلى قاعدة البيانات و هو مهم جداً كما في المثال الذي ذكرته. طبعاً يمكن استعمال الطرق الثلاث السابقة معاً، و لكن هذا يعتمد على حساسية التطبيق الذي تقوم ببناءه و متطلباته، بالتالي في حالتك من الجيد إضافة الشرط إلى قاعدة البيانات و لكن قد يكون ليس هذا هو الغرض من الدرس و لذلك لم يتم إضافته، و لكن عندما تقوم ببناء تطبيق حقيقي فمن الأفضل أن تضيف الأنواع الثلاث من التحققات.
  6. هناك طريقتان لحل هذا التمرين. أول طريقة تتمثل في أن تستعمل مقارنة المحارف مباشرة، و هنا سينجح الأمر لأن ترتيب المحارف الخاصة بالخانات موافق لترتيب الأرقام، أي المحرف '1' أصغر من المحرف '2' ، في هذه الحالة يمكنك فقط استعمال ما يدعى list comprehension للقيام بذلك بالإضافة إلى الدالة join، كما يلي: s = "41345491294358" res = ''.join(['1' if x >= '5' else '0' for x in s]) print(res) هذا هو الحل الأمثل بالنسبة للغة البايثون، حيث أن هذه هي الطريقة المفضلة للكتابة في هذه اللغة، بالطبع يمكنك القيام بكتابة حلقة عادية و الإضافة إلى لائحة و من ثم الدمج و لكن ذلك سيكون أسلوب اللغات الاخرى مثل c++ و ليس بايثون. الطريقة الثانية لحل هذه المسألة تكون ببناء الحل مباشرة إلى سلسلة نصية، أي بدلاً من التخزين في مصفوفة و من ثم التحويل إلى سلسلة نصية نقوم فوراً بالإضافة إلى سلسلة نصية، كما يلي: s = "41345491294358" res = '' for x in s: res += '1' if x >= '5' else '0' print(res)
  7. نقوم باستعمال البحث الثنائي لتسريع عملية البحث، أي بدلاً من أن نبحث بشكل خطي عن عنصر يمكنك استعمال البحث الثنائي، و هذا له شرطان، أولاً أن تكون العناصر مخزنة بشكل خطي (سأشرح ذلك فيما يلي) ثانياً أن تكون العناصر مرتبة. و بالتالي في حال لم تكن العناصر مخزنة بشكل خطي لا معنى من البحث الثنائي، لأنه في تلك الحالة ستكون العناصر مخزنة بشكل يسرع البحث تلقائياً. مثلاً في القواميس بلغة البايثون يمكن الوصول إلى مفتاح بشكل مباشر و بسرعة كبيرة و ذلك لأن عناصر القاموس ليست مخزنة بشكل خطي و بالتالي لا فكرة من البحث الثنائي. كذلك الأمر بالنسبة للمجموعات set فالبحث فيها سريع جداً. بالطبع يمكنك استخراج عناصر القاموس و من ثم القيام بعملية بحث ثنائي و لكن ليس من ذلك أي فائدة.
  8. هنالك موقع إضافي يتبع لحسوب و هو بعيد. و هو يساعدك على إيجاد أعمال مع شركات حتى، بشكل أدق هو موقع توظيف عن بعد، و ليس موقع عمل حر كما هو الحال في مستقل و خمسات. يمكنك الإطلاع على الموقع من الرابط التالي: https://baaeed.com/
  9. قد يكون السبب وراء ذلك هو أنك تحاول تذكر حل المشكلة بدلاً من حلها، لقد كان الكثير من الطلاب لدي يعانون من هذه المشكلة. بشكل عام لا يمكن لأحد مساعدتك في هذا الأمر، فقط قم بمحاولة التركيز على كيفية حل المشكلة و انسى أنك حللتها من قبل. بعض التقنيات التي وجدتها فعالة من أجل ذلك: انسى المشكلة الأصلية و حاول إيجاد بعض الملاحظات فقط، أي حاول استنتاج أمور صغيرة، شيئاً فشيئاً سترى طريق الحل يتضح أمامك، هذه التقنية مفيدة جداً عندما تصل إلى طريق مسدود في التفكير. في حال كان هناك شروط معينة حاول حل مسألة أسهل لا يوجد فيها أحد هذه الشروط، أو يوجد بشكل أضعف، أي مثلاً لنفترض أنك تريد حل مسألة يكون الدخل فيها عبارة عن 100 ألف عنصر، حاول حلها من أجل 1000 عنصر مثلاً، في الكثير من الأحيان هذه الطريقة تساعدك على بناء الحل من المسألة الأقل تعقيداً إلى الأكثر تعقيداً. حاول تجزئة ما لديك من أمور في المسألة و حل كل جزء لوحده، هذه الطريقة مشهورة جداً في الخوارزميات حتى و تدعى divide and conquer ، مثلاً إذا كان لديك عدة متطلبات حاول حل كل على حدى (في حال كان ذلك ممكن). حاول التفكير بالحل باستعمال قلم وورقة، أي كفكرة فقط و ليس ككود، من ثم ضع مخططاً للبرنامج الذي تريد كتابته، و في النهاية ابدأ الكتابة. الكثير من المشاكل و البطء في الكود يكون نتيجة أن الشخص يتوجه إلى الكود بدون أن يتحقق بشكل كامل من فكرته هل هي صحيحة أم لا. هذا قد يبدو إضاعة للوقت في البداية، و لكن هذا القليل من الوقت الذي تخصصه لما قبل كتابة الكود سيجعل كتابة الكود أسرع و يحميك من الوقوع في الأخطاء لاحقاً و التي ستكلفك الكثير من الوقت لحلها.
  10. نعم، حتى الدوال تعتبر كائنات، هذا يعني أنه يمكنك تمرير دالة كمعطى، أو يمكنك تخزين دالة في متغير و كل ما يمكنك تطبيقه على أي كائن. مثال على ذلك: def f(x): return x * x def apply_f(arr, func): return [func(e) for e in arr] arr = [1, 2, 3, 4] result = apply_f(arr, f) print(result) # [1, 4, 9, 16]
  11. بما أن المجالين مرتبطين ببعض و يمكن تنفيذ تطبيقات مشتركة تساعدك على كسب خبرة في المجالين ( و هي تطوير موقع كامل، فرونت و باك) فليس من الخطأ العمل عليهما سويةً، و لكن هذا فقط إن قمت بتطبيق ما تعلمته. في حال كنت ستقوم بتقسيم الوقت و دراسة الأمرين بشكل نظري فقط، أو تطبيق أحدهما فقط دون الآخر فليس من المفيد القيام بذلك. من تجربة شخصية لي، لقد تعلمت المجالين بشكل بسيط سوية، و لكن كنت أقوم بتطبيق ما تعلمته في كلا المجالين على موقع صغير أعمل عليه، أي قمت ببناء موقع صغير و كلما تعلمت شيء في أحد المجالين أطور على هذا الموقع في المجال الذي تعلمته، هكذا أصبح لدي خبرة أكبر في التعامل مع المجالين و لم أتشتت، كان لكل مجال ما يلزمه من الوقت. بالتالي قد لا يكون التقسيم هكذا هو أفضل طريقة، على سبيل المثال أنا لم أقم بتقسيم الوقت بشكل ثابت، و إنما كنت أعطي الوقت اللازم لتعلم و تطبيق شيء من الفرونت، ثم أتعلم شيء من الباك و أطبقه و هكذا. قد تأخذ فكرة من الباك يومين لا مشكلة، المهم أن تعطي كل شيء حقه من الوقت.
  12. لا يوجد هكذا أمر، أي ببساطة الذكاء الصنعي ليس عبارة عن كود فقط. في حال كنت تقصد أنك تريد تطوير تطبيقات تستعمل الذكاء الصنعي فيمكنك اعتبار مكونات الذكاء الصنعي أمور جاهزة يمكنك الحصول عليها من أشخاص آخرين طوروها، أو من شخص آخر في الفريق الذي تعمل به، أي أنك تتعامل معها على أنها صناديق سوداء لا تعلم عنها شيء، تأخذ دخل و تعطيك خرج و لا تحتاج لمعرفة كيفية عملها، فقط ما الذي عليك إعطاءها و ما الذي يجب توقعها منها. و بالتالي تصبح كأي مهندس برمجيات عادي لا فرق في المتطلبات. أما في حال تريد كتابة الكود الخاص بفكرة معينة فيمكنك تعلم أي إطار عمل خاص بالذكاء مثل pytorch و لكنك لن تصبح قادراً على كتابة نماذج متطورة في حال لم تكن على إطلاع جيد بالذكاء الصنعي.
  13. لدي خبرة 4 سنين في الذكاء الصنعي و قمت بالعديد من المشاريع و لم أحتج إلى أي معلومة من معلومات قواعد البيانات التي أعرفها، طبعاً معلوماتي عن قواعد البيانات كانت بسبب بضعة مشاريع backend قمت بها. بشكل عام عند القيام بأي مشروع فإن هيكلية البيانات تكون محددة مباشرة من متطلبات المشروع، مثلاً في حال كنت تريد القيام بمشروع تحديد السيارات من صورة drone، فإنك ستقوم بإستعمال إحدى قواعد البيانات الشهيرة و التي قام فريق من المختصين بتطويرها، لن تقوم ببناءها من الصفر. حتى لو كنت تريد بناءها من الصفر فإن أغلب التطبيقات لا تحتاج إلى معرفة في قواعد البيانات، كل ما عليك معرفته هو كيفية جلب البيانات و معالجتها بشكل فعال، و هذا يندرج ضمن أساسيات علوم البيانات data sceince و ليس له علاقة بقواعد المعطيات. ستحتاج قواعد البيانات في حال عملت في مجال البيانات بشكل تخصصي، فهنالك قد تعمل مع شركات تريد بياناتها أن تبقى سرية و بالتالي تقوم بتخزينها ضمن قاعدة معطيات مشفرة، أو هنالك ارتباطات كبيرة بين البيانات مثل جداول المبيعات و المعلومات المختلفة للشركة. و لذلك أنصحك بعدم تشتيت نفسك، تعلم خوارزميات الذكاء الصنعي و الأفكار الخاصة به، و في المستقبل إذا احتجت أن تستعمل قواعد البيانات (قد لا تحتاج مثل ما حدث معي) عندها يمكنك تعلمها. حتى لو احتجتها ستحتاج أمور أساسية و بسيطة جداً منها.
  14. ما قمت بمشاركته يحتوي على واجهات أمامية أيضاً، يمكنك استعمالها و تغيير ال back end لوحدك. كما أن github يوجد عليه أيضاً ما تريد، يمكنك البحث ضمنه في حال كان هناك تطبيق محدد تريده. بالإضافة إلى ذلك يمكنك الإطلاع على المواقع التالية: Datta Able. Django Dashboard Material.
  15. هذا يعتمد على إطار العمل الذي تريد العمل به، و لكن بشكل عام يمكنك دائماً البحث في مستودعات الأكواد مثل GitHub حيث أنه هناك الكثير من المشاريع التعليمية بأي إطار عمل تريده. مثلاً من أجل Django يمكنك الإطلاع على هذا المستودع، فهو يحوي على قالب يساعدك على البداية بشكل سريع. من أجل laravel يمكنك الإطلاع على هذا المستودع. بشكل عام لا أنصحك بهذه الخطوة بشكل مباشر، حيث أنه من الضروري أن تقوم ببناء تطبيقات كثيرة من الصفر، فهناك الكثير من المعلومات التي يمكنك تعلمها في هذه الطريقة، هذه المعلومات تفيدك في معرفة كيفية عمل إطار العمل و بالتالي حل المشاكل بشكل أسرع.
  16. إن هذا لا يعد خطأً في التطبيق بشكل مباشر، حيث أنها الرسالة الطبيعية التي تظهر عندما يكون المستخدم مسجل و لكن ليس له القدرة على القيام بهذه العملية. يجب عليك تحديد هذا ضمن التطبيق الخاص بك، في الصنف CheckForAnyAbility، تحقق من هذا الصنف ستجد فيه المكان الذي يتم فيه رمي هذا الاستثناء الذي يسبب رسالة الخطأ الظاهرة، يمكنك فقط مسحه في حال كنت تريد لجميع المستخدمين المسجلين القدرة على القيام بهذه العملية.
  17. لا أعتقد أن ذلك ممكن. في تلك الحالة حاول إيجاد عمل حر، فهذا أفضل من لا شيء، يمكنك الإطلاع على المشاريع في مستقل حيث أنه يوجد الكثير مما يتعلق بالتقنيات التي تتقنها.
  18. إذا كنت تعتقد أنك أصبحت جيداً في هذه الأمور و قد قمت بعمل بعض المشاريع ذات المستوى المتوسط أو الكبير، فأفضل ما يمكنك فعله هو أن تقوم بمحاولة الحصول على وظيفة في شركة. صحيح أن العمل الحر تكسب منه مال أكثر و لكن العمل في شركة يعلمك كيفية العمل ضمن فريق و العمل على مشاريع كبيرة جداً من المستحيل على شخص واحد إنجازها و إنما يلزم فريق كامل. كما أن الوجود في شركة يجعلك على تواصل دائم مع أشخاص آخرين بنفس اهتماماتك و هذا قد يكسبك الكثير من المعلومات، حيث أنه غالباً ما يتم تبادل المعلومات في هذه الحالات. بالإضافة إلى أنه يوجد الكثير من الشروط ضمن الشركات على جودة الكود قد لا يتم الاهتمام بها في المشاريع الحرة، و ذلك ﻷنه لا تظهر فائدتها إلا في المشاريع العملاقة. كما أن وجود شخص خبير جداً (غالباً قائد الفريق الذي ستكون ضمنه) يوجهك هو أمر جيد و يختصر عليك الكثير من الوقت.
  19. ما عليك تعلمه بالإضافة إلى الفرونت ايند هو كيف تستعمل الذكاء الصنعي لتسريع عملك، هذا ما سيجعل مطور أفضل من آخر في المستقبل. يمكنك تشبيه ذلك بما حدث عندما تم إختراع الحاسوب، هل انتهت الوظائف الرتيبة الورقية التي كان يقوم بها الكثير من الناس؟ كلا، لقد تم استبدالها بطرق أفضل مؤتمتة و لكنها لا تزال تتضمن العنصر البشري، و في تلك الحقبة من كان يستطيع العمل على الحاسوب كانت له الأفضلية في الكثير من الأعمال. هنا نفس المبدأ، لتتوقع أنه خلال فترة ليست بطويلة سيصبح من يستطيع إستعمال هذه الأدوات بشكل فعال مطلوباً أكثر من الشخص الذي ما يزال يعتمد على طرق قديمة بطيئة. و لكن بالطبع عليك تعلم المجال قبل أن تتعلم كيف تؤتمته، فلا تستعجل الخطوات.
  20. بالطبع يجب التحقق أن العددان أوليان. يتم ذلك عن طريق المرور على كافة الأعداد من 1 إلى العدد نفسه و التأكد أنه لا يوجد قواسم إلا 1 و العدد نفسه ( العدد 1 لا يعتبر عدد أولي). في حالتك هذه يجب أن يكون المجموع زوجي، مما يفرض أن العددان فرديان، و بالتالي لا يمكن أن يكون أحدهما زوجي و الآخر فردي، حيث أنه لدينا: مجموع عددين زوجيين هو عدد زوجي. مجموع عددين فرديين هو عدد زوجي. مجموع عددين أحدهما فردي و الآخر زوجي هو عدد فردي. يمكنك الإعتماد على هذه المعلومات الإضافية لحل التمرين، من فضلك حاول حله بمفردك و في حال كنت تشك بخطأ يمكنك سؤالنا عنه.
  21. أنت تقوم بالتكرار 5 مرات، في كل مرة هو سيقوم بوضع ال timeout و الانتقال إلى التكرار التالي، و بالتالي يمكنك أن تتخيل أنك تضع timeout بمقدار 3 ثانية و لكن الكل يبدأ تقريبا في نفس الوقت. أي أنه لا ينتظر في التابع timeout و يوقف التنفيذ، فقط يضع ما تريد تنفيذه و يكمل تنفيذه. يمكنك القيام بما تريد عن طريق تشغيل تكرار كل مدة زمنية و إطفاءه بعد نهاية المدة، كما يلي: let interval = 3000; let totalInterval = 5 * interval; function startTimer() { let myTimer = setInterval(function f() { console.log('hi'); }, interval); setTimeout(function f() { clearInterval(myTimer); }, totalInterval); } startTimer();
  22. من المفيد أن يكون لديك خبرة مسبقة في تحليل البيانات و معالجتها قبل الدخول في مجال تعلم الآلة، و لكنه أمر غير ضروري، و ذلك لأن أغلب الكتب و الدورات الخاصة بتعلم الآلة تعلمك أيضاً كيفية تحليل البيانات بما يخدم هذا المجال. لذلك أنصحك في حال كان هدفك تعلم الآلة أن تبدأ به مباشرة، و خلال تعلمك له ستتعلم الكثير من تقنيات تحليل البيانات المفيدة في هذا المجال. من ناحية فرص العمل، فإن محلل البيانات مهامه محدودة (على عكس مهندس الذكاء الصنعي) و بالتالي الفرص ستكون أقل و تنافسية أكثر.
  23. إن document هو غرض يحوي كافة الأغراض الأخرى (من عناصر مرئية و غير مرئية) في صفحة الويب الخاصة بك. لذلك في حال أردنا الوصول إلى أي عنصر في صفحة الويب علينا الوصول باستعماله.
  24. يمكنك تحديد أي خاصية، حيث أن الشكل العام لهذه الطريقة هو: [attribute="value"] أيضاً يمكنك تطبيق عمليات أخرى غير المساواة، مثلاً الاحتواء، أي تكون الخاصية تحتوي ما نريد و ليس تماماً ما نريد، يمكن تطبيق ذلك كما يلي: [attribute~="value"]
×
×
  • أضف...