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

Kais Hasan

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

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

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

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

    24

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

  1. في حال كان لا يهمك ترتيب الأسطر في هذا الملف، فهناك طريقة سريعة جداً، و هي أسرع ما يمكن القيام به. نقوم في البداية بجلب كافة الأسطر و وضعها في list و نقوم بترتيب ال list. ثم يمكننا المرور على list و مقارنة كل عنصر بالذي يليه، في حال كان لا يساويه نقوم بإضافته إلى list جديدة ستكون هي الإجابة النهائية، ثم يمكن كتابة هذه ال list الجديدة في الملف. هذه الطريقة هي الأفضل في حال كان لديك عدد أسطر كبير، و لكن في حال كان عدد الأسطر صغير لا فرق بين الطرق بشكل عام.
  2. إنك تقوم بتطبيق ال map على مصفوفة من الملاحظات، بالتالي هناك حلان: أن تقوم من البداية بإضافة الملاحظات الجديدة في بداية المصفوفة بدلاً من نهايتها. أن نقوم بعكس المصفوفة قبل تطبيق map عليها. الطريقة الأولى سيئة من ناحية أن الإضافة في بداية المصفوفة يكون له تعقيد كبير، حيث أنه في كل مرة يجب إزاحة كافة العناصر، و هذا سيؤثر على الأداء عند وجود عدد كبير من الملاحظات، لكن أعتقد في مثل هكذا تطبيق بشكل عام لا يكون عدد الملاحظات كبيراً بشكل كاف حتى يؤثر على الأداء. الطريقة الثانية سيئة من ناحية أنه عليك إما صنع نسخة من المصفوفة قبل عكسها، أو عكس المصفوفة الأصلية و من ثم إعادتها بعد ذلك.
  3. إنك تقوم بتحديد الأحرف 14 و 15 و هما الفراغ و w، فلذلك لا يظهر لك شيء. لاحظ الفراغ يظهر في الطباعة، حيث أنه عند التدقيق فال w مزاحة بمقدار فراغ، قارن بينها و بين ال undefined التي طبعت فوقها و ستلاحظ ذلك، أيضاً وضوحاً أي حرفين لن يكونا متساويين في القيمة مع حرف واحد، أنت تقوم باختيار حرفين و تقارنهما مع حرف واحد فدائماً النتيجة false.
  4. كبداية يمكنك الإطلاع على مقالات حسوب، فهي تحتوي على أمور إضافية قد تكون جديدة بالنسبة لك. بعد ذلك، في رأيي أفضل طريقة لاحتراف أي شيء هي القيام ببناء مشاريع، و في كل مرة حاول تعقيد المتطلبات، قد لا تعرف كل شيء و تضطر للبحث أو حتى السؤال و هذا ما يجعلك تتعلم و تتقدم. بالإضافة إلى الخطوة السابقة قد تجد من المفيد قراءة كتاب ما، الكتب دائماً تحتوي معلومات جيدة. و هناك مواقع تقدم مسائل في ال sql، لاختبار قدرتك على كتابة ال query المناسبة من أجل متطلبات معقدة، هناك موقع hackerrank مثلاً، لقد قمت بالتدرب عليه عندما تعلمت ال sql و هو يقدم مسائل جيدة و بعضها ليس بالسهل، مما يدفعك لتعلم ما ينقصك.
  5. من فضلك هل يمكنك تجربة استعمال onChange بدلاً من onChangeText من أجل الدخل الخاص بال notice و إخباري بالنتيجة؟
  6. من فضلك هل يمكنك مشاركة ملف الكود كاملاً حتى يمكننا المساعدة بشكل أفضل؟
  7. من فضلك قم بمحاولة حل التمرين و ذكر ما الأخطاء التي تظهر معك، ﻷن إعطاء الحل لك مباشرة لن يفيدك بشيء و لن يساعدك على تطوير مهاراتك البرمجية.
  8. إنك تقوم بالطباعة قبل وضع قيمة لل notice، جرب وضع السطر 105 قبل السطر 103
  9. إن نظام JSON مختلف، حيث أنه يعتمد على مفهوم الأغراض، فأنت تقوم بكتابة الكثير من الأغراض التي لها خصائص، يمكنك التفكير بأن الخصائص تقابل الأعمدة لكنهما يختلفان طبعاً في طريقة الاستعلام. يجب أن يكون هناك خاصية معينة في الغرض مميزة، أي تقابل العمود المفتاحي و ذلك لكي تستطيع جلب الغرض المناسب. أبسط طريقة للتعامل مع JSON هي صنع ملف يحوي على مصفوفة من الأغراض و عند البحث يمكننا البحث بشكل خطي عن ما نريد، عن طريق مقارنة ما نريد مع الخصائص في كل غرض، طبعاً يوجد طرق معقدة أخرى و لكن يفضل أن تبدأ بالطرق البسيطة ثم تحاول تطوير معلوماتك. إن JSON نمثل فيه البيانات، و بالتالي العمليات المنطقية يجب إنجازها باستعمال Kotlin. بشكل عام يمكنك بناء التطبيق قبل البيانات، و لكن يجب عليك على الأقل تحديد الهيكلية الخاصة بقاعدة البيانات، أي الهيكلية للجداول و العلاقات بينها، أو للأغراض و العلاقات بينها، حيث أنك ستحتاج ذلك لكتابة كود التطبيق، و لكن يمكنك عدم وضع بيانات إلا أن ذلك لن يسمح لك باختبار الكود جيداً. الطريقة الأفضل في رأيي هي وضع بعض البيانات، أي عدد قليل جداً و لكن كاف لاختبار التطبيق. إنها فكرة جيدة، هناك الكثير من المستقلين ذوي الخبرة في هذا المجال، و العمل مع أحدهم قد يجعلك تستفيد من خبرتهم، إن المبلغ المناسب يختلف باختلاف مقدار العمل و صعوبته. بشكل عام يمكنك الذهاب إلى مستقل و تصفح المشاريع لتأخذ فكرة عن المبالغ التي تدفع، و بعدها يمكنك وضع عرض و تحديد مجال للسعر، و المستقلين سوف يقومون بوضع السعر المناسب لهم.
  10. سأضيف على ما ذكره المدرب في التعليق السابق بأنه من الجيد معرفة المعلومات الموجودة في علوم الحاسوب و ذلك ﻷنه في بعض الحالات تواجهك أخطاء معينة يكون سببها بعض الأمور التي ليس لها علاقة مباشرة ب javascript أو php و إنما بالحاسوب نفسه. بالطبع دورتا ال php و ال javascript سيجهزانك بالمفاهيم اللازمة و سيعطيانك خبرة واسعة و لكن لا يمكن ﻷي دورة في العالم أن تذكر لك كافة الأخطاء التي يمكن أن تحصل معك، و لذلك خبرتك بالمفاهيم الحاسوبية التي توفرها دورة علوم الحاسوب سوف تزيد من قدرتك على حل المشاكل التي تعترض طريقك و حتى أنها ستسرع من فهمك للكثير من الأمور التطبيقية.
  11. هندسة البرمجيات تركز على المهارات العملية التي تسمح لك بتصميم و بناء الأنظمة البرمجية بشكل صحيح و بكفاءة و وثوقية، و اختبار تلك الأنظمة. علوم الحاسوب هو مصطلح أعم يطلق بشكل أساسي على كافة الأمور النظرية التي تتعلق بالحاسوب، مثل الخوارزميات و بنى المعطيات و قواعد المعطيات و تعلم الآلة و أمن المعلومات. هندسة الحاسوب هي فرع من الهندسة الالكترونية و هي تجمع العديد من فروع علوم الحاسب (أي هي جزء منها) اللازمة لتطوير و بناء العتاد الحاسوبي و البرمجيات.
  12. بالطبع، حيث أن مفهوم الجلسات و الكعكات مهم جداً للقيام بالكثير من الأمور ضمن المواقع، خاصة ما ندعوه personalization أي جعل الموقع مخصص أكثر لمستخدم ما. أيضاً ضبط الصلاحيات من أحد الأمور التي ستتعلمها. بشكل عام هذه الدورة ستعلمك كافة الأمور الضرورية و اللازمة لتبدأ عملك كمطور لتطبيقات الويب باستعمال php و سيصبح لديك مشاريع توثق ذلك.
  13. بشكل عام الشهادات التي تأخذها من أي منصة هي عبارة عن اعتراف من قبل المنصة بخبرتك في مجال معين، بالتالي ستفيدك بالطبع و لكن هذا يعتمد على الشركة، حيث أن بعض الشركات يكون لها نظام امتحانات و مقابلات خاص بها، للتأكد من خبرتك. هناك فرق آخر أريد إضافته، إن من يحصل على شهادة من جامعة يستطيع الإكمال في الدراسات العليا، أي مثلاً يكمل ليأخذ درجة الماستر، و من ثم phd، و هذا ما لا توفره أي منصة لك.
  14. بشكل عام سعر ال 1GB تخزين في قاعدة البيانات أعلى من سعر ال 1GB تخزين في وسائط تخزين سحابية تقدمها شركات مثل أمازون و غوغل و ibm. لذلك من الأفضل لك اتباع فكرة تخزين مسار الملف فقط في قاعدة البيانات و تخزين الملفات في خدمة مخصصة لذلك مثل الخدمات التي ذكرتها سابقاً. الحجم يعتمد على الملفات نفسها، من الصعب تقدير ذلك، و لكن بكل الأحوال أغلب خدمات التخزين تحاسب على 1GB ، أي نظرياً عندك مساحة تخزين لا نهائية و كل ما استهلكت 1GB إضافية تدفع المزيد، نسمي مثل هذه الخدمات pay as you go، و هي متوفرة في الشركات التي سبق و ذكرتها.
  15. مرحباً علي، للقيام بذلك علينا استعمال الحشو، أي نقوم بإنشاء جدول وهمي، عن طريق الحشو بفراغات. في البداية علينا تحديد ما هو العرض الأقل، ثم نقوم بالحشو على أساس هذا العرض باستعمال التابع 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 ﻷننا ما زلنا على نفس السطر. في نهاية كل تكرار من الحلقة الخارجية علينا النزول سطر، و ذلك ﻷننا انتهينا من سطر من المصفوفة. يكون الخرج كما يلي: تحياتي لك.
  16. يمكنك القيام باستدعاء دالة عن طريق call، أي لنفترض اسم الدالة هو f يمكن استدعاءها كما يلي: call f
  17. أفضل استعمال مواقع التعديل على استعمال تطبيق محدد، و ذلك ﻷنه يمكنك فتح هذه المواقع و العمل من أي جهاز سواء لابتوب أو هاتف محمول، كما أنها غالباً أسرع و أسهل في الاستعمال. شخصياً أقوم باستعمال diagrams حيث أنه يوفر كافة الخيارات التي أحتاجها و يوفر تصدير المخطط بصيغ متعددة بالإضافة إلى الكثير من الميزات الأخرى، و هو سهل الاستعمال.
  18. لا يوجد بشكل عام شيء أفضل من شيء في عالم البرمجة و تطوير التطبيقات، لو وجد ذلك لما كان لدينا العديد من الخيارات. إن لكل قاعدة بيانات ميزات و مساوئ و عليك الإطلاع عليها و أنت فقط من يستطيع اتخاذ القرار حول أي واحدة ستقوم باستعمالها، و ذلك ﻷنك من سيقوم ببناء التطبيق و تعلم ماذا تريد و ما الأولويات لديك. في بعض التطبيقات قد تجد من الأفضل استعمال النمط NoSql و في تطبيق آخر قد تجد ال Sql أفضل. نصيحتي في حال كانت هذه أول تجربة لك ألا تفكر كثيراً و تقوم بتجربة أي قاعدة من القواعد المشهورة مثل الذي ذكرها المدرب عمر في التعليق السابق، و بعد أن يصبح لديك بعض الخبرة يمكنك محاولة تجريب قاعدة أخرى و أن تقوم بالإطلاع على الميزات و المساوئ.
  19. يمكنك بناء أي شيء بواسطة django و لكن بالطبع لو أن هناك إطار عمل واحد لكل شيء و كان الأفضل فلا داعي لوجود البقية، من هذا المنطلق فإن هناك بعض المواقع التي قد تجد فيها أن django أسهل بكثير. في حال كان تطبيقك بسيط جداً فقد تجد من الأسهل استعمال مكاتب أو أطر عمل مصغرة مثل Flask فهي أسهل و أسرع في حال كان تطبيقك صغير، و لكن هذا لا يعني أنك لا تستطيع بناءه بواسطة django، و إن هذا يعتمد على خبرتك. أفضل طريقة لترى إمكانيات إطار عمل هو أن ترى بعض المشاريع التي تم بناءها باستعمال هذا الإطار، من أجل django بعض أشهر المشاريع و التطبيقات هي: Instagram Spotify Pinterest Bitbucket National Geographic YouTube Google Search Engine يمكنك الذهاب إلى هذه المواقع و رؤية ما قاموا به لتعرف ما يمكنك عمله بواسطة django. من ناحية تعلم أكثر من إطار عمل فهذا جيد طبعاً، حيث أن ذلك يسمح لك باختيار أفضل إطار عمل بالنسبة للمشروع الذي ستقوم ببناءه، و لكن بالطبع يمكنك بناء أي موقع ولو أنك لا تعلم إلا إطار عمل واحد، أي أن الأمر يتعلق بالأداء، و لذلك ففي البداية يفضل أن تبقى على إطار عمل واحد حتى تتقنه ثم يمكنك تعلم إطار آخر.
  20. في دجانغو هناك عدة أنواع من الوراثة، حيث أن ال 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. في هذا النمط يمكن فقط إضافة توابع للتعامل مع البيانات في الجدول الأب و ليس من المسموح إضافة صفات إضافية، حيث أن ذلك ممكن فقط في حال كان للابن جدول خاص به، و هنا الأمر ليس كذلك.
  21. ما هي الأخطاء التي تظهر معك؟ لقد قمت بتجربته و هو يعمل بشكل صحيح. لكن هناك العديد من النقاط بخصوص الكود الخاص بك، و هي كما يلي: إن السؤال الذي تحاول حله يقول لك اطبع النتيجة فقط في حال كان جواب المستخدم خاطئ، بينما أنت تقوم بطباعة الجواب الصحيح دائماً. لماذا تقوم بتهيئة المتغيرين num1, num2 في بداية الكود؟ لا داعي لذلك فأنت تقوم بذلك داخل الحلقات. السؤال الذي تحاول حله لا يقول لك أن تطلب من المستخدم في حال كان يرغب بالاستمرار أم لا، يجب التكرار 5 مرات دائماً. أنت تقوم بتكرار نفس العملية 5 مرات، لكن السؤال يطلب منك كتابة كود يقوم بالتنفيذ 5 مرات في كل مرة يطلب من المستخدم العملية ثم يولد الأعداد العشوائية، أي في كل مرة نطلب العملية، أنت قمت باختيار العملية في البداية ثم قمت بالتكرار 5 مرات، و هذا ليس المطلوب. بغض النظر عن النقاط السابقة، أعتقد أن من كتب الكود السابق يستطيع تعديل النقاط التي ذكرتها بسهولة، بقليل من الجهد طبعاً.
  22. بشكل عام يمكنك بالطبع كتابة كود بواسطة html فقط، مثلاً فورم معين، أو موقع شخصي. و لكن سيبقى جامداً و لا أحد سيحب التعامل معه. في حال كنت تتعلم html فقط، من الجيد كتابة هكذا كود، أي قم مثلاً بكتابة فورم معين، أو قم بإنشاء موقع يحوي على معلوماتك و خبراتك، و لكن بعدها يجب عليك الانتقال لتعلم ال css و ذلك لتضفي بعض الجمالية على الموقع، من السهل تعلم القليل من css و عندها يمكنك صنع موقع شخصي جيد جداً، و تجريب الكثير من التنسيقات. رغم كل هذا سيبقى عليك تعلم javascript لإضافة بعض الديناميكية على موقعك، حيث أن استعمال css, html فقط يجعل الموقع ستاتيكي غير قابل للتعديل عليه من قبل المستخدم أو التفاعل معه بطريقة جيدة.
  23. هل تقوم بإيقاف الفيديو قبل النزول و الإعجاب بتعليق ما؟ إن الفيديو الخاص بالدرس يأخذ بعض الوقت ليتم تحميله و ذلك حسب سرعة النت لديك، و عندما يتم تحميله ينتقل التركيز focus في الصفحة إليه. قم بالإنتظار حتى يتم تحميل القالب الخاص بالفيديو و اضغط على إيقاف و ذلك سيحل المشكلة التي تحصل معك.
  24. كما ذكر المدرب معاذ 14 ساعة في الأسبوع هو وقت ليس بالقليل، و عند تقسيمه بشكل جيد يمكنك التقدم بشكل مستمر في رحلة التعلم الخاصة بك. أريد أن أضيف بعض النقاط التي ساعدتني كثيراً على تحديد متى يجب علي تعلم المزيد و متى يجب علي تطبيق ما تعلمته، أتمنى أن تساعدك أيضاً. لقد كنت أعتبر تعلم المزيد هو العملية الأساسية و التطبيق هو حدث إضافي مساعد لها (و لكن ضروري طبعاً)، فكنت أركز على التعلم و عندما أشعر بأنني لم أعد أستطع الربط في ذهني بين كافة الأفكار التي تعلمتها (بسبب كثرتها غالباً) أذهب و أقوم بتطبيق ما تعلمته، بالإضافة إلى محاولة التعديل لاختبار ما سيحدث في حال قمت بإزالة تعليمة ما أو تنسيق معين الخ.. وجدت هذه الطريقة مفيدة لي، حيث أن ذلك أفضل من وضع وقت ثابت، فقد تكون تتعلم بعض الأمور التي تعتبرها سهلة نسبياً، و بالتالي قد تجد أنه يمكنك تعلم المزيد قبل الذهاب إلى التطبيق العملي و ذلك ﻷنه من السهل الربط بين الأمور التي تعلمتها أو ﻷنها قريبة من بعضها البعض. بينما قد تكون تتعلم فكرة صعبة و لو أنه شرحها لا يأخذ أكثر من نصف ساعة مثلاً، و بالتالي قد ترغب في وضع وقت أكثر في التطبيق العملي و التجريب قبل الانتقال إلى فكرة أخرى.
  25. المشكلة أنك تقوم بوضع ملفات ال 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>
×
×
  • أضف...