thaer mohamad

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

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

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

  • Days Won

    1

السُّمعة بالموقع

20 Excellent
  1. مقدمة: إن Django هو عبارة عن إطار عمل برمجي مفتوح المصدر لتطوير تطبيقات الويب مكتوب بلغة البرمجة Python، ويقوم على النمط البنائي للبرمجيات model template view (MTV) أي النموذج-القالب-العرض، والمُستمد من النمط البنائي model–view–controller (MVC) أي النمط والعرض والمتحكم. حيث قامت مؤسسة إطار العمل Django البرمجية بتعريف النمط model على أنه مصدر مفرد ومحدد من البيانات، والعرض view على أنه عبارة عن البيانات التي يتم إظهارها للمستخدم والناتجة عن استدعاء دالة لغة البرمجة Python الخاصة بالاستجابة لطلب العناوين الالكترونية URL، والقالب على أنه عبارة عن الآلية التي يستخدمها Django لتوليد صفحات HTML. إن مبادئ إطار العمل البرمجي Django هي: قابلية التوسُّع وإعادة الاستخدام وسرعة التطوير، كما يمتاز بالتماسك واستقلالية مكوناته عن بعضها. أي أن إطار العمل Django يقوم على المبدأ البرمجي لا تكرر نفسك DRY programming . سنشرح في هذه المقالة طريقة تهيئة البيئة البرمجية لإطار العمل Django، كما سيتم شرح طريقة تنصيب Python 3 وpip 3 وDjango وvirtualenv لتزويدك بالأدوات الضرورية لتطوير تطبيقات الويب باستخدام إطار العمل Django. المتطلبات: حساب مستخدم عادي (غير جذر "root") بصلاحيات sudo مُهيّأ مسبقًا على خادم لينكس Debian أو Ubuntu. الخطوة الأولى- تنصيب Python ومدير الحزم pip: قبل البدء بتنصيب لغة البرمجة Python، يجب القيام بتحديث نظام التشغيل عن طريق تنفيذ الأمر التالي في موجه أوامر لينكس: sudo apt-get update && sudo apt-get -y upgrade حيث تم استخدم العلم -y من أجل تأكيد موافقتنا على تنصيب جميع البرامج والحزم البرمجية المحدَّثة (كي لا نقوم بتأكيد الموافقة يدويًا أثناء عملية التحديث). وعند السؤال عن إعداد grub-pc نضغط المفتاح ENTER لقبول الإعدادات الافتراضية، أو نُعدّه كما نريد. تنصح مؤسسة إطار العمل Django البرمجية باستخدام الإصدار Python 3 من لغة البرمجة Python، لذا بعد انتهاء عملية تحديث النظام سنقوم بتنصيب Python 3، وذلك بتنفيذ الأمر التالي في موجه أوامر لينكس: sudo apt-get install python3 وللتأكّد من أنه تم تنصيب Python 3 بنجاح، ننفذ أمر عرض إصدارها في موجه الأوامر: python3 –V فنحصل على الخرج التالي في نافذة موجه الأوامر: Output Python 3.5.2 بعد تنصيب Python 3، سنقوم بتنصيب الأداة pip الخاصة بإدارة وتنصيب حزم Python البرمجية، وذلك بتنفيذ الأمر التالي: sudo apt-get install -y python3-pip وللتأكد من نجاح عملية تنصيب الأداة pip، ننفذ أمر عرض إصدارها في موجه الأوامر: pip –V فنحصل على الخرج التالي في نافذة موجه الأوامر: Output pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5) الآن وبعد أن تم الانتهاء من تنصيب أداة تنصيب وإدارة الحزم pip، نستطيع استخدامها لتنصيب الحزم الضرورية لبيئة Python البرمجية. الخطوة الثانية- تنصيب البيئة الافتراضية Virtualenv البيئة الافتراضية virtualenv هي عبارة عن بيئة تطوير برمجية معزولة عما حولها، والتي تسمح لنا بتنصيب البرامج وحزم Python بشكل مضمَّن فيها، وبالتالي تمنع تفاعل هذه البرامج والحزم مع البيئة العامة للخادم. هذا ويتم تنصيب البيئة الافتراضية باستخدام أداة تنصيب وإدارة الحزم كما يلي: pip3 install virtualenv وللتأكد من أنه تم تنصيب virtualenv بنجاح، ننفذ أمر عرض إصدارها كما يلي: virtualenv –-version فنحصل على الخرج التالي في نافذة موجه الأوامر: Output 15.1.0 أي أنه تم تنصيب البيئة الافتراضية virtualenv بنجاح، وبالتالي أصبح بإمكاننا عزل تطبيق الويب الذي سوف نطوره بإطار العمل Django وكل ما يتعلق به من برمجيات عن باقي مشاريع وحزم Python البرمجية الموجودة على النظام. الخطوة الثالثة- تنصيب إطار العمل البرمجي Django: هناك ثلاث طرق لتنصيب إطار العمل البرمجي Django هي: الخيار الأول: تنصيب إطار Django ضمن البيئة الافتراضية virtualenv. وتعد هذه الطريقة مثالية عند الرغبة بعزل Django عن بيئة الخادم العامة. الخيار الثاني: تنصيب إطار Django من المصدر، تُستخدم هذه الطريقة عند الرغبة بتنصيب آخر إصدار Django مباشرةً من مصدره، في حال لم يتوفرا في مخزن Ubuntu APT. غير أن طريقة التّنصيب هذه تتطلب الانتباه والترقية المستمرة عند الرغبة بالمحافظة على Django محدثًا بشكل مستمر. الخيار الثالث: تنصيب إطار Django بشكل عام باستخدام أداة تنصيب الحزم pip. سنستخدم في هذه المقالة الخيار الثالث في تنصيب إطار العمل Django ضمن البيئة الافتراضية، لكن علينا في البّداية إنشاء مجلد جديد باسم django-apps (أو أي اسم آخر) ضمن المسار home على الخّادم، من أجل احتواء تطبيق Django الخّاص بنا، وذلك بتنفيذ الأوامر التالية في موجه أوامر النّظام: mkdir django-apps cd django-apps ثم نقوم بإنشاء بيئتنا الافتراضية باسم env ضمن المجلد django-apps، وذلك بتنفيذ الأمر التالي في موجه أوامر النظام: virtualenv env ثم نقوم بتفعيل بيئتنا الافتراضية env، وذلك بتنفيذ الأمر التالي: . env/bin/activate فيتحول موجه الأوامر من النظام إلى البيئة الافتراضية كما يلي: (env) sammy@ubuntu:$ والآن سنقوم بتنصيب django ضمن البيئة الافتراضية env، عن طريق الأداة pip كما يلي: (env) sammy@ubuntu:$ pip install django وللتأكد من أنه تم تنصيب إطار العمل django بنجاح، ننفذ أمر عرض إصداره كما يلي: (env) sammy@ubuntu:$ django-admin –-version فنحصل على الخرج التالي في نافذة موجه الأوامر: Output 2.0.1 الآن وبعد أن تم تنصيب إطار العمل django بنجاح، نستطيع الانتقال لإنشاء مشروع تجريبي للتأكد من أن كل شيء يعمل بشكل سليم. الخطوة الرابعة- إنشاء مشروع تجريبي بإطار العمل Django: سنقوم باختبار إطار العمل البرمجي Django المُنصَّب من خلال إنشاء هيكل تطبيق الويب. ضبط إعدادات جدار الحماية: في البداية يجب علينا إن كان ممكنًا فتح المنفذ الذي سوف نستخدمه في جدار حماية الخادم، وفي حال كانت أداة إعداد جدار الحماية UFW مُنصّبة على الخادم، يمكن عندها فتح منفذ بتنفيذ الأمر التالي: (env) sammy@ubuntu:$ sudo ufw allow 8000 وفي حال كُنت تَستخدم جدار حماية DigitalOcean، قم باختيار HTTP من بين قواعد دخل جدار الحماية. بدء المشروع: نستطيع الآن توليد مشروع جديد عن طريق الأداة django-admin والمستخدمة في إدارة المهام في Python، وذلك باستخدام الأمر startproject من أجل إنشاء بنية مسار المشروع (الملفات والمجلدات الأساسية) لموقع الويب التجريبي، وذلك كما يلي: (env) sammy@ubuntu:$ django-admin startproject testsite نستطيع الآن الانتقال إلى مسار المشروع لتصفح ملفاته ومجلداته التي تم إنشائها وذلك بتنفيذ الأوامر التالية: (env) sammy@ubuntu:$ cd testsite (env) sammy@ubuntu:$ ls Output manage.py testsite نلاحظ أن هذا المسار يحتوي على الملف manage.py والمجلد testsite. إن الملف manage.py مشابه للأداة django-admin حيث يقوم بوضع حزمة المشروع في sys.path، كما يقوم بإعداد متغيرات البيئة ل DJANGO_SETTINGS_MODULE بحيث تشير إلى ملف المشروع settings.py. هذا ويمكن عرض محتويات الملف manage.py باستخدام الأمر less كما يلي: (env) sammy@ubuntu:$ less manage.py وعند الانتهاء من قراءته نضغط المفتاح q للخروج منه. والآن سننتقل إلى المجلد testsite لتصفح باقي الملفات التي تم إنشائها وذلك بتنفيذ الأوامر التالية: (env) sammy@ubuntu:$ cd testsite/ (env) sammy@ubuntu:$ ls Output __init__.py settings.py urls.py wsgi.py نلاحظ أنه يحتوي على مجموعة من الملفات هي: __init__.py: يلعب هذا الملف كنقطة دخول إلى مشروع Python. settings.py: يصف هذا الملف إعدادات الإطار Django الذي تم تنصيبه، كما يسمح للإطار Django بمعرفة الخيارات المتاحة. urls.py: ويتضمن هذا الملف على اللائحة urlpatterns والتي تُستخدم لتوجيه العناوين الالكترونية URLs إلى العروض الموافقة لها views. wsgi.py: ويتضمن على إعدادات واجهة مدخل خادم الويبWeb Server Gateway Interface (WSGI)، والتي هي منصة Python القياسية المستخدمة في نشر خوادم وتطبيقات الويب على استضافة الويب. بدء وعرض موقع الويب الذي تم إنشائه: نستطيع الآن تشغيل الخادم runserver وعرض الموقع على المضيف والمنفذ المخصص، وذلك بتنفيذ الأمر: (env) sammy@ubuntu:$ runserver يجب إضافة عنوان IP الخادم إلى لائحة ALLOWED_HOSTS ضمن الملف settings.py الموجود في المسار: ~/test_django_app/testsite/testsite/. يتضمن المتغير ALLOWED_HOSTS لائحة من السلاسل النصية التي تمثل أسماء المضيف والنطاق host/domain التي يستطيع Django خدمتها، حيث تم وضع معيار الأمان هذا لمنع اختراقات الترويسة والتي يمكن أن تتم حتى ولو تم مراعاة الكثير من إعدادات الأمان لخادم الويب. يمكنك استخدم أي محرر نصوص من أجل إضافة عنوان IP الخادم الخاص بك إلى الملف settings.py، فمثلا يمكنك استخدام محرر نصوص موجه الأوامر nano بتنفيذ الأمر التالي: (env) sammy@ubuntu:$ nano ~/django-apps/testsite/testsite/settings.py فبعد أن يُفتح الملف عليك الانتقال إلى قسم ALLOWED_HOSTS ثم إضافة عنوان IP الخادم الخاص بك ضمن القوسين وبين علامة أو علامتي تنصيص كما هو موضح في الملف التالي: ثم قم بحفظ التعديل وإنهاء المحرر nano وذلك بالضغط على المفاتيح CONTROL وX ثم ضغط المفتاح y (نعم) عند سؤال المحرر عن الرغبة بحفظ التعديلات على الملف، ثم العودة إلى مسار المشروع بتنفيذ الأمر التالي: (env) sammy@ubuntu:$ cd ~/django-apps/testsite/ بعد العودة لمسار المشروع، ننفذ الأمر التالي بعد استبدال your-server-ip بعنوان IP الخادم الذي قمنا بتخصيصه في الخطوة السابقة: (env) sammy@ubuntu:$ python3 manage.py runserver your-server-ip:8000 ثم نقوم بإدخال العنوان http://your-server-ip:8000/ طبعاً بعد استبدال your-server-ip بعنوان IP الخادم، في المتصفح من أجل عرض موقع الويب التجريبي الذي قمنا بإنشائه فيظهر كما يلي: وهذا يؤكد على أنه تم تنصيب إطار العمل البرمجي Django بشكل صحيح، وعلى أن مشروعنا التجريبي يعمل بشكل صحيح أيضًا. بعد الانتهاء من تصفح الموقع نقوم بإيقاف الأمر runserver وذلك بالضغط على المفاتيح CTRL وC، فنعود إلى موجه أوامر بيئتنا الافتراضية. ثم نقوم بالخروج من البيئة الافتراضية والرجوع إلى موجه أوامر النظام وذلك بتنفيذ الأمر التالي: (env) sammy@ubuntu:$ deactivate ملخص: تم في هذه المقالة شرح طريقة تحديث Python 3 لآخر إصدار لها من مخزن Ubuntu APT، كما تم شرح طريقة تنصيب أداة تنصيب وإدارة الحزم pip 3، والبيئة الافتراضية virtualenv، والإطار البرمجي Django. ترجمة بتصرف للمقال: [How To Install Django and Set Up a Development Environment on Ubuntu 16.04] لصاحبه Jeremy Morris
  2. السلام عليكم أن كنت نعمل على نظام Ubuntu فإن لغة البرمجة Python 3 تكون منصبة بشكل افتراضي قم في البداية بتحديث النظام بتنفيذ الأمر التالي في موجه أوامر النظام: $ sudo apt-get update $ sudo apt-get -y upgrade ثم قم بالتأكد من وجود الاصدار كما يلي: $ python3 –V يجب أن تكون نتيجة التنفيذ قريبة من الخرج التالي: Python 3.5.2 سنقوم الآن بتنصيب الأداة pip الخاصة بإدارة حزم Python البرمجية, وذلك بتنفيذ الأمر التالي: $ sudo apt-get install -y python3-pip تُستخدم الأداة pip من أجل تنصيب وإدارة حزم Python البرمجية المراد استخدامها في عملية تطوير المشاريع البرمجية, حيث يتم تنصيب حزم Python البرمجية بتنفيذ الأمر التالي: $ pip3 install package_name حيث package_name هو اسم حزمة Python البرمجية المراد تنصيبها, والتي يمكن أن تكون مثلاً الحزمة Django المستخدمة في تطوير تطبيقات الويب. أرجو ان أكون قد وفُقت في حل مشكلتك وشكرا
  3. يؤمن تطبيق المفكرة Jupyter Notebook موجه أوامر تفاعلي شبيه بتطبيقات الويب، والذي يمكن استخدامه مع العديد من لغات البرمجة مثل Python و Julia و R و Haskell و Ruby، وذلك في التطبيقات الخاصة بالبيانات والإحصاء والذكاء الصناعي. سيتم في هذه المقالة شرح طريقة تهيئة وإعداد تطبيق المفكرة Jupyter Notebook للعمل مع أكواد لغة البرمجة Python 3 محليًا أو من الخادم Ubuntu 16.04 server. إن تطبيق المفكرة Jupyter Notebook هو عبارة عن برنامج مفكرة يقوم بتوليد المستندات المتضمنة على الأكواد البرمجية والشروحات والصور والمخططات البيانية والمعادلات الرياضية، لاستخدامها في عرض وتطوير ومشاركة الأبحاث العلمية. المتطلبات قبل البدء يجب توفر بيئة برمجية مهيّأة محليًا (على الحاسب الشخصي) أو على الخادم Ubuntu 16.04 مع امتلاك صلاحية مدير النظام (المستخدم الجذر root) أو استخدام الأمر sudo عند تنفيذ الأوامر في موجه أوامر لينكس. الخطوة الأولى- تنصيب تطبيق المفكرة Jupyter Notebook سيتم استخدام أداة إدارة الحزم pip لتنصيب تطبيق المفكرة Jupyter Notebook في بيئة Python البرمجية المُنشأة مسبقًا. لكن يجب في البداية الانتقال إلى المجلدenvironments الخاص ببيئة Python البرمجية my_env المُنشأة مسبقًا وتفعيلها، وذلك بتنفيذ الأوامر التالية في موجه أوامر النظام: sammy@ubuntu:~$ cd ~/environments sammy@ubuntu:~/environments$ . my_env/bin/activate (my_env) sammy@ubuntu:~/environments$ ثم علينا التأكد من أن الأداة pip محدّثة لآخر إصدار وذلك بتنفيذ الأمر التالي: (my_env) sammy@ubuntu:~/environments$ pip install --upgrade pip ثم نقوم عن طريق الأداة pip بتنصيب تطبيق المفكرة Jupyter Notebook في البيئة البرمجية my_env، وذلك بتنفيذ الأمر التالي: (my_env) sammy@ubuntu:~/environments$ pip install jupyter وهكذا تم تنصيب تطبيق المفكرة Jupyter Notebook في البيئة البرمجية. الخطوة التالية وهي اختيارية للذين يريدون الاتصال عبر قناة الاتصال SSH بواجهة الويب التفاعلية لتطبيق المفكرة Jupyter Notebook المنصَّب على الخادم. الخطوة الثانية (اختيارية)- الاتصال بتطبيق المفكرة Jupyter Notebook المنصَّب على الخادم عبر قناة الاتصال SSH سيتم في هذه الخطوة شرح طريقة الاتصال بواجهة الويب التفاعلية لتطبيق المفكرة Jupyter Notebook المنصَّب مسبقًا على الخادم، وذلك عبر قناة الاتصال SSH. حيث تؤمن قناة الاتصال SSH اتصالاً آمنًا بتطبيق المفكرة Jupyter Notebook كونه يستخدم منفذ محدد في الخادم (مثل المنفذ :8888 أو :8889 الخ). سيتم في الفقرتين التاليتين شرح طريقة إنشاء قناة الاتصال SSH. الأولى من نظام التشغيل ماكنتوش أو لينكس، والثانية من نظام التشغيل ويندوز. طريقة إنشاء قناة الاتصال SSH من نظام التشغيل ماكنتوش أو لينكس سيتم في هذه الفقرة شرح طريقة إنشاء قناة اتصال SSH من نظام التشغيل ماكنتوش أو لينكس، باستخدام الأمر ssh مع مجموعة من المعاملات التي تؤمن نجاح عملية الاتصال. يمكن إنشاء قناة اتصال SSH جديدة بتنفيذ الأمر التالي في نافذة جديدة لموجه أوامر النظام: $ ssh -L 8888:localhost:8888 your_server_username@your_server_ip حيث يستخدم الأمر ssh من أجل فتح اتصال SSH، في حين يستخدم العلم -L لتحديد المنفذ المعطى في المضيف المحلي (العميل) الذي سيتم توجيهه إلى المنفذ والمضيف البعيد (الخادم) المعطى، أي أن أي شيء سيعمل على المنفذ الثاني (مثلا 8888) على الخادم، سيظهر على المنفذ الأول (مثلا 8888) على العميل (الحاسب الشخصي). ويفضل تغيير رقم المنفذ 8888 إلى أي رقم آخر اختياري لتجنب وجود عملية أخرى تعمل على نفس المنفذ. إن المُعامل your_server_username هو اسم المستخدم (مثلا sammy) الذي تم إنشاؤه مسبقًا على الخادم، والمُعامل your_server_ip هو عنوان IP للخادم (مثلا 203.0.113.0). أي يصبح الأمر السابق بعد إدخال اسم المستخدم وعنوان IP للخادم كما يلي: $ ssh -L 8888:localhost:8888 sammy@203.0.113.0 وفي حال نجاح عملية الاتصال بالخادم وعدم حدوث أي خطأ، ينتقل موجه أوامر النظام إلى البيئة البرمجية المهيّأة مسبقًا على الخادم كما يلي: (my_env) sammy@ubuntu:~/environments$ ثم نقوم بتشغيل تطبيق المفكرة Jupyter Notebook المنصَّب مسبقًا في بيئتنا البرمجية كما يلي: (my_env) sammy@ubuntu:~/environments$ jupyter notebook والآن أصبح بالإمكان التفاعل مع تطبيق المفكرة Jupyter Notebook من خلال واجهة الويب التفاعلية الخاصة به، وذلك بإدخال العنوان الالكتروني http://localhost:8888 في المتصفح، كما يجب إدخال السلسلة الرمزية token الخاصة بالتصديق عند طلبها من قبل المتصفح، أو كتابتها بعد العنوان في المتصفح. طريقة إنشاء قناة الاتصال SSH من نظام التشغيل ويندوز عن طريق Putty تستخدم الأداة Putty لإنشاء قناة اتصال SSH في نظام التشغيل ويندوز، لذا يجب في البداية تنصيبها، وعند فتحها تظهر واجهة الأداة كما هو موضح بالشكل التالي: حيث يتم إدخال العنوان الإلكتروني URL للخادم أو عنوان IP ضمن حقل اسم المضيف Host Name، ثم الضغط على الخيار SSH في أسفل النافذة اليسارية من واجهة الأداة، فتظهر قائمة منسدلة من الخيارات، نختار منها الخيار Tunnels فتظهر في النافذة اليمينية مجموعة من خيارات التحكم بقناة الاتصال SSH كما هو موضح بالشكل التالي: ثم نقوم بإدخال رقم منفذ الحاسب الشخصي المراد استخدامه لتطبيق المفكرة Jupyter Notebook (مثلًا 8888)، ضمن حقل منفذ المصدر Source port، ويفضل أن يكون رقم هذا المنفذ أكبر من 8888 لضمان عدم وجود أي تطبيق أخر يعمل على هذا المنفذ. ثم ندخل العنوان localhost:8888 في حقل الهدف Distination حيث :8888 هو رقم المنفذ الذي يعمل عليه تطبيق المفكرة Jupyter Notebook في الخادم، ثم نضغط على زر الإضافة Add، فيظهر المنفذ في قائمة المنافذ الموجَّهة Forwarded ports. وأخيرًا نضغط على زر الفتح Open من أجل الاتصال بالخادم عن طريق قناة الاتصال SSH، ثم ندخل العنوان localhost:8888 (طبعًا يجب أن يكون رقم المنفذ موافقًا لرقم المنفذ الذي تم اختياره) في متصفح الويب من أجل الاتصال بتطبيق المفكرة Jupyter Notebook العامل على الخادم، كما يجب إدخال السلسلة الرمزية token الخاصة بالتصديق عند طلبها من قبل المتصفح، أو كتابتها بعد العنوان في المتصفح. الخطوة الثالثة- تشغيل تطبيق المفكرة Jupyter Notebook بعد الانتهاء من تنصيب تطبيق المفكرة Jupyter Notebook، يصبح بالإمكان تشغيله من موجه أوامر النظام بتنفيذ الأمر التالي: (my_env) sammy@ubuntu:~/environments$ jupyter notebook فيُطبع في نافذة موجه الأوامر سجل معلومات تشغيل تطبيق المفكرة Jupyter Notebook كما يلي: [I NotebookApp] Serving notebooks from local directory: /home/sammy [I NotebookApp] 0 active kernels [I NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/ [I NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). ... حيث تتضمن هذه المعلومات على رقم المنفذ الذي يعمل عليه التطبيق، وعند تشغيل التطبيق لأول مرة سيكون رقم المنفذ 8888. يقوم المتصفح الافتراضي تلقائياً بفتح واجهة الويب التفاعلية الخاصة بتطبيق المفكرة Jupyter Notebook عند تشغيله على الحاسب الشخصي (ليس على الخادم)، وفي حال لم يتم ذلك أو تم إغلاق المتصفح، يمكن إعادة فتحه من جديد بإدخال عنوانه http://localhost:8888/ الظاهر في سجل معلومات التطبيق في المتصفح. يتم إنهاء تطبيق المفكرة Jupyter Notebook بالضغط على المفاتيح CTRL و C ثم ضغط المفتاح y (نعم) عند السؤال عن تأكيد عملية الإنهاء، ثم ضغط المفتاح ENTER، فتُطبع رسالة تأكيد عملية إنهاء التطبيق التالية في نافذة موجه الأوامر: [C 12:32:23.792 NotebookApp] Shutdown confirmed [I 12:32:23.794 NotebookApp] Shutting down kernels الخطوة الرابعة- استخدام تطبيق المفكرة Jupyter Notebook سيتم في هذه الفقرة شرح أساسيات استخدام تطبيق المفكرة Jupyter Notebook، لكن يجب في البداية تشغيله إن لم يكن في حالة العمل، وذلك بتنفيذ الأمر التالي: (my_env) sammy@ubuntu:~/environments$ jupyter notebook نستطيع الآن الإتصال به والتفاعل معه من خلال واجهة الويب التفاعلية. يمتاز تطبيق المفكرة Jupyter Notebook بالقوة حيث يحتوي على الكثير من الميزات، لكن سيقتصر الشرح على بعض الميزات الأساسية التي تسمح بمباشرة العمل على هذا التطبيق. يعرض تطبيق المفكرة Jupyter Notebook جميع الملفات والمجلدات الواقعة ضمن المسار الذي تم تشغيله منه، لذا يجب تشغيله دائمًا من مسار المشروع البرمجي الذي يتم العمل عليه. يتم إنشاء ملف مفكرة Jupyter Notebook جديد بالضغط على خيار جديد New الموجود في الزاوية اليمينية العُلوية من واجهة الويب التفاعلية، فتظهر قائمة منسدلة نختار منها Python 3 كما هو موضح بالشكل التالي: فيُفتح الملف الجديد المُنشأ ضمن واجهة الويب التفاعلية. نستطيع الآن كتابة وتنفيذ كود Python ضمن خليّة الكود البرمجي. كما يمكن تغيير هذه الخلية لتقبل لغة التوصيف Markdown، وذلك بالضغط على خيار الخلية Cell ثم خيار نوع الخلية Cell Type ثم خيار التوصيف Markdown من الشريط العلوي، فيصبح بالإمكان الآن استخدام هذه الخلية لكتابة الملاحظات وحتى تضمين المعادلات الرياضية المكتوبة بلغة LaTeX بعد وضعها بين الرمزين ($$)، فمثلا يمكن كتابة كود التوصيف التالي ضمن الخلية بعد تحويلها لخلية توصيف: # Simple Equation Let us now implement the following equation: $$ y = x^2$$ where $x = 2$ يتم تحويل هذا الكود إلى نص بضغط المفاتيح CTRL و ENTER فنحصل على النتيجة التالية: وهكذا نلاحظ أنه يمكن استخدام خلايا التوصيف من أجل توثيق الكود البرمجي. سنقوم الآن بإنشاء معادلة رياضية بسيطة ونطبع نتيجة تنفيذها، وذلك بالضغط على الخلية العلوية ثم الضغط على المفاتيح ALT و CTRL من أجل إنشاء خلية جديدة تحتها ثم ندخل فيها الكود التالي: x = 2 y = x**2 print(y) ثم نقوم بتنفيذ الكود بضغط المفاتيح CTRL و ENTER فنحصل على النتيجة التالية: أصبح بمقدورك الآن وبعد أن تعلمت أساسيات تطبيق المفكرة Jupyter Notebook ، أن تقوم باستيراد النماذج البرمجية، وأن تستخدم هذه المفكرة كما تريد مع أي بيئة برمجية أخرى. ملخص أصبحت قادرا الآن على كتابة أكواد Python والملاحظات القابلة للتطوير والمشاركة، بعد أن تعلمت كيفية تنصيب وتشغيل والعمل على تطبيق المفكرة Jupyter Notebook. يمكن الحصول على مزيد من المعلومات والمساعدة حول كيفية استخدام هذه المفكرة، بالدخول إلى User Interface Tour عن طريق الخيار Help الموجود في الشريط العلوي من واجهة الويب التفاعلية. ترجمة المقال How To Set Up Jupyter Notebook for Python 3 لصاحبته Lisa Tagliaferri
  4. تعدّ لغة البرمجة Python من لغات البرمجة متعددة الأغراض، حيث يمكن استعمالها في كثير من المشاريع المختلفة. ظهرت لغة البرمجة Python أول مرة سنة 1991 باسم مستوحى من الفرقة الكوميدية البريطانية Monty Python، حيث أراد مطورو هذه اللغة أن تكون لغتهم البرمجية مسلّية للمبرمجين الذين سوف يعملون عليها. إن لغة البرمجة Python سهلة التنصيب، وتعتمد الأسلوب الصريح والواضح في كتابة الكود البرمجي، كما تؤمن وسيلة التعقب المباشر للأخطاء البرمجية، لذا فهي الخيار الأنسب للمبرمجين المبتدئين والمحترفين على حد سواء. إن أحدث إصدار حاليًا من لغة البرمجة Python هو Python 3، حيث راعى مطوروها أن يكون هذا الإصدار مستقبل لغة البرمجة Python. سيتم في هذه المقالة شرح طريقة تنصيب Python 3 على الحواسب الشخصية العاملة بنظام التشغيل Ubuntu 16.04، وتهيئة البيئة البرمجية لهذه اللغة عن طريق سطر الأوامر. ويمكن استخدام هذه الطريقة لتنصيب وتهيئة البيئة البرمجية Python 3 على أي نظام تشغيل لينكس. المتطلبات قبل البدء يجب أن يتوفر حاسب شخصي منصّب عليه نظام التشغيل Ubuntu 16.04 مع امتلاك صلاحية مدير النظام، وأن يكون هذا الحاسب موصولًا بشبكة الإنترنت. الخطوة الأولى- تنصيب Python 3 ستتم عملية التنصيب عن طريق سطر الأوامر، وهو عبارة عن موجه أوامر نظام التشغيل لينكس والذي يتم عن طريقه التفاعل مع نظام التشغيل وتنفيذ المهام المختلفة، من خلال إدخال الأوامر على شكل نص مكتوب ضمن نافذة موجه الأوامر، ثم ضغط مفتاح الإدخال ENTER فتظهر نتيجة تنفيذ الأمر المُدخل على شكل نص ضمن نافذة موجه الأوامر. ويعد موجه أوامر لينكس الأداة الأساسية لمطوري البرمجيات لأنها تمنحهم قدرة التحكم الكاملة بنظام التشغيل لينكس. يتم فتح نافذة موجه أوامر لينكس في نظام التشغيل Ubuntu 16.04 بإدخال الكلمة terminal في شريط البحث الموجود في الزاوية اليسارية العلوية من الشاشة، فتظهر أيقونة موجه أوامر لينكس، وعند الضغط عليها تفتح نافذة موجه أوامر لينكس. كما يمكن فتحها بشكل آلي عن طريق الضغط على CTRL + ALT + T من لوحة المفاتيح، فتظهر نافذة موجه أوامر لينكس كما هو موضح بالشكل التالي: يحوي نظام التشغيل Ubuntu 16.04 على الإصدارين Python 2 و Python 3 من لغة البرمجة Python بشكل افتراضي، لكن من أجل التأكد من أن هذين الإصدارين من لغة البرمجة Python محدثين بآخر تحديث، يجب القيام بتحديث نظام التشغيل عن طريق تنفيذ الأوامر التالية في موجه أوامر لينكس: $ sudo apt-get update $ sudo apt-get -y upgrade تم استخدم العلم -y من أجل تأكيد موافقتنا على تنصيب جميع البرامج والحزم البرمجية المحدَّثة (كي لا نقوم بتأكيد الموافقة يدويًا أثناء عملية التحديث). بعد الانتهاء من عملية تحديث النظام (وبالتالي تحديث إصدارات Python)، يمكن التأكد من إصدار Python 3 المنصب على الحاسب بتنفيذ الأمر التالي في موجه أوامر لينكس: $ python3 –V فنحصل على الخرج التالي في نافذة موجه الأوامر: Python 3.5.2 طبعًا قد يختلف الخرج في حال وجود إصدار أحدث في الوقت الذي تم فيه إجراء عملية تحديث النظام. سنقوم الآن بتنصيب الأداة pip الخاصة بإدارة حزم Python البرمجية، وذلك بتنفيذ الأمر التالي: $ sudo apt-get install -y python3-pip تُستخدم الأداة pip من أجل تنصيب وإدارة حزم Python البرمجية المراد استخدامها في عملية تطوير المشاريع البرمجية، حيث يتم تنصيب حزم Python البرمجية بتنفيذ الأمر التالي: $ pip3 install package_name حيث package_name هو اسم حزمة Python البرمجية المراد تنصيبها، والتي يمكن أن تكون مثلاً الحزمة Django المستخدمة في تطوير تطبيقات الويب، أو الحزمة NumPy المستخدمة في التطبيقات العلمية. أي أنه يتم تنصيب الحزمة NumPy بتنفيذ الأمر التالي في موجه أوامر لينكس: $ pip3 install numpy بقي علينا تنصيب بعض الحزم البرمجية وأدوات التطوير الضرورية لتعزيز بيئتنا البرمجية، وذلك بتنفيذ الأمر التالي في موجه أوامر لينكس: $ sudo apt-get install build-essential libssl-dev libffi-dev python-dev والآن وبعد أن تم تنصيب Python 3 و pip وغيرها من الأدوات البرمجية، أصبح بالإمكان تهيئة البيئة البرمجية الافتراضية الخاصة بتطوير المشاريع البرمجية بلغة البرمجة Python. الخطوة الثانية- تهيئة البيئة البرمجية الافتراضية تؤمن البيئة البرمجية الافتراضية مساحة معزولة على الحاسب لمشاريع لغة Python، وبالتالي تؤمن لكل مشروع متطلباته البرمجية من برامج وحزم برمجية دون أن تؤثر هذه المتطلبات البرمجيات على المشاريع الأخرى، حيث يمكن أن يكون لمشروعين نفس المتطلبات البرمجية ولكن بإصدارات مختلفة. كما تؤمن البيئة البرمجية الافتراضية تحكمًا كاملًا بالمشاريع وبإصدارات متطلباتها البرمجية من حزم وغيرها. يمكن تهيئة العديد من البيئات البرمجية الافتراضية وذلك حسب الحاجة لها. وكل بيئة افتراضية هي عبارة عن مجلد على الحاسب يحوي في داخله على مجموعة ملفات وبرمجيات وظيفتها جعل هذا المجلد بيئة مستقلة برمجيًا. حيث تستخدم الأداة البرمجية venv من أجل إنشاء البيئة البرمجية الافتراضية (توليد الملفات والبرمجيات العازلة للمجلد)، وهي عبارة عن جزء من مكتبة Python 3 القياسية، ويتم تنصيبها على الحاسب بتنفيذ الأمر التالي في موجه أوامر لينكس: $ sudo apt-get install -y python3-venv والآن وبعد تنصيب الأداة venv أصبح بالإمكان إنشاء بيئة برمجية افتراضية، وذلك باختيار المجلد المراد إنشاء بيئة Python الافتراضية فيه أو القيام بإنشاء مجلد جديد وذلك بتنفيذ الأمر التالي: $ mkdir environments $ cd environments ثم القيام بتنفيذ الأمر التالي لإنشاء بيئة Python الافتراضية ضمن المجلد: $ python3 -m venv my_env حيث يقوم هذا الأمر بإنشاء مجلد جديد my_env يتضمن مجموعة من الملفات والبرمجيات، والتي يمكن تصفحها بتنفيذ الأمر التالي: $ ls my_env Output bin include lib lib64 pyvenv.cfg share وظيفة هذه الملفات والبرمجيات جعل مشاريع Python التي سيتم إنشاؤها في المجلد environments مستقلة عما حولها، وبالتالي تمنع اختلاط ملفات المشروع مع ملفات نظام التشغيل والمشاريع الأخرى، وتحدد الحزم البرمجية الخاصة بكل مشروع. يجب تفعيل بيئة Python البرمجية قبل البدء باستعمالها وذلك بتنفيذ الأمر التالي: $ source my_env/bin/activate حيث يتم في هذا الأمر استدعاء البرمجية المسؤولة عن تفعيل البيئة البرمجية. وعند نجاح عملية التفعيل يصبح موجه أوامر لينكس مسبوقًا باسم البيئة البرمجية التي تم إنشاؤها: (my_env) Sammy@sammy:~/environments$ وهذا يدل على أن بيئة Python البرمجية المفعّلة هي my_env وبالتالي فإن أي مشروع برمجي سيتم إنشاؤه هنا سيستخدم الحزم البرمجية والإعدادات الموجودة في هذه البيئة فقط. الخطوة الثالثة- إنشاء برنامج بسيط بعد الانتهاء من تهيئة بيئة Python البرمجية الافتراضية، لابد من تجربتها واختبارها. وذلك بإنشاء مشروع برمجي بسيط بلغة البرمجة Python وهو برنامج Hello World!. سنقوم بإنشاء ملف البرنامج وكتابة كوده البرمجي باستخدام محرر نصوص موجه أوامر لينكس nano وذلك بتنفيذ الأمر التالي: (my_env) Sammy@sammy:~/environments$ nano hello.py بعد أن يفتح محرر النصوص، نكتب كود البرنامج في محرر النصوص كما يلي: print("Hello، World!") ثم نقوم بحفظ البرنامج وإنهاء المحرر nano، وذلك بالضغط على المفاتيح CONTROL و X ثم ضغط المفتاح y (نعم) عند سؤال المحرر عن الرغبة بحفظ التعديلات على الملف. بعد أن تم الانتهاء من كتابة برنامج Hello World! بلغة Python أصبح بالإمكان تشغيله وتجربته عن طريق إدخال الأمر python متبوعًا باسم ملف البرنامج hello.py ضمن موجه أوامر لينكس كما يلي: (my_env) Sammy@sammy:~/environments$ nano hello.py Output Hello، World! للخروج من بيئة البرمجية (إلغاء تفعيلها) ننفذ الأمر deactivate في موجه أوامر لينكس فنعود إلى موجه أوامر لينكس الاعتيادي: (my_env) Sammy@sammy:~/environments$ deactivate Sammy@sammy:~$ ملخص تم في هذه المقالة شرح طريقة تنصيب Python 3 وتهيئة بيئتها البرمجية الافتراضية على نظام التشغيل Ubuntu 16.04، من أجل استخدامها في تطوير مشاريع Python البرمجية. ترجمة المقال How To Install Python 3 and Set Up a Local Programming Environment on Ubuntu 16.04 لصاحبته Lisa Tagliaferri
  5. تستخدم الأصناف في البرمجة الغرضية التوجيه من أجل إنشاء الأغراض، وإعطاء القيم الابتدائية للمتغيرات المستنسخة. لكل صنف اسم خاص يعبر عن نوعه ووظيفته. تعريف الأصناف جميع الأصناف في Ruby مستنسخة من الصنف الرئيسي Class، حيث يتم تعريف الأصناف في لغة Ruby كما يلي: يبدأ الصنف بالكلمة الدلالية class وبعدها يكتب اسم الصنف. يجب أن يبدأ اسم الصنف بحرف كبير. وفي حال كان اسم الصنف مكون من عدة كلمات، يتم تمييز هذه الكلمات بكتابة أول حرف من كل كلمة بالنمط الكبير وباقي الأحرف صغيرة، كونه لا يمكن استخدام فراغات فاصلة بين الكلمات في أسماء الأصناف. يمكن أن يحتوي الصنف على متغير الصنف، والمتغير المستنسخ، ودالة الصنف، بالإضافة لإمكانية استدعاء الدوال الأخرى مثل الدالة attr_accessor (دوال الولوج). ينتهي الصنف بالكلمة الدلالية end. يوضح المثالي التالي طريقة تعريف الأصناف: class SampleClass # some code describing the class behavior def sample_method end end الاستنساخ يتم إنشاء الأغراض من الأصناف بعملية تسمى الاستنساخ، حيث يصبح الغرض عبارة عن نسخة من الصنف الذي تم استنساخه عنه. تنفذ عملية الاستنساخ باستخدام الدالة new مع اسم الصنف المراد إنشاء الغرض منه كما هو موضح بالمثال التالي: std1 = Student.new(parameters) المتغيرات المستنسخة وهي المتغيرات التي يتم تعريفها ضمن دوال الأصناف بإضافة الرمز @ لبداية اسم المتغير. وينحصر نطاقها فقط على الغرض المُنشأ من الصنف، ولا يمكن الولوج إليها وإظهار قيمها أو تعديلها إلاّ من خلال الدالة التي عُرّفت فيها (دوال الولوج). سيتم توضيح هذه المتغيرات من خلال المثال التالي: class Calculation @x = 100 def add_num @x = 200 end def show_data puts 'Value of x is : '، @x end end instance = Calculation.new instance.show_data instance.add_num instance.show_data Output Value of x is : Value of x is : 200 نلاحظ أن الخرج الأول الدالة show_data من الغرض instance والمُنشأ من الصنف Calculation فارغ، لأن قيمة المتغير المستنسخ @x مازالت nil (لا شيء) بالرغم من أنه تم إسناد القيمة 100 لهذا المتغير في بداية تعريف الصنف Calculation، وذلك لأن طريقة التعريف هذه خاطئة للمتغير المستنسخ @x، حيث يجب أن يتم تعريفه ضمن دوال الصنف فقط، بالتالي تم تجاهل هذا التعريف. أما الخرج الثاني لهذه الدالة أصبح 200 لأنه تم تنفيذ الدالة add_num (التي عُرّف فيها) من الغرض instance والتي قامت بتهيئة المتغير المستنسخ @x بالقيمة 200. دوال الولوج وهي دوال الصنف التي تعرَّف ضمنها المتغيرات المستنسخة، حيث تُستخدم هذه الدال من أجل الولوج إلى المتغيرات المستنسخة للأغراض من أجل قراءة قيمها أو تعديلها. يوضح المثال التالي هذه الدوال: class MyData def set_data(n) @x = n end def get_data @x end end d = MyData.new puts d.set_data(1000) puts d.get_data Output 1000 1000 حيث يحتوي الصنف MyData على دالتي ولوج هما: الدالة set_data لتعديل قيمة المتغير المستنسخ @x، والدالة get_data لقراءة قيمة هذا المتغير المستنسخ. متغيرات الأصناف وهي المتغيرات المعرفة في بداية الصنف بإضافة الرمز @@ لبداية اسم المتغير، حيث يتم مشاركة قيمها مع جميع الأغراض المُنشأة من هذا الصنف وكذلك مع جميع الأصناف المورَّثة من هذا الصنف، على عكس المتغيرات المستنسخة التي لا يتم مشاركة قيمها بين الأغراض. والمثال التالي يوضح هذه المتغيرات: class MyData @@x = 1 def add_n @@x = @@x + 10 end def value @@x end end ins1 = MyData.new ins2 = MyData.new puts ins1.value ins1.add_n puts ins1.value puts ins2.value Output 1 11 11 المتغيرات المستنسخة للأصناف تختلف هذه المتغيرات عن متغيرات الأصناف، بأنه يتم مشاركة قيمها مع الأغراض المُنشأة من هذا الصنف فقط، كما هو موضح بالمثال التالي: class Employee class << self; attr_accessor :instances; end def store self.class.instances ||= [] self.class.instances << self end def initialize name @name = name end end class Overhead < Employee; end class Programmer < Employee; end Overhead.new('Martin').store Overhead.new('Roy').store Programmer.new('Erik').store puts Overhead.instances.size # => 2 puts Programmer.instances.size # => 1 Output 2 1 دوال الأصناف يتم تعريف دوال الأصناف بنفس طريقة تعريف دوال Ruby الاعتيادية باختلاف وحيد، وهو إضافة اسم الصنف أو الكلمة الدلالية self وبعدها نقطة قبل اسم الدالة. يتم استدعاء دوال الأصناف على مستوى الصنف الذي عرفت فيه دون الحاجة لوجود غرض مُنشأ من هذا الصنف. كما يمكن لدوال الأصناف الولوج إلى متغيرات الأصناف لكنها لا تستطيع الولوج إلى المتغيرات المستنسخة (فقط دول الولوج تستطيع ذلك). يوضح المثال التالي كيفية تعريف واستدعاء دوال الأصناف: class Student def self.no_students puts 'There are five hundred students in my school.' end end Student.no_students Output There are five hundred students in my school. مستويات الوصول لدوال الأصناف هنالك ثلاث مستويات للوصول إلى دوال الأصناف هي: الدوال العامة: إن دوال الأصناف في Ruby هي دوال عامة بشكل افتراضي، أي يمكن لأي أحد الوصول إليها، وتشكل واجهة التخاطب للأصناف، حيث يتم من خلالها تبادل المعطيات بين الصنف والعالم الخارجي. الدوال الخاصة: يتم تحديدها بالكلمة الدلالية private، وهي للاستخدام الداخلي فقط ضمن الصنف (يمكن استدعائها خارجياً عن طريق دالة عامة تحوي على هذه الدالة الخاصة مثل whisper_louder)، حيث يمكن الوصول إليها واستخدامها فقط من قبل الدوال الموجودة ضمن تعريف الصنف نفسه أو الأصناف المورَّثة منه، بشرط أن يكون استدعائها صريح (مثل whisper) دون أن تكون مضمّنة في غرض آخر حتى ولو كان من نفس الصنف (مثل self.whisper). عند الرغبة باستدعاء هذه الدوال خارج الصنف عن طريق استدعائها بشكل مضمّن في الدوال العامة كما هو موضح بالمثال التالي: class Person def speak puts "Hey، Tj!" end def whisper_louder whisper end def whisper_louder_with_self self.whisper end # private methods are for internal usage within the defining class private def whisper puts "His name's not really 'Tj'." end end a_hater = Person.new a_hater.speak # استدعاء دالة عامة a_hater.whisper # استدعاء دالة خاصة خارج الصنف a_hater.whisper_louder # استدعاء دالة عامة تحوي على دالة خاصة صريحة a_hater. whisper_louder_with_self # استدعاء دالة عامة تحوي على دالة خاصة مضمنة Output "Hey، Tj!" NoMethodError "His name's not really 'Tj'." NoMethodError الدوال المحمية: ويتم تحديدها بالكلمة الدلالية protected، وهي نفس الدوال الخاصة بفارق أساسي هو إمكانية استدعائها داخليا بشكل مضمّن في غرض من نفس الصنف كما هو موضح بالمثال التالي: class User def say_secret_with_self self.secret end protected def secret "secret" end end u = User.new u.say_secret_with_self # => استدعاء دالة عامة تحوي على دالة محمية مضمنة Output "secret" دوال القراءة والكتابة الشخصية تُنشأ المتغيرات المستنسخة لكل غرض مُنشأ من صنف، لتستخدم بشكل أساسي ضمن هذا الغرض، لكنها لا تشبه الدوال الخاصة من حيث اقتصارها على الاستخدام الداخلي. حيث يمكن إظهار وتعديل قيمها من خارج الغرض، وذلك عن طريق تعريف دوال القراءة والكتابة الشخصية (مشابه لدوال الولوج). يوضّح المثال التالي طريقة تعريف دالة القراءة (student_name) التي تقوم بقراءة قيمة المتغير المستنسخ: class Student def initialize(student_name، id) @student_name = student_name @id = id end def student_name @student_name end end std1 = Student.new("Sara"، 5) puts std1.student_name Output Sara والمثال التالي يوضّح طريقة تعريف دالة الكتابة (sname=) والتي تقوم بتغيير قيمة المتغيّر المستنسخ: class Student def initialize(sname) @sname = sname end def sname @sname end def sname=(new_name) @sname = new_name puts @sname end end # you could the access @sname variable as a = Student.new('Sara') puts a.sname a.sname ='Robin' Output Sara Robin دوال القراءة والكتابة الافتراضية يمكن تنفيذ جميع وظائف قراءة وتعديل قيم المتغيرات المستنسخة عن طريق الدوال attr_accessor و attr_reader و attr_writer والموجودة في لغة Ruby بشكل افتراضي، حيث تستخدم الدالة attr_accessor لتنفيذ عمليتي القراءة والكتابة معًا في هذه المتغيرات كما هو موضح بالمثال التالي: class Student def initialize(sname) @sname = sname end attr_accessor :sname end # attr_accessor generates variable @sname accessor methods automatically: a = Student.new('Sara') puts a.sname a.sname = 'Robin' puts a.sname Output Sara Robin أما الدالة attr_reader فتستخدم لتنفيذ عملية القراء فقط، والدالة attr_writer فتستخدم لتنفيذ عملية الكتابة فقط كما هو موضّح بالمثال التالي: class Student attr_reader :sname attr_writer :sname end s1 = Student.new s2 = Student.new s1.sname = "Sara" s2.sname = "Robin" puts s1.sname puts s2.sname Output Sara Robin ثوابت أصناف لغة Ruby يمكن أن تعرّف الثوابت ضمن الأصناف، لكن يمكن الولوج إليها من خارج الأصناف على خلاف المتغيرات المستنسخة التي تحتاج لدوال خاصة لتنفيذ ذلك، ويوضح المثال التالي طريقة تعريف الثوابت ضمن الأصناف، واستخدامها داخل وخارج الأصناف: class ConstClass Color1='Red' Color2='Green' Color3='White' def show puts "#{Color1} #{Color2} #{Color3}" end end puts( ConstClass::Color1) ConstClass.new.show Output Red Red Green White الوراثة وهي العلاقة بين صنفين، حيث يمكن لصنف أن يرث الوظائف والمتغيرات من صنف أعلى منه مرتبة، ويسمى عندها الصنف الموروث بصنف الأب أو الصنف الأساس، ويسمى الصنف الوارث بصنف الابن، هذا ولا تسمح Ruby بالوراثة المتعددة، أي لكل صنف في Ruby صنف أساس واحد. يوضح المثال التالي طريقة توريث جميع الوظائف والمتغيرات الغير خاصة لصنف آخر (صنف الابن): class Student def schooldetails puts 'There are 700 students in our school.' end end class Classfive < Student # < means inherit def class5 puts 'There are 75 students in Class V.' end end instance = Classfive.new instance.class5 instance.schooldetails Output There are 75 students in Class V. There are 700 students in our school. حيث تم في هذا المثال توريث الصنف Classfive من الصنف Student. يستطيع الصنف الابن الولوج إلى دوال الصنف الأب، عن طريق الكلمة الدلالية super، كما هو موضّح بالمثال التالي: class Student def schooldetails puts 'There are 700 students in our school.' end end class Classfive < Student # < means inherit def schooldetails super puts 'There are 75 students in Class V.' end end instance = Classfive.new instance.schooldetails Output There are 700 students in our school. There are 75 students in Class V. يمكن في الوراثة المتعددة الولوج إلى دوال الصنف الأب باستخدام أسماء بديلة عن طريق الدالة alias، كما هو موضّح بالمثال التالي: class V def ccccc "Class V " end end class VI < V alias vcv ccccc def ccccc vcv + "VI " end end class VII < VI def ccccc vcv + "VII " end end puts V.new.ccccc puts VI.new.ccccc puts VII.new.ccccc Output Class V Class V VI Class V VII حيث تم استخدام الاسم vcv كبدل لاسم الدالة ccccc المعرّفة في الصنف V، ثم تم استخدام هذا الاسم البديل في الأصناف الوارثة كون اسم دوالها هو نفس الاسم الأصلي لدالة الصنف V. الأصناف الفريدة تحتوي لغة Ruby على طريقة لتعريف دوال محددة من أجل غرض معين، حيث تسمى هذه الدوال بالدوال الفريدة. فعند القيام بتعريف دوال فريدة في غرض ما، فإن لغة Ruby تقوم تلقائياً بإنشاء صنف جديد لاحتواء هذه الدوال الفريدة فقط، والذي يسمى عندها بالصنف الفريد. ويفيد هذا الصنف عند الرغبة باستدعاء دواله في أقسام مختلفة من التطبيق البرمجي، مثل تأمين الاتصال مع النظام الخارجي أو الولوج لقاعدة البيانات أو غيرها. ويوضح المثال التالي هذه الأصناف: tutorial1 = String.new def tutorial1.size "Learn Ruby" End tutorial2 = String.new puts tutorial1.singleton_methods puts tutorial2.singleton_methods Output Learn Ruby String 0 حيث تم استخدام الدالة singleton_method للحصول على قائمة أسماء جميع الدوال الفريدة الموجودة في الغرض.هذا ويمكن الولوج إلى صنف الغرض الفريد باستخدام الصيغة التالي: class << object كما هو موضح بالمثال التالي: arra1 = [] class << arra1 def foo "Hello World!" end end puts arra1.singleton_methods Output foo ترجمة –وبتصرّف- للمقال Ruby Classes حقوق خلفية الصورة البارزة محفوظة لـ all-free-download.com
  6. السلام عليكم يمكنك ذلك بتحويله إلى ملف pdf من خلال الموقع http://www.convertfiles.com/
  7. السلام عليكم أخي الكريم اقرأ هذه المقالة لعلها تحل مشكلتك: http://securityaffairs.co/wordpress/53438/malware/ransomware-recover-guide.html
  8. مقدمة مازال برنامج "!Hello, World" التقليدي يتمتّع بالاحترام في عالم لغات البرمجة، كونه برنامج بسيط وكامل للمبتدئين، ويسمح بالتأكّد من أن البيئية البرمجية معدة بشكل صحيح. سيتم في هذه المقالة شرح كيفية بناء هذا البرنامج باستخدام لغة البرمجة Ruby، لكن لجعل هذا البرنامج أكثر إمتاعًا سيتم تعديل برنامج "!Hello, World" التقليدي ليقوم بطلب اسم المستخدم ليتم عرضه في رسالة الترحيب، أي سيكون الشكل النهائي للبرنامج كما يلي: Please enter your name. Thaer Hello, Thaer! I'm Ruby! لكن قبل البدء يجب أن تكون بيئة التطوير البرمجية المحلية للغة Ruby منصبة على الحاسب. الخطوة الأولى- كتابة برنامج “Hello, World!” التقليدي لكتابة أي برنامج Ruby يجب في البداية فتح أي محرر نصوص مثل محرر سطر الأوامر nano ثم القيام بإنشاء ملف Ruby جديد كما يلي: $ nano hello.rb حيث قمنا بتسمية هذا الملف hello.rb لأننا سنقوم بكتابة كود برنامج "!Hello, World" التقليدي ضمنه. وحالما يقوم المحرر بفتح هذا الملف ضمن نافذة موجه أوامر نظام التشغيل، سنقوم بكتابة كود Ruby الخاص ببرنامج "!Hello, World" التقليدي ضمن هذا الملف كما يلي: puts "Hello, World!" تستخدم الدالة puts من أجل طباعة النصوص على الشاشة، حيث تقوم بطباعة السلسلة النصية string التي تأتي بعدها (في حالتنا هنا "!Hello, World"), والسلسلة النصية هي عبارة عن مجموعة من المحارف المحصورة ضمن علامتي تنصيص " ". إن الدالة puts هي من الدوال الموجودة ضمن لغة البرمجة Ruby بشكل افتراضي، كما ويمكن للمستخدم أن يقوم بإنشاء دواله الخاصة لتأدية وظائف معينة. والآن سنقوم بحفظ البرنامج وإنهاء المحرر nano وذلك بالضغط على المفاتيح CONTROL و X ثم ضغط المفتاح y (نعم) عند سؤال المحرر عن الرغبة بحفظ التعديلات على الملف. الخطوة الثانية- تشغيل برنامج Ruby بعد أن تم الانتهاء من كتابة برنامج "!Hello, World" بلغة Ruby أصبح بالإمكان تشغيله وتجربته عن طريق إدخال الأمر ruby متبوعا باسم ملف البرنامج hello.rb ضمن موجه أوامر نظام التشغيل كما يلي: $ ruby hello.rb ثم نضغط مفتاح الإدخال ENTER فتظهر نتيجة تنفيذ البرنامج كما يلي: Hello, World! حيث يقوم الأمر ruby بتشغيل مترجم تعليمات لغة البرمجة Ruby والذي يقوم بدوره بقراءة الملف الذي تم تحديد بعد الأمر (في حالتنا هنا الملف hello.rb)، ثم يقوم هذا المترجم بتنفيذ تعليمات لغة Ruby الواردة فيه وإظهار نتيجة التنفيذ على الشاشة. ففي مثالنا يقوم المترجم بتنفيذ التعليمة "!puts "Hello, World كما يلي: يتم استدعاء الدالة puts ومن ثم تمرير السلسلة النصية "!Hello, World" إليها, حيث تسمى هذه السلسلة النصية بالمعامل لأنه تم تمريرها إلى الدالة، ثم تُنفذ الدالة puts لتقوم بطباعة السلسلة النصية الممررة إليها على الشاشة، طبعًا لا يتم طباعة علامتي التنصيص على الشاشة لأنها تستخدم فقط لتحديد محتويات السلسلة النصية. نلاحظ أن البرنامج يعمل لكن سنقوم بتعديله ليصبح تفاعليًا، لنرى كيف يتم ذلك. الخطوة الثالثة- جعل البرنامج تفاعليًا إن البرنامج السابق يعطي نفس الخرج في كل مرة يتم تشغيله فيها، لذا سنقوم بتعديله ليصبح تفاعليًا من خلال طلبه لاسم المستخدم ليقوم بعرضه ضمن رسالة الترحيب، أي أن خرج البرنامج سيتغيّر بتغيّر الاسم المدخل. بدل أن نقوم بتعديل البرنامج السابق سنقوم بإنشاء برنامج جديد ضمن الملف greeting.rb باستخدام المحرر nano كما يلي: $ nano greeting.rb وحالما يقوم المحرر بفتح هذا الملف، سنقوم بإضافة سطر كود Ruby الذي يقوم بطلب اسم المستخدم: puts "Please enter your name." نلاحظ أنه تم استخدام الدالة puts من جديد من أجل طباعة نص طلب إدخال الاسم على الشاشة. ثم نقوم بإضافة سطر آخر لاستقبال الاسم المدخل من قبل المستخدم وتخزينه: puts "Please enter your name." name = gets حيث تم استخدام الدالة gets التي تقوم باستقبال الدخل من لوحة المفاتيح، حيث يتم إيقاف البرنامج بشكل مؤقت ريثما ينتهي المستخدم من إدخال المحارف من لوحة المفاتيح بضغطه على المفتاح ENTER، عندها يتم تحويل جميع المحارف المدخلة بما فيها ENTER إلى سلسلة نصيّة. وبما أننا نريد استخدام هذه السلسلة النصيّة فيما بعد ضمن برنامجنا لذا قمنا بحفظها عن طريق إسنادها للمتغير name، حيث يحتفظ البرنامج بهذه السلسلة النصية في مكان ما من ذاكرة الحاسب والمعنونة باسم المتغيّر الذي أسندت له حتى الانتهاء من تنفيذ البرنامج. نقوم الآن بإضافة آخر سطر للبرنامج والذي يقوم بطباعة رسالة الترحيب المتضمنة على اسم المستخدم: puts "Please enter your name." name = gets puts "Hi, #{name}! I'm Ruby!" نلاحظ أنه تم استخدام الدالة puts من جديد لكن في هذه المرة مع أداة إدراج السلاسل النصية { }# وهي من أدوات لغة Ruby والتي تسمح بإدراج السلسلة النصيّة المحفوظة في متغير ما ضمن سلسلة نصيّة أخرى، حيث يتم إظهار القيمة المحفوظة في المتغير الموجود بين القوسين بدل اسمه (في حالتنا هنا القيمة المسندة للمتغير name). والآن بعد الانتهاء من كتابة البرنامج الجديد سنقوم بحفظه وإنهاء المحرر nano وذلك بالضغط على المفاتيح CONTROL و X ثم ضغط المفتاح y. سنقوم بتشغيل البرنامج الجديد واختباره كما يلي: $ ruby greeting.rb ثم نضغط مفتاح الإدخال ENTER فتظهر نتيجة تنفيذ البرنامج كما يلي: Please enter your name. Thaer Hi, Thaer ! I'm Ruby! نلاحظ أن خرج البرنامج ليس كما توقعناه حيث كنا نتوقع ظهور العبارة !Hi, Thaer! I’m Ruby وذلك بسب احتواء المتغير name على المحرف ENTER في نهاية السلسلة النصيّة المحفوظة، حيث يتم إظهار هذا المحرف على شكل إضافة سطر جديد، لذا يجب إزالة هذا المحرف من السلسلة النصيّة المحفوظ في المتغير name. يمكن تحقيق ذلك عن طريق تعديل السطر الثاني من البرنامج بعد فتح ملفه greeting.rb بالمحرر nano ليصبح كما يلي: puts "Please enter your name." name = gets.chop puts "Hi, #{name}! I'm Ruby!" حيث باستخدام الدالة chop مع الدالة puts لتقوم بإزالة أخر محرف من السلسلة النصيّة التي قامت الدالة باستقبالها من لوحة المفاتيح، وهكذا يتم حفظ جميع المحارف المدخلة من لوحة المفاتيح في المتغيّر name إلا المحرف ENTER. نحفظ التعديل الجديد على البرنامج وننهي المحرر nano وذلك بالضغط على المفاتيح CONTROL و X ثم ضغط المفتاح y, ثم نعيد تشغيل البرنامج من جديد: $ ruby greeting.rb ثم نضغط مفتاح الإدخال ENTER فتظهر نتيجة تنفيذ البرنامج التي كنا نريدها: Please enter your name. Thaer Hi, Thaer! I'm Ruby! وهكذا تم إنجاز برنامج مكتوب بلغة البرمجة Ruby يستقبل الدخل من المستخدم ويعالجه ثم يعرضه على الشاشة. ملخص تم في هذه المقالة تعلم كيفية كتابة برنامج Ruby بسيط يقوم باستقبال الدخل من لوحة المفاتيح ثم يعالجه ثم يعيد إظهاره على الشاشة. يمكن الآن وبعد تعلم بعض أساسيات البرمجية بلغة Ruby توسيع المهارات البرمجية بهذه اللغة عن طريق تطوير البرنامج الذي تم إنشائه في هذه المقالة ليحوي على وظائف جديدة. ترجمة المقال How To Write Your First Ruby Program لصاحبه Brian Hogan
  9. السلام عليكم أخي الكريم ان كنت تجيد اللغة الانكليزية بشكل جيد, فهذا كتاب رائع لتعلم لغة ++C من الصفر حتى الاحتراف ضمن بيئة Visual studio: http://dlx.b-ok.org/genesis/1526000/aa2a4e46d364bd2c37e48dab81c6a10a/_as/[Ivor_Horton]_Ivor_Horton's_Beginning_Visual_C++_2(b-ok.org).pdf
  10. السلام عليكم لا يمكنك تنفيذ كود PHP بشكل مباشر ضمن صفحة جافا سكريبت js. لأنه لا تتم معالجتها من قبل مترجم أوامر PHP, لكن يمكنك اسناد كود PHP إلى متغير ضمن الصفحة الرئيسية للموقع مثل index.php (و التي يكون امتدادها .php), ومن ثم استخدام هذا المتغير ضمن صفحات جافا سكربت بدل الكود المسند. أي تكتب الكود التالي ضمن الصفحة الرئيسية: index.php
  11. مقدمة كلمة IRB هي اختصار (Ruby التفاعلية)، وهي الأداة التي تمكن من استكشاف لغة البرمجة Ruby واختبار كودها البرمجي دون الحاجة لإنشاء ملف، حيث يتم كتابة كود Ruby ضمن موجه الأوامر الخاص بهذه الأداة لتقوم هي بمعالجة هذا الكود وإظهار النتائج. تسمح الأداة IRB باستخدام جميع الدوال الضمنية بالإضافة للمكتبات والحزم البرمجية gems المنصبة، كما تتيح هذه الأداة حفظ الأوامر السابقة وحتى الإكمال التلقائي للكود البرمجي. تشغيل وإنهاء الأداة IRB في البداية يجب أن تكون لغة Ruby منصبة على الحاسب عندها يتم تشغيل الأداة عن طريق موجه أوامر النظام بإدخال الأمر التالي: $ irb فيظهر موجه أوامر الأداة IRB كما يلي: IRB session irb(main):001:0> حيث يدل موجه الأوامر على أنه تم تشغيل الأداة IRB وفق سياق المستوى الأعلى main، أي أن الأوامر التي سيتم إدخالها ستنفّذ ضمن سياق المستوى الأعلى الافتراضي للغة Ruby، كما تظهر أرقام الأسطر. ملاحظة: في حال تم تنصيب Ruby مع RVM فإنه لن يظهر اسم الأداة IRB في موجه الأوامر، ويظهر عوضًا عنه رقم الإصدار: IRB session from RVM 2.4.0 :001 > لكن يمكن إظهار اسم الأداة IRB في موجه الأوامر من جديد بتنفيذ الأمر: irb --prompt inf-ruby يتم كتابة كود Ruby ضمن موجه أوامر الأداة IRB وفق نفس قواعد برمجة لغة Ruby. جرب الأداة IRB بكتابة كود جمع عددين: irb(main):001:0> 2 + 2 ثم اضغط مفتاح الإدخال ENTER من لوحة المفاتيح فتظهر النتيجة التالي: IRB session => 4 حيث يدل الرمز <= على نتيجة تنفيذ كود Ruby. يتم إنهاء الأداة IRB عن طريق كتابة exit في موجه الأوامر ثم ضغط المفتاح ENTER أو بالضغط على CTRL+D من لوحة المفاتيح, فيتم الرجوع إلى موجه أوامر النظام. تنفيذ الكود ضمن جلسة IRB تؤمن الأداة IRB طريقة فعالة لتجربة كود Ruby والتأكد من أنه ملائم لحل المشكلة البرمجية، حيث تظهر نتيجة تنفيذ أي كود مكتوب بلغة Ruby ضمن شاشة موجه أوامر الأداة IRB. فمثلا عند تنفيذ الكود التالي: irb(main):001:0> puts "Hello World" تظهر النتيجة عند الضغط على مفتاح الإدخال ENTER: Hello World => nil وهي عبارة عن نتيجة تنفيذ الدالة puts والتي تقوم بطابعة السلسلة النصية المدخلة مع إضافة سطر جديد على جهاز الإخراج القياسي (شاشة الحاسب). تقوم جميع دوال لغة Ruby بإرجاع قيمة ما حسب وظيفة الدالة ومدخلاتها، حيث يمكن أن تكون القيمة المرجعة nil أي لاشيء كما هو الحال مع الدالة puts. بعد الانتهاء من تنفيذ العبارة البرمجية يظهر موجه أوامر IRB من جديد ويزداد رقم الأسطر بمقدار واحد: irb(main):001:0> puts "Hello World" Hello World => nil irb(main):002:0> يفيد تغير رقم سطر موجه الأوامر بعد كل عملية إدخال عبارة برمجية في تسهيل تعقب وتصحيح الأخطاء البرمجية في البرامج الكبيرة، ففي حال حدوث خطأ ما في أي عبارة برمجية يظهر رقم السطر ضمن رسالة الخطأ للدلالة على مكان حدوث الخطأ. يسمح موجه أوامر IRB بإسناد القيم للمتغيرات بنفس طريقة الإسناد المستخدمة في برامج Ruby الاعتيادية، فمن أجل إسناد القيمة 1868 للمتغير birth_year نكتب العبارة البرمجية: irb(main):002:0> birth_year = 1868 وعند الضغط على مفتاح الإدخال ENTER تظهر القيمة المسندة كنتيجة لتنفيذ عملية الإسناد: IRB session => 1868 والآن سنقوم بإنشاء متغير ثاني death_year ونسند له القيمة 1921 كما يلي: irb(main):003:0> death_year = 1921 يمكن الآن إنشاء متغير جديد age_at_death يحتوي على ناتج طرح المتغيرين السابقين من بعضهما: irb(main):004:0> age_at_death = death_year - birth_year وعند الضغط على مفتاح الإدخال ENTER تظهر القيمة المسندة للمتغير age_at_death: IRB session => 53 بما أن كل قيمة يتم إسنادها لمتغير تظهر بشكل تلقائي على شاشة موجه أوامر IRB بالتالي لا داعي لاستخدام دوال الطباعة puts أو print لتنفيذ ذلك. يسمح موجه أوامر IRB بكتابة العبارات البرمجية الطويلة على عدة أسطر، حيث لا تنفذ العبارات البرمجية ما لم تكن مكتملة من حيث الصيغة البرمجية، فمثلا سنقوم بإدخال عبارة برمجية تتضمن مصفوفة من أسماء سمك القرش ودالة الاختيار select التي تقوم بإرجاع أسماء سمك القرش المتضمنة فقط على الحرف "a": ["Tiger", "Great White", "Angel"].select do |shark| shark.include?("a") end يتم إدخال هذه العبارة البرمجية على شكل أسطر ضمن موجه أوامر IRB، ولا يتم تنفيذ هذه العبارة إلا بعد الانتهاء من إدخال السطر الثالث وضغط مفتاح الإدخال ENTER، هذا ويظهر الرمز "*" أمام السطر بعض ضغط مفتاح الإدخال ENTER في حال عدم اكتمال العبارة البرمجية: IRB session irb(main):005:0> ["Tiger", "Great White", "Angel"].select do |shark| irb(main):006:1* shark.include?("a") irb(main):007:1> end بما أن العبارة البرمجية السابقة تحوي الكلمة الدالة do فإن موجه أوامر IRB لن ينفذ العبارة حتى إدخال الكلمة الدالة end عندها فقط تظهر نتيجة التنفيذ كما يلي: IRB session => ["Great White"] وهكذا تسمح الأداة IRB في اختبار الكود البرمجي المكتوب بلغة Ruby قبل استخدامه في البرنامج أو من أجل اختبار المكتبات البرمجية الخارجية. استخدام المكتبات والحزم البرمجية يمكن استيراد المكتبات الخارجية المكتوبة بلغة Ruby أثناء جلسة IRB باستخدام الكلمة الدالة require كما هو الحال عند كتابة برنامج Ruby الاعتيادي، حيث يمكن أن تتضمن هذه المكتبات على مكتبات Ruby القياسية أو أكود المكتوبة بشكل شخصي أو حتى حزم Ruby البرمجية والمسماة gems والتي يتم إصدارها من خلال الموقع Rubygems.org ويتم تنصيبها باستخدام الأمر gem. تحوي مكتبات Ruby القياسية على النماذج التي تسمح بتأمين طلبات الويب والحصول على نتائج الاستجابة لهذه الطلبات، ويمكن استخدمها ضمن جلسة IRB بنفس طريقة استخدامها في برامج Ruby الاعتيادية. فمن أجل استيراد Net/HTTP من مكتبة Ruby القياسية يتم كتابة العبارة البرمجية التالية ضمن موجه أوامر IRB: require 'net/http' ثم ضغط المفتاح ENTER فتكون نتيجة التنفيذ true عند نجاح عملية تحميل هذه المكتبة. والآن سنقوم بكتابة الكود الذي يقوم بإرسال طلب إلى الموقع icanhazip.com من أجل الحصول على عنوان IP الخارجي: uri = URI.parse("http://icanhazip.com") response = Net::HTTP.get_response uri response.body عند الانتهاء من إدخال كل سطر ضمن موجه أوامر IRB تظهر نتيجة التنفيذ في السطر الذي يليه وهذا ما يمكننا من التحقق من نجاح عملية تنفيذ الكود البرمجي الموجود في هذا السطر: IRB session irb(main):010:0> uri = URI.parse("http://icanhazip.com") => #<URI::HTTP http://icanhazip.com> irb(main):011:0> response = Net::HTTP.get_response uri => #<Net::HTTPOK 200 OK readbody=true> irb(main):012:0> response.body => 203.0.113.52\n في حال عدم وجود المكتبة المطلوبة سوف تظهر نتيجة مختلفة عمّ سبق للدلالة على فشل عملية استيراد هذه المكتبة, ففي حال أردنا استيراد المكتبة HTTParty المستخدمة لتسهيل طلبات HTTP : require 'httparty' سوف تظهر النتيجة التالية: IRB session LoadError: cannot load such file – httparty والتي تخبرنا أنا هذه المكتبة غير متوفرة, لأنه تم إصدار هذه المكتبة على شكل حزمة برمجية، لذا علينا تنصيبها. تتم عملية تنصيب هذه الحزمة البرمجية بإنهاء موجه أوامر IRB بالضغط على المفاتيح CTRL+D من أجل الانتقال إلى موجه أوامر النظام ثم يتم تنفيذ الأمر gem لتنصيب الحزمة httparty كما يلي: $ gem install httparty ثم يتم تنفيذ الأمر irb للرجوع إلى موجه أوامر IRB كما يلي: $ irb ثم نعيد محاولة تنصيب المكتبة httparty من جديد كما يلي: require 'httparty’ فتكون نتيجة تنفيذ هذا الكود true دلالة على نجاح عملية تحميل هذه المكتبة، والآن نقوم باختبار عمل هذه المكتبة بإدخال الكود التالي في موجه أوامر IRB: response = HTTParty.get("http://icanhazip.com") response.body فتكون نتيجة تنفيذ هذا الكود: IRB session => 203.0.113.52\n والآن سنقوم باستكشاف طريقة اختبار كود Ruby ضمن الأداة IRB. تحميل كود Ruby في IRB يمكن تحديد المكتبات والحزم المراد تحملها عند تشغيل الأداة IRB عن طريق إضافة الخيار -r متبوعاً باسم المكتبة المراد تحميلها, فمثلا لتحميل المكتبة httparty عند تشغيل IRB نكتب الأمر irb -r httparty في موجه أوامر النظام وبالتالي لن نحتاج تنفيذ الكود require httparty. كما يمكن استخدام هذه الطريقة لتحميل كود Ruby الذي تم كتبته سابقا وتخذينه في ملف من أجل اختباره بالأداة IRB. لنقم بإنشاء ملف Ruby جديد اسمه ip_grabber.rb يحتوي على كود الغرض IPGrabber المتضمن عل الدالة get التي تقوم بإرجاع عنوان IP الخارجي للحاسب عند تزويدها بالعنوان الإلكترون URL للموقع icanhazip.com، حيث تم الاعتماد على المكتبة HTTParty من أجل طلب عنوان IP الخارجي للحاسب من الموقع icanhazip.com: require 'httparty' class IPGrabber def initialize() @url = "http://icanhazip.com" end def get response = HTTParty.get(@url) response.body.chomp # remove the \n if it exists end end يفيد إنشاء الغرض IPGrabber في عدم الحاجة لتغيير كود برنامج Ruby الخاص بنا عند الحاجة لإضافة ميزة الحصول على عنوان IP. والآن سنقوم بتحميل هذا الملف عند تشغيل الأداة IRB عن طريق إضافة مسار الملف بعد الخيار r- حيث تم استخدام المسار لأنه ملف محلي وليس مكتبة أو حزمة كما لا داعي لوضع امتداد الملف rb.: $ irb -r ./ip_grabber والآن أصبح بالإمكان إنشاء غرض جديد من الصف IPGrabber ضمن جلسة IRB كما يلي: ip = IPGrabber.new ip.get فتكون نتيجة تنفيذ هذا الكود كما يلي: IRB session => 203.0.113.52 وهكذا نجد أن تحميل كودنا الخاص ضمن جلسة IRB يسمح لنا بالتعامل مع مكتباتنا الخاصة قبل إضافتها لبرنامجنا النهائي. والآن بعد أن تعلمنا كيفية كتابة الكود في الأداة IRB سنقوم بتعلم طريقة ضبط الأداة IRB. ضبط IRB يمكن ضبط جلسة IRB عن طريق إنشاء ملف ضبط بامتداد irbrc. والذي يمكن عن طريقه إضافة وتعديل ميزة الإكمال التلقائي والتدرج وحفظ الأوامر. يتم إنشاء ملف ضبط IRB ضمن مجلد المستخدم كما يلي: $ nano ~/.irbrc require 'irb/completion' والآن سنقوم بإضافة ميزة حفظ الأوامر المنفذة في موجه أوامر IRB في ملف خارجي وذلك بإضافة السطر التالي إلى ملف الضبط: IRB.conf[:SAVE_HISTORY] = 1000 تم في هذا الكود تمكين عملية حفظ آخر ألف عبارة برمجية تم إدخالها في موجه أوامر IRB ضمن الملف irb_history حيث يمكن تصفحها من خلال مفاتيح الأسهم العلوي والسفلي على لوحة المفاتيح, وعند الرغبة في تغيير اسم ملف الحفظ يتم إضافة السطر التالي لملف الضبط: IRB.conf[:HISTORY_FILE] = '~/your_history_filename' والآن سنضيف ميزة التدرج الآلي للكود البرمجي والتي تفيد عند برمجة الصفوف والدوال والكتل البرمجية وذلك بإضافة السطر التالي إلى ملف الضبط: IRB.conf[:AUTO_INDENT] = true كما يمكن أن يتضمن ملف الضبط أي كود Ruby مثل تعريف الدوال المساعدة أو استخدام require لتحميل مكتبات إضافية، فمثلا لإضافة الدالة المساعد history إلى موجه أوامر IRB والتي تقوم بإظهار العبارات البرمجية, يتم إضافة الكود التالي إلى ملف الضبط: def history history_array = Readline::HISTORY.to_a print history_array.join("\n") end والآن أصبح بالإمكان إظهار العبارات البرمجية المحفوظة بتنفيذ الأمر history في موجه أوامر IRB فتظهر جميع العبارات البرمجية المحفوظة، لكن عند الرغبة في تحديد عدد النتائج المراد إظهارها يجب تعديل الكود السابق بإضافة الخيار count الذي يتم من خلاله تحديد عدد النتائج، لذا يجب تعديل الكود السابق ليصبح كما يلي: # history command def history(count = 0) # Get history into an array history_array = Readline::HISTORY.to_a # if count is > 0 we'll use it. # otherwise set it to 0 count = count > 0 ? count : 0 if count > 0 from = hist.length - count history_array = history_array[from..-1] end print history_array.join("\n") end نحفظ ملف الضبط ثم نبدأ جلسة IRB جديد ثم ندخل الأمر history 2 فتظهر أخر عبارتين برمجيتين تم إدخالهما في موجه أوامر IRB. إن استخدام ملف الضبط لتحميل المكتبات البرمجية سيزيد من زمن بدء تشغيل الأداة IRB وبالتالي يفضل تحميل المكتبات عن طريق استخدام الأمر require. ملخص تعد الأداة مكان جيد لاختبار كود Ruby وبالتالي تؤمن طريقة عظيمة لاختبار البرنامج المكتوبة بلغة Ruby قبل حفظها ضمن الملف. ترجمة المقال How To Use IRB to Explore Rub لصاحبه Brian Hogan
  12. ليس لجهازك تعريفات للويندوز 10 يوجد للوندوز 8 وما دون أقترح عليك تنصيب ويندوز 7 64 وهذه صفحة التعريفات قم بتحديد نوع نظام التشغيل في أعلى الصفحة فتظهر التعريفات: https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/lenovo-b-series-laptops/lenovo-b590-notebook/downloads
  13. هل التسخة القديمة احتياطية تأتي مع الجهاز أم قمت بتنصيبها بنفسك استخدم تعريفات الشركة فقط حتى ولو كانت قديمة لأنها متوافقة مع بعضها أي نصب نسخة ويندوز جديدة ثم نصب التعريفات من موقع الجهاز أو من السيدي المرفق مع الجهاز, طبعا دون أن يكون الحاسب بالانترنت, ثم ألغي التحديث التلقائي لتعريفات الجهاز لتحافظ على التعريفات كما هي.
  14. السلام عليكم على ما يبدو أنه لديك حدوث عدم توافق في الحاسب عند تحديث التعريفات, لذا جرب أن تعيد نسخة ويندوز 10 التي كانت على الحاسب, ثم قم بإلغاء التحديث التلقائي لتعريفات الأجهزة من خلال الضغط على أيقونة جهاز الكبيوتر بالزر اليميني ثم اختيار خصائص Properties فتظهر نافذة خصائص النظام يتم منها اختيار إعدادات النظام المتقدمة Advanced System Settings فتظهر نافذة, يتم فيها اختيار الكيان الصلب Hardware ثم الضغط على خيار اعدادات تحيث تعريفات الأجهزة Windows Update Driver Settings واختيار عدم تفحص التعريفات عن توصيل الجهاز Windows Update Driver Settings أرجو أن يساعد ذلك في حل المشكلة
  15. السلام عليكم ان البرنامج البديل ل V-Ray هو Mental Ray حيث يحوي على معظم مزايا برنامج V-Ray لكنه أرخص منه وقد تم تطويره في الآونة الأخيرة بعد أن تعهدته شركة NVIDIA.