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

Kais Hasan

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

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

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

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

    26

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

  1. من فضلك هل يمكنك تجربة استعمال onChange بدلاً من onChangeText من أجل الدخل الخاص بال notice و إخباري بالنتيجة؟
  2. من فضلك هل يمكنك مشاركة ملف الكود كاملاً حتى يمكننا المساعدة بشكل أفضل؟
  3. من فضلك قم بمحاولة حل التمرين و ذكر ما الأخطاء التي تظهر معك، ﻷن إعطاء الحل لك مباشرة لن يفيدك بشيء و لن يساعدك على تطوير مهاراتك البرمجية.
  4. إنك تقوم بالطباعة قبل وضع قيمة لل notice، جرب وضع السطر 105 قبل السطر 103
  5. إن نظام JSON مختلف، حيث أنه يعتمد على مفهوم الأغراض، فأنت تقوم بكتابة الكثير من الأغراض التي لها خصائص، يمكنك التفكير بأن الخصائص تقابل الأعمدة لكنهما يختلفان طبعاً في طريقة الاستعلام. يجب أن يكون هناك خاصية معينة في الغرض مميزة، أي تقابل العمود المفتاحي و ذلك لكي تستطيع جلب الغرض المناسب. أبسط طريقة للتعامل مع JSON هي صنع ملف يحوي على مصفوفة من الأغراض و عند البحث يمكننا البحث بشكل خطي عن ما نريد، عن طريق مقارنة ما نريد مع الخصائص في كل غرض، طبعاً يوجد طرق معقدة أخرى و لكن يفضل أن تبدأ بالطرق البسيطة ثم تحاول تطوير معلوماتك. إن JSON نمثل فيه البيانات، و بالتالي العمليات المنطقية يجب إنجازها باستعمال Kotlin. بشكل عام يمكنك بناء التطبيق قبل البيانات، و لكن يجب عليك على الأقل تحديد الهيكلية الخاصة بقاعدة البيانات، أي الهيكلية للجداول و العلاقات بينها، أو للأغراض و العلاقات بينها، حيث أنك ستحتاج ذلك لكتابة كود التطبيق، و لكن يمكنك عدم وضع بيانات إلا أن ذلك لن يسمح لك باختبار الكود جيداً. الطريقة الأفضل في رأيي هي وضع بعض البيانات، أي عدد قليل جداً و لكن كاف لاختبار التطبيق. إنها فكرة جيدة، هناك الكثير من المستقلين ذوي الخبرة في هذا المجال، و العمل مع أحدهم قد يجعلك تستفيد من خبرتهم، إن المبلغ المناسب يختلف باختلاف مقدار العمل و صعوبته. بشكل عام يمكنك الذهاب إلى مستقل و تصفح المشاريع لتأخذ فكرة عن المبالغ التي تدفع، و بعدها يمكنك وضع عرض و تحديد مجال للسعر، و المستقلين سوف يقومون بوضع السعر المناسب لهم.
  6. سأضيف على ما ذكره المدرب في التعليق السابق بأنه من الجيد معرفة المعلومات الموجودة في علوم الحاسوب و ذلك ﻷنه في بعض الحالات تواجهك أخطاء معينة يكون سببها بعض الأمور التي ليس لها علاقة مباشرة ب javascript أو php و إنما بالحاسوب نفسه. بالطبع دورتا ال php و ال javascript سيجهزانك بالمفاهيم اللازمة و سيعطيانك خبرة واسعة و لكن لا يمكن ﻷي دورة في العالم أن تذكر لك كافة الأخطاء التي يمكن أن تحصل معك، و لذلك خبرتك بالمفاهيم الحاسوبية التي توفرها دورة علوم الحاسوب سوف تزيد من قدرتك على حل المشاكل التي تعترض طريقك و حتى أنها ستسرع من فهمك للكثير من الأمور التطبيقية.
  7. هندسة البرمجيات تركز على المهارات العملية التي تسمح لك بتصميم و بناء الأنظمة البرمجية بشكل صحيح و بكفاءة و وثوقية، و اختبار تلك الأنظمة. علوم الحاسوب هو مصطلح أعم يطلق بشكل أساسي على كافة الأمور النظرية التي تتعلق بالحاسوب، مثل الخوارزميات و بنى المعطيات و قواعد المعطيات و تعلم الآلة و أمن المعلومات. هندسة الحاسوب هي فرع من الهندسة الالكترونية و هي تجمع العديد من فروع علوم الحاسب (أي هي جزء منها) اللازمة لتطوير و بناء العتاد الحاسوبي و البرمجيات.
  8. بالطبع، حيث أن مفهوم الجلسات و الكعكات مهم جداً للقيام بالكثير من الأمور ضمن المواقع، خاصة ما ندعوه personalization أي جعل الموقع مخصص أكثر لمستخدم ما. أيضاً ضبط الصلاحيات من أحد الأمور التي ستتعلمها. بشكل عام هذه الدورة ستعلمك كافة الأمور الضرورية و اللازمة لتبدأ عملك كمطور لتطبيقات الويب باستعمال php و سيصبح لديك مشاريع توثق ذلك.
  9. بشكل عام الشهادات التي تأخذها من أي منصة هي عبارة عن اعتراف من قبل المنصة بخبرتك في مجال معين، بالتالي ستفيدك بالطبع و لكن هذا يعتمد على الشركة، حيث أن بعض الشركات يكون لها نظام امتحانات و مقابلات خاص بها، للتأكد من خبرتك. هناك فرق آخر أريد إضافته، إن من يحصل على شهادة من جامعة يستطيع الإكمال في الدراسات العليا، أي مثلاً يكمل ليأخذ درجة الماستر، و من ثم phd، و هذا ما لا توفره أي منصة لك.
  10. بشكل عام سعر ال 1GB تخزين في قاعدة البيانات أعلى من سعر ال 1GB تخزين في وسائط تخزين سحابية تقدمها شركات مثل أمازون و غوغل و ibm. لذلك من الأفضل لك اتباع فكرة تخزين مسار الملف فقط في قاعدة البيانات و تخزين الملفات في خدمة مخصصة لذلك مثل الخدمات التي ذكرتها سابقاً. الحجم يعتمد على الملفات نفسها، من الصعب تقدير ذلك، و لكن بكل الأحوال أغلب خدمات التخزين تحاسب على 1GB ، أي نظرياً عندك مساحة تخزين لا نهائية و كل ما استهلكت 1GB إضافية تدفع المزيد، نسمي مثل هذه الخدمات pay as you go، و هي متوفرة في الشركات التي سبق و ذكرتها.
  11. مرحباً علي، للقيام بذلك علينا استعمال الحشو، أي نقوم بإنشاء جدول وهمي، عن طريق الحشو بفراغات. في البداية علينا تحديد ما هو العرض الأقل، ثم نقوم بالحشو على أساس هذا العرض باستعمال التابع PadRight و الذي نطبقه على سلسلة نصية و يقوم بالحشو إلى اليمين، بما يلزم لجعل طول السلسلة النصية مساو للرقم الذي مررناه له. أي مثلاً في حال لدي سلسلة نصية طولها 8 و قمت بتمرير 10 لهذا التابع فسيقوم بإضافة فراغين إلى اليمين. بالتالي يمكننا تحويل النمط TimeSpan إلى سلسلة نصية و تطبيق ما سبق، سأقوم بشرح الفكرة على مثال، و سأفترض أننا نريد تطبيق نفس العرض من أجل كل الأعمدة، و لكن من السهل تعديل الطريقة من أجل عرض مخصص لكل عمود. الكود كما يلي: using System; public class Test { public static void Main() { TimeSpan[,] timeTable = new TimeSpan[5, 3]; int minWidth = 10; for (int i = 0 ; i < 5 ; ++i){ for(int j = 0 ; j < 3 ; ++j){ string t = timeTable[i, j].ToString(); t = t.PadRight(minWidth); Console.Write(t); } Console.WriteLine(); } } } هنا في البداية قمت بإنشاء مصفوفة فارغة من النمط TimeSpan (فقط لأجل المثال، أنت عليك استعمال المصفوفة الخاصة بك). بعدها قمت بتحديد العرض الأصغر على أنه 10 ( عليك تجريب قيم مختلفة و اختيار القيمة التي تناسبك). في الخطوة التالية نقوم بالمرور على عناصر المصفوفة سطراً سطراً، في كل مرة نقوم بتحويل العنصر إلى سلسلة نصية عن طريق الدالة ToString ثم نقوم بإضافة حشو إلى اليمين عن طريق الدالة PadRight، لاحظ أن الدالة لا تعدل على السلسلة النصية الأصلية، بل تعيد سلسلة جديدة و لذلك كان علينا إسناد ذلك إلى t. بعدها نقوم بكتابة القيمة، لاحظ يجب أن نستعمل Write و ليس WriteLine ﻷننا ما زلنا على نفس السطر. في نهاية كل تكرار من الحلقة الخارجية علينا النزول سطر، و ذلك ﻷننا انتهينا من سطر من المصفوفة. يكون الخرج كما يلي: تحياتي لك.
  12. يمكنك القيام باستدعاء دالة عن طريق call، أي لنفترض اسم الدالة هو f يمكن استدعاءها كما يلي: call f
  13. أفضل استعمال مواقع التعديل على استعمال تطبيق محدد، و ذلك ﻷنه يمكنك فتح هذه المواقع و العمل من أي جهاز سواء لابتوب أو هاتف محمول، كما أنها غالباً أسرع و أسهل في الاستعمال. شخصياً أقوم باستعمال diagrams حيث أنه يوفر كافة الخيارات التي أحتاجها و يوفر تصدير المخطط بصيغ متعددة بالإضافة إلى الكثير من الميزات الأخرى، و هو سهل الاستعمال.
  14. لا يوجد بشكل عام شيء أفضل من شيء في عالم البرمجة و تطوير التطبيقات، لو وجد ذلك لما كان لدينا العديد من الخيارات. إن لكل قاعدة بيانات ميزات و مساوئ و عليك الإطلاع عليها و أنت فقط من يستطيع اتخاذ القرار حول أي واحدة ستقوم باستعمالها، و ذلك ﻷنك من سيقوم ببناء التطبيق و تعلم ماذا تريد و ما الأولويات لديك. في بعض التطبيقات قد تجد من الأفضل استعمال النمط NoSql و في تطبيق آخر قد تجد ال Sql أفضل. نصيحتي في حال كانت هذه أول تجربة لك ألا تفكر كثيراً و تقوم بتجربة أي قاعدة من القواعد المشهورة مثل الذي ذكرها المدرب عمر في التعليق السابق، و بعد أن يصبح لديك بعض الخبرة يمكنك محاولة تجريب قاعدة أخرى و أن تقوم بالإطلاع على الميزات و المساوئ.
  15. يمكنك بناء أي شيء بواسطة django و لكن بالطبع لو أن هناك إطار عمل واحد لكل شيء و كان الأفضل فلا داعي لوجود البقية، من هذا المنطلق فإن هناك بعض المواقع التي قد تجد فيها أن django أسهل بكثير. في حال كان تطبيقك بسيط جداً فقد تجد من الأسهل استعمال مكاتب أو أطر عمل مصغرة مثل Flask فهي أسهل و أسرع في حال كان تطبيقك صغير، و لكن هذا لا يعني أنك لا تستطيع بناءه بواسطة django، و إن هذا يعتمد على خبرتك. أفضل طريقة لترى إمكانيات إطار عمل هو أن ترى بعض المشاريع التي تم بناءها باستعمال هذا الإطار، من أجل django بعض أشهر المشاريع و التطبيقات هي: Instagram Spotify Pinterest Bitbucket National Geographic YouTube Google Search Engine يمكنك الذهاب إلى هذه المواقع و رؤية ما قاموا به لتعرف ما يمكنك عمله بواسطة django. من ناحية تعلم أكثر من إطار عمل فهذا جيد طبعاً، حيث أن ذلك يسمح لك باختيار أفضل إطار عمل بالنسبة للمشروع الذي ستقوم ببناءه، و لكن بالطبع يمكنك بناء أي موقع ولو أنك لا تعلم إلا إطار عمل واحد، أي أن الأمر يتعلق بالأداء، و لذلك ففي البداية يفضل أن تبقى على إطار عمل واحد حتى تتقنه ثم يمكنك تعلم إطار آخر.
  16. في دجانغو هناك عدة أنواع من الوراثة، حيث أن ال model يختلف عن الصف العادي بأنه يمثل جدول في قاعدة البيانات، بالتالي هناك عدة خيارات لدينا. الوراثة المجردة في حال أردنا كتابة صف مشترك و لكن لا نريد إنشاء جدول لذلك الصف، أي نقوم بكتابته لوضع صفات مشتركة و إضافتها إلى صفوف الأبناء (و بالتالي إلى الجدول الخاص بالابن في حال كان لديه واحد). أي مثلاً في حالتك قد لا تريدين وجود جدول خاص للصف Center فيمكنك إضافة ما يلي إليه: class Center(models.Model): # الكود الخاص بك # كيفية تحقيق ما سبق و شرحته class Meta: abstract = True الوراثة متعددة الجداول في حال كان يجب للصف الأب أن يكون له جدول خاص به فيمكننا كتابة وراثة عادية للصفوف في بايثون و هذا سيجعل دجانغو ينشئ جدول لكل صف. وراثة الوسيط النمط الثالث يدعى الوسيط proxy حيث يمكن إنشاء صف ابن يرث صف أب، بحيث يكون للصف الأب جدول بينما لا يكون للصف الابن جدول، و هنا دور الابن مجرد إضافة طرائق معينة للتعامل مع الجدول الذي يملكه الصف الأب. أي الابن مجرد وسيط يمكن عن طريق تنفيذ تعليمات تنفذ على الجدول الخاص بالصف الأب. نقوم عادة باستعمال هذا النوع من الوراثة في حال كنا مهتمين بإضافة طرائق خاصة للتعامل مع البيانات إلى صف ما، بحيث تكون هذه الطرق معرفة فقط في الصف الابن ( أي لا نريدها أن تكون متوفرة لمن يتعامل مع الصف الأب مباشرة). مثال على ذلك: from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) class MyPerson(Person): class Meta: proxy = True def do_something(self): # ... pass هنا من يتعامل مع الصف Person مباشرة لن يستطيع استعمال الدالة do_something بينما من يتعامل مع الصف MyPerson يستطيع، و كلاهما يتعاملان مع نفس الجدول، و الذي هو جدول مرتبط بالصف الأب Person. في هذا النمط يمكن فقط إضافة توابع للتعامل مع البيانات في الجدول الأب و ليس من المسموح إضافة صفات إضافية، حيث أن ذلك ممكن فقط في حال كان للابن جدول خاص به، و هنا الأمر ليس كذلك.
  17. ما هي الأخطاء التي تظهر معك؟ لقد قمت بتجربته و هو يعمل بشكل صحيح. لكن هناك العديد من النقاط بخصوص الكود الخاص بك، و هي كما يلي: إن السؤال الذي تحاول حله يقول لك اطبع النتيجة فقط في حال كان جواب المستخدم خاطئ، بينما أنت تقوم بطباعة الجواب الصحيح دائماً. لماذا تقوم بتهيئة المتغيرين num1, num2 في بداية الكود؟ لا داعي لذلك فأنت تقوم بذلك داخل الحلقات. السؤال الذي تحاول حله لا يقول لك أن تطلب من المستخدم في حال كان يرغب بالاستمرار أم لا، يجب التكرار 5 مرات دائماً. أنت تقوم بتكرار نفس العملية 5 مرات، لكن السؤال يطلب منك كتابة كود يقوم بالتنفيذ 5 مرات في كل مرة يطلب من المستخدم العملية ثم يولد الأعداد العشوائية، أي في كل مرة نطلب العملية، أنت قمت باختيار العملية في البداية ثم قمت بالتكرار 5 مرات، و هذا ليس المطلوب. بغض النظر عن النقاط السابقة، أعتقد أن من كتب الكود السابق يستطيع تعديل النقاط التي ذكرتها بسهولة، بقليل من الجهد طبعاً.
  18. بشكل عام يمكنك بالطبع كتابة كود بواسطة html فقط، مثلاً فورم معين، أو موقع شخصي. و لكن سيبقى جامداً و لا أحد سيحب التعامل معه. في حال كنت تتعلم html فقط، من الجيد كتابة هكذا كود، أي قم مثلاً بكتابة فورم معين، أو قم بإنشاء موقع يحوي على معلوماتك و خبراتك، و لكن بعدها يجب عليك الانتقال لتعلم ال css و ذلك لتضفي بعض الجمالية على الموقع، من السهل تعلم القليل من css و عندها يمكنك صنع موقع شخصي جيد جداً، و تجريب الكثير من التنسيقات. رغم كل هذا سيبقى عليك تعلم javascript لإضافة بعض الديناميكية على موقعك، حيث أن استعمال css, html فقط يجعل الموقع ستاتيكي غير قابل للتعديل عليه من قبل المستخدم أو التفاعل معه بطريقة جيدة.
  19. هل تقوم بإيقاف الفيديو قبل النزول و الإعجاب بتعليق ما؟ إن الفيديو الخاص بالدرس يأخذ بعض الوقت ليتم تحميله و ذلك حسب سرعة النت لديك، و عندما يتم تحميله ينتقل التركيز focus في الصفحة إليه. قم بالإنتظار حتى يتم تحميل القالب الخاص بالفيديو و اضغط على إيقاف و ذلك سيحل المشكلة التي تحصل معك.
  20. كما ذكر المدرب معاذ 14 ساعة في الأسبوع هو وقت ليس بالقليل، و عند تقسيمه بشكل جيد يمكنك التقدم بشكل مستمر في رحلة التعلم الخاصة بك. أريد أن أضيف بعض النقاط التي ساعدتني كثيراً على تحديد متى يجب علي تعلم المزيد و متى يجب علي تطبيق ما تعلمته، أتمنى أن تساعدك أيضاً. لقد كنت أعتبر تعلم المزيد هو العملية الأساسية و التطبيق هو حدث إضافي مساعد لها (و لكن ضروري طبعاً)، فكنت أركز على التعلم و عندما أشعر بأنني لم أعد أستطع الربط في ذهني بين كافة الأفكار التي تعلمتها (بسبب كثرتها غالباً) أذهب و أقوم بتطبيق ما تعلمته، بالإضافة إلى محاولة التعديل لاختبار ما سيحدث في حال قمت بإزالة تعليمة ما أو تنسيق معين الخ.. وجدت هذه الطريقة مفيدة لي، حيث أن ذلك أفضل من وضع وقت ثابت، فقد تكون تتعلم بعض الأمور التي تعتبرها سهلة نسبياً، و بالتالي قد تجد أنه يمكنك تعلم المزيد قبل الذهاب إلى التطبيق العملي و ذلك ﻷنه من السهل الربط بين الأمور التي تعلمتها أو ﻷنها قريبة من بعضها البعض. بينما قد تكون تتعلم فكرة صعبة و لو أنه شرحها لا يأخذ أكثر من نصف ساعة مثلاً، و بالتالي قد ترغب في وضع وقت أكثر في التطبيق العملي و التجريب قبل الانتقال إلى فكرة أخرى.
  21. المشكلة أنك تقوم بوضع ملفات ال javascript الخاصة بال bootstrap في ال بلوك scripts و بالتالي عندما تعيد تعريف ذلك في ملف ال html الآخر فيتم استبدالهم ما تقوم بتعريفه. قم بكتابة الملفات التي تريدها في كل شيء خارج ال بلوك، أي مثلاً كما يلي: <body> {% include 'navbar.html' %} <div class="container mt-3 mb-3"> {% block content %} {% endblock content %} </div> <!-- Bootstrap js --> <script src="{% static 'js/jquery.js' %}"></script> <script src="{% static 'js/bootstrap.js'%}"></script> {% block scripts %} {% endblock scripts %} </body>
  22. إن هذا الأمر عادي و يحدث مع الجميع عند بداية تعلم البرمجة. يجب عليك حل الكثير من التمارين حتى تصبح جيداً في ذلك، أي تقوم بمحاولة حل تمرين لوحدك، إن لم تنجح في ذلك يمكنك السؤال هنا مع ذكر ما حاولت القيام به و يمكننا هنا مساعدتك خطوة بخطوة بدون إعطاءك الحل مباشرة مما يسمح لك بكسب المهارات بشكل أسرع. هناك الكثير من المواقع التي تحوي على تمارين برمجية بسيطة، منها hackerRank و hackerEarth.
  23. تم إضافة مسارين هما: تطوير تطبيقات أودو Odoo أساسيات تحليل البيانات و هما آخر مسارين بالتالي يجب عليك إكمال الدورة و لا داعي لإعادتها من البداية.
  24. جيد جداً ما قمت به، و لكن بما أن هذا الكود موجود على stackoverflow كما هو، فسأقوم بشرح تفاصيله بشكل مختصر لك باعتبار أنك فهمته، و سأقوم بشرح الفكرة التي يمكن تطبيقها لكي تستطيع حل مسألتك، و سيكون عليك كتابة الكود بنفسك، و في حال حدثت أخطاء إضافية فيمكنك السؤال دائماً. إنك في الكود السابق تحاكي العملية من أجل تكرار واحد، بحيث تقوم بإدخال العملية أولاً و ذلك عن طريق التابع input و من ثم تقوم بإدخال الأعداد أيضاً عن طريق التابع input و لكن بما أن الدخل يكون سلسلة نصية نقوم بتحويله من أجل الأرقام باستعمال int()، ثم نقوم بالقيام بالعملية المناسبة. الآن هذا ليس ما هو مطلوب تماماً، حيث أن الأعداد يجب أن تولد بشكل عشوائي و ليس المستخدم من يجب عليه إدخالها، يمكنك الإطلاع على الدالة random.randint و محاولة استعمالها في ذلك. بعد ذلك يمكنك القيام بالعمليات كما هي في الكود الذي أرفقته و ذلك لحساب القيمة الصحيحة، و لكن ليس عليك طباعتها مباشرة، حيث عليك الطلب من المستخدم إدخال النتيجة و مقارنتها بالنتيجة التي قمت بحسابها و طباعة فيما إذا كان حساب المستخدم صحيح أم خاطئ مع طباعة النتيجة في حال كان خاطئ، يمكنك القيام بذلك بشكل بسيط باستعمال العبارات الشرطية في بايثون و تعليمات الطباعة. لتكرار العملية 5 مرات يمكنك استعمال الحلقة for مع range، حاول البحث عن ذلك، يجب أن تعلم كيف تقوم بذلك في حال كنت تعلم القليل حول بايثون. تبقى أمر واحد و هو إظهار رسالة خطأ في حال أدخل المستخدم عملية خاطئة، سأترك هذا لك لتفكر به، حاول القيام بالأمور السابقة بداية ثم محاولة القيام بالتحقق من العملية.
  25. من فضلك قم بذكر ما الذي حاولت القيام به و ما الأخطاء التي حدثت معك، يمكننا مساعدتك بحل أخطاء معينة و لكن إعطاءك الجواب على سؤالك فوراً لن يعود عليك بأي فائدة و لن تتطور مهاراتك البرمجية في حال قمنا بذلك.
×
×
  • أضف...