-
المساهمات
2347 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
24
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Kais Hasan
-
فهم البرمجة الكائنية يعني فهم الأساسيات الخاصة بها من مفاهيم مثل كيفية تحويل المشكلة أو البرنامج الذي نريد تصميمه إلى كائنات مع علاقات بين هذه الكائنات، بحيث تكون هذه العلاقات مثلاً وراثة أو احتواء و غيرها الكثير. بالإضافة إلى ذلك يجب بعدها محاولة فهم كيف تقوم اللغة التي تستعملها بتطبيق هذه المفاهيم، فهذا الأمر يختلف بين لغة و أخرى، فمثلاً في بايثون لا يمكنك تطبيق مبدأ التغليف، و إنما يتم اللجوء إلى بعض الأمور المتعارف عليها و التي تعني أن متغير ما هو private، و لكن هذا مجرد شيء متعارف عليه و يبقى بإمكان أي أحد الوصول إلى هذا المتغير. كما أن بعض اللغات تحقق مبدأ الوراثة المتعددة في حين أن لغات أخرى لا تسمح بذلك. أما فيما يخص الديزاين باتيرن فهي شيء مهم جداً في حال كنت مهتم بهندسة البرمجيات فهي تسمح لك بتصميم برامج جيدة تسهل عليك العمل و تحويلها إلى كود و توفر عليك الكثير من المشاكل التي كانت من الممكن أن تحدث فيما لو لم تكن قد وضعت تصميم جيد، كما أنها تجعل الكود أسهل للتعديل في المستقبل، حيث أنه بشكل عام يتم دائماً طلب تحديثات على البرامج فالكود الخاص بك يجب أن يكون مصمماً بطريقة تسمح بذلك بأسهل ما يمكن.
-
الكائن القابل للتكرار هو الكائن الذي يمكنك ترتيب عناصره بشكل متسلسل بحيث يمكن المرور عليها بترتيب محدد، أبسط مثال على الكائن القابل للتكرار هو list حيث أن ترتيب العناصر الافتراضي فيها يكفي للقيام بذلك، هناك أمثلة أكثر تعقيداً مثل ال set, dict و التي تخزن بطريقة مختلفة في الذاكرة و لكن لغات البرمجة توفر طريقة للوصول المتسلسل إلى عناصرها و بالتالي هي أيضاً كائنات قابلة للتكرار. الكائن الغير قابل للتعديل لا يمكن تعديل محتواه، قد يمكن إعادة إسناد المتغير إلى قيمة أخرى و لكن الكائن هو القيمة و ليس الاسم الخاص بالمتغير، مثلاً في بايثون لا يمكن تعديل قيمة tuple و لكن هذا لا يعني أنه لا يمكنك إسناد قيمة أخرى للمتغير الذي يحمل قيمة tuple فالكائن هو الغرض و الاسم ما هو إلى مؤشر إلى هذا الغرض، مثلاً: p = (1, 2) p[0] = 1 # خطأ لا يمكن التعديل على هذا الكائن فنحن نحاول هنا التعديل على القيمة p = (2, 1) # لا مشكلة نحن نعدل المتغير و ليس قيمته
-
و عليكم السلام محمود، هذا يعتمد على هيكلية التطبيق، بشكل عام يجب القيام بذلك في حال حدث الخطأ في مكان لا يمكن تصحيحه به، أي أنه غير مسؤول عنه، فيقوم برمي خطأ ليقوم الذي استدعاه بتصحيح الخطأ. مثلاً في حال كنت تقوم بكتابة دالة تأخذ سلسلة نصية تمثل ايميل و تقوم باستخراج الدومين الخاص بهذا الايميل، فإذا تم تمرير سلسلة لا تحوي دومين فيجب رمي خطأ للمستدعي حتى يعرض مثلاً رسالة خطأ للمستخدم، فهذا ليس من مهام هذه الدالة. أي أن الأمر يعتمد على التصميم الخاص بالتطبيق و لا يوجد جواب عام محدد، و لكن دائماً تذكر أن تحدد المسؤوليات لكل شيء و على أساسها يمكنك إما رمي خطأ أو معالجته مباشرة.
- 6 اجابة
-
- 1
-
عند اختيار raw فإن ما نقوم بكتابته يتم إرساله كما هو بدون أي تعديل إلى السيرفر. أما في حال اختيار x-www-form-urlencoded فإن البيانات يتم إرسالها بنفس الصيغة التي يتم فيها إرسال بارامترات GET، أي على شكل مفتاح و قيمة. و بالتالي ما تريد استعماله يعتمد على ما تريد إرساله، مثلاً في حال أردت إرسال json عليك اختيار raw و من ثم اختيار json بدلاً من text في الخيارات أقصى اليمين.
- 5 اجابة
-
- 1
-
لا مشكلة في ذلك، في البداية ستأخذ الكثير من الوقت و لكن شيئاً فشيئاً ستصبح أسرع، من غير الجيد الاستعجال في البدايات فهي الأساس الذي تبني عليه خبرتك، و في حال كان هذا الأساس ضعيف لن تصبح مبرمج جيد. و لكن كنصائح عامة لزيادة الإنتاجية هي: قم بتخصيص مكان هادئ للدراسة. نظم جدول لمواعيد الدراسة و لا تترك الأمر عشوائي. من المهم أن تكون فترات الدراسة متواصلة قدر الإمكان و ليست متقطعة. حاول أن تكون الملاحظات مختصرة، أي لا تكتب كل شيء و إلا فأنت تنسخ الدرس، قم بوضع فقط الملاحظات الهامة و الأفكار الرئيسية و أفكار الربط، حاول ألا تضع كود فالمهم في الملاحظات هو الأفكار أما الكود فدائماً يمكنك البحث عنه طالما أنك فهمت الفكرة.
- 2 اجابة
-
- 1
-
بعض النظر لغة البرمجة التي تستعملها فإن المفهوم الخاص بالتداخل دائماً يمكنك تخيله كما يلي: ما الفرق بين حلقة داخل حلقة أو حلقة عادية؟ في الواقع لا فرق من ناحية المبدأ، حيث أن الحلقة ما هي إلى تكرار للكود، و يمكنك التفكير بتكرار واحد لفهم بقية التكرارات، أي اعتبر الحلقة الخارجية عند لفة معينة (قيمة عداد معينة) و تعامل معه و كأنه متغير معرف قبل الحلقة الداخلية، أي ما الفرق بين كتابة ما يلي: for (int i = 0 ; i < 10 ; ++i){ for (int j = 0 ; j < 5 ; ++i){ ... } } و بين ما يلي: int i; // لنعتبر أن له قيمة ما لا نعرفها حالياً أو نعرف على الأقل مجموعة القيم التي من الممكن أن يأخذها for (int j = 0 ; j < 5 ; ++i){ ... } في الواقع لا فرق من وجهة نظر الحلقة الداخلية، فالحلقة الخارجية ما هي إلى تكرار للكود الثاني كل مرة بقيمة i مختلفة. و لذلك دائماً يمكنك التفكير ببعض من التجريد في ذلك، أي نثبت قيمة معينة للمتغير (أو المتغيرات الخارجية) و نتعامل مع الحلقة الداخلية على أنها تقوم بعمل ما من أجل هذه المتغيرات. أنصحك بالقيام ببعض التمارين لمحاولة فهم ذلك.
- 4 اجابة
-
- 1
-
يجب عليك معرفة الأساسية منها، مثلاً set, list, dict لكي تستطيع كتابة برامج جيدة، كما يجب عليك معرفة بعض هياكل البيانات الضمنية، أي التي تستعمل ضمنياً في ما ذكرته سابقاً و ذلك حتى تستطيع فهم كيفية عملها من أجل أي مشاكل تواجهك، و حتى يمكنك الاستفادة من أفكارها ففي الكثير من الأحيان تحتاج إلى ذلك. هياكل البيانات المهمة غير التي سبق و ذكرتها هي: tree بأنواعها الرئيسية binary, red-black مثلاً. graph. linked list trie queue heap stack هذا مثال بسيط على هياكل البيانات الأساسية التي يجب على أي مبرمج معرفتها.
-
يبدو أنك لا تملك خبرة كبيرة في هذا المجال، لذلك نصيحتي لك هي أن تقوم بالبداية ببعض الأعمال الحرة البسيطة حتى تأخذ فكرة عن هذه الأمور. أفضل موقع لذلك هو مستقل، هناك الكثير من المشاريع باستعمال وورد بريس، يمكنك الإطلاع عليه و القيام ببعض المشاريع و من ثم يمكنك فتح المشروع الخاص بك، هذا أيضاً أفضل حتى يكون لديك مشاريع يستطيع العملاء الإطلاع عليها لمعرفة أنك فعلاً خبير في هذه الأمور، و إلا لن يأتيك عملاء. أيضاً عندما تعمل على مستقل ستعرف الأسعار الخاصة بهذه الأمور بدقة، و لكن حتى في هذه الحالة من الجيد أن تقوم بتخفيض الأسعار قليلاً لجذب العملاء في البداية و لاحقاً يمكنك رفعها شيئاً فشيئاً عندما تصبح لديك سمعة جيدة في المجال.
-
سأطلعك على الطريقة العامة لكيفية التحويل و لكن حاول القيام بذلك بنفسك فهذا أفضل. في c++ هناك نمط للمتغيرات، و بالتالي من غير الممكن إدخال سلسلة نصية مثلاً إلى رقم. و بالتالي للقيام بذلك يجب عليك إدخال سلسلة نصية و من ثم اختبار فيما إذا كانت تحوي أرقاماً فقط أم يوجد أحرف. بعد إدخال هذه السلسلة النصية يمكنك المرور على محارفها و اختبار كل محرف فيما إذا كان أكبر أو يساوي المحرف '0' و أصغر أو يساوي المحرف '9' و بذلك تكون قد اختبرت أن السلسلة تمثل رقم و يمكنك تحويلها إلى عدد صحيح، هذا أيضاً يضمن أنه غير سالب لأن العدد السالب يحوي الرمز - و نحن نختبر أن السلسلة تحوي فقط أرقام. يمكنك القيام بتحويل سلسلة إلى عدد عن طريق: std::stoi( str ) حيث str تمثل السلسلة المراد تحويلها. حاول القيام بهذه الخطوات و شاركنا محاولاتك في حال لم ينجح الأمر. أما من أجل السؤال ما هي isNaN في c++ فلا يوجد هكذا دالة، و هكذا اختبار يمكننا القيام به كما سبق و أخبرتك. تحياتي.
-
هذه بعض التمارين المشهورة عن التوابع و التي يجب عليك معرفتها: مبتدئ اكتب تابع يقوم بحساب عدد مرات تكرار حرف ما في سلسلة نصية. اكتب تابع يأخذ مصفوفة و يعيد مجموع عناصرها. اكتب تابع يقوم بطباعة قواسم عدد معطى. متوسط اكتب تابع يقوم بالتحقق فيما إذا كانت سلسلة نصية متناظرة. اكتب تابع يقوم بالتحقق فيما إذا كان عدد ما أولي أم لا. صعب اكتب تابع يقوم بحساب جذر عدد مدخل.
- 6 اجابة
-
- 1
-
هذا بسبب بعض خصائص الحماية، يمكنك حل هذه المشكلة عن طريق الذهاب إلى System>Library>Core Services و من ثم تفعيل ال Installer.
- 3 اجابة
-
- 1
-
كل منهما مفهوم مختلف تماماً عن الآخر. الصفوف تستعمل لتمثيل شيء ما، مثلاً صف سيارة يستعمل لتمثيل سيارة بحيث نضع صفات السيارة على شكل متغيرات ضمن هذا الصف و ما يمكن للسيارة القيام به (الوظائف التي يمكنها القيام بها أو أي شيء يمكنها القيام به) على شكل توابع ضمن هذا الصف. بالتالي الصف هو جزء مما يدعى OOP (Object Orietned Programming) و الذي يرتكز على تمثيل مختلف الكيانات في البرنامج على شكل أغراض، ستتعلم لاحقاً عنه. بينما القوائم هي عبارة عن مجموعة من القيم المخزنة بشكل متسلسل، مثلاً يمكن أن يكون لدينا قائمة علامات الطالب في مجموعة مواد، أو قائمة من الطلاب و غيرها الكثير. و بالتالي كما نلاحظ فإن القوائم هي أحد أنواع هياكل البيانات، بينما الصف هو مفهوم.
- 6 اجابة
-
- 1
-
لا يجب عليك حفظ التعليمات بشكل مباشر، كل ما عليك هو فهم الآلية و طريقة التفكير التي نستعملها لكتابة كود ما، دائماً يمكنك البحث على الانترنيت في حال نسيت تعليمة ما، و هذا ما يقوم به الجميع حتى الخبراء، بالطبع مع الوقت في حال استعملت تعليمات ما بشكل كبير قد تحفظها بشكل تلقائي، و لكن لا تقوم بذلك بشكل إرادي. ما عليك القيام به هو محاولة كتابة الكثير من الأكواد لوحدك، و فهم الأفكار و ليس مجرد النسخ مما يكتبه المدرب، دائماً في حال كانت هناك غير مفهومة يمكنك السؤال عنها في التعليقات، و سنجيب عنها، و لكن في البداية حاول قدر الإمكان فهمها لوحدك و كتابة أمثلة لفهمها، هذا سيساعدك على تطوير مستواك بسرعة. لا تتخطى درس قبل أن تفهم كل حرف فيه، هذا مهم جداً، ليس من المهم أن تنهي الدورة بسرعة، و لا تضع الوقت في بالك، ما يهم هو ما تتعلمه في كل درس و ليس ما تنهيه من دروس.
-
هناك إضافة حديثة مبنية باستعمال الذكاء الصنعي تقوم بذلك بشكل أفضل من الإضافات التقليدية، شخصياً أستعملها منذ مدة و هي تسرع من عملية كتابة الكود، حتى أنها تتعلم أسلوبك في الكتابة تدريجياً. اسم هذه الإضافة هي tabnine يمكنك الإطلاع عليها من الرابط التالي: https://www.tabnine.com/install/pycharm
- 3 اجابة
-
- 1
-
لقد ذكر المدرب عدنان طريقة تكبير الشاشة الخاص بال virtual box، أما في حال كنت تريد تكبير شاشة ال ubuntu (و هذا ما أعتقد أنك تريده) فيجب عليك الذهاب إلى ال settings في ال ubuntu ثم إلى displays و قم بزيادة ال resolution الخاص بالشاشة، قم بوضعه مثلاً كما يلي: تحياتي.
-
هناك طريقة لاستعمال switch للقيام بذلك، و هي محاولة عمل مطابقة للقيمة التي نريدها بدل المتغير مع الشرط المطلوب، أي بدلاً من أن نعطيها val نعطيها true، فنحن نريد الشرط الذي يعطي true، بالتالي في حالتك يمكنك كتابة ما يلي: let val = 40; switch (true) { case val > 30: console.log("Very good " + val); break; case val > 20: console.log("Good " + val); break; default: console.log("Failed " + val); break; } بالطبع هذه فقط حيلة لجعل ال switch تعمل على ذلك، و لكن في هذه الحالة من الأفضل استعمال if..else ﻷن المثال هنا ليس واضحاً تماماًـ حيث أننا في البرمجة نهتم بوضوح الكود و ليس فقط أن يعمل بشكل صحيح، كما أن استعمال if..else يعطي أداء أسرع في بعض الحالات، و بالتالي في حال استعمال هذه الشروط في حلقة تتكرر كثيراً فمن الأفضل استعمال if..else.
-
الأعداد العقدية تستعمل في الكثير من المجالات و أهمها مجال معالجة الإشارة و الذي يعتبر مفيداً في الكثير من التطبيقات اللاسلكية، الرادارات، أو حتى دراسة إشارات الدماغ الكهربائية. بشكل عام يمكن استعماله متى ما كان لدينا تعامل مع توابع sin و cos في نفس الوقت، حيث أن هناك الكثير من التقنيات التي تسمح بتسهيل المسألة باستعماله. هناك أيضاً الكثير من النظريات الرياضية التي يمكن إثباتها عن طريقه، حيث أنه يسهل علينا حساب بعض التكاملات و الإشتقاقات و غيره الكثير. أما في حال قصدك على مجال البرمجة فقد لا تجد الكثير من التطبيقات عليه، مثلما هو الحال لأغلب مجالات الرياضيات، فالمبرمجون يستعملون تقنيات جاهزة تم تطويرها و إنشاءها من قبل باحثين، فهذه الأمور (كما أغلب مجالات الرياضيات) تلزم لمن يريد القيام بأبحاث و تطوير أمور جديدة (طبعاً هذا لا يتضمن لغات البرمجة و لكن تطبيقات تستعمل فيها لغات البرمجة مثل الشبكات، الرؤية الحاسوبية، الذكاء الصنعي و غيرها الكثير من المجالات).
- 4 اجابة
-
- 2
-
من الجيد بدل ذلك أن تقوم بمحاولة إعادة كتابة برامج بسيطة بنفسك باستعمال بايثون، حتى تسترجع الأفكار الأساسية.. حاول كتابة برامج بسيطة جداً مثل حساب عدد إلى أس ما، برنامج حساب مجموع رواتب موظفين بعد اقتطاع ضريبة ما، أي برنامج بسيط. بعدها أنصحك كما تحدث مصطفى بأن تقوم بمراجعة الدروس بشكل سريع و محاولة إعادة تطبيقها بنفسك. لا تستعجل عملية إعادة تذكر الأساسيات، فهي أهم نقطة لأن كل ما سيأتي بعدها سيرتكز عليها و بالتالي في حال استعجلت بها فقط للوصول إلى المراحل المتقدمة ستجد أن تلك المراحل ستكون صعبة و أنك ستضطر للإعادة منذ البداية.
-
يمكنك القيام بذلك عن طريق وضع جميع المكونات التي تريد أن تظهر على نفس السطر في مكون div و من ثم وضع التنسيق لهذا المكون على أنه flex. هذا مثال مبسط عما تريده: <!DOCTYPE html> <head> <style> #someId { display: flex; flex-direction: row; } </style> </head> <body> <div id="someId"> <div>1</div> <div>2</div> <div>3</div> </div> </body> </html>
-
هذا يعتمد على التطبيق الخاص بك، و لكن الطريقة العامة للقيام بذلك هي أن تقوم بإنشاء thread فيها تقوم بتنفيذ تابع يقوم كل فترة معينة بتحديث الاتصال و بالتالي المعلومات.
-
بعض الأخطاء التي لا تؤثر على عمل البرامج و لكن ستسبب بعض المشاكل في حال كنت تعمل في فريق، و هي طريقة التسمية الخاصة بأي شيء. لقد قمت بتسمية الكلاس بأحرف صغيرة و هذا خطأ، يجب تسميته بحيث يكون أول حرف من كل كلمة كبير. لقد قمت بتسمية متغير ضمن الكلاس بأحرف كبيرة بشكل كامل، هذا نقوم به فقط للثوابت العامة و ليس للمتغيرات المحلية، يجب تسميته بأحرف صغيرة فقط. من غير الجيد نهائياً القيام بما يلي: from ttkbootstrap.constants import * هذا من أسوء الأمور التي قد يقوم بها الشخص في بايثون، يجب تحديد ما تريد تصديره بشكل واضح أو قم بكتابة ما يلي: from ttkbootstrap import constants هكذا يمكنك الوصول إلى قيمة ضمن constants عن طريق كتابة constants.val حيث val هي القيمة المراد الوصول إليها.
-
من الجيد قبل البدء بالبرنامج أن ترتب الأفكار وما الذي يجب القيام به على ورقة، استعمال الورقة و القلم يكون لكتابة الأفكار فقط، أي انسى أنك تريد كتابة برنامج، فقط اكتب الخطوات المنطقية للقيام بأمر ما، مثلاً في حال كنت تريد طباعة أكبر عدد بين مجموعة أعداد مدخلة يمكنك كتابة الأفكار التالية: نريد التكرار عدد من المرات. نريد ما يحمل أكبر قيمة. في كل تكرار نقوم بالمقارنة بين أكبر قيمة حالية و القيمة المدخلة و نحدث أكبر قيمة في حال كانت القيمة المدخلة أكبر منها. في النهاية نطبع الناتج. هذا يساعدك على تنظيم أفكارك قبل البدء بالبرنامج. أيضاً من المفيد تقسيم الأعمال التي يقوم بها البرنامج إلى مجموعة توابع كل منها يقوم بعمل واحد محدد، هذا يسهل عليك العمل.
- 4 اجابة
-
- 1
-
جيد لقد تم تنزيلها. طبعاً أنصحك باستعمال البيئات الافتراضية بدلاً من تنزيل كل شيء بشكل عام، يمكنك استعمال ما يدعى pipenv. يمكن تنزيلها كما يلي: pip install pipenv بعد ذلك نقوم بالذهاب إلى مجلد المشروع و نكتب ما يلي: pipenv shell حينها نصبح داخل البيئة الافتراضية و نقوم بتنزيل ما نشاء من مكتبات كما هو معتاد، أي عن طريق ال pip ، طبعاً في كل مرة تريد الدخول إلى البيئة يمكنك تنفيذ التعليمة السابقة. هذا يسمح لك بمشاركة مشروعك مع أشخاص آخرين و يمكنهم معرفة المكتبات التي يستعملها المشروع و تنزيلها بتعليمة واحدة فقط، و هي نفس التعليمة السابقة.
-
هذه ليست مشكلة نهائياً، بالعكس تماماً حيث أن البحث هو من أهم المهارات التي يجب أن تتعلمها. من المستحيل أن تقوم بإنشاء موقع بنفسك 100% حيث هذا يتطلب أن تكون قد حفظت كل التعليمات في إطار العمل الذي تستعمله و هذا شبه مستحيل. قد يمكنك القيام بذلك في حال قمت بإنشاء موقع مسبق بنفس الخصائص تماماً، و لكن حتى في هذه الحالة ليس ضرورياً القيام بذلك. فكرة أنك تستطيع البحث عما تريده و تجميع الأفكار و حل المشاكل التي قد تواجهك هذا هو المهم و ليس أن تستطيع كتابة موقع بدون البحث، فالعمل مختلف تماماً عن امتحانات الجامعات و المدارس الذي يتطلب في الغالب أن تحفظ كل شيء، هنا تستطيع البحث كما تشاء.