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

حمزة عباد

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

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

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

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

  1. يوجد خطأ على مستوى هذا السطر: n.insert(x,0,a1) التابع insert لا يستقبل 3 قيم، بل 2 فقط. الأوّل هو الفهرس الذي يوضع فيه العنصر، والثاني هو العنصر نفسه. لم أفهم ماذا يفعل هذا البرنامج بالتحديد، لكن يبدو لي أنّك أردت أن تكتب شيئا كهذا: n[x].insert(0,a1) حيث يتم إضافة العنصر a1 في مقدّمة القائمة الداخلية الثانية كل مرّة.
  2. في كل الدورات التي تقدّمها أكاديمية حسوب توجد تمارين ومشاريع للقيام بها ويجب على الطالب القيام بها والاحتفاظ بها ورفعها على GitHub فيما بعد. وعند الوصول إلى نهاية الدورة، يجب على الطالب أن يتقدّم للامتحان النهائي عن طريق التواصل مع الإدارة، حيث سيتم التحقق من فهم الطالب للمكتسبات خلال الدورة ويتم بعد ذلك طرح مشروع للتخرّج منها يختاره المدرّب. للمزيد من المعلومات، يرجى الاطلاع على مركز المساعدة حيث توجد هذه التفاصيل، كما يمكنك من خلاله التواصل مع الإدارة: https://support.academy.hsoub.com/exams
  3. باختصار، نعم هذا ممكن. إليك الشرح التفصيلي لما ستحتاج إليه: قاعدة بيانات: في هذا النوع من التطبيقات، من المفضّل أن تكون قاعدة بيانات علائقيّة تعمل بلغة SQL. إذا كان البرنامج صغيرا ولن يستخدم على نطاق واسع من عدّة مستخدمين في نفس الوقت مثلا، فهنا تكفي SQLite، والتي يأتي دعمها مدمجا في Python. أمّا في حالة ما كان المشروع كبيرا بحيث يعالج كميّة كبيرة من البيانات أو يستخدمه عدد كبير من المستخدمين، ففي هذه الحالة يفترض أن تستخدم قاعدة بيانات متقدّمة مثل MySQL أو PostgreSQL. الواجهة الأماميّة: إذا كان برنامج إدارة المبيعات هذا يظهر كموقع إلكتروني (يعني يظهر من خلال المتصفّح) ففي هذه الحالة يجب أن تكون على معرفة تامّة بلغات HTML و CSS على الأقل، كما يفترض بك أن تتعلّم أيضا واحدة من أطر العمل الخاصة بالواجهات الأماميّة على الويب، وأشهر إطار لهذا هو Bootstrap، لأنه بدون إطار ستكون ملزما بإنشاء صفحاتك من الصفر، وسيكون هذا متعبا جدّا. بالإضافة إلى ذلك، قد تكون محتاجا لمعرفة لغة JavaScript أيضا إذا أردت القيام ببعض المحتوى التفاعلي للمستخدم (الذي أحيانا يكون ضروريّا)، مثل إمكانية إضافة حقول نصّية للإدخال حسب الحاجة. كما قد تحتاج مكتبات JavaScript مثل chart.js لإظهار الرسومات البيانية مثلا. إذا كان البرنامج يعمل كتطبيق حاسوب مثل التطبيقات العادية، فهنا تحتاج إلى تعلّم مكتبة من مكتبات إنشاء الواجهات الرسوميّة، وتوجد العديد من الخيارات مثل Tkinter (مدمجة في بايثون)، Kivy، wxPython، PyQt، وغيرها، لكن أبسطها على الإطلاق (وهي تدعم عددا من المكتبات السابقة) هي PySimpleGUI، لذلك يمكنك تعلّم هذه بسرعة، خلافا للمكتبات السابقة. الواجهة الخلفيّة: إذا اخترت أن تكون الواجهة الأماميّة تظهر من خلال المتصفّح، فهنا قد يكون أحسن خيار هو استخدام إطار عمل Django، فهو مجّاني ومفتوح المصدر، ويدعم قواعد البيانات العلائقيّة التي ذكرتها، ويسهّل لك العمل عليها كثيرا. كما أنّه يحوي واجهة للمدراء بحيث يتمكنون من التعديل على البيانات بكل سهولة بدون الحاجة إلى برمجة واجهة لهم بشكل منفصل. Django يدعم الكثير من المزايا المتقدّمة التي تسهّل التعامل مع البيانات وإنشاء وملء النماذج (forms) والتحقق من صلاحيّة البيانات التي يرسلها المستخدم. كما يختصر عليك كود HTML الذي يجب كتابته عن طريق نظام القوالب (templates) الخاص به. وكذلك يمكن إنشاء واجهة برمجة تطبيقات فوقه عن طريق إطار Django REST API. أما إذا اخترت أن تكون الواجهة الأماميّة كتطبيق عادي، فهنا ستحتاج إلى استخدام قاعدة البيانات مباشرة من البرنامج نفسه. توجد مكتبات قد تساعدك على هذا الأمر تعرف باسم مخططات الكائنات العلائقيّة (Object-relational Mappers (ORMs)) ولعل من أبسطها مكتبة pewee. أعلم أنني قد تكلّمت كثيرا وربّما أكون قد أغرقتك بالمعلومات، أنا آسف، لكني أردت أن أعطيك الصورة كاملة. ومن وجهة نظري، صارت التطبيقات حاليّا أكثر اعتمادا على الويب مما مضى، لذلك، فاستخدام الخيار الثاني (برنامج يعمل كتطبيق حاسوب عادي) قد يكون طريقة قديمة في الوقت الحالي، والطريقة الحديثة هي استخدام تطبيق ويب (يعني يظهر كموقع إلكتروني)، خاصة أن الطريقة الثانية لا تعتمد على نظام تشغيل المستخدم ويسهل نقلها بين الأنظمة والخوادم، خلافا للطريقة الأولى التي يجب أن تعمل على حاسوب المستخدم فقط.
  4. في الحقيقة، المشكلة تبدأ من مستودع GitHub لكنّها تظهر على Render. الكود الذي يتم تشغيله على Render لا يستطيع تعديل الملفّات الموجودة في الكود (وهذا هو المطلوب، حتّى لا يضرّ البرنامج بنفسه) لذلك، فإن حزمة nodemon عندما تحاول العمل وتعديل المجلّد الموجود في الكود، يفشل الأمر على هذا النحو. من المفروض أن لا يتم تضمين الملفّات الموجودة في node_modules لأنها نسخ الحزم المستخدمة على حاسوبك، وليست هي التي يستخدمها Render، بل سيقوم تلقائيا بتثبيتها عنده عن طريق npm install. معلومات هذه الحزم موجودة بالفعل في package.json و package-lock.json. بالإضافة إلى ذلك، ملف .env لا يجب أن يبقى في المستودع لأنّه يحمل معلومات حسّاسة، كما أنك قد أدخلت محتواه بالفعل على Render. لذلك يجب القيام بحذف هذه الملفّات من المستودع عن طريق: git rm --cached .env git rm --cached -r node_modules بعد ذلك، لتجنّب إضافة هذه الملفّات مرّة أخرى عن طريق الخطأ، يرجى إضافة الأسطر التالية في ملف .gitignore node_modules .env نقوم بعد ذلك بحفظ التغييرات الآن عن طريق: git commit -am "Remove unwanted files" ثمّ رفع التغييرات على GitHub: git push --all تحقق من مستودعك على GitHub، يجب أن ترى التغييرات قد ظهرت عليه. إذا تم ذلك بنجاح، يمكنك أن تقوم بإعادة الإجراءات على Render ويفترض أن يختفي المشكل.
  5. أهلا بك سيدي عبد الله. البرمجة بالكلمات البسيطة هي إنشاء مواقع، وتطبيقات حاسوب وهاتف وأمور أخرى مشابهة. التطبيقات والمواقع التي تستخدمها في حياتك اليومية عادة ما تتكوّن من جزأين. هناك جزء ظاهر للمستخدم، وهذا الجزء يتضمّن النص، الصور، الشعارات، الخطوط، وطريقة العرض بشكل عام، كما يحوي الأزرار والحقول النصيّة وكل ما يمكّن المستخدم من التعامل مع الموقع أو التطبيق. هذا الجزء من البرامج يعرف باسم الواجهة الأماميّة (frontend). يوجد جزء أخر غير ظاهر، وهو من يقوم عادة بحفظ البيانات والقيام بالحسابات ومعالجة أمور الدفع وغيرها مما لا يطّلع على كيفيّة القيام بها المستخدم العادي، وهذه الأمور عادة تكون معقّدة عليه ولا يهتم بكيفيّة حصولها، كما أن كثيرا منها هي أمور سريّة لا يسمح بالاطلاع عليها من طرف المستخدمين. هذا الجزء غير المرئي من البرنامج يعرف باسم الواجهة الخلفيّة (backend). لإنشاء أي برنامج متكامل، عادة ما نحتاج إلى إنشاء الواجهتين، الأماميّة والخلفيّة. في البرامج ذات الحجم الصغير أو المتوسط، عادو ما يكون مطوّر الجزأين هو نفس الشخص أو الأشخاص (لذلك يحتاج أغلب المبرمجين لإتقان الجزأين) بينما في البرامج الضخمة، يتخصص مطوّرون في العمل على الواجهة الخلفيّة وآخرون على الواجهة الأماميّة. بالنسبة لدورة واجهات المستخدم، فهذه يمكنك أن تتعلّم منها أساسيّات بناء الواجهات الأماميّة، وهذا شيء جيّد جدّا للبدأ به. عندما تتخرَج من هذه الدورة سيكون بإمكانك دراسة الدورات الأخرى مثل JavaScript، Python، Ruby، لتتعلّم كيفيّة بناء الواجهات الخلفيّة. لمعلومات أكثر تفصيلا، يرجى الاطّلاع على هذه المقالات فهي تتضمّن شرحا ممتازا وأجوبة على كل أسئلة المبتدئين:
  6. مرحبا، لا يوجد أي إزعاج، هذا واجبي. استخدام Docker فكرة جيّدة وتعمل في جميع هذه الحالات. لكن بما أنّك على Linux (وهذا اختيار ممتاز للبرمجة!) يمكنك استخدام أداة pyenv حيث تسمح لك بتثبيت نسخ إضافية من بايثون بدون التأثيرعلى النسخة الحاليّة. حسب التوثيق الرسمي للأداة، يمكن تثبيتها عن طريق: curl https://pyenv.run | bash ثم التعديل على إعدادات Bash عن طريق الأوامر: echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc ثم بعد ذلك تحتاج إلى التأكّد من تنزيل إعتماديّات بناء Python. إذا كنت على Debian أو Ubuntu أو أحد مشتقاتهما يمكن القيام بذلك عن طريق الأمر: sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev curl \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev بعد ذلك، افتح نافذة طرفيّة جديدة، واستخدم الأمر التالي لتثبيت نسخة محددة من بايثون: pyenv install 3.11 والآن لتشغيل إصدار بايثون الذي قمنا بتنزيله، توجد عدّة طرق، لكن أكثرها نظافة هي (حيث تؤثّر على الصدفة Shell الحالية فقط وليس على كامل النظام): pyenv shell 3.11 بعد ذلك، تأكّد من أن الإصدار الصحيح تمّ تفعيله عن طريق: python --version يمكنك الاطلاع على المزيد من المعلومات على توثيق Pyenv الرسمي.
  7. هذه صورة توضّح أجزاء مشروع فلاسك حسب ما شرحه السيد @Mustafa Suleiman إبدأ أوّلا بإنشاء مجلّد المشروع، ثم البيئة الافتراضيّة وتشغيلها، ثم أنشأ الملفات app.py و templates/index.html، ثم بعد ذلك شغّل المشروع بالأمر flask run. إذا لم تستطع تشغيل المشروع حتى بعد هذا فيرجى إرفاق صورة توضّح المشكل من جهتك.
  8. وعليكم السلام ورحمة الله سيّد أويس. أعجبني هذا السؤال كثيرا لأنه يوضّح الخطوات التي قمت بها بالتفصيل ويسمح لنا بتكرارها بنفس الطريقة. يبدو أن الكتاب الذي تعتمد عليه قد كتب منذ مدّة طويلة نسبيّا، وبما أن إصدارات بايثون والمكتبات الأخرى تتغيّر كل بضعة أشهر (أو ربما بضع أسابيع) فهذا الخطأ يحصل بسبب أن بعض تلك المكتبات بالإصدارات الموجودة في requirements.txt قد صارت غير متوافقة حاليّا. أوّلا، لاحظت من رسائل الخطأ أنّك تستخدم Python 3.12، وكما شرحت في جواب سابق، أن TensorFlow لا يعمل على هذه النسخة بعد. لذلك لا مفر من استخدام إصدار أقدم من Python. ثانيّا، بالنسبة للسطر: sklearn==0.0 فهذا لا معنى له ويجب حذفه، لأن مكتبة Scikit Learn تسمى حاليّا: scikit-learn أما بالنسبة للخطأ، فأغلب الظن أنه يحدث بسبب أن المكتبات المستخدمة قديمة. لقد حاولت تثبيت الاعتماديات التي وضعتها هنا مع إصداراتها وقد حصل عندي خطأ (على Python 3.10) وجدت أن مصدره هو Scikit-learn (حتى وإن ظهر أنه يحصل عند Numpy، لأن Scikit-learn يعتمد عليه). قد يكون أسرع حل هو حذف كل أرقام الإصدارات من الملف requirements.txt والإبقاء على أسماء المكتبات فقط لكي يتم تثبيت الإصدارات الحاليّة. لذلك نجعل ملف الاعتماديّات بهذا الشكل: jupyter keras Keras-Preprocessing matplotlib nltk numpy pandas scikit-learn seaborn snowballstemmer tensorflow wordcloud python-bidi arabic-reshaper ثم نشغل الأمرين (الأمر الأول مهم لتحديث pip، حصل عندي خطأ AssertionError عند عدم القيام به): pip install -U pip pip install -r requirements.txt ننتظر بعد ذلك (مدّة طويلة جدّا!) حتى يتم تنزيل وبناء الاعتماديّات. من المفترض أن تتم العمليّة بنجاح. ربّما قد تقع في حالات تحاول فيها تشغيل الشفرة الموجودة في ذلك الكتاب وقد لا تنجح لأن الإصدارات التي قمنا بتثبيتها مختلفة عن التي يستخدمها ذلك الكتاب. في هذه الحالات علينا البحث مرّة أخرى عن كيفيّة تغيير الشفرة حتى تتوافق مع الإصدارات الجديدة.
  9. وعليكم السلام، هذا الخطأ يعني أن إصدار Python التي تستخدمه غير مدعوم من Tensorflow. بالاطلاع على التوثيق الرسمي لتثبيت Tensorflow، نرى أنه يشترط إصدارا بين 3.8 و 3.11، هذا يعني أن أحدث إصدار حاليا، والذي هو 3.12، غير مدعوم بعد (هذه هي العادة، فريق Tensorflow دائما متأخّر في دعم الإصدارات الجديدة). ويشترط أيضا أن تكون نسخة pip أعلى من 19. لذلك، فأول خطوة للحل هي التحقق من إصدار بايثون عن طريق: python --version Python 3.10.12 في حالتي لدي Python 3.10 لذلك يمكنني تثبيت Tensorflow. إذا كانت نسختك تبدأ ب 3.12، فهنا للأسف، تحتاج إلى إلغاء تثبيتها وتثبيت نسخة أقدم منها (في الواقع، يمكنك الاحتفاظ بنسختين من Python على نفس النظام، لكن هذا قد يؤدّي إلى مشاكل عندما تقوم بعض البرامج باستخدام نسخة قديمة وأخرى باستخدام نسخة حديثة، وقد يسبب هذا الكثير من وجع الرأس بالنسبة للمبتدئين، لذلك أفضّل عدم الدخول في هذه المتاهة) يمكنك زيارة صفحة التنزيلات موقع بايثون الرسمي لتنزيل نسخة 3.11 مثلا وتثبيتها: وبعد التنزيل والتثبيت بشكل عادي، يمكنك بعد ذلك أن تثبّت Tensorflow بالطريقة المعروفة: pip install tensorflow
  10. اللغات عالية المستوى (High-level languages) (لغات البرمجة الشهيرة كلّها عالية المستوى) تنقسم إلى مترجمة (مثال: C, C++) ومفسّرة (مثال: Python، JavaScript)، هذا صحيح. أمّا ما يسمى بلغة الآلة فهو في حقيقته نبضات كهربائيّة، يعني 0 يرمز لمستوى تيّار منخفض، و 1 يرمز لمستوى تيّار مرتفع (يمكنك أن تتخيّل كيف يمكن لشخص عادي أن يكتب برنامجا باللعب على مستويات التيّار!). بالنسبة لللغات المترجمة، فهذا ما يحصل بالفعل. وظيفة المترجم (Compiler) في اللغات المترجمة، إذ أنه يحوّل الكود إلى لغة آلة في النهاية لإنشاء ملف قابل للتنفيذ. بينما في اللغات المفسّرة، فالهدف منها هو جعل الكود نفسه يعمل على عدّة أنظمة تشغيل بدون تغيير، لذلك هي ليست مصمّمة لتصبح مترجمة إلى لغة الآلة، لأن الحواسيب تختلف في مواصفاتها وفي أنظمة التشغيل المثبتة عليها ونسخها، لذلك فالكود المترجم قد لا يعمل إلّا على جهاز بمواصفات محدّدة باستخدام نظام تشغيل محدد، بينما يستطيع الكود المفسّر أن يعمل على كثير من الحواسيب والأنظمة دون تغيير. هذا يعني أن الكود المترجم أسرع بمراحل من الكود المفسر، لأن الكود المفسر يتم قراءته من طرف مفسّر اللغة كل مرة قبل تنفيذه، بينما الكود المترجم صار مكتوبا بلغة الآلة ويتم تشغيله بشكل مباشر. لذلك، ظهرت مشاريع تحاول ترجمة الكود المفسّر إلى كود قابل للترجمة، مثل مشروع Cython الذي يسمح بترجمة ملفّات Python إلى ملفّات C قابلة للترجمة. هذه الطرق قد تعمل بشكل مثالي مع البرامج البسيطة لكنّها ستحتاج عملا أكثر في البرامج الكبيرة. بالإضافة إلى ذلك، توجد لغات حديثة مثل Dart أين يمكنك ترجمة الكود أو تشغيله بشكل مفسّر حسب الاختيار! إذا كان المقصود العودة من لغة الآلة إلى الكود البرمجي، فيوجد برامج من هذا النوع تعرف بعاكسات الترجمة (Decompiler). لكن عكس الترجمة ليس بالسهولة التي يبدو عليها. أثناء عمليّة الترجمة، يقوم المترجم بحذف جميع البيانات التي لا تحتاجها الآلة للعمل، مثل التعليقات، وأسماء المتغيّرات والدوال، وأسماء الملفّات، وغير ذلك الكثير! المترجم يقوم بهذا من أجل إنشاء ملفّات صغيرة قدر الإمكان. لذلك، عندما يحاول عاكس الترجمة القيام بالعمليّة العكسيّة، فلن يستطيع استعادة هذه المعلومات المفقودة، وسيقوم بتوليد بيانات عشوائيّة مكانها، مما يجعل الكود المعكوس مختلفا كثيرا عن الكود الأصلي، لذلك لا يمكن التعويل على هذا النوع من البرامج إلا في الحالات الضرورية ومن قبل المختصّين في الهندسة العكسيّة (Reverse engineering) وهذا لوحده علم آخر يجب دراسته لمن هو مهتم بهذا المجال. أمّا إذا كنت تقصد تحويل الكود بين لغات البرمجة المختلفة، فهذا أيضا ممكن في الحالات البسيطة، وقد سهّلت أدوات الذكاء الاصطناعي القيام بهذه المهمّة، فيمكن لهذه الأدوات أن تقوم بتحويل الكود من لغة إلى أخرى بسرعة. لكننا هنا نتحدّث عن كود بسيط لا يستخدم أيّة مكتبات خارجية. أما في المشاريع المعقّدة التي تحوي عشرات المكتبات الخارجيّة، فالأمر صعب جدّا، لأن المكتبات المتوفّرة وطريقة عملها تختلف كثيرا من لغة إلى أخرى، كما أنّ قدرات اللغات تختلف فيما بينها، فمثلا، لغة JavaScript على المتصفّح لا تستطيع الوصول إلى الملفّات، بينما تستطيع العمل بكل سهولة على الصفحة التي يعرضها المتصفّح، بينما لغة Python تستطيع التعامل مع الملفّات بكل سهولة لكنّها لا تستطيع التعامل مع صفحات الويب المعقّدة بنفس كفاءة JavaScript.
  11. بالإضافة إلى الفرق الذي ذكره الأخ السيد التهامي، يوجد فرق آخر ظاهر في نتيجة pip freeze و pip list، يمكننا أن نرى ذلك بتجريب الأمرين: pip list Package Version ----------- -------- pip 23.2.1 PyQt5 5.15.10 PyQt5-Qt5 5.15.2 PyQt5-sip 12.13.0 PyQt5-stubs 5.15.6.0 setuptools 68.2.0 wheel 0.41.2 بينما: pip freeze PyQt5==5.15.10 PyQt5-Qt5==5.15.2 PyQt5-sip==12.13.0 PyQt5-stubs==5.15.6.0 كما ترى، الكتابة التي تظهرها pip list أحسن من ناحية المظهر، وهي موجّهة للإنسان. بينما pip freeze هي مفهومة للآلة، ولهذا هي التي تستخدم لإنشاء الملف requirements.txt ولا يمكن استخدام pip list لإنشاءه لأن ذلك سيجعله غير قابل للقراءة من طرف pip install كما رأينا في الجواب السابق.
  12. مرحبا، أنا حمزة، مهندس في علوم الحاسوب والذكاء الاصطناعي، حاصل على شهادة الماستر من جامعة جزائريّة تسمّى هواري بومدين للعلوم والتكنولوجيا، وهي تقريبا أشهر جامعة على مستوى البلد، وإن كانت ربما غير معروفة في الخارج. أتفهّم تماما مشكلتك، لأني رأيت في جامعتنا (الحقيقيّة وليس الافتراضية، والتي الدراسة فيها مجّانية تقريبا) أننا كنا ندرس تقنيات الثمانينات والتسعينات، وفي أحسن الأحوال، محتوى من 2006، في السنة الدراسيّة 2016 ! لذلك كنت أدرس البرمجة عن طريق التعلّم الذاتي في عطلة الصيف وغيرها وكنت أقوم بمشاريع صغيرة بما تعلّمته حتى أستطيع مواكبة أحدث التقنيّات ولا أبقى عالقا في المستوى المحصّل من الجامعة. في ذلك الوقت، (وربّما في الوقت الحالي أيضا) السوق في الجزائر (وربّما في غيرها من البلدان العربيّة) يشترط عموما وجود شهادة معترف بها للعمل في مجال ما. جميع الشركات تعرف أن الشهادة لوحدها لا تعني شيئا، لأن ما نحصل به على الشهادة قد لا يعني شيئا لمتطلّبات سوق العمل، لكنهم كانوا يشترطون ذلك على أية حال، ثم يقومون بمزيد من الاختبارات على المترشّح للتأكد من كفاءته. هذا الوضع ربّما بدأ يتغيّر مع السنوات الأخيرة، حيث أنني في سنة 2021 عملت في شركة فرنسية-جزائرية تحتاج مطوّري بايثون، ومع ذلك كان معنا في الفريق أشخاص من خلفيّات إلكترونيات وروبوتيكس وفيزياء، وآخرون حتى بدون شهادة جامعيّة! وكان يجمع هؤلاء جميعا أنهم متمكنون من بايثون، بغض النظر عن شهاداتهم. بخصوص ترك الجامعة، لا أستطيع أن أقرر في مكانك خاصّة أني أكملت دراستي وحصلت على الشهادة، لكن ما لاحظته في حياتي هو أنني استفدت أثناء عملي مما تعلّمته بنفسي أضعاف أضعاف ما تعلّمته في الجامعة. لكن يمكنني أن أقول من خلال خبرتي هو أن المهم أكثر هو ما تحسن فعله وليس الشهادة. فأصحاب الأعمال (خاصّة في العمل الحر) يريدون أن يروا ماذا أنجزته من مشاريع سابقة لكي يثقوا فيك ويمنحوك الفرصة لتعمل على مشاريعهم مقابل عائد مادّي.أمّا الشهادة فهي في معظم الأحيان ليست دليلا كافيا على قدرتك على العمل على مشاريعهم. لذلك إذا كنت تنوي العمل كمستقل، أو تريد إنشاء شركتك الخاصّة، أو تعرف أن السوق الذي تستهدفه لا يتطلّب شهادة، فيمكنك أن لا تهتم بمسألة الشهادة وتستثمر وقتك في تطوير مهاراتك بدلا عن ذلك.
  13. بالنسبة لتطوير الواجهات الأماميّة والخلفيّة، فإن دورة JavaScript التي قد تكون قد اطلعت عليها لا تحوي فقط مسألة الواجهات الأماميّة (frontend)، بل الواجهات الخلفيّة أيضا (backend). من وصف الدورة يمكنك أن ترى نقاطا مثل: وبالإضافة إلى ما اقترحه الأخ شهاب، ربّما قد تريد إلقاء نظرة على دورة تطوير التطبيقات باستخدام لغة Python، حيث تتناول هذه الدورة مواضيع تخصّ الواجهات الخلفيّة مثل: بالإضافة إلى ذلك، هذه الدورة تعلّمك أساسيّات تعلّم الآلة والذكاء الاصطناعي، مما يجعلك قادرا على استغلال هذه التقنيّات المفيدة في هذا العصر لبناء تطبيقات أكثر فائدة.
  14. وعليكم السلام ورحمة الله وبركاته. هذه الأسئلة جيّدة جدّا لكلّ شخص يتعلّم لغة بايثون. هذه إجاباتي عليها: virtualenv أو venv اختصارا هي وحدة تمثّل جزء من المكتبة القياسيّة في بايثون (Python Standard Library) وظيفتها إنشاء بيئة افتراضية، وهذه تعني نسخة من بايثون مع بعض المكتبات الأساسيّة (مثل pip) والتي توفّر للمبرمج إمكانية تثبيت مكتبات أخرى، بحيث تكون هذه النسخة منفصلة تماما عن النسخة الأصليّة الموجودة على النظام. يتم هذا عن طريق الأمر (على ويندوز): python -m venv c:\path\to\myenv حيث المسار الموجود في النهاية هو المسار الذي تريد إنشاء البيئة الافتراضية فيه. مثلا إذا أردنا إنشاء بيئة افتراضيّة في المجلّد الحالي اسمها env فسنكتب: python -m venv env هكذا نكون قد أنشأنا بيئة افتراضية شبه فارغة. لتشغيل البيئة الافتراضيّة، يتم كتابة الأمر التالي من مجلّد المشروع الذي يحوي البيئة الافتراضية (بافتراض أن اسمها env): على ويندوز باستخدام cmd: env\Scripts\activate.bat على الأنظمة الأخرى باستخدام bash: source env/bin/activate بعد ذلك، يمكن تثبيت أيّة مكتبة مطلوبة باستخدام pip، وسيتم تثبيتها تلقائيّا داخل البيئة الافتراضية: pip install numpy وكل ملف أو مشروع بايثون يتم تشغيله داخل هذه البيئة سوف يستخدم المكتبات المثبّتة تلقائيا. لرؤية جميع المكتبات التي تم تثبيتها في البيئة الحالية (ملاحظة: هذا يتضمّن حتى المكتبات التي لم تقم بتثبيتها أنت، بل تم تثبيتها من طرف الاعتماديّات تلقائيّا): pip freeze وإذا أردت مشاركة المشروع مع غيرك، فمن المستحسن أن يكون هناك ملف يسمى requirements.txt يحوي جميع الاعتماديّات اللازمة لتشغيل المشروع. يمكن كتابة هذا الملف يدويّا، لكن أسهل طريقة لإنشاءه هي باستخدام الأمر: pip freeze > requirements.txt يمكن للشخص الآخر تثبيت الاعتماديّات بعد إنشاء بيئة افتراضيّة عنده عن طريق: pip install -r requirements.txt للخروج من البيئة الافتراضيّة، يمكن ببساطة إغلاق النافذة التي تعمل فيها، أو بطريقة أحسن باستخدام الأمر: deactivate بالنسبة لاستخدام البيئة الافتراضيّة، فمن المفروض أن يتم استخدامها في كل مشروع بايثون يتطلّب تثبيت اعتماديّات (dependencies)، لأن تثبيت الاعتماديّات بدون استخدام بيئة افتراضية يجعلها تثبّت على بيئة النظام مباشرة. كلّما كثرت المشاريع والبرامج التي تستخدم بايثون على الجهاز، وكانت جميعها تثبّت اعتماديّاتها على بيئة النظام، فهنا يزيد احتمال التضارب بين اعتماديّات تلك البرامج والمشاريع، فمثلا، قد يتطلّب أحد المشاريع استخدام آخر نسخة من Numpy، بينما لا يعمل المشروع الآخر بتلك النسخة ويتطلّب نسخة أقدم. في هذه الحالة، سيكون من المستحيل استخدام كل من المشروعين في نفس الوقت، إذ أن تثبيت اعتماديّات واحد منهما سيعطّل عمل المشروع الآخر والعكس. في مثل هذه الحالات، استخدام البيئة الافتراضيّة يصبح ضروريّا، بحيث يتم انشاء بيئة افتراضيّة لكلّ مشروع ويمكن تثبيت اعتماديّات كل مشروع على حدة. الأحسن أن تستخدم البيئة الافتراضية لكلّ المشاريع التي لديها اعتماديّات كما فصّلت في النقطة السابقة. لكن إذا كان عندك مشروع بسيط لا يستخدم سوى بايثون بدون أي مكتبة، فهنا لا حاجة إلى إنشاء بيئة افتراضيّة. استخدام البيئة الافتراضية لا علاقة له بطبيعة المشروع أو تصنيفه أو حجمه أو ماهية المكتبات المستخدمة، البيئة الافتراضيّة تعمل بنفس الطريقة مع كل المكتبات والمشاريع. نعم هناك فرق. في الواقع، خلافا لـvenv التي هي جزء من المكتبة القياسيّة في بايثون، pipenv هي مكتبة بايثون خارجيّة تقوم بنفس دور إنشاء البيئات الافتراضيّة لكنها تملك امكانيّات اضافيّة متقدّمة مقارنة بـvenv، مثل إنشاء بيئة افتراضيّة بشكل تلقائي والتحكّم بالاعتماديّات ونسخها بطريقة أكثر سهولة و مميّزات أخرى كثيرة ومفيدة لتسريع العمل. pipenv ليست المكتبة الوحيدة التي تقوم بهذه الأمور، توجد واحدة أخرى مثلا تسمى Poetry وهي التي أفضّلها شخصيّا وأستخدمها في كل مشاريعي الكبيرة. لكن بالنسبة للمبتدئين في البرمجة باستخدام بايثون (وكذلك بالنسبة لي عندما أعمل على مشاريع صغيرة) فإن استخدام venv هو الأحسن، لأن venv وإن كان ينقصها بعض الميزات إلا أنّ التعامل معها بسيط ويمكن تعلّمها في وقت قصير كما أنّها تأتي مدمجة مع بايثون ولا تحتاج إلى تثبيتها بشكل منفصل.
  15. وعليكم السلام ورحمة اللع وبركاته. ما هو الأمر الذي استخدمته لتثبيت المكتبة بالضبط وما هو الخطأ الذي ظهر؟ حسب التوثيق من الموقع الرسمي، يمكن تثبيتها ببساطة عن طريق الأمر: pip install matplotlib لكن هذا الأمر قد يفشل إذا كان Python مثبتا في مكان لا تملك الصلاحية عليه، لذلك يمكنك أن تحاول باستخدام الأمر: pip install --user matplotlib وهذا يضمن أن التثبيت سيكون في مكان تملك صلاحية استخدامه. إذا ظهر خطأ آخر، فمن المحتمل أنه بسبب مشكل سابق، لذلك يمكنك أن تحاول إلغاء تثبيته: pip uninstall matplotlib ثم حاول التثبيت مرّة أخرى باستخدام الأمر السابق. إذا لم تفلح محاولاتك فيرجي نسخ نص الخطأ أو تصويره لكي نستطيع رؤية المزيد من التفاصيل.
  16. وعليكم السلام ورحمة الله. نظرا لأن الشفرة الكاملة للبرنامج (أو الجزء الذي يمكن تجريبه) غير متوفرة في هذه المشاركة، فسأحاول الإجابة لكني لن أستطيع تجريبها عندي من أجل التأكّد. فكرة استخدام self.tree.delete() لحذف كل السجلّات لا تبدو صحيحة خاصة في ذلك المكان. أعتقد أن هذا الكود سيحذف كل شيء بما في ذلك السجلات التي نبحث عنها. بدلا من ذلك، توجد طريقة أنظف تستخدم self.tree.detach(child) لنزع السجل من مكانه مع إمكانية حفظه في مكان آخر لكي يتم استرجاعه لاحقا. باستخدام هذه الطريقة، يمكننا كتابة الكود التالي: def search(self, Key): query = self.entry1.get() selections = [] self.detached_items = {} for child in self.tree.get_children(): if query in self.tree.item(child)['values']: selections.append(child) else: parent = self.tree.parent(child) self.tree.detach(child) self.detached_items[child] = parent self.tree.selection_set(selections) هذه الوظيفة تقوم بالتحديد مثل سابقتها وكذلك ينزع السجلات التي لا تطابق البحث ويخزنها في self.detached_items. لاستعادة السجّلات المنزوعة يمكننا فعل ذلك عن طريق كتابة واستدعاء وظيفة مثل هذه: def restore(self): for child, parent in self.detached_items.items(): self.tree.reattach(child, parent, "end") self.detached_items = {}
  17. وعليكم السلام. أنت تحاول القيام بـupgrade لـpip وهذا شيء يقوم بتعديل pip نفسه. لو كنت على Linux فهذا لن يحدث مشكلا لأن Linux بإمكانه أن يكتب فوق ملفات البرنامج الذي هو قيد التشغيل، ولكن هذا غير ممكن على Windows. لذلك عليك أن تقوم بالـupgrade من خلال Python نفسه. وقد اختصر pip عليك الوقت وأعطاك الأمر الذي يجب كتابته مباشرة: C:\Users\Dell\AppData\Local\Programs\Python\Python312\python.exe -m pip install pip -U فقط جرّبه ومن المفروض أن يعمل بشكل صحيح.
  18. مرحبا! توجد مشكلتان رئيسيتان في الكود الذي كتبته: في الحلقة الداخلية، المتغيّر j يتقدم بـ4 كل مرّة، وهذا يجعله يقفز فوق العديد من الأسماء بدون أن يتم اختبارها أساسا. عمليّة المقارنة في الاختبار الموجود في الحقلة الداخليّة تقارن أسماء المدراء بالموظفين مباشرة ولا تقارن الحروف الأولى. لذلك فالمقارنة ستكون دائما خاطئة إلا في حالة ما كان اسم الموظف مطابقا لاسم المدير (وهذا ما ليس موجودا في المثال). لمقارنة الحرف الأول بين الاسمين ما عليك إلا استخدام .charAt(0) على كل واحد منهما ومقارنة تطابقهما كما تفعل. باختصار، الكود بعد التصحيح هو هذا (أضفت بعض التصحيحات الخفيفة الأخرى): let myAdmins = ["Ahmed", "Osama", "Sayed", "Stop", "Samera"]; let myEmployees = ["Amgad", "Samah", "Ameer", "Omar", "Othman", "Amany", "Samia", "Anwar"]; let admins3 =3; document.write(`<div>We Have ${admins3} Admins</div>`); document.write("<div>"); for (let i = 0; i < myAdmins.length ; i++){ document.write(`<p>${"_".repeat(25)}<p/>`) if(myAdmins[i] === 'Stop'){ break; } document.write(`<p>The Admin For Team ${i + 1} is ${myAdmins[i]}</p>`) document.write("<h3>Team Members :</h3>") for (let j = 0; j < myEmployees.length; j++ ) { if (myAdmins[i].charAt(0) === myEmployees[j].charAt(0)) { document.write(`<p>${j + 1} - ${myEmployees[j]}</p>`) } } } document.write("</div>") النتيجة:
  19. مرحبا سيدتي آمال. انت لم تحددي ما هو السؤال لا في العنوان ولا في النص (بالمناسبة، من المفترض أن لا يكون الكود في العنوان)، لكن إذا كان المطلوب هو شرح هذا الكود، فإليك الشرح: هذا الكود يحتوي على دالة max_product_remainder تأخذ قائمة من الأعداد الصحيحة (nums) وعددا صحيحا موجبا (modulo) كمعاملات. عملها هو إيجاد أكبر حاصل ضرب ممكن بين عنصرين من القائمة، ثم أخذ باقي القسمة لهذا الحاصل على العدد modulo. الدالة ترجع هذا الباقي كنتيجة. تتبع الدالة الخطوات التالية: ترتب القائمة nums ترتيبا تنازليا باستخدام الدالة sort مع المعامل reverse=True. هذا يعني أن أكبر عنصر في القائمة سيكون في الموضع الأول، وأصغر عنصر سيكون في الموضع الأخير. تحسب أكبر حاصل ضرب ممكن بين عنصرين من القائمة بضرب أول عنصرين في القائمة (nums[0] * nums[1]). القائمة مرتبة بالترتيب التنازلي، فلا يوجد عنصرين آخرين يمكن أن يكون حاصل ضربهما أكبر من حاصل ضرب أول عنصرين. تحسب باقي القسمة لهذا الحاصل على العدد modulo باستخدام العامل %. ترجع هذا الباقي كنتيجة باستخدام الكلمة المفتاحية return. بعد تعريف الدالة، يتم استدعاؤها ثلاث مرات مع قوائم مختلفة من الأعداد (numbers_0, numbers_1, numbers_2) ونفس العدد modulo (998244353). كل مرة، يتم تخزين النتيجة في متغير (result_0, result_1, result_2) وطباعتها باستخدام الدالة print مع رسالة توضح رقم السؤال الفرعي.
  20. مثلما قال الأخ مصطفى، تحتاج إلى استخدام برنامج لتحرير الأكواد. أمّا الأماكن التي يتم كتابة الكود فيها، فتوجد عدّة ملفّات، ويمكن إنشاء ملفات إضافية كثيرة، لكن مبدئيّا هذه أهمّها (project هو اسم المشروع هنا، app هو اسم التطبيق): project/settings.py هذا يحوي إعدادات المشروع. project/urls.py هذا يحوي كيفية تحويل روابط الموقع إلى التطبيقات المختلفة. app/urls.py هذا يربط روابط التطبيق مع العروض (views) الخاصَة به. app/views.py هذا يتضمّن الدوال (functions) والصفوف (classes) التي يتم استخدامها لعرض الصفحات و تشكيل الردود (responses). app/models.py هذا يحوي النماذج (أي جداول قاعدة البيانات) التي تتعامل مع البيانات قراءة وكتابة وتخزينا. app/templates هذا مجلّد يحوي القوالب الخاصة بالصفحات التي يتم عرضها من قبل التطبيق بعد ملئها بالمحتوى المناسب. لا يمكن تفصيل ما يجب كتابته في كل هذه الملفات وغيرها، لأن ذلك يحتاج إلى سلسلة دروس في إطار عمل Django. لكن يمكنني أن أحيلك إلى سلسلة مقالات متميّزة كتبتها الأخت Ola Abbas تدرّس فيها كيفية بناء موقع حقيقي باستخدام Django حيث تجد شرحا مفصّلا لما يوضع في هذه الملفّات وأكثر من ذلك.
  21. خوارزمية إقليدس (Euclidean Algorithm) هي طريقة رياضيّة لحساب القاسم المشترك الأكبر بين عددين طبيعيين (يرمز لها بـGCD في المقررات الدراسية الإنجليزية و PGCD في المقررات الفرنسية). مبدأها يقوم على تقسيم العدد الأكبر على العدد الأصغر بقسمة صحيحة و استخدام باقي القسمة في الخطوة التالية عن طريق قسمة العدد الذي كان قاسما على باقي القسمة، وتستمر العملية هكذا حتى يصبح الباقي صفرا. عندما يصبح الباقي صفرا، يكون القاسم في هذه العمليّة هو القاسم المشترك الأكبر. وحتى لا يكون الكلام نظريّا، سأضع دالة مكتوبة مرّة بلغة Python و مرّة بلغة JavaScript تقوم بإيجاد القاسم المشترك الأكبر باستخدام خوارزميّة إقليدس (العامل % يحسب باقي القسمة مباشرة، لذلك ليس علينا أن نحسب حاصل القسمة في لغات البرمجة كما نفعل في الرياضيّات): # دالة بلغة Python def gcd(x, y): # تحقق من أن العددين موجبين if x < 0 or y < 0: return None # استخدم خوارزمية أقليدس باستخدام باقي القسمة while y != 0: # احفظ قيمة y في متغير مؤقت temp = y # اجعل y يساوي باقي قسمة x على y y = x % y # اجعل x يساوي قيمة y السابقة x = temp # ارجع قيمة x كالقاسم المشترك الأكبر return x // دالة بلغة JavaScript function gcd(x, y) { // تحقق من أن العددين موجبين if (x < 0 || y < 0) { return null; } // استخدم خوارزمية أقليدس باستخدام باقي القسمة while (y != 0) { // احفظ قيمة y في متغير مؤقت let temp = y; // اجعل y يساوي باقي قسمة x على y y = x % y; // اجعل x يساوي قيمة y السابقة x = temp; } // ارجع قيمة x كالقاسم المشترك الأكبر return x; }
  22. أهلا، أنا أحد المبرمجين وعملت على موقع مستقل وخمسات. أريد أن أخبرك أن الزبائن لا يهتمون عادة لشهاداتك (فهم لا يعرفون كيف حصلت عليها ولا حتى قيمتها في الواقع) ولا خبرتك التي تكتبها عن نفسك (فهم لا يصدقون كلامك بهذه البساطة)، ولكنهم يهتمون بشيئين أساسيين: مشاريعك السابقة، وتقيمك من طرف الزبائن الآخرين. بالنسبة للتقييم من الزبائن، فهذا صعب للحصول عليه، خاصّة أنه يرتبط بكل موقع على حدة. يعني أنك لو حصلت على تقييم في موقع ما، فلن يعني شيئا عندما تذهب للعمل من خلال موقع أو شركة أخرى، لذلك سنتجاوز هذه النقطة في البداية. أما مشاريعك السابقة، فهذه هي حجر الأساس في بدايتك. المشاريع السابقة يقصد بها كل عمل جيد قمت به بحيث يثبت مهارتك. قد تسأل: كيف تحصل على المشاريع السابقة؟ ببساطة بالقيام بها. من سيطلب منك القيام بها ومن سيستلمها منك؟ ببساطة لا أحد. المشاريع السابقة ليس بالضرورة أن تكون موجهة لتلبية طلبات شخص معين، بل يمكن القيام بمشاريع من أجل التدرّب على ما تعرفه ثم عرضها على الزبائن لكي يقتنعوا أنك قادر على إنشاء شيء جيّد. من أين آتي بأفكار لهذه المشاريع؟ ببساطة، من أي مكان، بما في ذلك من آراءك الشخصيّة. لكن إذا كنت تريد إنشاء شيئ مطلوب عند الزبائن، فيمكنك تصفّح ما يطلبونه (على مستقل مثلا) ثم اختيار طلب يبدو متوافقا مع ما تحسن فعله، ثم تقوم به بنفسك كتدريب. في هذه المرحلة، لا تقم بإرسال عرض إلى الزبون ولا تحاول إقناعه باختيارك لأنك ستفشل في غالب الأمر، لكن فقط قم بالمشروع بينك وبين نفسك. كرر هذا الأمر مع عدد من المشاريع (3 على أقل تقدير) ثم بعد ذلك يمكنك وضعها على ملفّك الشخصي واستخدامها كدليل على خبرتك. كيف أقنع الزبون بأني أحسن القيام بما يطلب؟ هنا تجنّب مدح نفسك وذكر خبرتك فقط، فهذا لا يهم الزبون كثيرا. لكن اكتب له جوابا تشرح فيه كيف ستقوم بالعمل وماذا سيكلف وماذا ستحتاج منه، واعرض عليه إضافات قد لا يكون هو نفسه منتبها لها. وكذلك حاول عرض شيء مشابه قمت به من قبل أو حاول إنشاء نسخة مصغرة من متطلباته قبل ارسال العرض حتى تثبت له أنك فهمت المتطلبات وقادر على إنجاز ما يحتاج إليه. أتمنى لك التوفيق.
  23. الرقم الفردي هو كل رقم ليس زوجيّا. للتحقق من أن الرقم زوجي يكفي التأكد من أنه قابل للقسمة على 2 (باقي القسمة = 0)، بينما الرقم الفردي خلاف ذلك. يعني: X = 15 # التحقق من قابلية العدد للقسمة على 2 if X % 2 == 0: print(f"{X} عدد زوجي") else: print(f"{X} عدد فردي")
  24. مرحبا! طريقة تثبيت Django لا تختلف عن أيّة مكتبة Python أخرى. لذلك، فأوّل شيء هو القيام بتثبيت Python نفسه. احذف كل النسخ السابقة التي لم يتم تثبيتها بشكل صحيح، ثم توجه إلى موقع Python الرسمي، وقم بتحميل أحدث نسخة (حاليا هي نسخة 3.12.1). قم بتثبيت Python ولا تنس إضافته إلى Path (هذا مهم جدّا ويحل كثيرا من المشاكل). بعد ذلك، افتح الـCommand Prompt وداخلها اكتب الأمرين: python --version ثم pip --version إذا ظهرت لك نتيجة تشبه هذه (يعني Python و pip يظهرون نسخهم بشكل صحيح، وكذلك pip موجودة في المكان الذي تم تثبيت Python فيه) فهذا يعني أن Python مثبت بنجاح ويمكننا تثبيت Django. بالاطلاع على موقع Django الرسمي، فإن طريقة تثبيته لا تختلف عن أية مكتبة أخرى: نكتب الأمر pip install Django و ننتظر حتى يتم التثبيت: يمكننا أن نتأكد من النسخة المثبتة عن طريق الأمر python -m django --version الآن يمكننا أن نعمل على إنشاء مشروع جديد: django-admin startproject example_django_project ثم ندخل إليه عن طريق cd example_django_project ثم يمكننا أن نشغل المشروع عن طريق python manage.py runserver طبعا هذا مشروع فارغ لذلك لن يعمل حقيقة، لذلك يجب عليك كتابة الكود في الأماكن الصحيحة، لكن مجرد رؤية هذه النتائج تعني أن Django يعمل بشكل صحيح.
×
×
  • أضف...