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

حمزة عباد

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

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

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

كل منشورات العضو حمزة عباد

  1. بداية، في مجال الصور الحاسوبية، هناك نوعان من الصور: الصور النقطية (bitmap images) والرسومات المتجهية (vector graphics). الصور النقطية هي الصور التي يتم تمثيلها عن طريق تحديد لون كل بكسل. هذه هي أغلب أنواع الصور وأكثرها شهرة، لأنّها الصور التي تنتجها آلات التصوير والماسحات الضوئية وغيرها من أجهزة التقاط الصور. من أكثر صيغ الصور النقطية شهرة نجد JPEG، PNG، و GIF. أمّا الرسومات المتجهية، فهي رسوم يتم تعريفها عن طريق وضع نقاط على المستوى وتحديد الخطوط بينها كدوال رياضية. ميزة هذه الرسومات أنّها أصغر بكثير من ناحية الحجم، وأنّه يمكن تكبيرها إلى ما لانهاية بدون خسارة جودتها (نعم أقصد ذلك حرفيا، يمكن تكبيرها إلى ما لانهاية!). الرسوم المتجهية رائعة في كل شيء باستثناء شيء واحد وهو الشيء الذي يعيق استخدامها: أنّه يجب رسمها يدويا ولا يمكن توليدها من أجهزة الحصول على الصور مثل الصور النقطية. أشهر صيغة من صيغ الرسوم المتجهية هي SVG. لذلك، فالرسوم المتجهية تجدها مستخدمة دائما في الأيقونات والخطوط والشعارات. أمّا الصور النقطية فتستخدم للصور الفوتوغرافية عموما، التي يتم الحصول عليها عن طريق أحد أجهزة التقاط الصور، وكذلك الصور المعدّلة بعد الالتقاط. والآن بعد أن فهمنا الفرق بين الرسوم المتجهية والصور النقطية، حان الوقت للعودة إلى HTML. إذا كانت لديك صورة نقطية، فالطريقة الصحيحة لإدخالها في صفحة ويب هي باستخدام الوسم <img>. إذا كانت لديك رسمة متجهية بصيغة SVG، فلديك عدّة خيارات: إما أن تستخدم الوسم <img> في الملفات البسيطة، لكن يفترض تجنّب هذه الطريقة لأنّها ليست الطريقة الصحيحة لفعل ذلك. أو استخدام الوسم <object> لتضمينها: <object data="image.svg" type="image/svg+xml"></object> أو تضمين محتوى الصورة مباشرة داخل HTML عن طريق الوسم <svg>. هذا الأمر ممكن لأن صيغة SVG ما هي في الواقع إلا ملف XML، يمكنك نسخ محتواه ووضعه داخل HTML بدون مشاكل: <svg width="100" height="100"> <rect x="10" y="10" width="80" height="80" fill="blue" /> <!-- محتوى SVG --> </svg> حسنا ماذا عن <canvas>؟ هذا الوسم يعطيك مساحة فارغة يمكنك الرسم فيها باستخدام JavaScript. يعني أنّه طريقة أخرى لرسم الرسومات المتجهية، لكن بدل إحضار رسم جاهز وتضمينه، يسمح لك هذا الوسم بالرسم مباشرة على الصفحة.
  2. وعليكم السلام، كلمّا كانت التقنيات التي تعرفها أكثر كلّما استطعت العمل على مشاريع أكثر، لكن هذا أيضا يأتي على حساب الوقت وكذلك الخبرة. فالخبرة في لغة برمجة واحدة تتطلب وقتا أقل من الخبرة في أكثر من لغة. اختيارك لـJavaScript هو اختيار موفق بالفعل، إذ أنّها في الوقت الحالي هي اللغة التي يمكنك بها إنشاء أيّ شيء، من تطبيقات الويب إلى الهاتف إلى سطح المكتب (ربّما باستثناء العمل على نماذج الذكاء الاصطناعي التقليدية، حيث لا يزال Python أساسيا). أنا أقول هذا مع أنّي مبرمج Python ولست متقدّما كثيرا في JavaScript. أمّا بالنسبة لـPHP، فتقريبا لا يمكنك إنشاء شيء بها ما عدا الواجهة الخلفية للموقع، ومع ذلك فهذه اللغة لا تزال مدعومة بكثرة لأسباب تاريخية، كونها من أوّل لغات برمجة المواقع ظهورا. في رأيي الشخصي، من الأحسن أن لا تتفرّع في العديد من لغات البرمجة حاليا، بل ركز على تحسين نفسك في JavaScript وأطر العمل الكثيرة المتعلّقة بها. أمّا بالنسبة لإرسال العروض، فيمكنك أن ترسل لمن لا يطلبون لغة برمجة محددة. فهم موجودون. فقط عليك بالصبر واقتناص الفرص عند ظهورها. مثلا أنا حاليا أعمل على موقع باستخدام Python وإطار العمل Django، لأن صاحب المشروع لا يهتم بلغة البرمجة المستخدمة، فمادام العمل يتم بشكل صحيح فهو راض.
  3. صراحة أنصحك بأن تبدأ بمستقل أو ربما خمسات في البداية، لأن الحصول على عملاء عليهما أسهل بكثير من Upwork (أتحدث عن تجربة شخصية، قد يخالفني البعض الرأي) وهذا بسبب أن المنافسة في السوق العربي أكثر رحمة منها في السوق العالمي، فعلى الرغم من أن الأعمال على Upwork أكثر، لكن فرصة أن ينظر إليك صاحب المشروع (فضلا عن أن يتكلم معك!) ضعيفة بسبب كثرة المتقدّمين. من الطبيعي أن تكون معظم المشاريع في غير تخصصك، لكن مع الوقت سوف تجد مشاريعا في تخصصك ويمكنك إرسال عروضك إليها. هذا الأمر لن يتم بين ليلة وضحاها بالطبع. سوف تحتاج إلى المحاولة عدّة أسابيع قبل أن يقبلك أحد أصحاب المشاريع. في البداية لا تتوجه نحو المشاريع الكبيرة والمرتفعة الثمن، بل نحو المشاريع البسيطة قدر الإمكان، حتى تزيد فرصة قبولك وحتى لا تتسبب بمشاكل كبيرة مع صاحب المشروع بسبب نقص خبرتك في البداية. عند إرسال عرضك، تجنّب مدح نفسك بل اعرض ما قمت بعمله سابقا مما يشبه ما يطلبه صاحب المشروع، أو على الأقل إشرح لصاحب المشروع ما فهمته من طلبه واعرض له خطتك بشكل مختصر لكيفية العمل على مشروعه. هذا سيزيد فرصة قبولك كثيرا.
  4. أهلا، بالنسبة للأسئلة المتعلّقة بدروس الدورات فيرجى طرح السؤال في قسم التعليقات أسفل الفيديو. أيضا عند طرح السؤال هناك، يرجى أخذ لقطة شاشة (screenshot) أو نسخ الخطأ الذي يظهر. لأن مشاكل البيئة الافتراضية لا تعتمد على المشروع بل على الأوامر التي نفّذتها. لذلك يرجى تصويرها حتى نعرف ما الذي قمت به.
  5. الخطأ عندك بسيط وهو ظاهر في السطر 19، إذ أن كتبت /script خارج العلامتين <>، والصحيح أن تكون هذه الكتابة بينما. لذلك قم بتعديل السطر 19 كالتالي: <script src="index.js"></script> أيضا تحقق من وجود الملف بالإسم index.js لأنه ضروري لكي يتم تشغيله. وفي المرة القادمة، يرجى طرح الأسئلة المتعلّقة بالدورات في قسم التعليقات أسفل فيديو كل درس.
  6. وعليكم السلام ورحمة الله، نعم تبدو لي أنّ هذه فكرة جيّدة لتعلّم البرمجة بـJavaScript. من الجيد أن تأتي بمواضيع مميزة كهذه وتحاول تطبيقها. في حالة البرنامج الذي تريد إنشاءه، عليك أوّلا تحديد ما هي الحروف العربية القابلة للتمديد (نرى في مثالك أنّ "ه" و "ن" و "ت" و "ج" هي حروف قابلة للتمديد، بينما "ذ" و "ر" مثلا ليست حروفا قابلة للتمديد). بعد ذلك، يجب كتابة خوارزمية تحدد الحروف الواجب تمديدها والمقدار الذي يجب تمديدها به حتى يصبح الطول الكلّي للكلمة موافقا للطول المطلوب. حسب ما يظهر في مثالك، فيمكن أن يكون هناك أكثر من حرف قابل للتمديد في نفس الكلمة (مثل "تجريبي") ويجب تمديدها بنفس المقدار، أو بطريقة تراها أكثر مناسبة. بالطبع أشجعك على القيام بهذا المشروع. وبالمناسبة، ذكّرتني بأوّل مشروع برمجي قمت به أنا قبل حوالي 12 سنة، ولا أزال أحتفظ به. وهو صفحة ويب تقوم بالتحويل بين سلاسل DNA و RNA (أو كما ترمز لها بالفرنسية ADN و ARN) وكذلك سلاسل الأحماض الأمينية. كانت فكرة المشروع مستوحاة من دروس العلوم الطبيعية التي درسناها أيّام الثانوية، حيث تعلّمت لغة JavaScript في ذلك الوقت. إذا أردت الإطلاع على ذلك المشروع فلعله يفيدك، فلقد رفعته على هذا الرابط: https://hamza5.github.io/DNA-translator_AR/ وإذا أردت رؤية الكود الذي كتبته في ذلك الوقت لإنشاء هذه الصفحة، فيمكنك إيجاده هنا: https://github.com/Hamza5/DNA-translator_AR بالتوفيق لك في مسيرتك البرمجية!
  7. وعليكم السلام ورحمة الله، التوثيق (Documentation) هو مجموعة الصفحات (المعروضة عادة على الموقع الرسمي) التي تشرح كل تفاصيل لغة البرمجة أو المكتبة أو إطار العمل (أو أي شيء آخر، حتّى لو كان غير متعلّق بالبرمجة). ميزة التوثيق أنّه يتضمّن كلّ شيء متعلّق بالموضوع المدروس (أو على الأقل، هذا هو المفروض). مثلا، في توثيق لغة Python، تجد كل عرضا (مع بعض الشرح) لكلّ وحدات المكتبة الرئيسية التي تأتي مع مفسّر هذه اللغة. فمثلا، توجد وحدة pickle لتخزين جميع هياكل بيانات Python في ملفات، وتوجد وحدة zipfile للتعامل مع الأرشيف، وتوجد وحدة wave لمعالجة الصوت، وهكذا... التوثيق هو جزء ضروري من أي مشروع. لا يمكن أن تكون هناك لغة برمجة أو إطار عمل أو حتى مكتبة صغيرة من دون توثيق (إذا كان هناك مشروع بدون توثيق فلا تنظر إليه أصلا!). أمّا الدروس التعليمية، سواء كانت مقروءة أم مشاهدة، فهذه ليست أساسية. بالطبع، كل لغات البرمجة وأطر العمل الشهيرة سوف تجد لها دروسا تعليمية، لكن هذا الأمر ليس دائما. سوف تتعامل في مسيرتك البرمجية مع مكتبات غير مشهورة، وهذه لن تجد لها دروسا تعليمية لكن سيكون عليك الاعتماد على نفسك من خلال الاستعانة بالتوثيق. بالطبع لا، وهذه فائدة التوثيق، فهو يمثّل مرجعا تعود إليه كلّما احتجت إلى مراجعة ما نسيته أو تعلّم إمكانيات إضافية للمكتبة من التي لم تكن تعرفها بعد. شخصيا، استخدمت Numpy في كثير من المشاريع ومع ذلك لم أستخدم منها سوى مميزات قليلة منها، أمّا أغلب مميزات المكتبة فلا أحسن استخدامها، لكن يمكنني دائما العودة إلى التوثيق والبحث في الأنترنت من أجل التعلم أكثر.
  8. لفعل ذلك يجب عليك معالجة الحدث beforeunload في window: function onBeforeUnload(e) { if (thereAreUnsavedChanges()) { e.preventDefault(); e.returnValue = ''; return; } delete e['returnValue']; } window.addEventListener('beforeunload', onBeforeUnload); بالنسبة لـthereAreUnsavedChanges() فهذه دالّة يجب عليك برمجتها لتوافق الشرط الذي تريد عنده منع المستخدم من مغادرة الصفحة. لكن للأسف، في المتصفّحات الجديدة، لا يمكن تعديل النص الذي يظهره المتصفّح للمستخدم, نصّ التأكيد يختاره المتصفّح نفسه. لكن ما يمكنك فعله هو إظهار الرسالة على الصفحة مباشرة في من خلال الدالّة السابقة. يمكن الإطلاع أكثر عن كيفية معالجة هذا الحدث من توثيق شبكة موزيلا للمطورين: https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
  9. طول أو قصر وقت الفيديوهات وعددها شيء غير مؤثر بشكل كبير في مقارنة الدورات. الأهم هو المحتوى الموجود فيها والأهم منه هو استيعاب الطالب لما يدرسه فيها. في الفيديوهات الأولى مثلا قد يكون عدد الفيديوهات كثيرا ووقتها قصير نسبيا، لأنها تتناول مفاهيم بسيطة يمكن دراستها في وقت قصير، كما أنّ عدد هذه المفاهيم يكون كبيرا (كل شيء يبدو هكذا في البداية) لذلك تكون عدد الفيديوهات كثيرة. لكن مع التقدّم في الدروس تصبح عدد الفيديوهات أقل ويزداد طولها (وتعقيدها)، وسوف تصبح الدروس مترابطة فيما بينها بشكل كبير، والطالب عندما يحاول تطبيق كل ما يدرسه فيها (وربّما يزيد إبداعا من عنده، فهذا أحسن) سوف يكلّفه هذا وقتا كثيرا ويقع في مشاكل وسيحتاج إلى طلب المساعدة من المشرفين وغير ذلك. لذلك لا يمكن حساب وقت الدورة بناء على عدد الفيديوهات أو مجموع وقتها، بل إن الأمر يختلف من طالب لآخر، فكلّ طالب له قدراته الخاصّة في الدراسة واهتماماته وأشغاله. يمكنك إيجاد إجابات مشابهة عن كيفية تقدير مدّة الدورة وآلية الامتحان في هذا السؤال:
  10. كتابة الكود غير مرتبطة بالمحرر الذي تختارينه. يمكن أن تختاري أي محرر تريدين. في دورة تطوير التطبيقات باستخدام Python يستخدم المدرّب عادة برنامج PyCharm لأن هذا هو خياره الشخصي، لكن هذا ليس شرطا. إذا كنت متمكّنة أكثر في VS Code أو تشعرين بأنه يريحك أكثر أو متوافق مع جهازك بشكل أحسن فيمكنك استخدامه. وفي حالة لم تستطيعي متابعة المدرّب في جزئية محددة بسبب اختلاف البرامج، فيمكنك طرح سؤال في قسم التعليقات أسفل الدرس وسوف يقوم أعضاء الإشراف الذين يستخدمون VS Code بمساعدتك.
  11. الاحتفاظ بالمشاريع يعني الإبقاء على الملفات التي تمّ العمل عليها عند متابعة المدرّب. في الدروس المتقدّمة تكون المشاريع مجلّدات تحوي عدّة ملفّات كثيرة وكبيرة، وهذه يجب الاحتفاظ بها. سوف يتم رفع هذه المشاريع على GitHub في وقت لاحق قبل التقدّم للامتحان. في الدروس الابتدائية تكون المشاريع متكوّنة من ملف واحد، فمن الأحسن الاحتفاظ بها هي أيضا. في بعض الدروس الابتدائية لا توجد أصلا ملفّات لحفظها. في هذه الحالة يمكنك نسخ الأوامر التي تم إدخالها في ملف نصّي مثلا. لا أعتقد أن أخذ لقطات الشاشة أمر ضروري لكنها فكرة جيّدة ويمكنك إضافتها.
  12. بالفعل، من الصعب جدّا (أو لنقل من شبه المستحيل) أن تكون هناك دورة تعليمية تدرّسك كلّ ما تحتاج تعلّمه في مجال ما. دورة تطوير التطبيقات بلغة JavaScript (والتي يتم تدريس React JS فيها) ليست استثناء من هذه القاعدة. لذلك، فالجواب هو أنه لا يمكنك أن تكتفي بمتابعة محتوى الدورة فقط وتفترض أن هذا كاف للاشتغال في سوق العمل. بالطبع، سوف تحتاج إلى قراءة توثيق React مرّة واحدة على الأقل بعد أو أثناء دراستك للمسار. وسيكون من الأحسن لو تحاول أن تبدع قليلا خارج ما يقوم به المدرّب، إذ أنّه كلّما حاولت الاعتماد على نفسك أكثر كلّما زاد استيعابك للمعلومات وتحسنت فرصك للنجاح فيما بعد في ميدان عملك. لذلك، حاول أن تستثمر أقصى ما تستطيع من الوقت من أجل تحسين مهاراتك، حتى بالمواد الموجودة خارج الدورة. قد تجد معلومات مفيدة أيضا في مقالات أكاديمية حسوب: https://academy.hsoub.com/programming/javascript/react/ وأيضا من التوثيق المتوفّر على موسوعة حسوب: https://wiki.hsoub.com/React
  13. وعليكم السلام، أنا أستخدم Bing AI والذي هو نسخة متطوّرة مقارنة بـChatGPT، إذ أنّه يبحث في الأنترنت قبل الإجابة ويعطيك مصادر كل معلومة (الرابط الذي وجدها فيه). Bing AI لديه 3 أوضاع : دقيق، متوازن، ومبدع. في الوضعين دقيق ومتوازن يستخدم النموذج GPT-3.5 Turbo، بينما في الوضع المبدع يستخدم GPT-4. النتائج التي يعطيها مبهرة للغاية. أنا دائما أستعين به في عملي وفي حلّ المشاكل التي تظهر لي في نظامي أو برامجي. وهو مجاني بالكامل. مؤخرا أضافوا بعض الأمور المدفوعة لكنّي لم أطّلع عليها ولست أشعر أنني في حاجة إلى أكثر من المتوفّر فيه مجانا. يمكنك تجربته من من موقع محرّك البحث Bing.com، والشرط الوحيد لاستخدامه هي أن تستخدم المتصفّح Microsoft Edge وليس أي متصفّح آخر. على أيّة حال المتصفّح Edge هو ممتاز أيضا ومتوفّر على جميع أنظمة التشغيل، فهذا الشرط ليس مزعجا بل هو فائدة إضافية.
  14. أنت تحاول تشغيل أوامر Ubuntu من خلال Python shell، وهذا شيء غير منطقي. أوّلا، قم بالخروج من Python shell عن طريق الضغط بلوحة المفاتيح على المفتاحين: Ctrl+D أو بكتابة الأمر: exit() ثم الضغط على Enter. بعد ذلك أعد كتابة أوامر Ubuntu التي يجب القيام بها. وبالمناسبة، يرجى في المرّة القادمة طرح الأسئلة في قسم التعليقات أسفل فيديو الدرس حتّى نتمكّن من معرفة الأوامر التي تريد القيام بها بالضبط.
  15. المتغيّر employees يحوي قائمة من المتغيّرات، لذلك، عندما نستخدمه نحصل على القائمة كاملة: employees = ['E1', 'E2', 'E3'] print(employees) # تظهر: ['E1', 'E2', 'E3'] بينما الكتابة employees[index] تعني العنصر من القائمة الموجود عند الفهرس index: employees = ['E1', 'E2', 'E3'] index = 0 print(employees[index]) # تظهر: 'E1' index = 1 print(employees[index]) # تظهر: 'E2'
  16. هذا الخطأ يعني أن المتغيّر gradinets غير معرّف (لاحظ أنّك سميته gradinets وليس gradients، يعني أنّك قلبت بين حرفي n و e). ابحث عن المكان الذي أخطأت فيه في الكتابة (يبدو أنّه سطر apply_gradients)، وأصلح الخطأ. أيضا تأكّد من تشغيل كل الخلايا في هذا notebook بالترتيب، لأن الترتيب مهم.
  17. هل ما تريده هو تخزين النص الذي يطبعه برنامجك في منفّذ الأوامر في ملف؟ إذا كان كذلك، فتوجد طريقة تعمل مع كل البرامج، وهي استخدام عامل إعادة التوجيه إلى ملف: node app.js > log.txt هذه الطريقة تقوم بتخزين ما يظهر على الإخراج القياسي (Standard output - stdout)، لذلك، فالأخطاء لن تظهر في هذا الملف وستستمر بالظهور على الشاشة. لإعادة توجيه الأخطاء التي تظهر عبر إخراج الأخطاء القياسي (Standard Error Output - stderr) نحو ملف آخر يمكن فعل ذلك كالتالي: node app.js > log.txt 2> errors.txt إذا أردت جعل كل الإخراج، سواء كان مصدره من stdout أو من stderr في نفس الملف، فيمكن فعل ذلك بالأمر التالي: node app.js > log.txt 2>&1
  18. وعليكم السلام، عندما نقول أنّ هناك لغة آلة يتم ترجمة البرامج إليها ثم يتم تشغيل البرامج مباشرة من طرف الحاسوب، فهذه الفكرة المبسطة جدا والمختصرة اختصارا مخلّا فادحا، لكن الأمر لا يتم بهذه البساطة في الحقيقة. في الواقع، عند اختراع الحواسيب الأولى، في سنوات الأربعينات والخمسينات من القرن الماضي، والتي كان حجمها يملأ غرفة كاملة و وزنها بالقناطير، كانت بالفعل لا تملك أنظمة تشغيل! ولكن مشكلة هذه الحواسيب هي أنّها كانت بسيطة جدّا: يعمل عليها برنامج واحد فقط، ويظهر نتائجه عبر شاشة بسيطة لا تتمكن سوى من إظهار قدر قليل من النص. يمكنك أن تتخيّل أن هذه الحواسيب كانت مثل آلة حاسبة، لكنّها كانت قابلة للبرمجة! كما ترى، حواسيب مثل هذه لا تصلح لشيء في وقتنا. ماذا نفعل بحاسوب يستطيع تشغيل برنامج واحد فقط، ولا يستطيع عرض سوى نص قليل مثل آلة حاسبة؟ لذلك تمّ تطوير الحواسيب حتى تستطيع تشغيل عدّة برامج، توفّر دخولا لعدّة مستخدمين، تعطي إدارة للذاكرة الحية، للقرص الصلب، للشبكة، للبطارية .... ولكثير من الأمور الأخرى. لكن انتظر، كيف يستطيع الحاسوب فعل كلّ هذا؟ هل ستكتب له برنامجا يعلّمه كيف يقوم بذلك؟ لا أعتقد أنّك تريد فعل هذا من برنامجك، وحتى لو أردت فلن تستطيع، فهذا يتطلّب سنوات من العمل وفريق عمل ضخم حتّى تستطيع إنشاء برنامج يمكنه إدارة موارد الحاسوب بطريقة فعّالة هكذا. لحسن الحظ، ليس عليك كتابة برنامج كهذا، لأنّ هذا النوع من البرامج موجود بالفعل، وهو يسمى: نظام التشغيل! إذن نظام التشغيل ما هو إلّا برنامج كبير يقوم بتنظيم عمل البرامج الأخرى. في الواقع، الآلة لا تستطيع التعامل إلّا مع برنامج واحد، وهذا البرنامج في الحواسيب الحديثة هو نظام التشغيل الذي يقوم بدوره بتشغيل بقية البرامج. لذلك، فعندما نقول أنّ البرنامج تمّت ترجمته إلى لغة الآلة، فهذا يكافئ أن نقول أنّ هذا النص مكتوب بالحروف العربية، لكن هل كلّ نصّ مكتوب بالحروف العربيّة تستطيع فهمه إذا كنت تتحدّث باللغة العربية؟ بالطبع لا! فربّما هو باللغة الفارسية أو الأوردو أو بالعثمانية أو أيّة لغة أخرى تستخدم الحروف العربيّة. لذلك، فلغة الآلة تعني الحروف المستخدمة، بينما تفسير الحروف إلى معاني هو وظيفة نظام التشغيل. هذا بالنسبة للغات المترجمة، أمّا اللغات المفسّرة فلا يتم أصلا ترجمتها إلى لغة الآلة، بل يتم تشغيلها مباشرة من طرف المفسّر، والمفسّر هنا أيضا يعتمد على نظام التشغيل لكي يستطيع العمل وتشغيل برنامجك الذي تكتبه من خلاله.
  19. tuple و frozenset شيئان مختلفان. tuple تحفظ العناصر بترتيبها الذي أنشأته بها، والعناصر فيها قابلة للتكرار، فيمكن أن يكون لدينا tuple بهذا الشكل: t = (1, 5, 6, 5, 9, 1, 6) العناصر هذه سوف تبقى في أماكنها التي تمّ تعريفها بها، والتكرار بين العناصر سوف يبقى أيضا من دون تغيير: len(t) # 7 t[1] # 5 t[3] # 5 t.count(5) # 2 بينما frozenset (وأيضا set العادية) تحفظ عناصرها من دون أي ترتيب ولا تسمح بالتكرار: s = frozenset((1, 5, 6, 5, 9, 1, 6)) len(s) # 4 لا يمكن الوصول إلى عناصر frozenset بالترتيب، لأنّه لا يوجد ترتيب فيها كما قلنا: s[0] # TypeError: 'frozenset' object is not subscriptable لذلك، فالشيء المشترك الوحيد بين tuple و frozenset هو عدم إمكانية التعديل عليهما بعد إنشائهما، أمّا بقية خصائصهما فهي مختلفة. لذلك، نحتاح frozenset إذا أردنا إنشاء هيكل بيانات غير قابل للتعديل ولا يقبل التكرار. هذا مفيد في عدّة تطبيقات، مثل أن نحصل على بيانات مكررة من قاعدة بيانات أو شيء مشابه، ثمّ نريد أن نحذف التكرار منها، فهنا frozenset ستكون الهيكل المناسب.
  20. أشعر أنني أجبت على هذا السؤال من قبل، في جزء من جواب حول السؤال "تثبيت البيئة الافتراضية لبايثون على النظام"، لذلك أعيد وضع الإجابة هنا مادامت مفيدة لهذا السؤال أيضا: لذلك فالمسألة ليست متعلّقة بحجم المشروع، بل بالاعتماديات التي يتطلّبها. إذا كانت كلّ الاعتماديات متوفّرة على نظامك بالفعل (يعني تمّ تثبيتها سابقا بدون استخدام بيئة افتراضية، من طرفك أو من طرف برنامج آخر، كما هو الحال مع برامج Linux التي يتم تثبيتها عن طريق مدير الحزم (package manager))، أو كان البرنامج لا يحتاج إلى اعتماديات، فلا حاجة لبيئة افتراضية. والعكس بالعكس.
  21. هل تقصد تشغيل مفسّر Python في الوضع التفاعلي (Interactive mode)؟ ذلك يتم ببساطة عن طريق تشغيل الأمر: python في حاسوبك إذا كان Python مثبتا بالفعل عندك. عندما يفتح سوف يظهر لك شيء مثل هذا: Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> بعدها يمكنك كتابة أي تعبير Python صحيح (بما في ذلك عمليّة الجمع التي كتبتها) وسوف يتم تشغيله مباشرة. ملاحظة: إذا كان هذا السؤال متعلّقا بدرس محدد في الدورة وكان هذا الجواب العام ليس هو ما تبحث عنه فيرجى ترك سؤالك في قسم التعليقات أسفل الفيديو حتّى نفهم ما الذي تقصده.
  22. أهلا، التنبؤ بالمستقبل هو من أصعب الأشياء في الذكاء الاصطناعي، وهذا راجع لطبيعة المستقبل نفسه، فالمستقبل بذاته صعب التنبؤ لأنّه ليس تكرار للماضي. وتصميم وتدريب نموذج لتوقع حالة الطقس لمدّة سنتين هو شيء من ضرب الخيال العلمي! أكثر المؤسسات المتخصصة في توقع الطقس لا تقوم بتوقع حالة الطقس سوى لـ10 أيام أو أسبوعين على أقصى تقدير. هذا ولديها إمكانيات ضخمة من المهندسين في شتى المجالات ويتدفّق عليها كم هائل من البيانات من كل أنحاء العالم، ومع ذلك فهذا أقصى استطاعتها. والأدهى من ذلك أنه في كثير من الأحيان تكون توقعات 10 أيام والأسبوعين خاطئة ويتم تغييرها عند اقتراب ذلك اليوم! لذلك، فإذا كان مطلب الشركة المذكورة هو التوقع الدقيق لحالة الطقس (حالة الجو، درجة الحرارة، نسبة الرطوبة...) فلا أنصحك بالإكمال معهم لأنّ هذه الشركة تريد تحميلك مالا تطيقه لا أنت ولا حتى أكبر الشركات المتخصّصة في العالم. بل إنّ هذا دليل على أنّ هذه الشركة لا تدري ماذا تفعل. يمكنك البحث أكثر من في الأوراق العلمية التي تتحدّث عن weather forecasting، لترى ما هي حدود المتاح حاليا في ميدان التنبؤ بحالة الطقس.
  23. مرحبا، المنصّات التي تدعم نشر تطبيقات الويب المكتوبة بلغة Python كلّها تقريبا تدعم نشر تطبيقات Flask و Django لأنّهما أشهر إطاري عمل للويب بهذه اللغة. من هذه المنصّات يمكنك أن تجد Render.com و PythonAnywhere. هذه المواقع أيضا توفّر توثيقا لكيفيّة فهل ذلك عليها. مثلا، هذا توثيق Render.com: https://docs.render.com/deploy-flask وهذا توثيق PythonAnywhere وهو موجّه للمبتدئين: https://blog.pythonanywhere.com/121/ كما توجد مقالات في أكاديمية حسوب يمكنك أن تفيدك بهذا الشأن، منها هذان المقالين:
  24. وعليكم السلام، مبارك عليك النجاح والحصول على الشهادة. بخصوص هذا السؤال يرجى التواصل مع الإدارة إذا لم يكونوا قد أعطوك التفاصيل المتعلّقة به، فهم الذين لديهم تحكّم في تفعيل الكوبون. نعم هذا هو المطلوب، تعلّم المزيد بعد هذه الدورة، فدورة علوم الحاسوب عامّة وليست دورة تخصّصية، حتى عند دراسة لغات البرمجة فيها فهي لا تأخذ الطالب لمستوى متعمّق لذلك فهي غير كافية لإنشاء مشاريع برمجية معقّدة. من الصعب اقتراح شيء قد يعود عليك بدخل من دراسة هذه الدورة فقط، لأن الساحة حاليا مليئة بالمبرمجين ومديري الأنظمة المتخصصين، فالمنافسة صارت شديدة. والزبون دائما ما يبحث عن أحسن الأشخاص لأداء مشروعه ولا يحب أن يعطي مشروعه لشخص قد لا ينجزه على أكمل وجه (ضع نفسك مكان الزبون، من ستختار لإنجاز مشروعك إذا كنت ستدفع مالا؟). لكن هناك فكرة يمكنك القيام بها، وهي محاولة إنجاز مشاريع عشوائية من أجل التعلّم من جهة، ومن أجل جعلها في معرض أعمالك من جهة أخرى، ثمّ استخدام هذه الإنجازات لجذب الزبائن وإقناعهم بجودة عملك على مواقع العمل الحر مثل خمسات ومستقل. إذا كنت قادرا على إنشاء مشاريع هكذا لوحدك فسوف تكون قادرا على الحصول على بعض الزبائن وتوليد دخل من ذلك. لقد فصّلت في هذه الفكرة في إحدى الإجابات السابقة ويمكنك الاطلاع عليها: بالتوفيق إن شاء الله.
  25. صراحة ليس لدي اطلاع كاف على دورات مجانية في علم البيانات تحديدا، لأنّي شخصيا لم أتعلّمه بهذه الطريقة المنظمة، بل كانت مجرّد دراسة عشوائية لتوثيق مكتبات مثل Numpy و Pandas أثناء تعلّمي لمكتبات تعلّم الآلة والتعلّم العميق مثل Scikit-learn و TensorFlow، وبعض ما تعلّمته كان بفضل دراستي الأكاديمية في الثانوية والجامعة لأننا درسنا كثيرا من دروس الإحصاء. يمكنك أن تبدأ القراءة من هذا المقال فهو يريك الطريق بشكل أوضح ويمكنك من خلاله أن تبحث عن المزيد بطريقة أحسن من الطريقة التي تعلّمت بها:
×
×
  • أضف...