Quantcast
Channel: وادي التقنية - أخبار تقنية المعلومات أولا بأول
Viewing all 579 articles
Browse latest View live

صدور كدي بلازما ٥.١١

$
0
0
صدور كدي بلازما ٥.١١

plasma-5.11.png

أعلن مجتمع سطح المكتب كدي عن إطلاق النسخةبلازما ٥.١١، التي أتت بالعديد من المميزات الجديدة من مثل إعادة تصميم تطبيق الإعدادات و تحسين نظام التنبيهات، و إضافة تطبيق "Vault" وهو  تطبيق يسمح للمستخدمين بأن يشفروا مجموعة من الملجدات أو الملفات بطريقة سهلة وآمنة.


أهم المميزات في بلازما ٥.١١


إعادة تصميم تطبيق الإعدادات


أعيد تصميم تطبيق إعدادات النظام ليسمح بالوصول السهل لأكثر الإعدادات استخداما، كذلك أضيفت ميزة تفعيل التصميم القديم لمن يحبه.

تحسين نظام التنبيهات


بعد الطلب العالي على إضافة ميزة حفظ التنبيهات القديمة ، فقد سعى الفريق ضمن جهوده لتحديث نظام التنبيهات في بلازما إلى إضافة هذه الميزة ، بحيث يمكنك الآن رؤية التنبيهات المنتهية في خانة التاريخ.

تحسين مدير المهام


أضيفت العديد من المميزات إلى مدير المهام في هذه الإصدارة ولعل أهمها  إضافة إمكانية الوصول إلى الوظائف الداخلية للتطبيقات بحيث يمكن مثلا فتح آخر الملفات المفتوحة لتطبيق المحرر النصي من خلال مدير المهام.

خزانة بلازما


للمستخدمين الذين يتعاملون مع معلومات حساسة أو سرية، فإن التطبيق الجديد خزانة بلازما Plasma Vault  تطبيق سهل وعملي لتشفير الملفات ، بحيث يتيح لك قفل وتشفير مجموعة من الملفات وإخفاءها عن المتجسسين، ويتيح أيضا فتح الملفات بطريقة سهلة عن طريق صينية النظام.

 

Fahadالأربعاء, 2017/10/11 - 10:27ص
disqus

كتاب تعلم البرمجة بلغة الـC

$
0
0
كتاب تعلم البرمجة بلغة الـC

Learn-to-program-with-C_AR.jpg
بعد 4 سنوات من العمل عليه،  أطلق حمزة عباد و عدن بلواضح  كتاب "تعلم البرمجة بلغة الـC" الّذي هو ترجمة لدرس Apprenez à programmer en Cالمكتوب باللغة الفرنسية، الخاص بموقع OpenClassroomsالشهير، لمؤلّفه Mathieu Nebra.

يمتاز هذا الدرس بكونه سهل الفهم على المبتدئين في مجال البرمجة، إذ أنّه لا يفترض وجود أيّة مكتسبات قبليّة في هذا المجال لدى القارئ. يحتوي الكتاب على معلومات مفصّلة بخصوص البرمجة بشكل عام و لغة الـC بشكل خاص، مدعّمة بكثير من المخطّطات التوضيحيّة، الأمثلة و التمارين المصحّحة.


يتكوّن الكتاب من 31 فصلا موزّعة على 4 أجزاء. فصول الجزء الأوّل تحوّل القارئ من شخص لا علاقة له بالبرمجة إلى مبرمج مبتدئ قادر على استخدام أدوات البرمجة و مستوعب للمفاهيم الأساسيّة كأنواع البيانات، المتغيّرات، الشروط، الحلقات التكراريّة و الدوال. في الجزء الثاني، يتعلّم القارئ مفاهيم أكثر تقدّما في البرمجة، كالمؤشّرات، الجداول، السلاسل المحرفيّة و الهياكل بالإضافة إلى الحجز الحيّ للذاكرة و التعامل مع الملفّات. بعد ذلك، يتناول الجزء الثالث مبدأ استخدام المكتبات البرمجيّة مركّزا على استغلال مكتبة SDL لإنشاء النوافذ و الرسم فيها و مكتبة FMOD لتشغيل الصوت و استعمالهما لإنشاء برامج و ألعاب حقيقيّة. في الأخير، فصول الجزء الرابع تتناول مواضيع مكمّلة في لغة الـC تتمثّل في تقنيّات شائعة الاستخدام لتخزين البيانات، كالقوائم المتسلسلة، جداول التجزئة، المكدّسات و الطوابير.

يقول المترجم والمراجع:"لقد حرصنا على نقل كلّ الأفكار التي قدّمها الكاتب في الدرس الأصلي من بدايته إلى نهايته. كما بذلنا جهدنا في أن يكون النص بسيطا قدر الإمكان و مفهوما للقارئ العربي العادي. و في النهاية، لا يسعنا سوى أن نتطلّع بلهفة إلى تجريب برنامجك الخارق الّذي ستنئشئه بعد ختامك لهذا الكتاب ! "

 

فصول الكتاب

  • تقديم
  • مقدمة
  • أساسيّات البرمحة بلغة الـC
    • قلت برمجة ؟
    • الحصول على الأدوات اللازمة
    • برنامجك الأوّل
    • عالم المتغيّرات
    • حسابات سهلة
    • الشروط
    • الحلقات التكراريّة
    • عمل تطبيقي: "أكثر أو أقل"، لعبتك الأولى
    • الدوال
  • تقنيات متقدّمة في لغة الـC
    • البرمجة المجزأة
    • المؤشّرات
    • الجداول
    • السلاسل المحرفيّة
    • المعالج القبلي
    • أنشئ أنواع متغيّرات خاصة بك
    • قراءة و كتابة الملفّات
    • الحجز الحيّ للذاكرة
    • عمل تطبيقي: لعبة الـPendu
    • إدخال نص بشكل أكثر أمانا
  • إنشاء ألعاب 2D في SDL
    • تثبيت SDL
    • إنشاء نافذة و مساحات
    • إظهار صور
    • معالجة الأحداث
    • عمل تطبيقي: Mario Sokoban
    • تحكّم في الوقت
    • كتابة نصوص باستخدام SDL_ttf
    • تشغيل الصوت بـFMOD
    • عمل تطبيقي: الإظهار الطيفيّ للصوت
  • هياكل البيانات
    • القوائم المتسلسلة
    • المكدّسات و الطوابير
    • جداول التجزئة
  • الخاتمة

محتوى الكتاب حر و منشور تحت ترخيص المشاع الإبداعي، نسب المصنف - غير تجاري - الترخيص بالمثل، النسخة الثانية (CC-BY-NC-SA 2.0). الكتاب منشئ بلغة LaTeX و مترجم بمترجم XeLaTeX. يمكنكم إيجاد الشفرة المصدرية الكاملة لمحتوى الكتاب مع مزيد من المعلومات في المستودع الخاص بهذا الكتاب على GitHub.
لتنزيل الكتاب، يرجى الذهاب إلى صفحة الإصداراتالخاصة بالمستودع.

نوفر رابط بديل من هنا.

Fahadالسبت, 2017/10/14 - 1:01م
disqus

صدور أوبنتو 17.10

$
0
0
صدور أوبنتو 17.10

ubuntu-17.10-desktop.jpg
أطلقت شركة كانونيكلالإصدارة ١٧.١٠من توزيعة أوبنتو تحت مسمى (Artful Aardvark)، هذه التوزيعة جاءت بتغييرات تعتبر جذرية من ناحية توجهات شركة كانونيكل بخصوص سطح المكتب.

أول هذه التغييرات هو اعتماد سطح مكتب جنوم بشكل رئيسي لسطح المكتب واستبعاد سطح مكتب يونتي،  وثاني هذه التغييرات هي اعتماد Wayland بدلا عن Mir ، كذلك اعتماد GDM بدلا عن LightDM كمدير للعرض.

وبالرغم من أن المطورين حاولوا قدر استطاعتهم لجعل عملية الانتقال من الإصدارة السابقة إلى هذه الإصدارة سهلة وسلسة، وذلك بتطوير عدة ملحقات لسطح مكتب جنوم تحاكي بعض وظائف يونتي، إلا أن المستخدم يتوقع أن يلاحظ الفرق في تجربة الاستخدام، وسيكون هناك اختلاف كبير بين استخدام سطح مكتب يونتي و سطح مكتب جنوم.

من ناحية البرامج فهذه الإصدارة تأتي بحزمة ليبرأوفيس ٥.٤ و نواة لينكس ٤.١٣

يمكنكم تنزيل هذه الإصدارة عبر هذا الرابط

Fahadالأحد, 2017/10/22 - 12:55م
disqus

كتاب " خطوة بخطوة لنحترف GIMP "

$
0
0
كتاب " خطوة بخطوة لنحترف GIMP "

step_by_step_to_learn_gimp_itwadi.com.png

اليوم نوفر كتاب " خطوة بخطوة لنحترف GIMP “ ليكون متوفرا لتنزيل بشكل مجاني للجميع، ليستفيد من كل أفراد الوطن العربي.

جاء كتاب "خطوة بخطوة لنحترف GIMP “ بدعم منهيئة تقنية المعلوماتبسلطنة عمان، لتوفير الكتب العربية حول البرمجيات الحرة بشكل مجاني. الكتاب طبع ووزع في عام ٢٠١٥م.

الكتاب من تأليف الأستاذة منى باعمر و الأستاذة موزة الوهيبية، هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي نَسب المُصنَّف - الترخيص بالمثل 4.0 دولي.

جاء في المقدمة:

" منذ دخولنا لمجال الحاسوب لم يكن في مخيلتنا أن يكون لنا هذا الإسهام البسيط في تقديم مادة تعليمية تسهم في نشر المعرفة ولو جزءًا بسيطًا من بحرها في وطننا الحبيب.

ولكن بعد معرفتنا بتطبيقات البرمجيات الحرة واقتحامها لأفكارنا فرضت علينا احترامها فتمنينا أن لا نحبس هذه المعلومة بداخلنا وأن نسعى لنشر العلم وذلك تطبيقا لقوله صلى الله عليه وسلم « لا خير في كاتم العلم».

ولا شك أن انضمامنا لفريق تدريب البرمجيات الحرة كان الدافع بأن نقدم ما لدينا إيمانًا ويقينًا بدورنا كناشرات لعلم جديد في عالم تقنية المعلومات الذي أصبح جزءًا مهمًا من حياتنا وعالمنا.

ولذلك عزمنا النية على أن نسهم بجهدنا لسد أي فجوة في المادة التعليمية لتلك البرمجيات الحرة، ورأينا أن هذا البرنامج الحيوي والمهم للغاية دروسُه قليلةٌ جدًا وفكرنا في أن نبدأ في تقديم دورة له وهي « خطوة بخطوة لنحترف الجمب» .

وبعد التحاقنا بدورة في البرمجيات الحرة وتعرفنا على البرنامج شرعنا في تعلمه بشكل أعمق وعلى الرغم من عدم وجود أي مصادر عربية لهذا البرنامج إلا أننا اعتمدنا على بعض وثائق البرنامج وكانت باللغة الانجليزية.

وكان المجهود المبذول في هذا كبيرًا ولكن هذا كله هان أمام إحساسنا بمشاركة العديد من الإخوة في طرح مثل هذه الدورات. وهنا في هذا العمل وضعنا كل ما نعرفه وما تعلمناه عن برنامج الجمب بصورة تكون واضحة تصلح للمبتدىء والمحترف. ففي هذا الموضوع سنقوم إن شاء الله بنقل شرح استخدام الجمب لتعم الفائدة . “

 

فهرس الكتاب:

المقدمة

الجزء الأول: ((دليل استخدام برنامج الجمب)

الفصل الأول: مقدمة حول البرمجيات الحرة

الفصل الثاني: مقدمة حول برنامج الجمب

تعريف برنامج الجمب

تأسيس برنامج الجمب

مميزات النسخة الجديدة 2.8 من الجم

الحصول على برنامج الجمب

فتح برنامج الجمب

الفصل الثالث: واجهة برنامج الجمب

تفصيل واجهة الجمب

أولًا: شرح سريع لصندوق الأدوات

شريط الخيارات المتغيرة

ثانيًا: الألواح و الإطارات

الفصل الرابع: العمل مع برنامج الجمب

العمل مع البرنامج

إنشاء ملف جديد

طريقة فتح الصور في البرنامج

شرح عناصر نافذة الصورة

احفظ عملك

طرق الحفظ

نوع ملف الحفظ

الفصل الخامس: مقدمة حول قوائم برنامج الجمب

القوائم

قائمة File

قائمة Edit

قائمة Select

قائمة View

قائمة Image

قائمة Layer

قائمة Color

قائمة Tools

قائمة Filter

قائمة Windows

قائمة Help

الفصل السادس: الرسم في الجمب

إنشاء صورة جديدة

استخدام الطبقات للرسم

خصائص النافذة الحوارية للطبقات

رسم الخطوط والمنحنيات

الرسم بخطوط حادة: أداة القلم

خيارات عرض أيقونات فرش جمب

الفرش

أنواع الفرش

خصائص الفرش

مقارنة بين الفرش البارا مترية والفرش الصورة

خيارات أدوات الرسم

أنماط أدوات الرسم

رسم خطوط ضبابية أو ناعمة: أداة فرشاة التلوين

الاختلافات بين أداة القلم و أداة فرشاة التلوين

مميزات أداة فرشاة التلوين

أداة فرشاة الهواء

خصائص أداة فرشاة الهواء

أداة الحبر

خصائص أداة الحبر

أداة الممحاة

خصائص أداة الممحاة

ظروف مختلفة لاستخدام خاصية مضاد المسح

رسم الدوائر والمستطيلات وأشكال أخرى

رسم حواف التحديد.

خصائص النافذة الحوارية رسم حواف التحديد

أداة التحديد الحر

ملء المناطق

أداة الملء بالدلو

خصائص أداة الملء بالدلو

الأنماط

أداة المزج

اختيار التدرجات

خصائص أخرى للتدرجات

عندما لا تستطيع الرسم في الجمب

الفصل السابع: الطبقات في الجمب

استخدام الطبقات لإضافة النص

إضافة النص

استخدام أداة النقل

تغيير الألوان

الظل الساقط

تطبيق المؤثرات

استخدام الطبقات للنسخ

عناصر صندوق الحوار

الجزء الثاني: ((تدريبات عملية في برنامج الجمب))

تطبيقات على النص باستخدام قائمة Filter و الأداة blend

الدرس الأول: استعمال خصائص الكتابة

الطريقة الأولى: استخدام قائمة Filter.

بعض التطبيقات للطريقة الأولى

الطريقة الثانية: استخدام الأداة blend.

بعض التطبيقات للطريقة الثانية

الدرس الثاني: انعكاس النص.

بعض التطبيقات لتغيير زاوية الكتابة

الدرس الثالث: صنع بلورة في الجمب

بعض التطبيقات لصنع البلورة

الدرس الرابع: عمل تأثيرات للصور باستخدام Quick Mask

تطبيقات لتأثيرات الصور باستخدام Quick Mask

الدرس الخامس: انعكاس الصورة على الماء

بعض التطبيقات لانعكاس الصورة على الماء

الدرس السادس: البخار المتصاعد من كوب قهوة ساخن

بعض التطبيقات على البخار المتصاعد

الدرس السابع: خروج الأشياء من إطار الصورة

بعض التطبيقات لخروج الأشياء من إطار الصورة

لتنزيل الكتاب من هنا.

Fahadالثلاثاء, 2017/11/14 - 10:45ص
disqus

كتاب " تعلم برنامج Inkscape خطوة ... خطوة "

$
0
0
كتاب " تعلم برنامج Inkscape خطوة ... خطوة "

learn_inkscape_setp_by_step_itwadi.com.png

يسعدنا اليوم أن نقدم الكتاب الثاني "تعلم Inkscape خطوة .. خطوة " تأليف الأستاذة حنان بنت حمدان العبرية، وبدعم منهيئة تقنية المعلوماتبسلطنة عمان، لتوفير الكتب العربية حول البرمجيات الحرة بشكل مجاني. الكتاب طبع ووزع في عام ٢٠١٥م.

تقول المؤلفة في المقدمة:

" تُعد البرمجيات مفتوحة المصدر (الحرة) من أكثر البرمجيات التي يهتم بها العالم في الوقت الراهن لما لها من إمكانيات  تسمح لمستخدميها حرية تطوريها والتعديل عليها
دون قيود، كما إن معظمها يمكن تداولها واستخدامها  لأي غرض دون مقابل وبصورة مجانية، بالإضافة إلى ذلك فهي تتميز بسهولة الحصول عليها من خلال توفرها في مواقع
على شبكة الإنترنت تتضمن كل ما يتعلق بها من توضيح لها وكيفية الاستفادة منها.
توجد العديد من البرمجيات الحرة والتي تُستخدم في مجالات مختلفة من بينها الرسم والتصميم المتجهي ويعتبر برنامج Inkscape من أشهرها، إذ يُستخدم في تحرير الرسوم المتجهة وإنتاجها بصورة احترافية كما له إمكانيات مميزه تجعله منافس قوي لغيره من البرامج التجارية والمستخدمة في نفس المجال.
وقد جاء هذا الكتاب الذي بين يديك مبينًا كيفية الاستفادة من برنامج Inkscape الرائع واستخدامه في إنتاج رسوم دقيقة وبجودة عالية، إذ يحتوي الكتاب على جزأين يعرض أولهما شرح مُفصّل لواجهته وكيفية التعامل معها أما الجزء الثاني فيتضمن مشاريع تُساعدك في التمرين على استخدام أدوات البرنامج وأوامره المختلفة وفهمها والاستفادة منها في إنتاج تصاميم أخرى."

فهرس الكتاب:

يتألف الجزء الأول في الكتاب من تسعة فصول، يتضمن أولها تعريفًا بالبرنامج وأهم المفاهيم والمصطلحات المتعلقة به، بينما يوضح الفصل الثاني مكونات واجهته من أدوات وأوامر ونوافذ، أما الفصل الثالث فيبين كيفية التعامل مع الملفات فيه، ويتناول الفصل الرابع كل ما يتعلق بالكائنات والتعامل معها، ويعرض الفصل الخامس ماهية المسارات وكيفية إنشاءها والتحكم بها، أما الفصل السادس فيعرض كيفية إنشاء وتحرير النصوص وتنسيقها، ويبين الفصل السابع كل ما يتعلق بالتعامل مع الصور بأنواعها، أما الفصل الثامن فيوضح أهم التأثيرات أو المرشحات التي يمكن تطبيقها على الكائنات والمسارات المختلفة، وأخيرًا الفصل التاسع فيعرض بعض الملحقات المستخدمة في البرنامج وكيفية تطبيقها والاستفادة منها، وتتميز جميع هذه الفصول بوجود الكثير من الأفكار والأمثلة والاضاءات والملاحظات التي تُعزز المحتوى النظري وتوضحه.
أما الجزء الثاني من الكتاب فيعرض إجراءات وتعليمات تنفيذ بعض التصاميم المنشئة بالبرنامج حيث تناول ستة مشاريع في كل مشروع تصميم، وكل تصميم يضم أفكار وخيارات متنوعة تُساعدك في توظيف ما تعلمته سابقا في الجزء الأول عن البرنامج.
 

لتنزيل الكتاب من هنا.

Fahadالأحد, 2017/11/19 - 11:23ص
disqus

كتاب " تعلم بسهولة برنامج ليبر أوفيس كالك "

$
0
0
كتاب " تعلم بسهولة برنامج ليبر أوفيس كالك "

learn_libreoffic_calc_easily_itwadi.com.png

يسعدنا اليوم أن نقدم الكتاب الثالث "تعلم بسهولة برنامج ليبر أوفيس كالك " تأليف الأستاذة فوزية بينت سعيد العامرية و الإستاذ أحمد بن محمد الرحبي، وبدعم منهيئة تقنية المعلوماتبسلطنة عمان، لتوفير الكتب العربية حول البرمجيات الحرة بشكل مجاني. الكتاب طبع ووزع في عام ٢٠١٥م. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي نَسب المُصنَّف - الترخيص بالمثل 4.0 دولي.

يقول المؤلفان في المقدمة:

" مرحبا بك في عالم المصادر الحرة و في رحاب الحزمة المكتبة ليبر أوفيس لقد تم إعداد هذا العمل ليكون مرشدا لك في كيفية استخدام وإتقان العمل على حزمة أوبن أوفيس، ولقد روعي فيه البساطة الشديدة حتى يسهل على كل الشرائح ، وهذا لا يعني أنه لن يصلح للمتقدمين بل العكس فهو يختصر الوقت عليهم في تعلم هذه الحزمة الرائعة.

المنهجية العامة في هذا العمل هي الشرح بالصور أكبر قدر ممكن لما لهذه الطريقة من سهولة الفهم والتطبيق الشيء الكثير، بطبيعة الحال لا يمكننا شرح كل مميزات حزمة أوبين أوفيس في مائة صفحة لأنه غني بالمميزات الرائعة، ولكننا ننبه هنا إلى ضرورة استكشاف كل الأزرار التي تشرح في كل فصل من فصول هذا الكتاب بحيث يكون لديك ملكة حب معرفة عمل كل الأزرار والخيارات المتوفرة وللتنقل إلى أي درس حتى تفهم الطريقة و تتطبقها بشكل سريع و محترف.

حزمة ليبر أوفيس متكاملة ومتناسقة مما يعني أن إتقان مميزات أي مكون منها يعني إتقان المميزات العامة لكل المكونات، لربما إننا نجد أن هناك اختلافا بين طريقة عمل حزمة مايكروسوفت أوفيس وبين أوبين أوفيس ولكن سرعان ما تتأقلم على هذا الاختلاف، وستجد أن ليبر أوفيس يوفر لك مميزات كنت تجهلها في مايكروسوفت أوفيس!!

فهرس الكتاب

هذا الكتاب يشرح برنامج الجداول الالكترونية Calc وقد تم تقسيمه إلى مقدمة وعدة فصول.

يحتوي هذا الكتاب على المعرفة والمهارات اللازمة لتحليل المعلومات في جداول حسابية ( Spreadsheets ) إلكترونية وتنسيقها باستخدام وظائف خاصة بتنسيق الجداول الحسابية . ومن بين المواضيع التي سنتطرق إليها إمكانية استخدام المعادلات والوظائف وفرز البيانات وتعديل شكل الجداول الحسابية الإلكترونية وتحرير البيانات وتنسيقها في خلايا أوراق العمل .

هذا وسنناقش أيضا إمكانية عرض البيانات في رسوم بيانية باستخدام المخططات البيانية وتحليل بيانات أوراق العمل . وأيضا إمكانية عرض البيانات في رسوم بيانية باستخدام المخططات البيانية ، وتحليل بيانات أوراق العمل كما تبدو في الجداول أو الرسوم البيانية .

وأخيرا سنتطرق إلى شرح قائمة البيانات وكيفية عمل التصفية المتقدمة والمجاميع الفرعية والصلاحية والدمج والتجميع والتخطيط وأخيرا سنتطرق إلى الأمر Pivot Table .”

لتنزيل الكتاب من هنا.

Fahadالاثنين, 2017/11/27 - 7:12ص
disqus

كيفية تحويل النص العربي لصوت باستخدام البرامج الحرة

$
0
0
كيفية تحويل النص العربي لصوت باستخدام البرامج الحرة

يواصل الأستاذ طه زروقي (أستاذ بجامعة البويرة في الجزائر، مستشار في المعلوماتية،  مهتم بالمصادر المفتوحة، ومن العاملين دعم  اللغة العربية) دعمه للغة العربية في المصادر الحرة، و " يهدف هذا المشروع إلى دعم العربية في نظم النطق (تحويل النص إلى كلام) ويصف الطريقة التي تسمح بتشغيلها معا. أي تشغيل قارئ الشاشة بلغة عربية بمستوى جيد بأدوات مفتوحة المصدر.

نحتاج إلى الأدوات الآتية:

  1. نظام النطق إسبيك مع دعم العربية
  2. Mbrola نظام النطق وأصواته
  3. قارئ للشاشة
  4. نظام توزيع الكلام
  5. برنامج تشكيل

سنتحتاج إلى تشغيل نظام النطق إسبيك مزود بدعم للغة العربية، ثم نثريه بأصوات عربية من نظام النطق Mbrola للحصول على صوت أفضل. سنحتاج أيضا إلى مشكّل آلي للنصوص العربية باستعمال برنامج مشكالمفتوح المصدر. كما سنحاول تشغيل قارئ الشاشة Orca، ونظام إرسال الكلام speech dispatcherلاعتماده برنامجا وسيطا يسمح للتطبيقات الأخرى من تشغيل نظام النطق.

نهدف إلى الحصول على نطق صوت عربي جيد وصحيح قدر الإمكان مشكّل"

يمكنكم متابعة المقال من هنا.

 

زايدالأربعاء, 2017/12/06 - 11:12ص
disqus

مدخل إلى الحوسبة المتوازية

$
0
0
مدخل إلى الحوسبة المتوازية

المؤلف:بليز بارني (Blaise Barney)، مختبر لورانس ليفرمور الوطني، ترجمة زكرياء المهداوي.

ملخص

هذا هو البرنامج التعليمي الأول في ورشة " بدء العمل على حوسبة ليفرمور". وليس الغرض منه سوى تقديم نظرة عامة وسريعة جدا عن الموضوع الواسع والشامل للحوسبة المتوازية( Parallel Computing)، وكمقدمة للدروس اللاحقة. وعلى هذا النحو، فإنه سيغطي أساسيات الحوسبة المتوازية، وهو موجه فقط لمن يود التعرف على هذا الموضوع والذي يخطط لحضور درس واحد أو أكثر من الدروس الأخرى في هذه الورشة. إنه غير موجه لتغطية البرمجة المتوازية بشكل متعمق، لأن هذا يتطلب وقتا أطول بكثير. يبدأ البرنامج التعليمي بمناقشة حول الحوسبة المتوازية - ما هي استخداماتها وكيف، تليها مناقشة حول المفاهيم والمصطلحات المرتبطة بالحوسبة المتوازية. ثم استكشاف مواضيع بنيات الذاكرة المتوازية ونماذج البرمجة. وتتبع هذه المواضيع سلسلة من المناقشات العملية حول عدد من القضايا المعقدة والمتعلقة بتصميم وتنفيذ برامج متوازية. ويختتم البرنامج التعليمي بعدة أمثلة عن كيفية موازاة البرامج التسلسلية البسيطة.

جدول المحتويات

    1. ملخص
    2. نظرة عامة
        1. ما هي الحوسبة المتوازية؟
        2. لماذا استخدام الحوسبة المتوازية؟
        3. من يستعمل الحوسبة المتوازية؟
    3. المفاهيم والمصطلحات
        1. بنية الحاسب لـ فون نيومان
        2. تصنيف فلين الكلاسيكي
        3. بعض المصطلحات المتوازية العامة
        4. حدود وتكاليف البرمجة المتوازية
    4. بنيات ذاكرة الحاسوب المتوازية
        1. الذاكرة المشتركة
        2. الذاكرة الموزعة
        3. الذاكرة المشتركة-الموزعة الهجينة
    5. نماذج البرمجة المتوازية
        1. نظرة عامة
        2. نموذج الذاكرة المشتركة
        3. نموذج الخيوط
        4. الذاكرة الموزعة / نموذج تمرير الرسالة
        5. نموذج البيانات المتوازي
        6. النموذج الهجين
        7. SPMD وMBF
    6. تصميم البرامج المتوازية
        1. الموازاة اليدوية مقابل الموازاة التلقائية
        2. فهم المشكلة والبرنامج
        3. التجزئة
        4. الاتصالات
        5. المزامنة
        6. تبعيات البيانات
        7. موازنة التحميل
        8. الحبوبية
        9. I / O
        10. التصحيح
        11. ضبط وتحليل الأداء
    7. أمثلة موازية
        1. معالجة مصفوفة
        2. حساب  PI
        3. معادلة الحرارة البسيطة
        4. معادلة الموجة 1-D
    8. المراجع والمزيد من المعلومات

نظرة عامة

ما هي الحوسبة المتوازية (Parallel Computing)؟

    • الحوسبة التسلسلية (Serial Computing)


    • عادة، تكتب البرمجيات من أجل حوسبة تسلسلية حيث
        ◦ تقسم المشكلة إلى سلسلة منفصلة من التعليمات
        ◦ تنفذ التعليمات بالتتابع واحدة تلو الأخرى
        ◦ تنفذ التعليمات على معالج واحد
        ◦ يمكن تنفيذ تعليمة واحدة فقط خلال أي لحظة من الزمن


Serial computing
مثلا :

Serial computing

    • الحوسبة المتوازية


    • يُقصد بالحوسبة المتوازية، في أبسط معانيها، الاستخدام المتزامن لموارد حساب متعددة لحل مشكلة حسابية
        ◦ تقسم المشكلة إلى أجزاء منفصلة يمكن حلها في وقت واحد
        ◦ تقسم أيضا كل جزء إلى سلسلة من التعليمات
        ◦ تنفذ تعليمات كل جزء في وقت واحد على معالجات مختلفة
        ◦ تستخدم آلية شاملة للرقابة / التنسيق
Parallel computing
مثلا :
Parallel computing
    • يجب أن تكون المشكلة الحسابية قادرة على:
        ◦ قابلة للتقسيم إلى قطع عمل منفصلة والتي يمكن حلها أو تنفيذها في وقت واحد؛
        ◦ أن يتم تنفيذ تعليمات البرنامج المتعددة في أي لحظة من الزمن؛
        ◦ أن تحل في أقل وقت مع موارد حساب متعددة بالمقارنة مع مورد حساب واحد.
    • موارد الحساب عادة ما تكون:
        ◦ جهاز حاسوب واحد مع معالجات/أنوية متعددة
        ◦ عدد هائل من مثل هذه الحواسيب متصلة بشبكة

    • الحواسيب المتوازية (Parallel Computers)


    • تعتبر في يومنا هذا جميع أجهزة الحاسوب المستقلة تقريبا متوازية من منظور الأجهزة
        ◦ وحدات متعددة الوظائف (المخبأة أو ذاكرة التخزين المؤقت L1 – L1 cache، المخبأة أو ذاكرة التخزين المؤقت L2 – L2 cache ، فرع - branch، الجلب المسبق - prefetch، فك شفرة - decode، الفاصلة العائمة - floating-point، معالجة الرسومات (GPU)، عدد صحيح - integer، وما إلى ذلك)
        ◦ وحدات/أنوية التنفيذ المتعددة
        ◦ خيوط (threads) الأجهزة المتعددة

IBM BG/Q Compute Chip with 18 cores (PU) and 16 L2 Cache units (L2)
    • تربط الشبكات بين العديد من الحواسب المستقلة (عقود - nodes) لإنشاء عناقيد حواسيب متوازية كبيرة


    • على سبيل المثال، يظهر الرسم التخطيطي أسفله مجموعة حواسيب متوازية LLNL نموذجية
        ◦ كل عقدة حساب هو حاسوب متواز متعدد المعالجات في حد ذاته
        ◦ تربط عقود حساب متعددة فيما بينها بواسطة شبكة ذات عرض حزمة لانهائي (Infiniband)
        ◦ تستخدم العقود ذات الغرض الخاص، وكذلك متعددة المعالجات لأغراض أخرى

    • أغلبية أجهزة الحواسيب المتوازية الكبيرة العالمية (الحواسيب الفائقة - supercomputers) هي مجموعات من الأجهزة التي تنتجها حفنة من (معظم) البائعين المعروفين.

المصدر: Top500.org

لماذا استخدام الحوسبة المتوازية؟


    • العالم الحقيقي متواز على نطاق واسع:
    • في العالم الطبيعي، العديد من الأحداث المعقدة والمترابطة تحدث في نفس الوقت، ولكن ضمن تسلسل زمني.
    • بالمقارنة مع الحوسبة التسلسلية، تعتبر الحوسبة المتوازية أكثر ملاءمة للنمذجة، ولمحاكاة وفهم، ظواهر العالم الحقيقي المعقدة.
    • تخيل، على سبيل المثال، نمذجة هذه الظواهر بشكل متسلسل:


    • الأسباب الرئيسية:
    • توفير الوقت و/أو المال:
        ◦ نظريا، يؤدي إلقاء المزيد من الموارد في مهمة ما إلى تقصير الوقت اللازم لإنجازها، مع توفير محتمل للتكاليف.
        ◦ يمكن تركيب الحواسيب المتوازية من مكونات السلع الأساسية الرخيصة.

    • حل مشاكل معقدة إضافية/كبيرة:
        ◦ تعد الكثير من المشاكل جد كبيرة و/أو معقدة حيث أنه من غير العملي أو من المستحيل حلها على جهاز كمبيوتر واحد، وخاصة إذا ما نظرنا إلى ذاكرة الكمبيوتر المحدودة.
        ◦ مثال: "مشاكل التحدي الكبرى" (en.wikipedia.org/wiki/Grand_Challenge) التي تتطلب بيتافلوبس (PetaFLOPS) و بيتابيتس (PetaBytes) من موارد الحوسبة.
        ◦ مثال: تعالج محركات بحث الويب / قواعد بيانات الملايين من المعاملات في كل ثانية.

    • توفير التزامن (CONCURRENCY):
        ◦ يمكن لمورد حساب واحد القيام بأمر واحد فقط في نفس الوقت. بينما يمكن للعديد من موارد الحساب أن تفعل أشياء كثيرة في آن واحد.
        ◦ مثال: توفر الشبكات التعاونية مكانا عالميا حيث يمكن للناس من جميع أنحاء العالم أن يجتمعوا ويضطلعوا بعمل "فعليا".

    • الاستفادة من الموارد غير المحلية:
        ◦ استخدام موارد حساب على شبكة منطقة واسعة، أو حتى الإنترنت عندما تكون موارد الحوسبة المحلية نادرة أو غير كافية.
        ◦ مثال: تمتلك SETI@home (setiathome.berkeley.edu) أكثر من 1.6 مليون مستخدم في كل بلد تقريبا في العالم. (يونيو 2017).
        ◦ مثال: تمتلك Folding@home (folding.stanford.edu) أكثر من 1.8 مليون مساهم عالميا (يونيو 2017)

    • استخدام أفضل للأجهزة المتوازية الكامنة (UNDERLYING PARALLEL HARDWARE):
        ◦ تعتبر أجهزة الحاسوب الحديثة، وحتى أجهزة الحاسوب المحمول، متوازية في بنيتها مع معالجات/أنوية متعددة.
        ◦ يوجه البرنامج المتوازي خصيصا للأجهزة المتوازية ذات الأنوية المتعددة، الخيوط، الخ.
        ◦ في معظم الحالات، تعمل البرامج التسلسلية المشتغلة على أجهزة الحاسوب الحديثة على "تبديد" قدرة الحوسبة المحتملة.

Intel Xeon processor with 6 cores and 6 L3 cache units
    • المستقبل
    • خلال العشرين سنة الماضية، تظهر بوضوح الاتجاهات التي تشير إليها الشبكات الأسرع من أي وقت مضى، والأنظمة الموزعة، وبنيات الحواسيب متعددة المعالجات (حتى على مستوى سطح المكتب) أن التوازي هو مستقبل الحوسبة.
    • في نفس هذه الفترة الزمنية، كانت هناك زيادة تفوق 500,000 مرة في أداء الحاسوب الفائق، مع عدم وجود نهاية في الأفق حاليا.
    • السباق هو بالفعل على الحوسبة بسرعة إكساسكيل (Exascale)!
        ◦ إكسافلوب (Exaflop) = 1018 حساب في الثانية

المصدر: Top500.org

من يستعمل الحوسبة المتوازية؟


    • العلوم والهندسة
    • تاريخيا، اعتبرت الحوسبة المتوازية كونها "مكرّسة للحوسبة الفائقة"، وقد استخدمت لنمذجة مشاكل صعبة في العديد من مجالات العلوم والهندسة:
    • الهندسة الميكانيكية - من الأطراف الاصطناعية إلى المركبات الفضائية
    • الهندسة الكهربائية، تصميم الدوائر، الإلكترونيات الدقيقة
    • علم الحاسوب، الرياضيات
    • الدفاع، الأسلحة

    • الغلاف الجوي، الأرض، البيئة
    • الفيزياء - التطبيقية، النووية، الجسيمات، المادة المكثفة، الضغط المرتفع، الانصهار، الضوئيات
    • العلوم البيولوجية، التكنولوجيا الحيوية، علم الوراثة
    • الكيمياء، العلوم الجزيئية
    • الجيولوجيا، علم الزلازل


    • الأغراض الصناعية والتجارية
    • اليوم، توفر التطبيقات التجارية قوة دافعة متساوية أو كبيرة جدا في سبيل تطوير أجهزة الحاسوب فائقة السرعة. وتتطلب هذه التطبيقات معالجة كميات كبيرة من البيانات بطرق متطورة. مثلا:
    • النمذجة المالية والاقتصادية
    • إدارة الشركات الوطنية والمتعددة الجنسيات
    • الرسومات المتقدمة والواقع الافتراضي، خاصة في صناعة الترفيه
    • الفيديو الشبكي وتقنيات الوسائط المتعددة
    • بيئات العمل التعاونية
    • "البيانات الضخمة (Big Data)"، وقواعد البيانات، واستخراج البيانات
    • التنقيب عن النفط
    • محركات البحث على شبكة الإنترنت، خدمات الأعمال التجارية على شبكة الإنترنت
    • التصوير الطبي والتشخيص
    • التصميم الصيدلاني


    • التطبيقات العالمية
    • يجري حاليا استخدام الحوسبة المتوازية على نطاق واسع في جميع أنحاء العالم، وذلك في طائفة واسعة من التطبيقات.

 
المصدر: Top500.org

المفاهيم والمصطلحات

تصميم فون نيومان (von Neumann Architecture)


    • سمي باسم عالم الرياضيات الهنغاري العبقري جون فون نيومان أول من ألف المتطلبات العامة لجهاز الحاسوب الإلكتروني في أوراقه عام 1945.
    • ويعرف أيضا باسم "حاسوب البرامج المخزَّنة (stored-program computer)" – يحتفظ بكل من تعليمات البرنامج والبيانات في الذاكرة الإلكترونية. و يختلف عن أجهزة الحاسوب السابقة التي تمت برمجتها من خلال "الأسلاك الصلبة - hard wiring".
    •

جون فون نيومان1940
(المصدر: أرشيف لانل)
    • منذ ذلك الحين، اتبعت جميع الحواسيب تقريبا هذا التصميم الأساسي:


    • تتألف من أربعة مكونات رئيسية هي:
        ◦ الذاكرة
        ◦ وحدة التحكم
        ◦ وحدة المنطق الحسابية
        ◦ الإدخال / الإخراج
    • القراءة / الكتابة، تستخدم ذاكرة الوصول العشوائي لتخزين كل من تعليمات البرنامج والبيانات
    •  تعليمات البرنامج هي بيانات مبرمجة تخبر الحاسوب بالقيام بشيء ما
    • البيانات هي ببساطة معلومات ستستخدم من قبل البرنامج
    • تقوم وحدة التحكم بجلب التعليمات/البيانات من الذاكرة، و تفك شفرة التعليمات ثم تقوم بتنسيق العمليات لإنجاز المهمة المبرمجة تتابعيا.
    • تقوم وحدة الحساب بعمليات حسابية أساسية
    • الإدخال/الإخراج (Input/Output) هو واجهة المشغل البشري
    • المزيد من المعلومات عن إنجازاته الرائعة الأخرى: http://en.wikipedia.org/wiki/John_von_Neuman
    • ماذا في ذلك؟ من يهتم؟
        ◦ حسنا، ما تزال أجهزة الحاسوب المتوازية تتبع هذا التصميم الأساسي، فقط ضاعفت الوحدات. بينما ظلت البنية الأساسية هي نفسها.

التصنيف الكلاسيكي لـ فلين (Flynn)


    • هناك طرق مختلفة لتصنيف أجهزة الحاسوب المتوازية. الأمثلة متاحة هنا.
    • واحدة من التصنيفات المستخدمة على نطاق واسع، منذ عام 1966، تسمى تصنيف فلين.
    • يميز تصنيف فلين بنيات الحاسوب متعددة المعالجات وفقا للكيفية التي يمكن أن تصنف وفقها على طول البعدين المستقلين لتدفق التعليمات (Instruction Stream) ولتدفق البيانات (Data Stream). لكل بعد من هذه الأبعاد حالة واحدة فقط من الحالتين الممكنتين: واحدة (Single) أو متعددة (Multiple).
    • تحدد المصفوفة أدناه التصنيفات الأربع الممكنة وفقا لفلين:

    • تعليمات وحيدة، بيانات وحيدة (SISD):


    • جهاز حاسوب تسلسلي (غير متوازي)
    • تعليمات وحيدة: ينفذ تدفق تعليمات واحد فقط من قبل وحدة المعالجة المركزية (CPU) على مدار كل دورة معالجة واحدة
    • بيانات وحيدة: تستخدم تدفق بيانات وحيدة فقط كمدخلات على مدار كل دورة معالجة واحدة
    • تنفيذ حتمي
    • هذا هو أقدم نوع من الحواسيب
    • أمثلة: أجهزة الحاسوب الكبيرة من الجيل الأقدم، أجهزة الحاسوب الصغيرة، محطات العمل وأجهزة الحاسوب الشخصية أحادية المعالج/النواة.

 

UNIVAC1

IBM 360

CRAY1

CDC 7600

PDP1

Dell Laptop

    • تعليمات وحيدة، بيانات متعددة (SIMD):


    • نوع من أجهزة الحاسوب المتوازية
    • تعليمات وحيدة: تنفذ جميع وحدات المعالجة نفس التعليمات في أي دورة معالجة معينة
    • بيانات متعددة: يمكن لكل وحدة معالجة أن تعمل على عنصر بيانات مختلف
    • الأنسب للمشاكل المتخصصة التي تتميز بدرجة عالية من الانتظام، مثل معالجة الرسومات/الصور.
    • متزامن (بانتظام) ومنفذ حتمي
    • صنفان اثنان: مصفوفات المعالج وخطوط الأنابيب المتجهة
    • أمثلة:
        ◦ مصفوفات المعالج: Thinking Machines CM-2, MasPar MP-1 & MP-2, ILLIAC IV
        ◦ خطوط الأنابيب المتجهة: IBM 9000, Cray X-MP, Y-MP & C90, Fujitsu VP, NEC SX-2, Hitachi S820, ETA10
    • معظم أجهزة الحاسوب الحديثة، وخاصة تلك التي تمتلك وحدات معالج الرسومات (GPUs) تستخدم تعليمات SIMD ووحدات التنفيذ.

 

ILLIAC IV

MasPar

        

Cray X-MP

Cray Y-MP

Thinking Machines CM-2

Cell Processor (GPU)

    • تعليمات متعددة، بيانات وحيدة (MISD):


    • نوع من أجهزة الحاسوب المتوازية
    • تعليمات متعددة: تعمل كل وحدة معالجة على البيانات بشكل مستقل عن طريق تدفقات تعليمات منفصلة.
    • بيانات وحيدة: يوزع تدفق واحد من البيانات في وحدات معالجة متعددة.
    • لا يوجد سوى عدد قليل (إن وجد) من الأمثلة الفعلية لهذه الفئة من أجهزة الحاسوب المتوازية .
    • بعض الاستخدامات التي يمكن تصورها:
        ◦ مرشحات تردد متعددة تعمل على تدفق إشارة واحد
        ◦ خوارزميات تشفير متعددة تحاول كسر رسالة مشفرة واحدة.

    • تعليمات متعددة، بيانات متعددة (MIMD):


    • نوع من أجهزة الحاسوب المتوازية
    • تعليمات متعددة:  قد يقوم كل معالج بتنفيذ تدفق تعليمات مختلف
    • بيانات متعددة: قد يعمل كل معالج مع تدفق بيانات مختلف
    • يمكن أن يكون التنفيذ متزامنا أو غير متزامن، حتمي أو غير حتمي
    • حاليا، هو النوع الأكثر شيوعا من أجهزة الحاسوب المتوازية – توجد معظم الحواسيب الفائقة ضمن هذه الفئة.
    • أمثلة: معظم الحواسيب الفائقة الحالية، عناقيد (clusters) و"شبكات" أجهزة حاسوب متوازية مشبكة، أجهزة حاسوب SMP متعددة المعالجات، وأجهزة حاسوب شخصية متعددة الأنوية.
    • ملاحظة: تشمل أيضا العديد من بنيات MIMD المكونات الفرعية التنفيذية SIMD


IBM POWER5

HP/Compaq Alphaserver

Intel IA32

AMD Opteron

Cray XT3

IBM BG/L

بعض المصطلحات العامة المتوازية


    • مثل كل شيء آخر، الحوسبة المتوازية لها "لغة اصطلاحية" خاصة بها. وقد تم جرد بعض من المصطلحات الأكثر شيوعا والمرتبطة بالحوسبة المتوازية أسفله.
    • ستتم مناقشة معظم هذه المصطلحات بمزيد من التفصيل في وقت لاحق.

الحوسبة الفائقة / الحوسبة عالية الأداء - High Performance Computing (HPC)
تستخدم أسرع وأكبر أجهزة الحاسوب العالمية لحل المشاكل الكبيرة.


العقدة - Node
عبارة عن "حاسوب في صندوق" مستقل من وحدات معالجة مركزية/معالجات/أنوية متعددة، ذاكرة، واجهات الشبكة، وما إلى ذلك. وتشبك العقد معا لتكون حاسوبا فائقا.


وحدة المعالجة المركزية CPU / المقبس / المعالج / النواة - CPU / Socket / Processor / Core
هذا يختلف اعتمادا على من تتحدث إليه. في الماضي، كانت وحدة المعالجة المركزية (CPU) مكون التنفيذ الوحيد للحاسوب. ثم، دمجت وحدات معالجة مركزية متعددة في عقدة. بعد ذلك، قسمت وحدات المعالجة المركزية الفردية إلى عدة "أنوية"، كل منها أصبحت وحدة تنفيذ وحيدة. تسمى وحدات المعالجة المركزية مع الأنوية المتعددة أحيانا "مقابس" – تعتمد على المورد. والنتيجة هي عقدة ذات وحدات معالجة مركزية متعددة، تحتوي كل منها على عدة أنوية. يخلط بين التسميات في بعض الأحيان. أتساءل لماذا؟


المهمة - Task
قسم منفصل منطقيا من العمل الحسابي. والمهمة هي عادة برنامج أو شبه برنامج مجموعة من التعليمات التي تنفذ بواسطة معالج. ويتألف البرنامج المتوازي من مهام متعددة تشتغل على معالجات متعددة.


المواردة - Pipelining
تقسيم مهمة إلى خطوات تؤديها وحدات المعالج المختلفة، مع مدخلات تتدفق من خلالها، يشبه بشكل كبير خط التجميع؛ نوع من الحوسبة المتوازية.


الذاكرة المشتركة - Shared Memory
من وجهة نظر دقيقة للأجهزة، فهي تصف بنية الحاسوب حيث لدى جميع المعالجات وصول مباشر (قائم على الناقل عادة) إلى الذاكرة الملموسة المشتركة. ومن الناحية البرمجية، فإنها تصف نموذجا حيث كل المهام المتوازية لها نفس "صورة" الذاكرة ويمكنها أن تعنون وتلج مباشرة نفس مواقع الذاكرة المنطقية بغض النظر عن مكان وجود الذاكرة الملموسة فعلا.


المعالج المتعدد المتناظر - Symmetric Multi-Processor (SMP)
بنية جهاز الذاكرة المشتركة حيث تشترك المعالجات المتعددة في مساحة عنوان واحد ولديها وصول متساو إلى جميع الموارد.


الذاكرة الموزعة - Distributed Memory
تشير، في الأجهزة، إلى الوصول للذاكرة القائمة على الشبكة للذاكرة الملموسة غير المشتركة. وكنموذج برمجي، يمكن للمهام أن "ترى" منطقيا ذاكرة الجهاز المحلي فقط ويجب استخدام الاتصالات للوصول إلى الذاكرة على الأجهزة الأخرى حيث يتم تنفيذ المهام الأخرى.


الاتصالات - Communications
عادة ما تحتاج المهام المتوازية إلى تبادل البيانات. هناك عدة طرق لتحقيق ذلك، كأن تتم عبر ناقل ذاكرة مشتركة أو عن طريق الشبكة، إلا أنه عادة ما يُشار إلى الحدث الفعلي لتبادل البيانات بالاتصالات بغض النظر عن الطريقة المستخدمة.


التزامن - Synchronization
هو تنسيق المهام المتوازية في الوقت الحقيقي، وغالبا ما يرتبط بالاتصالات. كما أنه في الغالب ما تنفذ عن طريق إنشاء نقطة التزامن ضمن تطبيق حيث لا يجوز لمهمة ما المضي قدما حتى تصل مهمة أو مهام أخرى إلى نفس النقطة أو ما يعادلها منطقيا.
المزامنة عادة ما ينطوي على الانتظار من قبل مهمة واحدة على الأقل، وبالتالي يمكن أن يؤدي إلى زيادة في وقت تنفيذ التطبيق المتوازي.


الحبوبية - Granularity
في الحوسبة المتوازية، يقصد بالحبوبية ذلك المقياس النوعي للحساب بالنسبة للاتصالات.
    • خشنة: يتم إجراء كميات كبيرة نسبيا من العمل الحسابي بين أحداث الاتصالات
    • دقيقة: يتم إجراء كميات صغيرة نسبيا من العمل الحسابي بين أحداث الاتصالات

التسريع المرصود - Observed Speedup
يعرف التسريع المرصود لشفرة والذي تتم موازاته على النحو التالي:

وقت التنفيذ التسلسلي على مدار الساعة
-----------------------------------وقت التنفيذ المتوازي على مدار الساعة


هو واحد من أبسط وأكثر المؤشرات استخداما وعلى نطاق واسع لأداء برنامج متوازي.


تكلفة التوازي - Parallel Overhead
هو مقدار الوقت اللازم لتنسيق المهام المتوازية، مقابل القيام بعمل مستفاد منه. يمكن أن تشمل تكلفة التوازي  عوامل مثل:
    • وقت بدء المهمة
    • التزامنات
    • اتصالات البيانات
    • تكلفة البرامج تفرضها اللغات المتوازية والمكتبات وأنظمة التشغيل وما إلى ذلك.
    • وقت إنهاء المهمة


التوازي الضخم - Massively Parallel
يشير إلى الأجهزة التي تؤلف نظام مواز معين - تملك العديد من عناصر المعالجة. يظل معنى "العديد" يتزايد، ولكن حاليا، أكبر أجهزة الكمبيوتر المتوازية تتكون من عناصر المعالجة تحسب من مئات الآلاف إلى الملايين.


التوازي المربك - Embarrassingly Parallel
حل العديد من المهام المماثلة، ولكنها مستقلة في آن واحد؛ وليس هناك حاجة إلى التنسيق بين المهام.


قابلية التوسع - Scalability
تشير إلى قابلية نظام متوازي (أجهزة و/أو برمجيات) في إثبات الزيادة التناسبية في التسريع المتوازي مع إضافة المزيد من الموارد. وتشمل العوامل التي تساهم في قابلية التوسع:
    • الأجهزة – خاصة حيز نطاقات ذاكرة وحدة المعالجة المركزية وخصائص اتصالات الشبكة
    • خوارزمية التطبيق
    • تكلفة التوازي ذات الصلة
    • مميزات تطبيقك الخاص

حدود وتكاليف البرمجة المتوازية

    • قانون أمدال (Amdahl):


    • ينص قانون أمدال على أن تسارع البرنامج المحتمل يعرف بأنه أجزاء الشفرة (P) التي يمكن موازاتها:

 


     

    • إذا لم يكن بالإمكان موازاة الشفرة، فإن P=0 و speedup=1 (لا يوجد تسارع).
    • إذا تمت موازاة كل الشفرة، P=1 وسرعة غير منتهية (من الناحية النظرية).


    • إذا كان بالإمكان موازاة 50٪ من الشفرة، فإن الحد الأقصى speedup=2، وهذا يعني أنه سيتم تشغيل الشفرة مرتين أسرع.


    • بإدخال عدد من المعالجات التي تؤدي الى  توازي في العمل، يمكن صياغة العلاقة على النحو التالي:
حيث P = كسر التوازي، N = عدد المعالجات و S = الكسر التسلسلي.

    • وسرعان ما يصبح واضحا أن هناك حدودا لقابلية توسع الموازاة. فمثلا:

    • الاقتباس "الشهير": يمكنك قضاء العمر مدى الحياة للحصول على 95٪ من الشفرة الخاصة بك لتكون متوازية، ولن تحقق أبدا أفضل من تسريع بـ 20 مرة بغض النظر عن عدد المعالجات التي تستعملها في ذلك!
    • مع ذلك، تظهر بعض المشاكل زيادة الأداء بزيادة حجم المشكلة. فمثلا:

    • يمكننا زيادة حجم المشكلة عن طريق مضاعفة أبعاد الشبكة وخفض الخطوة الزمنية إلى النصف. وهذا يؤدي إلى أربعة أضعاف عدد نقاط الشبكة ومرتين عدد الخطوات الزمنية. ثم تبدو التوقيتات كالتالي:

    • تعد المشاكل التي تزيد من نسبة الوقت المتوازي بحجمها أكثر قابلية للتطوير من المشاكل التي لها نسبة الوقت المتوازي ثابتة.

    • تعقيد - Complexity:


    • تعتبر التطبيقات المتوازية، عموما، أكثر تعقيدا من نظيراتها من التطبيقات التسلسلية، وربما يكون بمعدل أسي. ليس فقط لان لديك تنفيذ لتدفقات من التعليمات المتعددة في نفس الوقت، ولكن لأنك تمتلك أيضا بيانات متدفقة بينها.
    • وتقاس تكاليف التعقيد في وقت البرمجة في كل جانب تقريبا من دورة تطوير البرمجيات:
    • التصميم
    • الترميز
    • التصحيح
    • الضبط
    • الصيانة
    • إن التمسك بممارسات تطوير البرمجيات "الجيدة" أمر ضروري عند العمل بتطبيقات متوازية - خاصة إذا كان  شخص ما سيعمل بجانبك على البرنامج.
 

    • قابلية النقل - Portability:


    • بفضل التوحيد القياسي في العديد من واجهات برمجة التطبيقات APIs مثل MPI وخيوط  POSIX وOpenMP، فإن قضايا قابلية النقل بالبرامج المتوازية ليست خطيرة كما في السنوات الماضية. ومع ذلك...
    • تطبق جميع قضايا النقل المعتادة المرتبطة بالبرامج التسلسلية على البرامج المتوازية. على سبيل المثال، إذا كنت تستخدم "تحسينات" المورد إلى Fortran، C أو C++، فستصبح قابلية النقل مشكلة.
    • على الرغم من وجود معايير لعدة واجهات برمجة التطبيقات، فإن عمليات التنفيذ تختلف في عدد من التفاصيل، وأحيانا في نقطة تتطلب تعديلات في الشفرة (الترميز) من أجل تحقيق قابلية النقل.
    • يمكن أن تساهم أنظمة التشغيل بدور رئيسي في قضايا قابلية نقل الشفرة.
    • تعد بنيات الأجهزة قابلة للتغيير بشكل كبير ويمكن أن تؤثر على قابلية النقل.


    • متطلبات الموارد - Resource Requirements:


    • الغرض الأساسي من البرمجة المتوازية هو تقليل وقت التنفيذ على مدار الساعة، ولكن من أجل تحقيق ذلك، فإن الأمر يتطلب المزيد من وقت وحدة المعالجة المركزية. على سبيل المثال، الشفرة المتوازية التي يتم تشغيلها خلال ساعة واحدة على ثمان معالجات تستخدم في الواقع 8 ساعات من وقت وحدة المعالجة المركزية.
    • قد تكون كمية الذاكرة المطلوبة للشفرات المتوازية أكبر من مثيلتها بالنسبة للشفرات التسلسلية، وذلك بسبب الحاجة إلى تكرار البيانات والتكلفة المرتبطة بمكتبات الدعم المتوازي والنظم الفرعية.
    • بالنسبة للبرامج القصيرة المتوازية، يمكن أن يكون هناك انخفاض في الأداء مقارنة بالتنفيذ التسلسلي المتشابه. ويمكن أن تكون التكلفة المرتبطة بتهيئة البيئة المتوازية، وإنشاء المهام، والاتصالات وإنهاء المهام، جزءا كبيرا من وقت التنفيذ الإجمالي للمدى القصير.


    • قابلية التوسع - Scalability:


    • نوعان من قابلية التوسع قائمان على الوقت إلى الحل: التحجيم القوي والتحجيم الضعيف.
    • التحجيم القوي - Strong scaling:
    • يبقى حجم المشكلة الإجمالي ثابتا كلما تمت إضافة المزيد من المعالجات.
    • الهدف هو تشغيل نفس حجم المشكلة بشكل أسرع
    • يقصد بالتحجيم الكامل حل المشكلة في زمن 1/p (مقارنة بالتسلسل)
    • التحجيم الضعيف - Weak scaling:
    • يبقى حجم المشكلة لكل معالج ثابتا كلما تمت إضافة المزيد من المعالجات.
    • الهدف هو تشغيل مشكلة أكبر في نفس المدة الزمنية
    • يقصد بالتحجيم الكامل أن المشكلة Px تشتغل في نفس الوقت الذي يشتغل فيه معالج واحد
    • إن قدرة أداء برنامج متوازي على التوسع هي نتيجة لعدد من العوامل المترابطة. ببساطة، إن إضافة المزيد من المعالجات نادرا ما يكون هو الحل.
    • قد تكون للخوارزمية حدود متأصلة لقابلية التوسع. وفي مرحلة ما، يؤدي إضافة المزيد من الموارد إلى تقليل الأداء. وهذا حالة مشتركة في العديد من التطبيقات المتوازية.
    • تلعب عوامل الأجهزة دورا هاما في قابلية التوسع. أمثلة:
    • سعة نطاق ناقل ذاكرة وحدة المعالجة المركزية على آلة SMP
    • سعة نطاق شبكة الاتصالات
    • كمية الذاكرة المتاحة في أية آلة معينة أو مجموعة آلات
    • سرعة المعالج على مدار الساعة
    • يمكن لمكتبات الدعم المتوازي وبرامج النظم الفرعية أن تحد قابلية التوسع المستقلة لتطبيقك.

بنيات ذاكرة الحاسوب المتوازية

الذاكرة المشتركة - Shared Memory

    • الخصائص العامة


    • تختلف أجهزة الحاسوب المتوازية ذات الذاكرة المشتركة كثيرا، ولكنها تشترك عموما في قابلية جميع المعالجات في الوصول إلى كل الذاكرة كحيز عنوان عام.
    • يمكن أن تعمل العديد من المعالجات بشكل مستقل ولكنها تشترك في نفس موارد الذاكرة.
    • تكون التغييرات التي ينجزها معالج واحد في موقع الذاكرة مرئية لجميع المعالجات الأخرى.
    • تاريخيا، تم تصنيف آلات الذاكرة المشتركة إلى ذاكرة موحدة الوصول (UMA) وذاكرة غير موحدة الوصول (NUMA)، وذلك استنادا إلى أوقات الوصول إلى الذاكرة.


    • الذاكرة موحدة الوصول - Uniform Memory Access  (UMA)


    • تتمثل اليوم بشكل شائع من قبل الآلات المعالج المتعدد المتناظر (SMP)
    • معالجات متطابقة
    • وصول متساوي وأوقات وصول إلى الذاكرة
    • تسمى أحيانا ذاكرة موحدة الوصول متماسكة مخبأة (CC-UMA). ويقصد بمتماسكة مخبأة إنه إذا قام معالج واحد بتحديث موقع في الذاكرة المشتركة، فإن جميع المعالجات الأخرى تعلم التحديث. يتم تحقيق التماسك المخبأ على مستوى العتاد.

    • الذاكرة غير موحدة الوصول - Non-Uniform Memory Access (NUMA)


    • غالبا ما تُصنع عن طريق ربط مادي (فيزيائي) لاثنين أو أكثر من الآلات المعالج المتعدد المتناظرSMP
    • يمكن لآلة المعالج المتعدد المتناظرSMP الوصول مباشرة لذاكرة آلة المعالج المتعدد المتناظر SMP  أخرى.
    • ليس لكل المعالجات وقت وصول متساو إلى جميع الذاكرات
    • يعتبر الوصول إلى الذاكرة عبر الرابط أبطأ
    • إذا تم الحفاظ على التماسك المخبأ، حينها يمكن أيضا أن تسمى ذاكرة غير موحدة الوصول متماسكة مخبأة (CC-NUMA)


    • الإيجابيات
    • يوفر حيز العنوان العام منظور برمجة سهل الاستخدام للذاكرة
    • يعد تبادل البيانات بين المهام سريعا وموحدا على حد سواء لقرب الذاكرة من وحدات المعالجة المركزية
    • السلبيات
    • السلبية الأساسية هي عدم قابلية التوسع بين الذاكرة ووحدات المعالجة المركزية. حيث أنه يمكن بإضافة المزيد من وحدات المعالجة المركزية أن تزيد حركة المرور هندسيا على مسار الذاكرة المشتركة لوحدة المعالجة المركزية، أما بالنسبة للأنظمة المتماسكة المخبأة، فإن حركة المرور المرتبطة بإدارة الذاكرة/المخبأة تزداد هندسيا.
    • مسؤولية المبرمج لتنظيم التزامن الذي يضمن الوصول "الصحيح" للذاكرة الإجمالية.
معماريات ذاكرة الحاسوب المتوازية

الذاكرة الموزعة - Distributed Memory

    • الخصائص العامة


مثل أنظمة الذاكرة المشتركة،  تتنوع أنظمة الذاكرة الموزعة كثيرا ولكنها تتقاسم مميزات مشتركة. وتتطلب أنظمة الذاكرة الموزعة شبكة اتصالات للتوصيل بين الذاكرة والمعالج.

    • تمتلك المعالجات ذاكرة محلية خاصة بها. ولا يتم تعيين عناوين الذاكرة في معالج واحد إلى معالج آخر، لذلك ليس هناك مفهوم حيز عنوان عام عبر جميع المعالجات.
    • ولأن كل معالج له ذاكرة محلية خاصة به، فإنه يعمل بشكل مستقل. إذ ليست للتغييرات التي يجريها على ذاكرته المحلية أي تأثير على ذاكرة المعالجات الأخرى. وبالتالي، فإن مفهوم التماسك المخبأ لا ينطبق.
    • عندما يحتاج المعالج إلى الوصول إلى البيانات في معالج آخر، فإنه عادة ما يكون من مهمة المبرمج لتحديد صريح لكيفية وزمن توصيل البيانات. كما يعد كذلك التزامن بين المهام من مسؤولية المبرمج.
    • تختلف "معمارية" الشبكة المستخدمة لنقل البيانات بشكل كبير، على الرغم من أنها يمكن أن تكون بسيطة مثل شبكة الإيثرنت.
    • الإيجابيات
    • تعد الذاكرة قابلة للتوسع مع عدد المعالجات. حيث كلما زاد عدد المعالجات ازداد حجم الذاكرة بشكل تناسبي.
    • يمكن لكل معالج أن يصل بسرعة إلى الذاكرة الخاصة به دون تدخل ودون تكلفة المتكبدة مع محاولة الحفاظ على التماسك المخبأ العام.
    • فعالية التكلفة: يمكن استخدام السلع، والمعالجات الجاهزة والتشبيك.
    • السلبيات
    • المبرمج هو المسؤول عن العديد من التفاصيل المرتبطة باتصال البيانات بين المعالجات.
    • قد يكون من الصعب تعيين هياكل البيانات المتوفرة، استنادا على الذاكرة الإجمالية، إلى تنظيم الذاكرة هذا.
    • أوقات الذاكرة غير موحدة الوصول – تستغرق البيانات الموجودة على عقدة بعيدة وقتا أطول للوصول مقارنة بالبيانات المحلية للعقدة.

الذاكرة المشتركة-الموزعة الهجينة - Hybrid Distributed-Shared Memory

    • الخصائص العامة


    • تستخدم اليوم أكبر وأسرع أجهزة الحاسوب في العالم معمارية الذاكرة المشتركة والموزعة على حد سواء.

    • يمكن أن يكون مكون الذاكرة المشتركة جهاز ذاكرة مشترك و/أو وحدات معالجة الرسومات (GPU).
    • مكون الذاكرة الموزعة عبارة عن تشبيك للعديد من أجهزة وحدات معالجة الرسومات/ذاكرات مشتركة، والتي تعرف فقط عن الذاكرة الخاصة بها – وليس عن ذاكرة على جهاز آخر. لذلك، يتطلب الأمر شبكة اتصالات لنقل البيانات من جهاز إلى آخر.
    • ويبدو أن الاتجاهات الحالية تشير إلى أن هذا النوع من بنيات الذاكرة سيستمر في الانتشار وسيزداد في الحوسبة الفائقة في المستقبل المنظور.
    • الإيجابيات والسلبيات
    • كل شيء مشترك بين بنية كل من الذاكرة المشتركة والذاكرة الموزعة.
    • زيادة قابلية التطوير هي ميزة هامة لديها
    • زيادة تعقيد المبرمج هي سلبية مهم لديها

نماذج البرمجة المتوازية

نظرة عامة


    • هناك العديد من نماذج البرمجة المتوازية المستخدمة اليوم:
        ◦ الذاكرة المشتركة (بدون خيوط)
        ◦ الخيوط
        ◦ الذاكرة الموزعة / تمرير الرسالة
        ◦ البيانات المتوازية
        ◦ الهجين
        ◦ برنامج واحد متعدد البيانات (SMPD)
        ◦ برامج متعددة ذات بيانات متعددة (MPMD )

    • توجد نماذج البرمجة المتوازية كتجريد فوق معمارية الأجهزة والذاكرات.
    • على الرغم من أنه قد لا يبدو واضحا، إلا أن هذه النماذج ليست محددة لنوع خاص من الأجهزة أو معماريات الذاكرة. في الواقع، أي من هذه النماذج يمكن (نظريا) أن تنفذ على الأجهزة الأساسية. وسنناقش أدناه مثالان من الماضي.

نموذج ذاكرة مشتركة على جهاز ذاكرة موزعة:


مقاربة Kendall Square Research (KSR) ALLCACHE، وزعت ذاكرة جهاز فيزيائيا عبر أجهزة مشبكة، ولكنها تبدو للمستخدم كحيز عنوان عام لذاكرة مشتركة واحدة. وبشكل عام، يشار إلى هذه المقاربة باسم "الذاكرة المشتركة الافتراضية".

نموذج ذاكرة موزعة على جهاز ذاكرة مشتركة:


واجهة تمرير الرسالة  Message Passing Interface (MPI) على SGI Origin 2000. تستخدم  SGI Origin 2000 النوع CC-NUMA من بنية الذاكرة المشتركة، حيث تملك كل مهمة لديها إمكانية الوصول المباشر إلى حيز العنوان العام عبر جميع الأجهزة. ومع ذلك، فإن قابلية إرسال واستقبال الرسائل باستخدام MPI، كما هو الحال عادة على شبكة من أجهزة الذاكرة الموزعة، تكون منفذة ومستخدمة بشكل مشترك.

    • أي نموذج يجب استخدامه؟ هذا غالبا ما يكون توليفة بين ما هو متاح و ما هو اختيار شخصي. لا يوجد نموذج "أفضل"، على الرغم من أن هناك بالتأكيد تطبيقات أفضل لبعض النماذج من غيرها.
    • تصف الأقسام التالية كل من النماذج المذكورة أعلاه، وتناقش أيضا بعض عمليات التنفيذ الفعلية.

نموذج الذاكرة المشتركة (بدون خيوط)


    • تشارك العمليات/المهام حيز عنوان مشترك، في نموذج البرمجة هذا، والذي تقوم بقراءته وكتابته بشكل غير متزامن.
    • تستخدم آليات مختلفة مثل الأقفالlocks /منظم المرورsemaphores  للتحكم في الوصول إلى الذاكرة المشتركة، وحل التنازعات ولمنع حالة التعارضات والتوقفات التامة.
    • قد يكون هذا أبسط نموذج برمجة متوازية.
    • ميزة هذا النموذج من وجهة نظر المبرمج هي أن مفهوم "ملكية" البيانات غير موجودة، لذلك ليس هناك حاجة لتحديد اتصالات البيانات بين المهام بوضوح. وتمتلك جميع العمليات رؤية ووصول متساو إلى الذاكرة المشتركة. ويمكن في كثير من الأحيان تبسيط تطوير البرامج.
    • من العوائق الهامة من حيث الأداء أن فهم وإدارة موقع البيانات يصبح أكثر صعوبة:
        ◦ الحفاظ على البيانات المحلية في العملية التي تعمل على ذلك تحافظ على الوصول إلى الذاكرة، وتحديثات المخبأة وحركة مرور الناقل التي تحدث عندما تستخدم العديد من العمليات نفس البيانات.
        ◦ لسوء الحظ، يعد ضبط موقع البيانات صعب الفهم وقد يكون خارج نطاق التحكم لدى المستخدم العادي.
    • آليات تنفيذ هذا النموذج
    • على أجهزة الذاكرة المشتركة القائمة بذاتها، وأنظمة التشغيل الأصلية، توفر مترجمات اللغة و/أو العتاد الدعم اللازم لبرمجة الذاكرة المشتركة. فعلى سبيل المثال، يوفر معيار POSIX  واجهة برمجة تطبيق (API) لاستخدام الذاكرة المشتركة، بينما يوفر UNIX قطع الذاكرة المشتركة (shmget، shmat، shmctl، الخ).
    • على أجهزة الذاكرة الموزعة، توزع الذاكرة فيزيائيا عبر شبكة من الأجهزة، ولكن تصبح عامة عبر الأجهزة والبرمجيات المتخصصة. مجموعة متنوعة من آليات التنفيذ لـ SHMEM متاحة راجع: http://en.wikipedia.org/wiki/SHMEM.


نموذج الخطوط - Threads Model


    • هذا النموذج البرمجي هو نوع من برمجة الذاكرة المشتركة.
    • في نموذج الخيوط للبرمجة المتوازية، يمكن لعملية واحدة " ثقيلة الوزن" أن تكون لديها عمليات متعددة "خفيفة الوزن"، ومسارات تنفيذ متزامنة.
    • على سبيل المثال:
        ◦ تتم جدولة البرنامج الرئيسي a.out ليشتغل من قبل نظام التشغيل الأصلي. ويقوم a.out بتحميل واكتساب كل موارد النظام والمستخدمين اللازمة لتشغيله. هذه هي عملية "الوزن الثقيل".
        ◦ يؤدي a.out بعض الأعمال التسلسلية، ثم يقوم بإنشاء عدد من المهام (الخيوط) التي يمكن جدولتها وتشغيلها من قبل نظام التشغيل بشكل متزامن.
        ◦ يحتوي كل خيط على بيانات محلية، ولكنه أيضا، يشارك الموارد الكاملة لـ a.out. وهذا يوفر التكلفة المرتبطة بتكرار موارد برنامج لكل خيط ("خفيفة الوزن"). ويستفيد كل خيط أيضا من عرض ذاكرة إجمالية لأنه يشارك مساحة الذاكرة لـ a.out.
        ◦ يمكن وصف عمل الخيوط بشكل أفضل كنهج فرعي ضمن البرنامج الرئيسي. حيث يمكن لأي خيط تنفيذ أي نهج فرعي في نفس الوقت كما بالنسبة للخيوط الأخرى.
        ◦ تتواصل الخيوط مع بعضها البعض من خلال الذاكرة الإجمالية (تحديث مواقع العناوين). ويتطلب هذا إنشاء تزامن للتأكد من أنه لا يتم تحديث نفس العنوان العام لأكثر من خيط واحد في أي وقت.
        ◦ يمكن للخيوط أن تأتي وتذهب، ولكن يظل a.out حاضرا لتوفير الموارد المشتركة اللازمة إلى غاية اكتمال التطبيق.

    • تطبيقات - Implementations
    • من منظور البرمجة، تشتمل عمليات التنفيذ للخيوط عادة على:
        ◦ مكتبة من النهج الفرعية التي يتم استدعاءها من داخل شفرة المصدر المتوازي
        ◦ مجموعة من توجيهات المترجم البرمجي المضمنة ضمن شفرة المصدر التسلسلي أو ضمن شفرة المصدر المتوازي
وفي كلتا الحالتين، يكون المبرمج هو المسؤول عن تحديد التوازي (على الرغم من أنه يمكن لمترجمات اللغة أن تقدم المساعدة أحيانا).
    • لا تعد عمليات تنفيذ الخيوط جديدة في الحوسبة. فتاريخيا، قام موردو الأجهزة بتوفير آليات تنفيذ ذات إصدارات ملكية خاصة بهم من الخيوط. وتختلف هذه آليات التنفيذ اختلافا جوهريا عن بعضها البعض، مما يجعل الأمر صعبا على المبرمجين لتطوير تطبيقات متسلسلة محمولة.
    • أدت جهود توحيد المقاييس المنفصلة إلى إخراج آليتي تنفيذ للخيوط مختلفتين جدا: خيوط POSIX و OpenMP.


    • خيوط POSIX
        ◦ يحددها المقياس IEEE POSIX 1003.1c (1995). لغة C فقط.
        ◦ جزء من أنظمة التشغيل يونكس/لينكس (Unix/Linux)
        ◦ بني من منظور مكتبة
        ◦ يشار إليها عادة باسم Pthreads.
        ◦ جد متوازية؛ تتطلب اهتمام كبير من مبرمج بالتفاصيل.


    • OpenMP
        ◦ مقياس صناعي، تم تحديده بشكل مشترك وأيدته مجموعة من الموردين الكبار لأجهزة وبرمجيات الحاسوب، والمنظمات والأفراد.
        ◦ بني من منظور توجيه المترجم (Compiler)
        ◦ محمول / متعدد المنصات، بما في ذلك منصتي يونكس وويندوز
        ◦ متوفر في تطبيقات C / C ++ و Fortran
        ◦ يمكن أن يكون جد سهل وبسيط الاستخدام - يوفر "التوازي التدريجي". ويمكن أن يبدأ برمز تسلسلي.


    • آليات تنفيذ أخرى للخيوط، ولكن لم تتم مناقشتها هنا:
        ◦ خيوط ميكروسوفت
        ◦ خيوط جافا، خيوط بيثون
        ◦ خيوط CUDA لوحدات معالجة الرسومات (GPUs)


    • المزيد من المعلومات
    • دورة خيوط POSIX: computing.llnl.gov/tutorials/pthreads
    • دورة OpenMP: computing.llnl.gov/tutorials/openMP

الذاكرة الموزعة / نموذج تمرير رسالة - Distributed Memory / Message Passing Model


    • يوضح هذا النموذج الخصائص التالية:
        ◦ مجموعة من المهام التي تستخدم الذاكرة المحلية الخاصة بها أثناء الحساب. يمكن أن تتواجد مهام متعددة على نفس الجهاز الفيزيائي و/أو عبر عدد اعتباطي من الأجهزة.
        ◦ بيانات تبادل المهام من خلال الاتصالات بإرسال واستقبال الرسائل.
        ◦ عادة ما يتطلب نقل البيانات إجراء عمليات تعاونية من قبل كل عملية. على سبيل المثال، يجب أن تكون لعملية الإرسال عملية استقبال مطابقة.
    • آليات التنفيذ
    • من منظور البرمجة، عادة ما تتضمن آليات تنفيذ تمرير الرسائل مكتبة النُّهج الفرعية. ويتم تضمين الاستدعاءات إلى هذه النُّهج الفرعية في شفرة المصدر. ويكون المبرمج مسؤولا عن تحديد كل التوازي.
    • من الناحية التاريخية، كانت هناك مجموعة متنوعة من مكتبات تمرير الرسائل منذ الثمانينيات. وتختلف عمليات التنفيذ هذه اختلافا كبيرا عن بعضها البعض مما يجعل من الصعب على المبرمجين تطوير التطبيقات المحمولة.
    • في عام 1992، تم تشكيل منتدى MPI بهدف أساسي هو إنشاء واجهة قياسية لعمليات تنفيذ تمرير الرسائل.
    • تم إصدار الجزء 1 من واجهة تمرير الرسائل (MPI) عامَ 1994. بينما تم إصدار الجزء 2 (MPI-2) عامَ 1996 وMPI-3 عامَ 2012. جميع مواصفات MPI متوفرة على شبكة الإنترنت: //www.mpi- forum.org/docs/.
    • يعد MPI "بحكم الأمر الواقع" مقياسا صناعيا لتمرير الرسائل، وحلَّ تقريبا محل جميع عمليات التنفيذ المستخدمة الأخرى والخاصة بتمرير الرسائل في أعمال الإنتاج. وتوجد آليات التنفيذ في جميع منصات الحوسبة المتوازية الشهيرة تقريبا. لا تشمل جميع آليات التنفيذ كل شيء في MPI-1 أو MPI-2 أو MPI-3.

    • المزيد من المعلومات:
دورة MPI: computing.llnl.gov/tutorials/mpi

نموذج البيانات المتوازية - Data Parallel Model


    • قد يشار إليه أيضا كنموذج حيز العنوان العام المجزأ (  Partitioned Global Address Space PGAS).
    • يوضح النموذج المتوازي للبيانات الخصائص التالية:
        ◦ يتعامل مع حيز العنوان بشكل عام
        ◦ تركز معظم الأعمال المتوازية على أداء العمليات لمجموعة بيانات. وعادة ما تنظم مجموعة البيانات في بنية مشتركة، مثل مصفوفة أو مكعب.
        ◦ تعمل مجموعة من المهام بشكل جماعي على بنية البيانات نفسها، ومع ذلك، تعمل كل مهمة على جزء مختلف عن نفس بنية البيانات.
        ◦ تقوم المهام بتنفيذ نفس العملية في جزئها الخاص بالعمل، على سبيل المثال، "إضافة 4 إلى كل عنصر من مصفوفة".
    • على معماريات الذاكرة المشتركة، قد تكون لجميع المهام إمكانية الوصول إلى بنية البيانات من خلال الذاكرة الإجمالية.
    • على معماريات الذاكرة الموزعة، يمكن تقسيم بنية البيانات الإجمالية بشكل منطقي و/أو فيزيائي من خلال المهام.

    • آليات التنفيذ:
    • حاليا، هناك العديد من آليات التنفيذية الشهيرة نسبيا، وأحيانا تطورية، مبنية على أساس البيانات المتوازية/نموذج PGAS.
    • كوراي فورتران (Coarray Fortran): مجموعة صغيرة من ملحقات فورتران 95 للبرمجة المتوازية SPMD. تعتمد على المترجم. للمزيد من المعلومات: https://en.wikipedia.org/wiki/Coarray_Fortran
    • C المتوازي الموحد (UPC Unified Parallel C): امتداد للغة البرمجة C للبرمجة المتوازية SPMD. تعتمد على المترجم. للمزيد من المعلومات: http://upc.lbl.gov/
    • المصفوفات العامة Global Arrays: توفر بيئة برمجة نمط الذاكرة المشتركة في سياق بنيات بيانات المصفوفة الموزعة. مكتبة ذات ملكية عامة مع ارتباطات C و Fortran77. مزيد من المعلومات: https://en.wikipedia.org/wiki/Global_Arrays
    • X10: لغة برمجة متوازية على أساس PGAS يتم تطويرها من قبل شركة IBM في مركز أبحاث توماس ج. واتسون. للمزيد من المعلومات: http://x10-lang.org/
    • Chapel: مشروع لغة برمجة متوازية مفتوح المصدر يقوده كراي (Cray). للمزيد من المعلومات: http://chapel.cray.com/

النموذج الهجين - Hybrid Model

 


    • يجمع النموذج الهجين بين أكثر من نموذج من نماذج البرمجة الموصوفة سابقا.
    • حاليا، يوجد مثال شائع لنموذج هجين هو مزيج من نموذج تمرير الرسائل (MPI) مع نموذج الخيوط (OpenMP).
        ◦ تقوم الخيوط بالعمليات الحسابية المكثفة باستخدام البيانات المحلية للعقدة
        ◦ تحدث اتصالات بين العمليات على مختلف العقد عبر الشبكة باستخدام MPI
    • أثبت هذا النموذج الهجين بأنه يعمل بشكل رائع في البيئات الشهيرة للأجهزة العنقودية متعددة/عديدة الأنوية.
    • مثال آخر مماثل وشعبي على نحو متزايد لنموذج هجين هو استخدام MPI مع برمجة CPU-GPU (وحدة المعالجة المركزية - وحدة معالجة الرسومات).
        ◦ تشغل مهام MPI على وحدات المعالجة المركزية باستخدام الذاكرة المحلية والتواصل مع بعضها البعض عبر الشبكة.
        ◦ نوى مركزة حسابيا محملة على وحدات معالجة الرسومات على العقدة.
        ◦ تبادل البيانات بين الذاكرة عقدة المحلية و ووحدات المعالجات الرسومية باستخدام CUDA  (أو ما يعادله).


    • نماذج هجينة أخرى شائعة:
        ◦ MPI مع خيوط POSIX (Pthreads)
        ◦ MPI مع مسرعات غير وحدات معالجة الرسومات (non-GPU)
        ◦ ...

SPMD وMPMD


    • برنامج واحد متعدد البيانات - Single Program Multiple Data (SPMD):


    • يعتبر SPMD حاليا نموذج برمجة "عالية المستوى" التي يمكن بناؤها اعتمادا على أي مزيج من نماذج البرمجة المتوازية المذكورة سابقا.
    • برنامج واحد: تنفذ جميع المهام نسختها من نفس البرنامج في وقت واحد. هذا البرنامج يمكن أن يكون خيوطا، تمريرا للرسائل، بيانات متوازية أو هجينة.
    • بيانات متعددة: قد تستخدم جميع المهام بيانات مختلفة
    • عادة ما يكون لبرامج SPMD المنطق الضروري المبرمج فيها للسماح لمهام مختلفة بالتفرع أو بتنفيذ مشروط فقط لتلك الأجزاء من البرنامج التي تم تصميمها لتنفيذها. أي أن المهام لا تحتاج بالضرورة إلى تنفيذ البرنامج بأكمله – بل ربما لجزء منه فقط.
    • ربما يكون نموذج SPMD، باستخدام تمرير الرسائل أو البرمجة الهجينة، نموذج البرمجة المتوازية الأكثر استخداما لعناقيد متعددة العقد.


    • متعددة بيانات متعددة البرامج - Multiple Program Multiple Data (MPMD):


    • مثل SPMD، يعتبر MPMD حاليا نموذج برمجة "عالية المستوى" والتي يمكن بناؤها على أساس أي مزيج من نماذج البرمجة الموازية المذكورة سابقا.
    • برامج متعدد: قد تنفذ المهام برامج مختلفة في وقت واحد. ويمكن أن تكون البرامج عبارة عن خيوط، تمرير رسائل، بيانات متوازنة أو هجينة.
    • بيانات متعددة: قد تستخدم جميع المهام بيانات مختلفة
    • لا تعد تطبيقات MPMD شائعة مثلما هو الأمر بالنسبة لتطبيقات SPMD، ولكنها قد تكون أكثر ملاءمة لأنواع معينة من المشاكل، لا سيما تلك التي تكون أفضل لتفكك وظيفي منه لتفكك مجالي (الذي ستتم مناقشته لاحقا في فصل التجزئة).

تصميم البرامج المتوازية

الموازاة اليدوية مقابل الموازاة التلقائية - Automatic vs. Manual Parallelization


    • كان تصميم وتطوير البرامج المتوازية عملية يدوية للغاية. حيث يكون المبرمج هو المسؤول عادة عن تحديد وحاليا عن تنفيذ التوازي.
    • في كثير من الأحيان، يستغرق تطوير الشفرات المتوازية يدويا وقتا طويلا، ويكون معقدا، وعرضة للخطأ وعملية تكرارية.
    • منذ عدة سنوات، أصبحت أدوات مختلفة متاحة لمساعدة المبرمج على تحويل البرامج التسلسلية إلى برامج متوازية. والنوع الأكثر شيوعا من الأدوات المستخدمة لموازاة برنامج تسلسلي تلقائيا هو مترجم الموازاة أو ما قبل المعالج.
    • يعمل مترجم الموازاة عموما بطريقتين مختلفتين:
تلقائية تامة - Fully Automatic
    • يحلل المترجم شفرة المصدر ويحدد فرص التوازي.
    • يشمل التحليل تحديد مثبطات التوازي وربما ترجيح التكلفة على ما إذا كان التوازي سيحسن الأداء فعلا أم لا.
    • تعتبر حلقات التكرار (do، for) الهدف الأكثر شيوعا للتوازي التلقائي.
مبرمج موجه - Programmer Directed
    • باستخدام "توجيهات المترجم" أو ربما أعلام المترجم، يقول المبرمج للمترجم بشكل واضح كيفية موازاة الشفرة البرمجية.
    • قد تكون قادرة على استخدامها جنبا إلى جنب مع بضع درجات من التوازي التلقائي أيضا.

    • يتم إنشاء مترجم الأكثر شيوعا للموازاة المولدة باستخدام الذاكرة المشتركة على العقدة والخيوط (مثل OpenMP).
    • إذا كنت تبدأ مع شفرة تسلسلية جاهزة ومقيد بوقت أو ميزانية، فإن التوازي التلقائي قد يكون هو الأفضل. ومع ذلك، هناك العديد من التحذيرات الهامة التي تنطبق على التوازي التلقائي:
        ◦ قد تنتج نتائج خاطئة
        ◦ قد يقل الأداء فعلا
        ◦ أقل مرونة من التوازي اليدوي
        ◦ تقتصر على مجموعة فرعية (معظمها حلقات التكرار) من الشفرة
        ◦ قد لا تكون الشفرة متوازية في الواقع إذا كان تحليل المترجم يشير إلى أن هناك مثبطات أو أن الشفرة معقدة جدا
    • ينطبق الجزء المتبقي من هذا الفصل على الطريقة اليدوية لتطوير الشفرات المتوازية.

فهم المشكلة والبرنامج


    • مما لا شك فيه، أن الخطوة الأولى في تطوير البرمجيات المتوازية هي أولا فهم المشكلة التي ترغب في حلها بالتوازي. إذا بدأت مع برنامج تسلسلي، فإن هذا يتطلب فهم الشفرات البرمجية الجاهزة أيضا.
    • قبل قضاء بعض الوقت في محاولة لتطوير حل متواز للمشكلة، حدد ما إذا كانت المشكلة هي التي يمكن أن تكون متوازية بالفعل أم لا.
        ◦ مثال على سهولة موازاة مشكلة:
احسب الطاقة المحتملة لكل من واحدة من عدة آلاف من التشكلات المستقلة لجزيئة. عندما تنتهي من ذلك، ابحث عن الحد الأدنى لطاقة التشكل.
هذه المشكلة لديها القابلية على أن تحل على التوازي. حيث يمكن تحديد كل واحدة من التشكلات الجزيئية بشكل مستقل. ويعد أيضا حساب الحد الأدنى من طاقة التشكل مشكلة متوازية.
    • مثال على مشكلة مع القليل من التوازي أو بدونه:
حساب سلسلة فيبوناتشي (Fibonacci) (0،1،1،2،3،5،8،13،21، ...) باستخدام الصيغة:
F(n) = F(n-1) + F(n-2)
يستخدم حساب القيمة F(n) قيمتي F(n-1) وF(n-2) التي يجب حسابهما أولا.


    • تحديد نقاط الحوسبة المكثفة في البرنامج hotspots :
        ◦ اعرف أين يتم معظم العمل الحقيقي. غالبا ما تحقق معظم البرامج العلمية والتقنية معظم عملها في أماكن قليلة.
        ◦ يمكن أن تساعدك المحللات وأدوات تحليل الأداء هنا
        ◦ ركز على موازاة نقاط الحوسبة المكثفة وتجاهل تلك الأقسام من البرنامج ذات الاستخدام القليل لوحدة المعالجة المركزية.
    • تحديد نقاط الاختناق (bottlenecks) في البرنامج:
        ◦ هل هناك مناطق بطيئة بشكل غير متناسب، أو تتسبب في وقف العمل أو إرجاءه؟ على سبيل المثال، ادخال/اخراج (I/O) هو عادة شيء يبطئ البرنامج.
        ◦ قد يكون من الممكن إعادة هيكلة البرنامج أو استخدام خوارزمية مختلفة لتقليل أو القضاء على المناطق البطيئة غير الضرورية
    • تحديد مثبطات التوازي. أحد الفئات الشائعة للمثبط هو الاعتماد على البيانات، كما يتضح من تسلسل فيبوناتشي أعلاه.
    • تحقق من الخوارزميات الأخرى إن أمكن. قد يكون هذا هو الاعتبار الأكثر أهمية عند تصميم تطبيق متواز.
    • استفد من إيجابيات برنامج المتوازي للطرف الثالث الأمثل ومكتبات الرياضيات المثالية المتاحة من كبار الموردين (IBM's ESSL، Intel's MKL، AMD's AMCL وما إلى ذلك).

التجزئة - Partitioning


    • واحدة من الخطوات الأولى في تصميم برنامج متواز هو تقسيم المشكلة إلى "قطع" منفصلة من الأعمال التي يمكن توزيعها على مهام متعددة. ويعرف هذا باسم التحلل أو التجزئة.
    • هناك طريقتان أساسيتان لتجزئة العمل الحسابي بين المهام المتوازية: التحلل المجالي والوظيفي.
    • التحلل المجالي - Domain Decomposition:
    • في هذا النوع من التجزئة، يتم تحليل البيانات المرتبطة بالمشكلة. ثم تعمل كل مهمة متوازية على جزء من البيانات.

    • هناك طرق مختلفة لتقسيم البيانات:



    • التحلل الوظيفي - Functional Decomposition:
    • في هذا النهج، ينصب التركيز على الحساب الذي يتعين القيام به وليس على البيانات التي تتم معالجتها بواسطة الحساب. وتتحلل المشكلة وفقا للعمل الذي يجب القيام به. كل مهمة تنفذ إذن جزءا من العمل الإجمالي.

    • يفسح التحلل الوظيفي المجال للمشاكل التي يمكن تقسيمها إلى مهام مختلفة. فمثلا:
نمذجة النظم الإيكولوجية - Ecosystem Modeling
يحسب كل برنامج عدد السكان من مجموعة معينة، حيث يعتمد نمو كل مجموعة على نمو جارتها. ومع مرور الوقت، تحسب كل عملية حالتها الحالية، ثم تتبادل المعلومات مع الكثافات السكانية المجاورة. تتقدم جميع المهام بعدها لحساب الحالة في الخطوة الزمنية التالية.

معالجة الإشارات - Signal Processing
يتم تمرير مجموعة بيانات إشارة الصوت من خلال أربعة مرشحات حسابية مختلفة. كل مرشح عبارة عن عملية منفصلة. يجب أن يمر الجزء الأول من البيانات من خلال المرشح الأول قبل التقدم إلى الثاني. وعندما يحدث ذلك، يمر الجزء الثاني من البيانات من خلال المرشح الأول. وبحلول الوقت الذي يكون فيه الجزء الرابع من البيانات في المرشح الأول، فإن جميع المهام الأربع تكون مشغولة.

نمذجة المناخ - Climate Modeling
يمكن اعتبار كل مكون نموذج كمهمة منفصلة. وتمثل الأسهم تبادل البيانات بين المكونات أثناء الحساب: يولد نموذج الغلاف الجوي بيانات سرعة الرياح التي يستخدمها نموذج المحيطات، ونموذج المحيطات يولد بيانات درجة حرارة سطح البحر التي يستخدمها نموذج الغلاف الجوي، وهلم جرا.

    • يعد الجمع بين هذين النوعين من تحلل المشكلة أمرا شائعا وطبيعيا.


الاتصالات - Communications


    • من يحتاج الاتصالات؟
تتوقف الحاجة إلى الاتصالات بين المهام على مشكلتك:
تحتاج إلى الاتصالات:
    • معظم التطبيقات المتوازية ليست بسيطة جدا، وتتطلب مهام لتبادل البيانات مع بعضها البعض.
    • على سبيل المثال، تتطلب مشكلة انتشار الحرارة 2-D مهمة لمعرفة درجات الحرارة التي تحسبها المهام التي لها بيانات مجاورة. للتغييرات على البيانات المجاورة تأثير مباشر على بيانات تلك المهمة.


أنت لا تحتاج إلى الاتصالات:
    • بعض أنواع المشاكل يمكن أن تتحلل وتنفذ بالتوازي دون أي حاجة تقريبا إلى المهام لتبادل البيانات. وغالبا ما توصف هذه الأنواع من المشاكل بالمتوازية المحرجة – وتكون هناك حاجة إلى اتصالات قليلة أو معدومة.
    • على سبيل المثال، تخيل عملية معالجة الصور حيث يحتاج كل بكسل في صورة بالأبيض والأسود إلى عكس لونه. يمكن بسهولة توزيع بيانات الصورة إلى مهام متعددة تتصرف بعد ذلك بشكل مستقل عن بعضها البعض للقيام بجزءها من العمل.

            
    • العوامل التي يجب مراعاتها:
هناك عدد من العوامل الهامة التي يجب مراعاتها عند تصميم الاتصالات بين المهام الخاصة ببرنامجك:


    • كلفة الاتصالات - Communication overhead
        ◦ ينطوي التواصل بين المهام على كلفة بشكل دائم تقريبا.
        ◦ تستخدم بدلا من ذلك دورات الجهاز والموارد التي يمكن استخدامها للحساب لتجميع البيانات ونقلها.
        ◦ تتطلب الاتصالات في كثير من الأحيان نوعا من المزامنة بين المهام، الأمر الذي يمكن أن يؤدي إلى قضاء المهام الوقت في "الانتظار" بدلا من القيام بالعمل.
        ◦ يمكن أن تؤدي حركة مرور الاتصالات المتنافسة إلى تشبع حيز النطاق الترددي للشبكة، مما يزيد من تفاقم مشاكل الأداء.

    • زمن الوصول مقابل حيز النطاق الترددي - Latency vs. Bandwidth
        ◦ زمن الوصول هو الوقت المستغرق لإرسال رسالة ذات الحجم الأدنى (0 بايت) من نقطة A إلى نقطة B. ويتم التعبير عنها بشكل عام بالميكروثانية.
        ◦ حيز النطاق الترددي هو مقدار البيانات التي يمكن توصيلها خلال وحدة زمنية. يعبر عنه عادة باسم ميغابايت/ثانية أو جيغابايت/ثانية.
        ◦ يمكن أن يسبب إرسال العديد من الرسائل الصغيرة جعل كلفة الاتصالات هي المسيطرة. في كثير من الأحيان يكون أكثر كفاءة تحزيم الرسائل الصغيرة في رسالة أكبر، وبالتالي زيادة عرض النطاق الفعال للاتصالات.

    • رؤية الاتصالات - Visibility of communications
        ◦ مع نموذج تمرير الرسائل، تكون الاتصالات صريحة وعموما واضحة تماما وتحت تحكم المبرمج.
        ◦ مع النموذج المتوازي للبيانات، غالبا ما تحدث الاتصالات بشفافية للمبرمج، وخاصة على بنيات الذاكرة الموزعة. قد لا يكون المبرمج قادرا حتى على معرفة كيفية إنجاز الاتصالات بين المهام بالضبط.

    • الاتصالات المتزامنة مقابل الاتصالات غير المتزامنة - Synchronous vs. asynchronous communications
        ◦ تتطلب الاتصالات المتزامنة نوعا من "المصافحة" بين المهام التي تشارك البيانات. يمكن أن يكون هذا منظما بشكل واضح في الشفرة من قبل المبرمج، أو أنه قد يحدث في مستوى أقل غير معروف بالنسبة للمبرمج.
        ◦ غالبا ما يشار إلى الاتصالات المتزامنة على أنها حاجبة للاتصالات لأن العمل الآخر يجب أن ينتظر حتى اكتمال الاتصالات.
        ◦ تسمح الاتصالات غير المتزامنة للمهام بنقل البيانات بشكل مستقل عن بعضها البعض. على سبيل المثال، يمكن للمهمة 1 إعداد وإرسال رسالة إلى المهمة 2، ثم تبدأ فورا بالقيام بأعمال أخرى. عندما تستقبل المهمة 2 البيانات التي لا تهم.
        ◦ غالبا ما يشار إلى الاتصالات غير المتزامنة على أنها اتصالات غير حاجبة لأنه يمكن القيام بالعمل الآخر في حين أن الاتصالات تجري.
        ◦ يعتبر الحساب البيني مع الاتصالات أكثر فائدة لاستخدام الاتصالات غير المتزامنة.

    • نطاق الاتصالات - Scope of communications
        ◦ يعتبر معرفة أي المهام التي يجب تتواصل مع بعضها البعض أمرا بالغ الأهمية خلال مرحلة تصميم الشفرة المتوازية. ويمكن تنفيذ كلا النطاقين الموصوفين أدناه بشكل متزامن أو غير متزامن.
        ◦ نقطة إلى نقطة (Point-to-point) - ينطوي على مهمتين بمهمة واحدة تعمل كمرسل/منتج للبيانات، والآخر يعمل كمستقبل/مستهلك.
        ◦ الجماعي (Collective) - ينطوي على تبادل البيانات بين أكثر من مهمتين، والتي غالبا ما يتم تحديدها على أنها أعضاء في مجموعة مشتركة، أو جماعي. بعض الاختلافات الشائعة (هناك المزيد):

    • كفاءة الاتصالات - Efficiency of communications
        ◦ في كثير من الأحيان، يملك المبرمج خيارات يمكن أن تؤثر على أداء الاتصالات. سيتم هنا ذكر عدد قليل منها فقط.
        ◦ ما هي عملية تنفيذ التي ينبغي استخدامها لنموذج معين؟ باستخدام نموذج تمرير الرسائل كمثال على ذلك، قد تكون عملية تنفيذ MPI أسرع على منصة أجهزة معينة أخرى.
        ◦ ما هو نوع عمليات الاتصال التي ينبغي استخدامها؟ كما تم ذكره سابقا، يمكن لعمليات الاتصالات غير المتزامنة أن تحسن الأداء العام للبرنامج.
        ◦ نسيج الشبكة - قد توفر بعض المنصات أكثر من شبكة واحدة للاتصالات. فأي واحدة هي الأفضل؟
    • التكلفة والتعقيد - Overhead and Complexity

    • وأخيرا، ندرك أن هذه ليست سوى قائمة جزئية من الأشياء التي يجب أخذها في عين الاعتبار !!!

المزامنة - Synchronization


    • إدارة تسلسل العمل والمهام التي تؤديه هو اعتبار حساس في التصميم لمعظم البرامج المتوازية.
    • يمكن أن يكون عاملا هاما في أداء البرنامج (أو عدم وجوده)
    • غالبا ما يتطلب "تسلسل" أجزاء من البرنامج.

    • أنواع المزامنة:


    • الحاجز - Barrier
        ◦ عادة ما يعني أن جميع المهام معنية
        ◦ تؤدي كل مهمة عملها حتى تصل إلى الحاجز. ثم تتوقف، أو "يتم منعها".
        ◦ عندما تصل المهمة الأخيرة إلى الحاجز، تتم مزامنة جميع المهام.
        ◦ ما يحدث من هنا يختلف. في كثير من الأحيان، يجب أن يتم الجزء التسلسلي من العمل. وفي حالات أخرى، يتم تحرير المهام تلقائيا لمواصلة عملها.
    • قفل / سيمافور (ملوحة) - Lock / semaphore
        ◦ يمكن أن ينطوي على أي عدد من المهام
        ◦ يستخدم عادة لتسلسل (حماية) الوصول إلى البيانات الإجمالية أو جزء من الشفرة. وقد تستخدم مهمة واحدة فقط في كل مرة القفل / السيمافور / العلم (الخاص بها).
        ◦ المهمة الأولى للحصول على قفل "يحدد" ذلك. يمكن بعدها لهذه المهمة الوصول إلى البيانات المحمية أو الشفرة بأمان (بشكل متسلسل).
        ◦ يمكن لمهام أخرى محاولة الحصول على القفل ولكن يجب الانتظار حتى المهمة التي تملك القفل الذي يحررها.
        ◦ يمكن أن يكون محظورا أو غير محظور

    • عمليات الاتصالات المتزامنة - Synchronous communication operations
        ◦ لا تشمل سوى تلك المهام التي تنفذ عملية الاتصال
        ◦ عندما تؤدي إحدى المهام عملية الاتصال، يستلزم الأمر وجود شكل من التنسيق مع المهمة (المهام) الأخرى المشاركة في الاتصالات. على سبيل المثال، قبل أن تقوم مهمة بتنفيذ عملية إرسال، يجب أن تتلقى أولا إقرارا من مهمة الاستلام بالموافقة على إرسالها.
        ◦ تمت مناقشتها سابقا في قسم الاتصالات.


تبعيات البيانات - Data Dependencies


    • تعريف:
    • توجد تبعية بين تعليمات البرنامج عندما يؤثر ترتيب تنفيذ التعليمة على نتائج البرنامج.
    • تنتج تبعية البيانات عن الاستخدامات المتعددة لنفس الموقع (المواقع) في التخزين بواسطة مهام مختلفة.
    • تعتبر التبعيات مهمة للبرامج المتوازية لأنها واحدة من المثبطات الأولية للتوازي.

    • أمثلة:
    • تبعية البيانات في حلقات التكرار - Loop carried data dependence

DO J = MYSTART,MYEND
A(J) = A(J-1) * 2.0
END DO


يجب حساب قيمة A (J-1) قبل قيمة A (J)، وبالتالي فإن A (J) تعرض تبعية البيانات على A (J-1). نقول أن التوازي مثبَّط.
إذا كانت المهمة 2 تحتوي على A(J) والمهمة 1 لها A (J-1)، فإن حساب القيمة الصحيحة لـ A (J) يستلزم ما يلي:

    • بنية الذاكرة الموزعة - يجب أن تحصل المهمة 2 على قيمة A (J-1) من المهمة 1 بعد انتهاء المهمة 1 من حسابها
    • بنية الذاكرة المشتركة – يجب على المهمة 2 أن تقرأ A (J-1) بعد تحديثها من طرف المهمة 1


task 1        task 2
------        ------

X = 2         X = 4
  .             .
  .             .
Y = X**2      Y = X**3


كما هو الحال في المثال السابق، يتم تثبيط التوازي. وتعتمد قيمة Y على:
    • بنية الذاكرة الموزعة - إذا أو عندما تتصل قيمة X بين المهام.
    • بنية الذاكرة المشتركة - المهمة التي يخزن الماضي قيمة X.

    • على الرغم من أن جميع تبعيات البيانات مهمة لتحديد متى يتم تصميم البرامج المتوازية، إلا أن التبعيات في حلقات التكرار ذات أهمية خاصة لأن الحلقات هي ربما الهدف الأكثر شيوعا في جهود الموازاة.

    • كيفية التعامل مع تبعيات البيانات:
    • بنيات الذاكرة الموزعة - توصيل البيانات المطلوبة في نقاط التزامن.
    • بنيات الذاكرة المشتركة – مزامنة عمليات القراءة/الكتابة بين المهام.

موازنة التحميل - Load Balancing


    • تشير موازنة التحميل إلى ممارسة توزيع كميات متساوية تقريبا من العمل بين المهام بحيث تبقى جميع المهام مشغولة في كل وقت. ويمكن اعتباره تقليلا من وقت خمول المهمة.
    • تعتبر موازنة التحميل مهمة للبرامج المتوازية لأسباب تتعلق بالأداء.على سبيل المثال، إذا كانت جميع المهام تخضع لنقطة تزامن الحاجز، فإن أبطأ مهمة تحدد الأداء العام.
 

    • كيفية تحقيق موازنة التحميل:
    • جزئ العمل الذي تتلقاه كل مهمة بالتساوي
        ◦ بالنسبة لمصفوفة العمليات حيث تؤدي كل مهمة عمل مماثل، قم بتوزيع مجموعة من البيانات بين المهام بالتساوي.
        ◦ بالنسبة لتكرار الحلقة حيث يتم إنجاز العمل في كل تكرار مماثل، قم بتوزيع التكرارات عبر المهام بالتساوي.
        ◦ إذا تم استخدام مزيج غير متجانس من الأجهزة ذات خصائص أداء مختلفة، تأكد من استخدام بعض من أنواع أدوات تحليل الأداء للكشف عن أي اختلالات في التحميل. واضبط العمل وفقا لذلك.
    • استخدم إسناد العمل الديناميكي
        ◦ تؤدي بعض فئات المشاكل إلى اختلالات في التحميل حتى لو كانت البيانات موزعة بالتساوي بين المهام:


محاكاة N -body – قد تهاجر الجسيمات عبر نطاقات المهام التي تتطلب المزيد من العمل لبعض المهام.


أساليب الشبكة التكيفية – قد تحتاج بعض المهام إلى تهذيب شبكتها حينما لا يقوم البعض الآخر بذلك.


المصفوفات غير الكثيفة - بعض المهام لديها بيانات فعلية للعمل عليها حينما يكون البعض الآخر في الغالب "مجرد أصفار".

        ◦ عندما يكون مقدار العمل الذي ستؤديه كل مهمة متغيرا عن قصد أو غير قادر على التنبؤ به، فقد يكون من المفيد استخدام نهج تجمع المهام المجدول (scheduler-task pool). عندما تُنهي كل مهمة عملها، فإنها تتلقى قطعة جديدة من قائمة انتظار العمل.

        ◦ في نهاية المطاف، قد يصبح من الضروري تصميم خوارزمية تكشف وتتعامل مع اختلالات التحميل لأنها تحدث ديناميكيا داخل الشفرة.

الحبوبية - Granularity


    • معدل الاتصالات /الحوسبة - Computation / Communication Ratio :
    • في الحوسبة المتوازية، تعتبر الحبوبية مقياسا نوعيا لمعدل الحساب في الاتصالات.
    • عادة ما يتم فصل فترات الحساب عن فترات الاتصالات بواسطة أحداث التزامن.
    • توازي الحَب-الدقيق - Fine-grain Parallelism :


    • يتم إنجاز كميات صغيرة نسبيا من العمل الحسابي بين أحداث الاتصالات
    • حوسبة منخفضة إلى مقدار الاتصالات
    • يسهل موازنة التحميل
    • يدل على كلفة الاتصالات وفرص قليلة لتحسين الأداء
    • إذا كانت الحبوبية دقيقة جدا فمن الممكن أن الكلفة المطلوبة للاتصالات والتزامن بين المهام سيستغرق وقتا أطول من الحساب.
    •  توازي الحَب- الخشن - Coarse-grain Parallelism  :


    • يتم إنجاز كميات كبيرة نسبيا من العمل الحسابي بين أحداث الاتصالات/المزامنة
    • حساب مرتفع إلى مقدار نسبة الاتصالات
    • يدل على المزيد من الفرص لزيادة الأداء
    • تحميل الموازنة بكفاءة يكون أصعب
 ما هو الأفضل؟
    • تعتمد الحبوبية الأكثر كفاءة على الخوارزمية وبيئة الأجهزة التي تعمل فيها.
    • في معظم الحالات تكون التكلفة المرتبطة بالاتصالات والتزامن عالية بالنسبة لسرعة التنفيذ، ولذلك فمن المفيد أن تكون لها حبوبية خشنة.
    • يمكن أن يساعد توازي الحب-الدقيق على خفض الفوقانيات بسبب تحمبل الموازنة.

I / O (إدخال/إخراج)


الأخبار السيئة:
    • تعتبر عمليات الإدخال/الإخراج (I/O) عموما مثبطات للتوازي.
    • تتطلب عمليات الإدخال/الإخراج أوامر بحجم أكبر من عمليات الذاكرة.
    • قد تكون أنظمة الإدخال/الإخراج المتوازية غير ناضجة أو غير متاحة لجميع الأنظمة الأساسية.
    • في بيئة حيث تدرك كافة المهام نفس مساحة الملف، يمكن أن تؤدي عمليات الكتابة إلى الكتابة فوق الملف.
    • يمكن أن تتأثر عمليات القراءة بقدرة خادم الملفات على التعامل مع طلبات القراءة المتعددة في نفس الوقت.
    • الإدخال/الإخراج الذي يجب إجراؤه عبر الشبكة (NFS، غير محلية) يمكن أن يتسبب في اختناقات شديدة وقد يسبب حتى في تعطيب خوادم الملفات.
 الأخبار الجيدة:
    • أنظمة الملفات المتوازية متاحة. فمثلا:
        ◦ GPFS: النظام العام للملفات المتوازية (IBM). يسمى حاليا مقياس طيف IBM.
        ◦ Lustre: لعناقيد لينكس ( Intel)
        ◦ HDFS نظام الملفات الموزعة Hadoop (Apache)
        ◦ PanFS: نظام الملفات ActiveScale Panasas لعناقيد لينكس (Panasas ، Inc.)
        ◦ وللمزيد – انظر http://en.wikipedia.org/wiki/List_of_file_systems#Distributed_parallel_file_systems
    • قد أصبح تخصص برمجة الإدخال/الإخراج  المتوازية لـ MPI متاحة منذ عام 1996 كجزء من MPI-2. وأصبحت عمليات تنفيذ الحرة والخاصة بالموردين متاحة بشكل شائع.
    • بعض الإرشادات:
        ◦ القاعدة رقم 1: قلل الإدخال/الإخراج الإجمالي قدر الإمكان
        ◦ إذا كان لديك الوصول إلى نظام ملفات متوازية، استخدمه.
        ◦ كتابة أجزاء كبيرة من البيانات بدلا من قطع صغيرة وعادة ما تكون أكثر كفاءة بكثير.
        ◦ ملفات أقل وأكبر أداء أفضل من العديد من الملفات الصغيرة.
        ◦ احجز الإدخال/الإخراج في أجزاء تسلسلية محددة من الوظيفة، ثم استخدم الاتصالات المتوازية لتوزيع البيانات على المهام المتوازية.على سبيل المثال، يمكن للمهمة 1 قراءة ملف إدخال ثم بعدها توصل البيانات المطلوبة إلى مهام أخرى.وبالمثل، يمكن للمهمة 1 إجراء عملية الكتابة بعد تلقي البيانات المطلوبة من جميع المهام الأخرى.
        ◦ عمليات الإدخال/الإخراج الإجمالية عبر المهام - بدلا من تنفيذ العديد من مهام الإدخال/الإخراج، تؤدي مجموعة فرعية من المهام.

التصحيح - Debugging


    • يكون من الصعب تصحيح الشفرات المتوازية بشكل لا يصدق، لا سيما الشفرات ذات المستوى الصاعد.
    • الخبر السار هو أن هناك بعض المصححات الممتازة المتاحة للمساعدة:
    • pthreads  و OpenMPمخيطة
    • MPI
    • GPU  / مسرع
    • Hybrid
    • يمتلك مستخدمو حوسبة ليفرمور الوصول إلى العديد من أدوات التصحيح المتوازية المثبتة على عناقيد LC:
    • TotalView من RogueWave للبرمجيات
    • DDT من Allinea
    • Inspector من Intel
    • أداة تحليل التتبع المكدس  (STAT)- مطورة محليا
    • كل هذه الأدوات لديها منحنى تعلم مرتبط بها - أكثر من غيرها.
    • للحصول على تفاصيل ومعلومات للبدء، راجع:
        ◦ صفحات ويب LC في https://hpc.llnl.gov/software/development-environment-software
        ◦ برنامج TotalView التعليمي:  https://computing.llnl.gov/tutorials/totalview/

ضبط وتحليل الأداء - Performance Analysis and Tuning


    • كما هو الحال مع التصحيح، يمكن للتحليل و ضبط أداء البرنامج المتوازي أن يكون أكثر صعوبة بكثير من البرامج التسلسلية.
    • لحسن الحظ، هناك عدد من الأدوات الممتازة لتحليل أداء البرنامج المتوازي وضبطه.
    • لدى مستخدمو حوسبة ليفرمور امكانية الوصول إلى العديد من هذه الأدوات، ومعظمها متاح في جميع عناقيد الإنتاج.
    • بعض نقاط البدء للأدوات المثبتة على أنظمة LC:
        ◦ صفحات ويب LC في https://hpc.llnl.gov/software/development-environment-software
        ◦ TAU : http://www.cs.uoregon.edu/research/tau/docs.php
        ◦ HPCToolkit  :http://hpctoolkit.org/documentation.html
        ◦ Open|Speedshop  :  http://www.openspeedshop.org/
        ◦ Vampir / Vampirtrace  : http://vampir.eu/
        ◦ Valgrind  :http://valgrind.org/
        ◦ PAPI  :http://icl.cs.utk.edu/papi/
        ◦ Mpitrace : https://computing.llnl.gov/tutorials/bgq/index.html#mpitrace
        ◦ mpiP :http://mpip.sourceforge.net/
        ◦ MemP  :  http://memp.sourceforge.net/

أمثلة متوازية

معالجة المصفوفة - Array Processing


    • يوضح المثال التالي الحسابات على عناصر مصفوفة ثنائية الأبعاد. يتم تقييم الدالة في كل عنصر من المصفوفة.
    • الحساب على كل عنصر من المصفوفة مستقل عن العناصر الأخرى للمصفوفة.
    • المشكلة مكثفة حسابيا.
    • يحسب البرنامج التسلسلي عنصرا واحدا في وقت واحد ضمن ترتيب تسلسلي.
    • يمكن أن تكون الشفرة التسلسلية على الشكل التالي:

    • أسئلة يجب طرحها
    • هل هذه المشكلة قادرة على أن تكون متوازية؟
    • كيف يمكن تقسيم المشكلة؟
    • هل تحتاج  إلى اتصالات؟
    • هل هناك أي تبعيات للبيانات؟
    • هل هناك حاجة إلى التزامن؟
    • هل تكون موازنة التحميل مصدر قلق؟


معالجة المصفوفة - Array Processing
الحل المتوازي 1
    • حساب العناصر المستقلة عن بعضها البعض - يؤدي إلى حل متوازي محرج.
    • يتم توزيع عناصر المصفوفات بالتساوي بحيث تمتلك كل عملية جزء من المصفوفة (مصفوفة فرعية).
        ◦ يتم اختيار مخطط التوزيع للوصول إلى الذاكرة بكفاءة.على سبيل المثال خطوة واسعة لوحدة (خطوة واسعة لـ 1) عبر المصفوفات الفرعية. تزيد خطوة وحدة من استخدام المخبأة/الذاكرة.
        ◦ بما أنه من المرغوب فيه الحصول على خطوة وحدة من خلال مصفوفة فرعية، فإن اختيار مخطط التوزيع يعتمد على لغة البرمجة. للمزيد من الخيارات، راجع بلوك - الرسم البياني للتوزيعات الدوريةبلوك - مخطط توزيعات دورية.


    • يضمن الحساب المستقل من عناصر المصفوفة عدم الحاجة للاتصال أو التزامن بين المهام.
    • بما أن كمية العمل موزعة بالتساوي عبر العمليات، فلا ينبغي أن تكون هناك مخاوف تتعلق بموازنة التحميل.
    • بعد توزيع المصفوفة ، تنفذ كل مهمة جزء من حلقة تكرار المقابلة للبيانات التي تمتلكها.
على سبيل المثال، تظهر توزيعات فورتران (عمود - رئيسي) وC (صف - رئيسي):
 

do j = mystart, myend
do i = 1, n
a(i,j) = fcn(i,j)
end do
end do

for i (i = mystart; i 


    • لاحظ أن متغيرات الحلقة الخارجية فقط تختلف عن الحل التسلسلي.
    • أحد الحلول المحتملة:
    • عملية تنفيذ كنموذج بيانات متعددة برنامج واحد (SPMD) - كل مهمة تنفذ نفس البرنامج.
    • تهيئ العملية الرئيسية المصفوفة، وترسل المعلومات إلى العمليات العاملة وتتلقى النتائج.
    • تتلقى العملية العاملة معلومات، وتنفذ حصتها من الحساب وترسل النتائج إلى الرئيسة.
    • باستخدام مخطط تخزين فورتران، يكون أداء توزيع المصفوفة أكثر ذكاء.
    • حل الشفرة المستعارة: المميزة باللون الأحمرتتغير للتوازي.

find out if I am MASTER or WORKER
if I am MASTER
  initialize the array
  send each WORKER info on part of array it owns
  send each WORKER its portion of initial array
  receive from each WORKER results
else if I am WORKER
  receive from MASTER info on part of array I own
  receive from MASTER my portion of initial array

  # حساب نصيبي من المصفوفة
  do j = my first column,my last column
    do i = 1,n
      a(i,j) = fcn(i,j)
    end do
  end do

  send MASTER results

endif


    • أمثلة البرامج:
    • برنامج MPI في C:  https://computing.llnl.gov/tutorials/mpi/samples/C/mpi_array.c
    • برنامج MPI في فورتران:  https://computing.llnl.gov/tutorials/mpi/samples/Fortran/mpi_array.f

معالجة  المصفوفة


الحل المتوازي 2: تجمع المهام (Pool of Tasks)
    • أظهر حل المصفوفة السابق موازنة تحميل ثابتة:
        ◦ كل مهمة لديها كمية ثابتة من العمل للقيام بها
        ◦ قد يكون وقت الخمول كبيرا للمعالجات الأسرع أو الأكثر خفة في التحميل – تحدد المهام الأبطأ الأداء العام.
    • لا تعد موازنة التحميل الثابتة عادة مصدر قلق كبير إذا كانت جميع المهام تؤدي نفس كمية العمل على أجهزة مماثلة.
    • إذا كانت لديك مشكلة في موازنة التحميل (بعض المهام تعمل بشكل أسرع من غيرها)، يمكنك الاستفادة من استخدام نخطط "تجمع المهام".
    • مخطط تجمع المهام - Pool of Tasks Scheme :
    • يتم استخدام عمليتان
عملية رئيسية:
        ◦ تحتضن تجمع المهام للعمليات العاملة للقيام بها
        ◦ يرسل العامل المهمة عند طلبها
        ◦ تجمع النتائج من العمليات العاملة
عملية عاملة: تفعل ما يلي مرارا وتكرارا
        ◦ تحصل على مهمة من العملية الرئيسية
        ◦ تنفذ الحساب
        ◦ ترسل النتائج إلى العملية الرئيسية
    • لا تعرف العمليات العاملة قبليا وقت تشغيل أي جزء من المصفوفة التي سوف يتعاملن معها أو كمية المهام التي سوف يقمن بأدائها.
    • تحدث موازنة التحميل الديناميكي في وقت التشغيل: تحصل المهام الأسرع على المزيد من العمل للقيام به.
    • حل الشفرة المستعارة: الشفرة باللون الأحمر تتغير للتوازي.

find out if I am MASTER or WORKER

if I am MASTER

  do until no more jobs
    if request send to WORKER next job
    else receive results from WORKER
  end do

else if I am WORKER

  do until no more jobs
    request job from MASTER
    receive from MASTER next job

    calculate array element: a(i,j) = fcn(i,j)

    send results to MASTER
  end do

endif

    • مناقشة:
    • في مثال تجمع المهام أعلاه، تحسب كل مهمة عنصر مصفوفة فردية كمهمة. وتكون الحوسبة إلى مقدار الاتصالات ذات حبوبية دقيقة.
    • تحمل حلول الحبوبية الدقيقة المزيد من الاتصالات العامة من أجل تقليل وقت خمول مهمة.
    • قد يكون الحل الأمثل هو توزيع المزيد من العمل لكل وظيفة. والكمية "الصحيحة" من العمل هي المشكلة المعتمدة.

حساب PI


    • يمكن حساب قيمة PI بطرق مختلفة. إذا اعتبرنا طريقة مونتي كارلو (Monte Carlo) لتقريب : PI
        ◦ إدراج دائرة بنصف قطر r في مربع بطول  2r
        ◦ مساحة الدائرة هي Πr 2  ومساحة المربع 4r 2
        ◦ نسبة مساحة الدائرة من مساحة المربع هي:

Πr 2 / 4r 2 = Π / 4


        ◦ إذا كنت تولد عشوائيا N نقطة داخل المربع ، تقريبا
N * Π / 4من تلك النقاط ( M ) يجب أن تقع داخل الدائرة.
        ◦ Π  تقارب التالي:

N * Π / 4 = M
Π / 4 = M / N
Π = 4 * M / N


        ◦ لاحظ أن زيادة عدد النقاط يولد و  يحسن التقريب.
    • الشفرة المستعارة التسلسلية لهذا الإجراء:

npoints = 10000
circle_count = 0

do j = 1,npoints
  generate 2 random numbers between 0 and 1
  xcoordinate = random1
  ycoordinate = random2
  if (xcoordinate, ycoordinate) inside circle
  then circle_count = circle_count + 1
end do

PI = 4.0*circle_count/npoints


    • المشكلة مكثفة حسابيا - معظم الوقت ينفق في حلقة
    • أسئلة يجب طرحها:
        ◦ هل هذه المشكلة قادرة على أن تكون متوازية؟
        ◦ كيف يمكن تقسيم المشكلة؟
        ◦ هل تحتاج الى الاتصالات؟
        ◦ هل هناك أي تبعيات للبيانات؟
        ◦ هل هناك حاجة إلى التزامن؟
        ◦ هل تكون موازنة التحميل مصدر قلق؟

حساب PI
الحل المتوازي


    •  مشكلة أخرى يسهل موازنتها:
        ◦ جميع حسابات النقطة مستقلة؛ لا توجد تبعيات للبيانات
        ◦ يمكن تقسيم العمل بالتساوي؛ لا مخاوف من تحميل التوازن
        ◦ لا حاجة للاتصال أو التزامن بين المهام
    • الاستراتيجية الموازية:
        ◦ تقسيم الحلقة إلى أجزاء متساوية يمكن تنفيذها من قبل مجموعة من المهام
        ◦ تؤدي كل مهمة عملها بشكل مستقل
        ◦ يتم استخدام نموذج SPMD
        ◦ تتصرف مهمة واحدة كمهمة رئيسية لجمع النتائج وحساب قيمة PI
    • حل الشفرة المستعارة: المميزة باللون الأحمر تتغير للتوازي.



npoints = 10000
circle_count = 0

p = number of tasks
num = npoints/p

find out if I am MASTER or WORKER

do j = 1,num
  generate 2 random numbers between 0 and 1
  xcoordinate = random1
  ycoordinate = random2
  if (xcoordinate, ycoordinate) inside circle
  then circle_count = circle_count + 1
end do

if I am MASTER

  receive from WORKERS their circle_counts
  compute PI (use MASTER and WORKER calculations)

else if I am WORKER

  send to MASTER circle_count

endif


    • أمثلة البرامج:
    • برنامج MPI  في :   C https://computing.llnl.gov/tutorials/mpi/samples/C/mpi_pi_reduce.c
    • برنامج MPI في :   Fortran https://computing.llnl.gov/tutorials/mpi/samples/Fortran/mpi_pi_reduce.f


المعادلة الحرارية البسيطة - Simple Heat Equation


    • معظم المشاكل في الحوسبة المتوازية تتطلب التواصل بين المهام. وهناك عدد من المشاكل المشتركة تتطلب التواصل مع المهام المجاورة.
    • تصف معادلة الحرارة 2-D تغير درجة الحرارة مع مرور الوقت، نظرا لتوزيع درجة الحرارة الأولية وظروف الحدود.
    • يتم استخدام مخطط الفرق المحدود لحل معادلة الحرارة عدديا على منطقة مربعة.
        ◦ تمثل عناصر المصفوفة ثنائية الأبعاد درجة الحرارة عند النقاط على المربع.
        ◦ درجة الحرارة الأولية هي صفر على الحدود ومرتفعة في الوسط.
        ◦ تجرى درجة الحرارة الحدودية عند الصفر.
        ◦ يتم استخدام خوارزمية الوقت يخطو.
    • لحساب العنصر يتم  الاعتماد على قيم العنصر المجاورة:

    • يحتوي البرنامج التسلسلي على شفرة مثل:

do iy = 2, ny - 1
  do ix = 2, nx - 1
    u2(ix, iy) =  u1(ix, iy)  +
        cx * (u1(ix+1,iy) + u1(ix-1,iy) - 2.*u1(ix,iy)) +
        cy * (u1(ix,iy+1) + u1(ix,iy-1) - 2.*u1(ix,iy))
  end do
end do

    • أسئلة يجب طرحها:
        ◦ هل هذه المشكلة قادرة على أن تكون متوازية؟
        ◦ كيف يمكن تقسيم المشكلة؟
        ◦ هل تحتاج الى الاتصالات؟
        ◦ هل هناك أي تبعيات للبيانات؟
        ◦ هل هناك حاجة إلى التزامن؟
        ◦ هل تكون موازنة التحميل مصدر قلق؟

المعادلة الحرارية البسيطة
الحل المتوازي


    • هذه المشكلة أكثر صعوبة، حيث أن هناك تبعيات للبيانات، والتي تتطلب الاتصالات والتزامن.
    • يتم تقسيم مصفوفة كاملة وتوزيعها على شكل مصفوفات فرعية لجميع المهام. كل مهمة تمتلك جزء متساو من مجموع المصفوفة.
    • لأن كمية العمل متساوية، لا ينبغي أن يكون تحميلموازنة مصدر قلق
    • تحديد تبعيات البيانات:
        ◦  العناصر الداخلية التي تنتمي إلى مهمة مستقلة عن المهام الأخرى
        ◦ تعتمد العناصر الحدودية على بيانات المهمة المجاورة، مما يستلزم التواصل.

    • التنفيذ كنموذج: SPMD
        ◦ ترسل العملية الرئيسية المعلومات الأولية للعمليات العاملة، ثم تنتظر لجمع النتائج من جميع العاملات
        ◦ تحسب العمليات العاملة الحل ضمن عدد محدد من الخطوات الزمنية، وتتواصل عند الضرورة مع العمليات المجاورة
        ◦ حل الشفرة المستعارة: المميزة باللون الأحمر تتغير للتوازي.

find out if I am MASTER or WORKER

if I am MASTER
  initialize array
  send each WORKER starting info and subarray
  receive results from each WORKER

else if I am WORKER
  receive from MASTER starting info and subarray

  # Perform time steps
  do t = 1, nsteps
    update time
    send neighbors my border info
    receive from neighbors their border info
    update my portion of solution array
    
  end do
 
  send MASTER results
      
endif


    • أمثلة البرامج:
    • برنامج MPI  في :   C https://computing.llnl.gov/tutorials/mpi/samples/C/mpi_heat2D.c
    • برنامج MPI في :   Fortran https://computing.llnl.gov/tutorials/mpi/samples/Fortran/mpi_heat2D.f

معادلة الموجة 1-D  – 1-D Wave Equation


    • في هذا المثال، يتم حساب الاتساع على طول سلسلة موحدة، وتهتز بعد انقضاء فترة محددة من الزمن.
    • ويشمل الحساب ما يلي:
        ◦ الاتساع على المحور y
        ◦ i كمؤشر موضع على طول المحور x
        ◦ نقاط العقدة المفروضة على طول السلسلة
        ◦ تحديث السعة في خطوات زمنية منفصلة.

    • والمعادلة التي يتعين حلها هي معادلة الموجة أحادية البعد:

 A(i,t+1) = (2.0 * A(i,t)) - A(i,t-1) + (c * (A(i-1,t) - (2.0 * A(i,t)) + A(i+1,t))) 


حيث c ثابت
    • لاحظ أن السعة ستعتمد على الجداول الزمنية السابقة (t, t-1) والنقاط المجاورة  (i-1, i+1)
    • أسئلة يجب طرحها:
        ◦ هل هذه المشكلة قادرة على أن تكون متوازية؟
        ◦ كيف يمكن تقسيم المشكلة؟
        ◦ هل تحتاج للاتصالات؟
        ◦ هل هناك أي تبعيات للبيانات؟
        ◦ هل هناك حاجة إلى التزامن؟
        ◦ هل تكون موازنة التحميل مصدر قلق؟

معادلة الموجة 1-D - 1-D Wave Equation
الحل المتوازي
    • هذا مثال آخر عن مشكلة تتعلق بتبعيات البيانات. وسيتضمن الحل المتوازي كلا من الاتصالات والتزامن.
    • يتم تقسيم مصفوفة السعة بأكملها وتوزيعها على أنها مصفوفات فرعية لجميع المهام. كل مهمة تمتلك جزءا متساويا من إجمالي المصفوفة.
    • موازنة التحميل: تتطلب جميع النقاط عملا متساويا، لذلك يجب تقسيم النقاط بالتساوي
    • من شأن تفكيك الكتلة أن يقسم العمل إلى عدد من المهام كقطع، مما يسمح لكل مهمة بتملك نقاط بيانات متجاورة في الغالب.
    • تحتاج الاتصالات فقط ان تحدث على حدود البيانات. وكلما زاد حجم الكتلة كلما قل الاتصال على حدود البيانات.

    • التنفيذ كنموذج :SPMD
        ◦ ترسل العملية الرئيسية المعلومات الأولية إلى العمليات العاملة، ثم تنتظر جمع النتائج من جميع العمليات العاملة
        ◦ تقوم العمليات العاملة بحساب الحل ضمن عدد محدد من الخطوات الزمنية، والتواصل عند الضرورة مع العمليات المجاورة
    • حل الشفرة المستعارة: يدل اللون الأحمر على التغيرات للتوازي.

find out number of tasks and task identities

#Identify left and right neighbors
left_neighbor = mytaskid - 1
right_neighbor = mytaskid +1
if mytaskid = first then left_neigbor = last
if mytaskid = last then right_neighbor = first

find out if I am MASTER or WORKER
if I am MASTER
  initialize array
  send each WORKER starting info and subarray
else if I am WORKER`
  receive starting info and subarray from MASTER
endif

#Perform time steps
#In this example the master participates in calculations
do t = 1, nsteps
  send left endpoint to left neighbor
  receive left endpoint from right neighbor
  send right endpoint to right neighbor
  receive right endpoint from left neighbor

  #Update points along line
  do i = 1, npoints
    newval(i) = (2.0 * values(i)) - oldval(i)
    + (sqtau * (values(i-1) - (2.0 * values(i)) + values(i+1)))
  end do

end do

#Collect results and write to file
if I am MASTER
  receive results from each WORKER
  write results to file
else if I am WORKER
  send results to MASTER
endif


    • أمثلة البرامج:
    • برنامج MPI في C: https://computing.llnl.gov/tutorials/mpi/samples/C/mpi_wave.c
    • برنامج MPI في Fortran: https://computing.llnl.gov/tutorials/mpi/samples/Fortran/mpi_wave.f
هذا يكون البرنامج التعليمي قد اكتمل.
يرجى إكمال نموذج التقييم عبر الإنترنت

المراجع والمزيد من المعلومات


    • الكاتب :بليز بارني (Blaise Barney)، حوسبة ليفرمور.
    • سيؤدي بك البحث عن "البرمجة المتوازية" أو "الحوسبة المتوازية" على WWW إلى مجموعة واسعة من المعلومات.
    • اقتراحات للقراءة:
        ◦ "تصميم وبناء برامج متوازية." إيان فوستر(Ian Foster) .
        ◦ " مدخل إلى الحوسبة المتوازية ." أنانث غراما (Ananth Grama)، أنشول غوبتا (Anshul Gupta)، جورج كاريبيس (George Karypis)، فيبين كومار (Vipin Kumar) .
        ◦ "نظرة عامة على الحواسيب الفائقة الأخيرة ." آج فان دير ستين (A.J. van der Steen)، جاك دونجارا (Jack Dongarra) .
    • تم إنشاء الصور/الرسومات من قبل المؤلف، أو من قبل الموظفين الآخرين لـ LLNL ، أو تم الحصول عليها من غير حقوق طبع ونشر، أو من مصادر حكومية أو عامة (مثل  http://commons.wikimedia.org/)، أو تم استخدامها بإذن من المؤلفين من عروض أخرى وصفحات ويب.
    • التاريخ: تم تطوير هذه المواد من المصادر التالية، التي لم تعد محفوظة أو متاحة.
        ◦ برامج تعليمية موجودة في "ورشة البرمجة المتوازية SP" لمركزMaui High Performance Computing.
        ◦  برامج تعليمية موجودة في صفحة الويب "التعليم والتدريب" لمركز كورنيل ثوري (Cornell Theory).

Fahadالثلاثاء, 2017/09/19 - 2:13م
disqus

كيفية تحويل النص العربي لصوت باستخدام البرامج الحرة

$
0
0
كيفية تحويل النص العربي لصوت باستخدام البرامج الحرة

يواصل الأستاذ طه زروقي (أستاذ بجامعة البويرة في الجزائر، مستشار في المعلوماتية،  مهتم بالمصادر المفتوحة، ومن العاملين دعم  اللغة العربية) دعمه للغة العربية في المصادر الحرة، واليوم يقدم شرحا مفصلا لكيفية تحويل النص العربي إلى الصوت باستخدام البرمجيات الحرة، المقالة نشرت هناأولا.

مقدمة

يهدف هذا المشروع إلى دعم العربية في نظم النطق (تحويل النص إلى كلام) ويصف الطريقة التي تسمح بتشغيلها معا. أي تشغيل قارئ الشاشة بلغة عربية بمستوى جيد بأدوات مفتوحة المصدر.

إلام نحتاج؟

نحتاج إلى الأدوات الآتية:

  1. نظام النطق إسبيك مع دعم العربية
  2. Mbrola نظام النطق وأصواته
  3. قارئ للشاشة
  4. نظام توزيع الكلام
  5. برنامج تشكيل

سنتحتاج إلى تشغيل نظام النطق إسبيك مزود بدعم للغة العربية، ثم نثريه بأصوات عربية من نظام النطق Mbrola للحصول على صوت أفضل. سنحتاج أيضا إلى مشكّل آلي للنصوص العربية باستعمال برنامج مشكالمفتوح المصدر. كما سنحاول تشغيل قارئ الشاشة Orca، ونظام إرسال الكلام speech dispatcherلاعتماده برنامجا وسيطا يسمح للتطبيقات الأخرى من تشغيل نظام النطق.

نهدف إلى الحصول على نطق صوت عربي جيد وصحيح قدر الإمكان مشكّل

التثبيت

نظام النطق إسبيك بدعم العربية

نظام eSpeakNG، نظام متراص مفتوح المصدر، نظام نطق على وندوز ولينكس ومنصات أخرى. يعتمد على طريقة التركيب على المباني Formant، يدعم لغات عديدة منها العربية منذ الإصدار 1.49.2، هو نظام متراص حجمه صغير. معظم دعم اللغات في النظام مبني على ملفات للقواعد صممها مطورون متحدثون أصليون لتلك اللغات.

لتثبيت البرنامج يرجى الاطلاع على توثيق espeak-ng.

للإصدارات السابقة، يمكن تحميل ملفات مجهزة من ar-espeak. اختر ما يناسب رقم إصدار برنامجك.

مثلا: أنا أستخدم الإصدار 1.48.03 على حاسوبي، لذا حمّلت الملف المضغوط espeak-data zipped file


  $wget https://sourceforge.net/projects/arabic-espeak/files/espeak-data1.48.03.zip/download
  $ unzip espeak-data1.48.03.zip
  $ cp -R espeak-data ~

أولا، ننول الملف ثم نفك ضغطه، ثم ننسخ المجلد espeak-data إلى مجلد المستخدم. نظام إسبيك يفحص وجود المجلد espeak-data أولا في مجلد المستخدم، ليستخدمه.

فلنجرب النظام بالأمر التالي لقراءة نص باللغة الإنجليزية

$espeak -v en "Hello world"

إذا نجح، يمكن عرض كل اللغات المدعومة، تحقق أن ألعربية موجودة.

$espeak --voices

إن كانت العربية مذكورة في القائمة، جرّب:

$espeak -v ar "السلام عليكم"

برنامج إسبيك سيعتمد على مجلد espeak-data في منزل المستخدم أولا ثمّ على مجلد الإعدادات النظامية في المجلد: usr/share/doc/espeak-data/.

مجلد espeak-data يحتوي على ملفات مجهزة ccompiled وملف الصوتيات وقاعدة بيانات الفونيمات التي سيستعملها إسبيك، عليك الانتباه لرقم الإصدار.

ننصح باستعمال الإصدارات الأحدث..

Mbrola

يمكن تجاوز هذه الفقرة إن كنت لا ترغب في استعمال أمبرولا أو لا تستطيع لسبب ما

نظام MBROLAخوارزمية لتركيب الكلام، موزعة برخصة للأغراض غير التجارية، وهو مشروع تعاوني عبرالعالم. موقع أمبرولا يقدم قواعد بيانات للأصوات للغات واسعة الانتشار عبر العالم. الأصوات العربية لنظام أمبرولا أفضل حاليا من أصوات أسبيك الأصلية.

عليك أولا تثبيت نظام أمبرولا بواسطة مدير التطبيقات لديك

لتوزيعات دبيان وأوبنتو ومشتقاتها:

sudo apt-get install mbrola

توزيعة Archlinux:

$ sudo pacman -S mbrola

لتوزيعة Archlinux على نظام راسبيري

cd /tmp
git clone git@github.com:saez0pub/mbrola-archlinux-rasberrypi.git
cd mbrola-archlinux-rasberrypi
makepkg -s
sudo pacman -U ./mbrola-3.02b-4-armv6h.pkg.tar.xz

الآن جرب امبرولا بالأمر

$ mbrola

لتشغيل أمبرولا تحتاج إلى بعض الأصوات

الإنجليزية:

بعد التحميل، ضع الملفين ar1, ar2 في المجلد المناسب

Debian/Ubuntu/ Archlinux

$ mkdir -p /usr/share/mbrola/voices
$ cp ar1 /usr/share/mbrola/voices/
$ cp ar2 /usr/share/mbrola/voices/

الآن، جرب إسبيك بطعم أمبرول

$ espeak -v mb-en1 "Hello World"
$ espeak -v mb-ar1 "السلام عليكم"

إعداد قارئ الشاشة

نحتاج إلى قارئ الشاشة Orca. يمكن بعد تثبيت أوركا تشغيله بالأمر في سطر الوامر على مدير النوانذ (سطح المكتب)

$ orca -s

تحصل على النافذة الآتية

اختر من لسان voice، اختر الشخض المناسب لك. واخرت صوت العربية.

لتجربة أوركا بالإعدادات الجديدة استعمل الأمر الآتي

$orca -r

برنامج التشكيل

من أجل الحصول على نطق أفضل، نقترح إضافة مشكّل آلي للنصوص (برنامج تشكيل). النصوص العربية تأتي في الأغلب غير مشكولة، لذا يستحسن تشكيلها قبل نطقها آليا، لذا سنستعمل برنامج التشكيل الآلي مشكال كوسيط يحضّر النص قبل تمريره لنظام النطق.

برنامج مشكال مصمم بلغة بيثون ويوفر واجهات على سطر الأوامر، وسطح المكتب وواجهة وب.

سنستعمل سطر الأوامر.

أولا حمّل مشكال من http://mishkal.sourceforge.net، حيث يتوفر بشكل حزم لأنظمة مختلفة. أو حمّل المصدر من مستودعات github

$ git clone https://github.com/linuxscout/mishkal.git

اسنخ المجلد في مجلد العمل، أنا اخترت وضعه في منزل المستخدم.

/home/me/mishkal-master/

شغله بواسطة بيثون 2.7

$python2 mishkal-master/bin/mishkal-console.py 
(C) CopyLeft 2012, Taha Zerrouki
Usage: mishkal-console -f filename [OPTIONS]
       mishkal-console 'السلام عليكم' [OPTIONS]

        [-f | --file = filename]input file to mishkal-console
        [-h | --help]     outputs this usage message
        [-v | --version]  program version
        [-p | --progress]  display progress status

        * Tashkeel Actions
        -------------------
        [-r | --reduced]  Reduced Tashkeel.
        [-s | --strip]    Strip tashkeel (remove harakat).
        [-c | --compare]  compare the vocalized text with the program output

        * Tashkeel Options
        ------------------
        [-l | --limit]    vocalize only a limited number of line
        [-x | --syntax]   disable syntaxic analysis
        [-m | --semantic] disable semantic analysis
        [-i | --ignore]   ignore the last Mark on output words.
        [-t | --stat]     disable statistic tashkeel

This program is licensed under the GPL License

جربه الآن مع نص

$python2 mishkal-master/bin/mishkal-console.py  "السلام عليكم"
 السِّلَام عَلَيْكُمْ

يمكن تشغيل مشكال على سطح المكتب كتطبيق

$python2 mishkal-master/interfaces/gui/mishkal-gui.py

أو على شكل خدمة وب، هذه الطريقة تمكن المستخدم بتشغيل ما يشبه الموقع الأصلي لمشكال على الخط

$python2 mishkal-master/interfaces/web/mishkal-webserver.py
serving on 0.0.0.0:8080 view at http://127.0.0.1:8080

ثم افتح في المتصفح العنوان التالي : http://127.0.0.1:8080

خدمة الوب هذه تقدم واجهة برمجية ليستعملها المطورون في ربط تطبيقات بالتشكيل.

الدمج

الآن بعد تثيبت وإعداد كل الأدوات، يمكننا محاولة دمج التشكيل في سيرورة النطق.

أولا، نجرب مشكال + أسبيك باستعمال ربط الأوامر

$python2 mishkal-master/bin/mishkal-console.py  "السلام عليكم" | espeak -v ar

ثانيا، نجرب مشكال مع أسبيك بأصوات أمبرولا

$python2 mishkal-master/bin/mishkal-console.py  "السلام عليكم" | espeak -v mb-ar1

إعداد مرسل الكلام Speech Dispatcher

قم بتثبيت نظام مُرسل الكلام Speech Dispatcher حسب ما يناسب توزيعتك، أو حمّل المصدر المضغوط من http://www.freebsoft.org/speechd

ثم اتبع تعليمات الملف INSTALL .

إعداد المرسل Speech Dispatcher

يمكنك تجاوز هذه الفقرة إلا إذا أردت تخصيص الإعدادات. أفضل طريقة لتثبيت إعدادات مخصصة هي استعمال الأمر spd-confالذي سيقودك في وضع الإعدادات الأساسية، ويجري بعض الفحوص ويساعد في كشف بعض الأعطال. جرب فقط:

$spd-conf

أبسط طريقة لفحص مرسل الكلام هو الأمرspd-conf -d

أو بالأمر spd-say

مثال

spd-conf -d
spd-say "Hello!"
spd-say -l cs -r 90 "Ahoj"

ربط أمبرولا واسبيك بالمرسل

ملفات الإعدادات ستوضع في المجلد config/speech-dispatcher.في مجلد المنزل للمستخدم.

افحص ملف الإعدادات ‘modules/espeak-mbrola-generic.conf’، وتحقق أن الأصوات المضافة في قسم AddVoiceموجودة أصلا، يمكنك التحقق أنها مثبة بالأمر :

ls /usr/share/espeak-data/voices/mb/mb-*

إن لم تكن موجودة أضفها.

تحقق أنّ القسم GenericExecuteStringيحوي الأسماء الصحيحة لأصوات أمبرولا وتحقق أنّ المسارات صحيحة.

ارفع تعليق سطر AddModuleمن أجل espeak-mbrola-genericفي ملف الإعدادات ‘speechd.conf’ .

استأنف برنامج speech-dispatcher واختر الإعداد espeak-mbrola-genericكمخرج للأصوات للنظام، جربها بالأمر الآتي:

spd-say -o espeak-mbrola-generic -l en Testing

حرر الملف الآتي

nano .config/speech-dispatcher/modules/espeak-mbrola-generic.conf

أضف اللغة العربية في قسم , GenericLanguage وأضف الاسطر الآتية في آخر القائمة

GenericLanguage          "ar" "ar" "utf-8"

اذهب إلى قسم AddVoice وزد الأسطر الآتية

AddVoice        "ar"    "MALE1"        "ar1"
AddVoice        "ar"    "FEMALE1"    "ar1"
AddVoice        "ar"    "MALE1"         "ar2"
AddVoice        "ar"    "FEMALE1"       "ar2"

استأنف برنامج speech-dispatcher واختر الإعداد espeak-mbrola-genericكمخرج للأصوات للنظام، جربها بالأمر الآتي:

جرب الآن اللغة العربية

spd-say -o espeak-mbrola-generic -l ar "السلام عليكم"

إضافة التشكيل لمرسل الكلام

حرر الملف الآتي

nano .config/speech-dispatcher/modules/espeak-mbrola-generic.conf

الآن, افحص قسم GenericExecuteSynth

GenericExecuteSynth \
"echo \'$DATA\' | espeak -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/$VOICE/$VOICE - -.au | $PLAY_COMMAND"

يرجى التحقق من أن المسار الآتي يحوي الأصوات المحملة ،

/usr/share/mbrola/$VOICE/$VOICE

مثلا، الإنجليزية موضوعة في

/usr/share/mbrola/en1/en1

إن لم تكن كذلك، ربما عليك تعديل المسار ليصبح كالآتي، مما يعني أن كل الأصوات موجودة في نفس المجلد

/usr/share/mbrola/voices/$VOICE

يصبح الأمر كالآتي

GenericExecuteSynth \
"echo \'$DATA\' | espeak -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/voices/$VOICE - -.au | $PLAY_COMMAND"

يمكننا أن نلاحظ أنّ البيانات النصية التي ستنطق تمر أولا بأمر العرض echo ثم تمر إلى أسبيك ثم إلى أمبرولا، وتوجه إلى مشغل صوتيات.

سنستعمل برنامج التشكيل كمرحلة وسيطة بدلا من echo

الأمر المخصص للتشكيل هو

python2 mishkal-master/bin/mishkal-console.py

وعليه تصبح الإعدادات لعملية معالجة النص كالآتي

# adding mishkal
GenericExecuteSynth \
"python2 mishkal-master/bin/mishkal-console.py \'$DATA\'| espeak -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/voices/$VOICE - -.au | $PLAY_COMMAND "# adding mishkal

الآن، النص يُشكّل قبل نطقه بنظام تحويل النص إلى كلام.

استأنف برنامج speech-dispatcher واختر الإعداد espeak-mbrola-genericكمخرج للأصوات للنظام، جربها بالأمر الآتي:

جرب الآن اللغة العربية

spd-say -o espeak-mbrola-generic -l ar "السلام عليكم"

من أجل متابعة الأخطاء المحتملة يمكن تشغيل مرسل الكلام بخيار مستوى التنقيح debug

speech-dispatcher -l 4
[Tue Dec  5 15:51:06 2017 : 74036] speechd: Speech Dispatcher 0.8.3 starting
[Tue Dec  5 15:51:06 2017 : 74143] speechd:    Trying to find /run/user/1000/speech-dispatcher
[Tue Dec  5 15:51:06 2017 : 74186] speechd:    Using directory: /run/user/1000/speech-dispatcher for pidfile and logging
[Tue Dec  5 15:51:06 2017 : 74251] speechd: Speech Dispatcher already running.

Speech Dispatcher already running.

هكذا يمكن مراقبة الأخطاء في المجلد

/run/user/1000/speech-dispatcher directory .

إذا سار كل شيء على ما يرام، يمكن تجربة قارئ الشاشة

بدعم من

Fahadالأحد, 2017/12/10 - 9:39ص
disqus

دعوة لحضور اللقاء السنوي لجمعية البرمجيات الحرة وغنو/لينكس 0,1 بالجزائر

$
0
0
دعوة لحضور اللقاء السنوي لجمعية البرمجيات الحرة وغنو/لينكس 0,1 بالجزائر

fsalgeria.jpg

تنضم جمعية البرمجيات الحرة و غنو/لينكس بالجزائرالملتقى السنوي الأول النسخة 0,1  يوم السبت 30 ديسمبر بمدينة حاسي بحبح ولاية الجلفة .الجزائر عنوان الملتقى لهذه السنة هو ” سوق العمل و البرمجيات الحرة ...الكفاءة و الشهادة“

يجمع فيه المهتمون و المتخصصون في مجال البرمجيات الحرة و المصادر المفتوحة للتبادل وطرح خبراتهم للجمهور ونشر التوعية في المجتمع بأهمية البرمجيات الحرة و نظام التشغيل غنو/لينكس ،و التعريف به ومدى جودة البرمجيات الحرة في الأداء و الموثوقية و الثبات و الأمان وكذلك جعل الملتقى في نسخته الأولى قبلة للهواة و الخبراء في هذا المجال وكذا التعريف بالشهادات المتخصصة على غرار ريدهات وسوز ...الخ

محاور الملتقى:

  • التعريف بالبرمجيات الحرة وغنو/لينكس

  • مشروع الويكيبيديا و الميديا ويكي لإدارة المحتويات المعرفية

  • التعريف بمشروع توزيعة SEMICODE OS

  • Blockchain and Bitcoin

  • مشروع الدوكر docker

  • برنامج بلندر " التعريف بالبرنامج + ورشة"

تفاصيل التسجيل على هذا الرابط

Fahadالجمعة, 2017/12/29 - 10:21ص
disqus

إعلان ليبرافيس ٦,۰

$
0
0
إعلان ليبرافيس ٦,۰

libreoffice.jpgأعلنت مؤسسة المستند عن إصدار ليبرافيس 6.0 ، في ذكرى السادسة من إطلاق المشروع ليبرافيس، و ليبرافيس هو مجموعة تطبيقات مكتبية سهلة و غنية و أمنة ، و تقدم توافقية عالية مع المستندات تطبيق مايكروسوفت افيس، و تشمل حزمة ليبرافيس تطبيق كتابة المستندات و تطبيق الجداول الحسابية و تطبيق العروض الاحترافية و تطبيق قواعد بيانات و تطبيق رسم احترافي.
وتماشيا مع سياسة التدرج في التغييرات بحيث لا تؤثر على ثبات البرنامج؛ فقد شملت هذه الإصدارة طائفة وسعة من التغييرات الهادفة لتحسين تجربة الاستخدام و توفير التسهيلات العملية و توفير خصائص غير متوفرة من قبل، و هذه أهم الأشياء التي تغيرت:
أهم المميزات العامة في ليبر أفيس ٥.٤:
١- إضافة دعم تغيير الأيقونات من قبل المستخدم عن طريق مدير ملحقات.
٢- إضافة خطوط ناتو من جوجل و خطوط عربية (أميري و ريم كوفي و شهرزاد و KACSTBook و KACSTOffice) لتعطي تجربة استخدام أفضل و تساعد على جعل المستندات أكثر قابلية للنقل بسبب عدم الاعتماد على خطوط مملوكة وغير قابلة لإعادة التوزيع.
٣-دعم معيار تصنيف المستندات TSCP.
٤- دعم مفاتيح التشفير OpenPGP لتوقيع ملفات ليبر أوفيس على جميع المنصات .
٥ - إضافة إمكانية حفظ الصور حال تغييرها في نفس الموضع.
٦ - دعم التصدير إلى صيغة EPUB3 الخاصة بالكتب الإلكترونية.
٧ - تحسين دعم معيار OOXML الخاص بمايكروسوفت حيث حسن دعم القصاصات الفنية الذكية و استيراد متحكمات ActiveX و تحسين عرض حالة التوقيع.


أهم مميزات رايتر:
١- دعم تدوير الصور بشكل أفضل.
٢- إضافة إستراد قوائم الأسماء من ملف رايتر و من ملف XLSX لميزة دمج المراسلات.
٣- تحسين مظهر الجداول الافتراضي.

أهم مميزات كالك:
١- دعم تصدير مجموعة صور أو أشكال محددة كصورة منفردة.
٢- إضافة ثلاث دوال لدعم معيار ODF1.2 وهي SEARCHB و  FINDB و REPLACEB.

أهم مميزات إمبرس:
١- إضافة 10 قوالب بتصاميم حديثة.

لتنزيل هذه الإصدارة من هنا.

زايدالخميس, 2018/02/01 - 1:19م
disqus

صدور كدي بلازما ٥.١٢

$
0
0
صدور كدي بلازما ٥.١٢

kirigami.jpg

بعد أربعة أشهر من العمل المستمر في التطوير، أعلن مجتمع كدي عن إطلاق كدي بلازما ٥.١٢طويلة الدعم، وتعتبر هذه النسخة الإصدارة الثانية طويلة الدعم بعد كدي بلازما ٥.٨، جاءت كدي بلازما ٥.١٢ مركزة على سرعة الإقلاع وتحسين تجربة الاستخدام بشكل عام، حيث عكف المطورون على تتبع العلل وإصلاحها في كل أنحاء الشفرة المصدرية.

أهم مميزات كدي بلازما ٥.١٢

  • تحسين الأداء بشكل عام وزيادة سرعة تشغل سطح المكتب بمقدار ٣٠٪ .
  • تطوير دعم ويلاند حيث أضاف ميزة الألوان الليلة لضبط سطوع ألوان الشاشة في الليل.
  • أصبح KRunner يدعم برامج قراءة الشاشة.
  • أصبحت نصوص التنبيهات قابلة للنسخ.
  • تحسين مدير التطبيقات Discover بحيث أصبح يعرض تفاصيل البرامج بشكل أفضل وزيادة استقراره وثباته.
  • الاستمرار في تحسين ويلاند على كدي بحيث أصبح مناسبا لشريحة أوسع من المختبرين.

هذا الفيديو يشرح بشكل مرئي أهم المميزات:

إذا كنت ما تزال على كدي ٥.٨المستقرة وترغب بمعرفة ما الجديد منذ تلك الإصدارة، راجع هذه المقالات:
كدي ٥.٩وكدي ٥.١٠وكدي ٥.١١
لقد حدثت العديد من النقلات النوعية لكدي منذ كدي ٥.٨ لذا ننصحك بالترقية.

Fahadالأربعاء, 2018/02/07 - 8:27م
disqus

إطلاق موسوعة حسوب أول موسوعة عربية لتوثيق لغات البرمجة

$
0
0
إطلاق موسوعة حسوب أول موسوعة عربية لتوثيق لغات البرمجة

wiki.hsoub.png

أعلنت شركة "حسوب" الرائدة عربيا في تطوير مشروعات ويب لإثراء المحتوى العربي على شبكة الإنترنت وتمكين الشباب العربي وتحسين مهاراته رسميا عن مشروعها الجديد "موسوعة حسوب"،  وهو المشروع الذي يوفر توثيقا باللغة العربية للغات البرمجة المختلفة بما في ذلك  HTML و CSS و JavaScript و SQL وغيرها من اللغات.

وعملت "حسوب" خلال الشهور الست الماضية على توفير توثيق كامل للغات  HTML وCSS وJavaScript وSQL وPHP، وتبلغ عدد صفحات الموسوعة الآن أكثر من 1000 صفحة تتضمن أكثر من 300 الف كلمة، وتخطط الشركة خلال الشهور القليلة المقبلة لتزويد "موسوعة حسوب" بالتعاون مع المساهمين المتطوعين بتوثيق كامل للعديد من لغات البرمجة الأخرى الهامة، والتي تشمل  وRuby وKotlin وGo وPython بالإضافة للمكتبات البرمجية المرتبطة لها مثل Bootstrap وjQuery و React والعديد من المكتبات الأخرى.

وتعتمد "موسوعة حسوب" الخاصة بتوثيق لغات البرمجة باللغة العربية على صفحات "ويكي" ، أي أنه يمكن للمساهمين تعديل الصفحات المنشورة وإنشاء صفحات جديدة وتحديث المحتوى وإضافة أمثلة أكثر على غرار موسوعة "ويكيبديا" لكن في الموضوعات الخاصة بتوثيق لغات البرمجة فقط، ويمكن للمتخصصين الراغبين في المساهمة التواصل مع فريق عمل "موسوعة حسوب" للحصول على الصلاحيات اللازمة لتعديل وتحرير صفحات الموسوعة.

وقال عبد المهمين الأغا المؤسس والمدير التنفيذي لشركة حسوب تعليقا على إطلاق "موسوعة حسوب": "لأول مرة بتاريخ الويب العربي يصبح لدينا مرجع شامل يوثّق لغات البرمجة JavaScript HTML CSS PHP SQL"، ووعد الأغا بالمزيد من التطويرات القادمة للموسوعة قريبا.

رابط الموسوعة: https://wiki.hsoub.com

تأسست شركة حسوبعام 2011 ولدى الشركة الآن مجموعة من المشروعات الرائدة في تقديم الحلول للمستخدم العربي وإثراء المحتوى الرقمي باللغة العربية على شبكة الإنترنت، وتشمل مشروعات الشركة كل من خدمة إعلانات حسوبوهي شبكة إعلانية وموقع خمساتوهو سوق لبيع وشراء الخدمات المصغرة، هذا بالإضافة إلى موقع مستقلللعمل الحر الذي يتيح توظيف أفضل المستقلين العرب للعمل على تطوير المشروعات عن بعد، إلى جانب كل من أكاديمية حسوبالتي توفر دورات تعليمية عالية الجودة باللغة العربية في مختلف المجالات التقنية وموقع حسوب I/O الذي يعتبر مجتمعا للنقاش وطرح الأفكار.

Fahadالثلاثاء, 2018/02/13 - 7:48ص
disqus

كتاب "تعلم لغة Go بسهولة"

$
0
0
كتاب "تعلم لغة Go بسهولة"

small-learn-go-cover.jpg

يسر فريق وادي التقنية أن يقدم لكم كتاب ”تعلم لغة Go بسهولة“ الكتاب العربي الوحيد المتكامل (على حسب معرفتنا) في لغة جو من شركة جوجل.

استغرق الكتاب قرابة السنة من الجهد المتواصل في الترجمة والمراجعة والتنسيق، ونقتبس من مقدمة الترجمة العربية:

”إن سوق لغات البرمجة شهد قدوم العديد من اللغات التي أحدثت تأثيرا كبيرا في صناعة تقنية المعلومات، وأحد هذه اللغات التي أصبحت شعبيتها تنمو بشكل متزايد ومطرد، لغة جو ، ابنة شركة جوجل المدللة.

جاءت لغة جو لتكون لغة عصرية ولكن في نفس قوة لغة السي، ولذا يحلو للبعض أن يطلق عليها ”سي العصرية“ وبدعم سخي وقوي من شركة جوجل، استطاعت أن تجذب اهتمام الكثير من الشركات والأفراد لتكون اللغة المعتمدة في تقنيات الحوسبة السحابية.

وكالعادة لا تتوفر العديد من المصادر العربية التعليمية لكل التقنيات الحديثة، ولكني آمل أن يكون هذا العمل باكورة أعمال أخرى كما حدث مع كتابتي ”تعلم بايثون بسهولة“ (للأسف لم يكتمل) عندما أطلقته في عام ٢٠٠٧م حيث لم تكن هناك العديد من الكتب العربية حول لغة بايثون في تلك الفترة، أما الآن ولله الحمد فقد توفرت العديد من المصادر الغنية والمتعمقة في لغة بايثون.“
 

محتوي الكتاب:

نفترض في هذا الكتاب أنك على علم بإحدى لغات البرمجة الأخرى و قد برمجت بها . سواء عملت بلغة تستخدم المترجم مثل c وc++‎ وjava ، أو بلغة تستخدم المُفسر مثل Python و Ruby و JavaScript ، لذلك نحن لن نشرح كل شيء كما لو كان الوضع للمبتدئ . ستكون بناء الجملة السطحية مألوف، وكذلك المتغيرات والثوابت، والتعبيرات، وتدفق التحكم، والوظائف.

الفصل الأول يشرح البنية الأساسية للغة جو . قُدم من خلال اثني عشر برامج للاستخدامات اليومية مثل القراءة والكتابة إلى الملفات، تهيئة النصوص، وإنشاء الصور، والتواصل مع عملاء الإنترنت والخوادم.

ويصف الفصل الثاني العناصر الأساسية المكونة للغة Go: الإعلانات، والمتغيرات، وأنواع البيانات الجديدة، والحزم والملفات، والنطاق. يناقش الفصل الثالث الأرقام، والعمليات المنطقية ، والسلاسل النصية، والثوابت، ويشرح كيفية معالجة نصوص يونيكود. ويصف الفصل الرابع الأنواع المركبة، وهي الأنواع المبنية من الأنواع الأكثر بساطة باستخدام المصفوفات والخرائط والهياكل والشرائح، طريقة جو للقوائم الديناميكية. ويغطي الفصل الخامس الدوال ويناقش التعامل مع الأخطاء، وجمل panic و recover و defer.

تعتبر الفصول من 1 إلى 5 هي الأساسيات، وهي أمور تشكل جزءا من أي لغة حتمية رئيسية. تختلف صيغة جو وأسلوبها في بعض الأحيان عن لغات أخرى، ولكن معظم المبرمجين سيتكيفون معها بسرعة. وتركز الفصول المتبقية على مواضيع حيث تشرح تفاصيل لغة جو الأقل تقليدية: الدوال، والواجهات، والتزامن، والحزم، والاختبار، والانعكاس.

جو لديها نهج غير عادي للبرمجة الكائنة التوجه. فلا توجد وراثة الصفوف،أو في الواقع أي صفوف، فالكائنات ذات السلوك المعقد تصنع من الكائنات البسيطة بالتركيب ولكن ليس بالوراثة. ويمكن للدوال أن ترتبط بأي نوع مخصص من قبل المستخدم ،وليس فقط بالهياكل، والعلاقة بين أنواع الملموس والأنواع المجردة (واجهات) هو ضمني، لذا يمكن أن يفي نوع ملموس بواجهة لم يكن مصمم النوع على علم بها. يغطي الفصل السادس الدوال بينما يغطى الفصل السابع الواجهات.

ويعرض الفصل الثامن طريقة جو في التزامن، الذي يقوم على فكرة توصيل العمليات المتسلسلة (CSP)، التي تجسدها رويتينات جو goroutines والقنوات channels .

ويوضح الفصل التاسع الجوانب التقليدية للتزامن على أساس المتغيرات المشتركة.

ويصف الفصل العاشر الحزم، وآلية تنظيم المكتبات. ويبين هذا الفصل أيضا كيفية الاستفادة الفعالة من أداة go، والتي تقوم بالترجمة والاختبار، وقياس الأداء، وتنسيق البرنامج، والتوثيق، والعديد من المهام الأخرى، وكل ذلك من خلال أمر واحد.

يتناول الفصل الحادي عشر الاختبارات ، حيث انتهجت جو طريقة مميزة خفيفة الوزن ، وتجنبت أطر التجريد لصالح المكتبات والأدوات البسيطة. وتوفر مكتبات الاختبار أرضية قوية يمكن البناء عليها تجريدات أكثر تعقيدا إذا لزم الأمر.

ويناقش الفصل الثاني عشر الانعكاس، وهي قدرة البرنامج على فحص تمثيله الخاص أثناء التنفيذ. الانعكاس أداة قوية، على الرغم من أنه يجب استخدامها بحذر؛ يشرح هذا الفصل إيجاد التوازن الصحيح من خلال إظهار كيفية استخدامها في تنفيذ بعض المكتبات المهمة.

يشرح الفصل الثالث عشر تفاصيل البرمجة منخفضة المستوى الذي يستخدم حزمة unsafe للتغلب على نظام أنواع جو، وعندما يكون ذلك مناسبا.

كل فصل يحتوي على عدد من التمارين التي يمكنك استخدامها لاختبار فهمك للغة Go، واستكشاف الأفكار الجديدة من أمثلة الكتاب.

رخصة الترجمة العربية:

الترجمة العربية مرخّصة برخصة المشاع الإبداعي نَسب المُصنَّف 4.0 دولي.

عن مؤلفين الكتاب:

ألان دونوفان، مهندس استشاري في قسم البنية التحتية في شركة جوجل، متخصص في أدوات تطوير البرمجيات. بدأ العمل ضمن فريق لغة جو منذ ٢٠١٢م في تصميم المكتبات و الأدوات للتحليل الساكن. وهو مؤلف العديد من الأدوات منها: oracleو godoc-analysisوegو gorename .

بريان كيرنغانعمل في مركز أبحاث علوم الحاسوب في مختبرات بيل حتى عام ٢٠٠٠م، في مجال لغات يونكس وأدواته. يعمل حاليا بروفيسور في قسم علوم الحاسوب في جامعة Princeton. وهو مؤلف مشارك للعديد من الكتب من ضمنها The C Programming Languageو The Practice of Programming.

 

لتنزيل الكتاب بصيغة PDF اضغط من هنا، ولتنزيل مصدر الكتاب من هنا.

يسعدنا تواصلكم معنا وإخبارنا بالأخطاء اللغوية والترجمية والإملائية في الترجمة العربية.

Fahadالسبت, 2018/03/10 - 9:35ص
disqus

أفضل الحواسيب المحمولة المخصصة لنظام لينكس

$
0
0
أفضل الحواسيب المحمولة المخصصة لنظام لينكس

linux-laptop_a4c5.jpgمع انتشار نظام لينكس في العالم العربي وأصبح مستخدمو النظام أكثر يوم بعد يوم نقدم لكم تقرير أعدته بوابة التكنولوجياعن أفضل الحواسيب المحمولة المخصصة لنظام لينكس ، حيث كان منذ أعوام نظام Linux معروف بأنه نظام " منبوذ " و لاقى العديد من الانتقادات إلى حد أنه وصف بأنه " سرطان " من قبل الرئيس التنفيذي السابق لشركة مايكروسوفت ستيف بالمر ، و لكن مع الزمن يتغير و يبقي المنبوذ مرغوب حيث أنه و بعد 27 عاماً على نشأة هذا النظام أصبح هذا الأخير نظاماً شهيراً واسع الاستخدام بين كل الفئات ، و أصبح داخلاً في العديد من البيئات حيث أصبح موجوداً الآن في نظام التخزين السحابي كما أنه موجود أيضا في نظام التشغيل الأشهر حالياً وهو نظام Android ، ربما رأيت هذا النظام من قبل فأردت أستخدامه و لكن لا تعرف ما الأجهزة التي تدعم هذا النظام ، أو قد تكون سمعت به و ترغب في معرفة ميزات هذا النظام أولاً حتى تتخذ قرار الشراء ، لذلك في هذا المقال سنرشح لك أفضل خمسة أجهزة لاب توب التي تدعم نظام Linux .

أولاً عدة نصائح لاختيار الجهاز المناسب لك الذي يدعم نظام Luinx لتوفير الوقت و تضييق خيارات البحث .

  • تقريباً بعض أجهزة لاب توب Luinx  قد تحتاج إلى عمل إضافي لتثبيت برامج التشغيل وإصلاح مشكلات التوافق ولكن معظمها يعمل بشكل جيد ومع ذلك إذا كنت تريد التأكد والحصول على جهاز لاب توب " يعمل فقط " ، احصل على جهاز كمبيوتر محمول من قائمتنا أدناه .
  • قد لا يكون اللاب توب  " الأفضل " بالنسبة لك مناسبًا لشخص آخر لذا اختر جهاز كمبيوتر محمول يعتمد على ميزانيتك وتفضيلاتك ومتطلباتك أولاً تحقق من التوصيات الثانية .
  •  قم ببحثك عن الجهاز قبل شرائه أولاً عن طريق محرك البحث Google بكتابة اسم موديل الجهاز الذي تخطط لاستخدامه عن طريق إضافة " linux " أو " Ubuntu " أو أي شيء آخر ستستخدمه وستجد المزيد من المعلومات حول هذا الجهاز . قد لا يكون الجهاز مدعومًا بالبرامج و التعريفات ، أو قد يكون هناك بعض الأخطاء في المواصفات أو المعلومات مثل لوحة اللمس ، Wi-Fi ، عمر البطارية ... إلخ . كما يمكنك حتى البحث في المنتديات والحصول على بعض الآراء / الآراء من أشخاص آخرين إذا كنت تشتري جهاز كمبيوتر محمول مع توزيعة Linux مثبتة مسبقًا ، فلا داعي للقلق بشأن التوافق .
  • تعمل أجهزة اللاب توب المزودة بنظام Windows المثبت مسبقًا مع نظام التشغيل Linux والعكس بالعكس إذا وجدت جهاز لاب توب مثبت عليه Windows مثبتًا مسبقًا ، فلا يزال بإمكانك استخدامه لتثبيت نظام Linux عليه بنفسك كما يمكنك  تثبيت نظام لينكس على جهاز لاب توب ماك (أبل) و تجدر الإشارة إلى أن تلك الأجهزة التي تعمل بنظامي التشغيل Windows و Mac غالبًا ما تكون أكثر تكلفة ، لذلك إذا كنت تخطط لتثبيت نظام التشغيل Linux ، فلا تحصل على ترخيص Windows باستخدام الكمبيوتر المحمول الجديد .
  • تحقق أولاً من أجهزة Linux فبعض الأجهزة لديها توصيات رسمية للحواسيب المحمولة والبعض الآخر لديها منتديات مجتمعية مع قائمة بالتوصيات Mint و Ubuntu هما أكثر متاجر لينكس شعبية ، وبطبيعة الحال فهي متوافقة مع معظم الأجهزة مباشرة من الشركات الأخرى ، أيضا يحتوي Ubuntu على دليل للحواسيب المحمولة المختبرة والموصى بها والتي يجب عليك التحقق منها كما أن Arch Wiki مليء بالمعلومات المفيدة حول أجهزة الكمبيوتر المحمولة Linux والأجهزة ذات الصلة.
  • لا تحتاج إلى جهاز لاب توب قوي لأجل أداء سلس فمعظم أنظمة لينكس خفيفة الوزن في حد ذاتها حتى المشهورة منها بحيث لا تحتاج إلى الكثير من ذاكرة الوصول العشوائي ووحدة المعالجة المركزية (CPU) كما تحتاج مع Windows أو Mac ، يمكنك حتى تشغيل نظام لينكس خفيف الحجم على ذاكرة عشوائية سعة 256 ميجابايت أو أقل و بالطبع ، للحصول على أداء أفضل ، ستحتاج إلى أجهزة أفضل لذلك يجب عليك اختيار جهاز اللاب توب استنادًا إلى متطلباتك وميزانيتك مع الأخذ في الاعتبار أن أنظمة لينكس نفسها لن تحتاج إلى الكثير من المواصفات مثل الأنظمة الأخرى .
  •  إذا كنت لا ترغب في استخدام نظام Linux كنظام تشغيل رئيسي على الجهاز ، فيمكنك دائمًا إعداد نظام التشغيل المزدوج مع Linux وWindows أو Mac .


و فيما يلي ترشيحات لأفضل خمسة أجهزة لاب توب تعمل بنظام لينكس لعام 2018 ، و هذا هو الموضوع الرئيسي ، فتابع معنا .
 

Dell-XPS-13-Developer-Edition_38017.jpg
 1 – Dell XPS 13 Developer Edition :

مثالية للذين يبحثون عن جهاز أنيق و راق .
و يتميز بالآتي :
-    تصميم رائع و جذاب .
-    عدة خيارات للاتصال .
-    تلائم الأجهزة الصغيرة .
و يعيبه أنه يأتي بكاميرا ويب WebCam ضعيفة .
يحتفظ XPS 13 بتاجه كالبطل غير المتنازع عليه في سوق Ultrabook ، ويمكن للمرء أن يتعجب من دعم Dell لنظام Linux الذي لا يعين كنظام رئيسي . يمكن تخصيص اللاب توب بحيث يمكنك تهيئته ليكون مناسبًا لكل شيء بدءًا من مهام المكتب الروتينية إلى الألعاب ، اعتمادًا على المبلغ الذي ترغب في دفعه .
إذا كنت ترغب في ذلك ، يمكنك الحصول على أغلى جهاز XPS 13 ، الذي يحتوي على شاشة تعمل باللمس بتقنية InfinityEdge بدقة 4k ، أو الحصول على شاشة أقل دقة FHD و لا تعمل باللمس ، و تجدر الإشارة أيضًا إلى أن الشاشة عالية الدقة ستفرض جهداً إضافياً على وحدة معالجة الرسومات ووحدة المعالجة المركزية ، وقد تؤثر على عمر البطارية بشكل سلبي .
و نظرًا لأنه يُنظر إليه على أنه إصدار " مطورى البرامج " ، فمن المفاجئ أنه لا توجد خيارات تخصيص إضافية . فالطراز الأساسي يأتي مع 8 جيجا بايت من ذاكرة الوصول العشوائي مع قرص صلب بسعة 256 من نوع SSD ، و لن يمكنك ترقيتها بعد شرائها ، إلا أنه يمكنك اللجوء إلى القرص الصلب الذي يأتي بسعة 512 جيجا بايت من نوع SSD أيضاً ، و في مقابل مبلغ إضافي أيضاً يمكنك الحصول على نفس القرص بسعة 1 تيرا بايت .

 

Alpha-Litebook_65169.jpg
 2 - Alpha Litebook :

للذين يريدون شراء جهاز مشهور يعمل بنظام Linux .
و يتميز بالآتى :
-  شاشة بدقة FHD .
-  العديد من المنافذ .
و يعيبه أن القرص الصلب من نوع SSD بسعة 120 جيجا بايت فقط .
إحتكرت شركتا جوجل و أرمادا فئة Chromebook مما أدى إلى استياء بعض مستخدمى Linux التقليدين الذين يريدون مواصفات أفضل مقابل المال الذي يدفعونه ، لذلك تعهدت شركة Alpha بتلبية رغباتهم بإصدار فئة Litebook بأسعار تماثل أجهزة Chromebook تقريباً و التى تأتى غالباً بنفس سعة ذاكرة الوصول العشوائي فقط ، و لكن مع أجهزة Litebook  فإنه يكون أعلى المواصفات من حيث سعة القرص الصلب كما يمكنك تخصيصه للاستخدام الأمثل لك ،  و هو يأتي بمعالج Intel Celeron N3150 رباعي النواة بتردد 1.6 جيجا هيرتز ، و هو شئ ممتاز .
و على ذكر التخصيص و الخيارات الإضافية ، يمكنك اختيار شاشة بدقة FHD مع قرص صلب عادى بسعة 512 جيجا بايت ، أو قرص صلب من نوع SSD بسعة 120 جيجا بايت فقط ، أو يمكنك إختيار الخيار " الهجين " الذي يشمل قرص صلب عادى بسعة 512 جيجا بايت ، مع قرص صلب من نوع SSD سعة 32 جيجا بايت فقط ، و هذه نقطة ضد هذه الفئة لمن يريدون قرص من نوع SSD بسعة أكبر من 120 جيجا بايت .
و إذا كنت بحاجة إلى جهاز أكثر قوة ، فإن Alpha Store يقدم أجهزة لاب توب من نوع Linux مع مواصفات أكثر تحديدًا مثل Centurion Ultra .

Purism-Librem-13_23305.jpg
 3 – Purism Librem 13 :

مناسبة لمحبي الخصوصية .
و يتميز بالآتي :
- صُمم ليكون آمنا جداً .
- أنه لن يتم ترقية الجهاز إلا بعد ثلاث سنوات على الأقل .
و يعيبه أنه باهظ الثمن .
شرعت شركة Purism في سعيها لبناء أكثر أجهزة اللاب توب أمانًا على الإطلاق ، ومن الواضح أنها اختارت ( Linux PureOS )  لتشغيل الجهاز ، فبدلاً من التوجه السائد ، دخلت الشركة إلى مجتمع التمويل الجماعي للحصول على تمويل أكثر من 430 ألف دولار ، مما يسمح لها باعتماد روح أكثر صرامة من معظم الشركات عندما يتعلق الأمر بالخصوصية والحقوق في البرمجيات الحرة و الأمان .
يبدو جهاز Librem 13 للوهلة الأولى أنه جهاز تقليدي ، و لكن عندما تستخدمه سترى أكثر من ذلك ، على سبيل المثال الشركة قد صنعت لوحات المفاتيح الخاصة بها ، بالإضافة إلى ذلك ، فإن اهتمام Purism بنظام لينكس و الآمن بشكل عام ، يتجاوز معظم الأجهزة في هذه القائمة .

System76-Oryx-Pro_64088.jpg
4 – System76 Oryx Pro :

أجهزة راقية بمواصفات عالية .
و يتميز بأنه هناك اختيار بين شاشة بمقاس 15.6 أو 17.3 بوصة .
و لكن يعيبه أنه غير قابل للتكوين بمعنى أنه لا يمكنك فيما بعد ترقية ذاكرة الوصول العشوائي أو القرص الصلب لأنه غير قابل للإزالة ، كما أنه يعيبه أنه يكون مكلفاً إذا أردت خيارات أعلى في المواصفات .
صمم Oryx Pro لنظام التشغيل Linux ، و يمنحك فرصة الاختيار بين نظام لينكس المقدم من Ubuntu 16.04 أو OS 17.10 المعتمد أساسا على Ubuntu .
يأتي الجهاز بهيكل مصنوع من الألمنيوم خفيف الوزن مع لون أسود غير لامع و لديك حتى اختيار حجم الشاشة (15.6 أو 17.3 بوصة) . يوفر أيضا معالج رسومى GeForce GTX 10 ومجموعة Oryx تعمل بمعالج Intel Core i7 رباعي النواة بتردد 3.8 جيجا هيرتز مع توربو و تشجعك الشركة على تخصيص Oryx ليناسب احتياجاتك بشكل افتراضي ، حيث يمكنك أن تحصل على 8 جيجا بايت من ذاكرة الوصول العشوائي وقرص صلب من نوع SSD بسعة 250 جيجا بايت ، ولكن يمكنك دفع مبلغ إضافي للترقية إلى 64 جيجا بايت من ذاكرة الوصول العشوائي مع قرص صلب من نوع SSD بسعة 2 تيرا بايت إذا كنت ترغب في ذلك - على الرغم من أن التكوينات الراقية تصبح مكلفة للغاية هنا .
كما يمكنك أيضًا الاختيار بين Nvidia’s GTX 1060 و GTX 1070 عندما يتعلق الأمر بالمعالج الرسومي ، ومن الممكن إضافة محركات أقراص إضافية ، أو شراء حقيبة لاب توب مصممة لحماية جهازك . يمكن تمديد الضمان من دفتر لتوفير التغطية لمدة ثلاث سنوات ، و هذه خيارات جيدة جداً .

System76-Galago-Pro_22884.jpg
 5 – System76 Galago Pro :

أتبحث عن قوة نظام Linux فى نهاية المطاف ؟
و يتميز هذا الجهاز بأنه يمكنك توسيع قدراته بترقية بعض مواصفاته ، كما يتميز بأنه يمكنك اختيار شاشة بدقة QHD ، كما أنه يمكنك الحصول على النسخة الافتراضية ذات دقة عرض FHD مقابل ثمن أقل .
على الورق ، يعتبر Galago Pro من System76 وحشًا مطلقًا ، ومع ذلك فهو يزن أقل من معظم أجهزة اللاب توب التي تحتوي أيضًا على شاشة مقاس 13 بوصة . هذا الجهاز ينافس الإصدار المطور من Dell XPS 13 ، والذي يتميز بهيكل من الألمنيوم ، و يوفر سعة تصل إلى 32 جيجا بايت من ذاكرة الوصول العشوائي و هذا ممتاز .
لدى Galago Pro مكانين للأقراص الصلبة . حيث يقبع في المكان الأول قرص صلب بسعة 120 جيجا بايت من نوع SSD بشكل افتراضي ولكن يمكن اختيار سعة 2 تيرا بايت عند الطلب ، يمكنك أيضًا اختيار تثبيت قرص SSD ثانٍ في المكان الآخر بسعة تصل إلى 4 تيرا بايت ، و تلك خيارات ممتازه ، إذا لم يكن ذلك كافياً فإنه يحتوي على شاشة بمقاس 13.3 بوصة بدقة 3,200 × 1,800 بكسل ، و منفذ Ethernet ، وقارئ بطاقة SD ، و منفذين USB ، و ثلاثة منافذ Thunderbolt ، و منفذ USB Type-C ، و منفذ mini-Display ، باختصار لن تجد مواصفات مماثلة في عالم الأجهزة التي تعمل بنظام ويندوز تقدم لك هذا الكم من الطاقة و سعة التخزين .

Fahadالأحد, 2018/03/18 - 8:13ص
disqus

إعلان صيغة فيديو AV1 حرة

$
0
0
إعلان صيغة فيديو AV1 حرة

av1-logo.png

أعلن تحالف الوسائط المفتوحة عن إطلاق ترميز فيديو حر مخصص لدقة 4K بدون قيود تجارية، ويتأتي تحت اسم AV1 هو منافس لصيغة HEVC  التجارية مع كفاءة أعلى بنسبة 30%.

ويضم التحالف العديد من شركات التقنية الكبيرة مثل أمازون و ابل و سيسكو و فيسبوك و جوجل و اي بي ام و مايكروسوفت و نتفلكس و انفيديا و موزيلا، و قد بدأ في تطوير هذه الصيغة عام 2015.

وأهم أهداف التحالف هو تطوير صيغة تساعد على تقليل أحجام ملفات الفيديو مع كونها بدون قيود تجارية؛ حيث تقدر بعض الدراسات أن 82% من استهلاك شبكات الإنترنت سيكون فيديو بحلول عام 2021.

زايدالخميس, 2018/03/29 - 1:26م
disqus

صدور FreeCAD 0.17

$
0
0
صدور FreeCAD 0.17

freecad.png

بعد سنتين من العمل المتواصل، منذ إصدارة 0.16 أعلن فريق برنامج FreeCAD عن إطلاق الإصدار 0.17 الذي تطلب أكثر من ٦٨٠٠ تغيير في الشفرة المصدرية وقد أضيفت منضتي عمل جديدين بالإضافة إلى تحسين مناضد العمل السابقة.

بداية ما هو FreeCAD ؟

برنامج FreeCADهو برنامج ثلاثي الأبعاد لإنشاء النماذج صمم خصيصا لتصميم مخططات الأشياء الحقيقة من أي حجم كانت. برنامج فريكاد قائم على فكرة النمذجة باستخدام المعاملات (الطول، العرض، العمق ..) مما يسمح لك بسهولة تعديل على التصميم الخاص بك من خلال العودة إلى التاريخ النموذج الخاص بك وتغيير معاملاته. برنامج فريكاد برنامج حر مفتوح المصدر وعالي التخصيص وقابل للتمديد بسهولة.

يعمل فريكاد على منصات متعددة ( ويندوز، ماك، لينكس) ويقرأ ويكتب العديد من الصيغ من مثل STEP و IGES و STL و SVG و DXF وOBJ و IFC و DAE وغيرها الكثير.

برنامج فريكاد مفيد للمدرسين و الطلبة للهندسة الميكانيكية و الديناميكا و مناسب للعديد من التخصصات الأخرى مثل الهندسة المعمارية.

يقدم فريكاد نفس المميزات التي تقدمها البرامج CATIA و SolidWorks و Solid Edge و يقوم بنفس العمل.

لمن برنامج فريكاد؟

إن كنت هاوي أو محترف وحصلت على مشروع ترغب في بنائه وتحاج إلى صنع مخطط له،على شكل مطبوع 2d أو 3D ؟ قم بتصميمه في فريكاد. فأنت لا تحتاج إلى أي خبرة مسبقة.

أما إذا كنت مستخدم محترف، فإنك ستجد أدوات مماثلة في فريكاد مثل التي توجد في البرامج التجارية.

ما الجديد في 0.17 ؟

- إعادة تصميم منضدة العمل PartDesign بالكامل حيث أضافت فكرة حاوية الجسم والجزء، وهذا التغيير لا يتوافق مع الإصدارة السابقة 0.16 لذا يجب الحذر عند فتح الملفات القديمة.

- إضافة مدير الإضافات إلى البرنامج مما يسهل عملية الحصول على الإضافات وتثبيتها.

- إضافة منضدة العمل TechDraw الذي استبدل منضدة الرسم القديمة ولكن بمميزات أفضل وأكثر.

بالإضافة إلى قائمة طويلة من المميزات الجديدة التي يمكن الاطلاع عليها من هنا.

لتنزيل البرنامج من هنا.

Fahadالثلاثاء, 2018/04/10 - 9:28ص
disqus

استخدام صور WebP لتسريع مواقع الويب

$
0
0
استخدام صور WebP لتسريع مواقع الويب

استخدام صور WebP لتسريع مواقع الويب

تمهيد

صيغة WebPهي صيغة صور حديثة مفتوحة المصدر ومطوَّرة من Google في عام 2010 بناءً على صيغة الفيديو VP8. منذ ذاك الحين، ازداد عدد مواقع الويب (وتطبيقات الهاتف) التي تستخدم صيغة WebP ازديادًا كبيرًا. يدعم متصفحا Google Chrome و Opera صيغة WebP دون إضافات، وهذان المتصفحات مسؤولان عن عرض 74% تقريبًا من صفحات الويب، مما يضمن أنَّ عددًا كبيرًا من المستخدمين يمكنهم تصفح المواقع بشكل أسرع فيما لو استعملت تلك المواقع صورًا بصيغة WebP؛ يجدر بالذكر أنَّ هنالك خططٌلإضافة دعم لصيغة WebP في متصفح Firefox.

تدعم صيغة WebP ضغط الصور الفقود (lossy) وغير الفقود (lossless)، وتدعم أيضًا الرسومات المتحركة، لذا يمكنها أن تستبدل صيغة GIF. ميزتها الرئيسية التي تتفوق فيها على صيغة الصور الأخرى هي أنَّ الحجم التخزيني للصورة أقل بكثير، مما يعني أنَّ سرعة تحميل الصور ستكون أكبر، وسيقل تراسل البيانات في الخادم وعند زائر الموقع. ولمّا كانت الصور بصيغة WebP أقل حجمًا بنسبةٍ كبيرة مقارنةً مع صور PNG و JPEG، فإنَّها ستسرِّع تحميل الصفحات بنسبةٍ كبيرة. إذا كان تطبيق الويب أو الموقع الخاص بك يعاني من مشاكل في الأداء أو كان حجم التراسل الشبكي كبيرًا، فتحويل صورك إلى صيغة WebP سيساعدك كثيرًا في تحسين أداء الصفحات.

سنستخدم في هذه المقالة أداةً تعمل من سطر الأوامر باسم cwebpلتحويل الصور إلى صيغة WebP، وسنُنشِئ سكربتات تسمح لنا بتحويل جميع الصور الموجودة في مجلّد مُحدَّد إلى هذه الصيغة، بما في ذلك الصور المضافة حديثًا. وفي النهاية، سنناقش منهجيتين يمكننا اتباعهما لتخديم صور WebP إلى زوار موقعنا.

المتطلبات المسبقة

أغلبية الخطوات والأوامر في هذه المقالة تنطبق على جميع توزيعات لينكس، والاختلافات تكون في طريقة تثبيت البرامج وحسب؛ لذا سنعتمد على ذكر طريقة تثبيت الأدوات اللازمة على توزيعة أوبنتو 16.04 و CentOS 7. ما يلزم هو خادم قد ثبتنا عليها إحدى التوزيعتين السابقتين، ومضبوطٌ فيه خادم أباتشي، مع وحدة mod_rewrite، لاحظ أنَّ حزمة أباتشي في توزيعة CentOS 7 تأتي مع دعم mod_rewriteمسبقًا، أما أوبنتو فهي تحتاج إلى تفعيل.

لاحظ أنَّ الغالبية العظمى من الأوامر في هذا الدرس ستعمل على التوزيعات الأخرى دون تعديل.

بعد حصولك على وصول إلى الخادم، وتثبيت أباتشي وتفعيل وحدة mod_rewrite، فيمكنك المتابعة مع هذه المقالة.

الخطوة الأولى: تثبيت cwebp وتهيئة مجلد الصور

سنثبِّت في هذا القسم البرمجات التي سنستخدمها لتحويل الصور، وسنُنشِئ أيضًا مجلدًا وننزِّل فيه صورًا لنختبر الأوامر عليها.

لتثبيت cwebp، البرمجية التي تضغط الصور وتحوِّلها إلى صيغة ‎.webp، فسنستخدم الأمر الآتي:

sudo apt-get install webp 

أما إذا كنتَ تستعمل CentOS 7، فيمكنك استخدام الأمر الآتي بدلًا من الأمر السابق:

sudo yum install libwebp-tools

سنُنشِئ مجلدًا جديدًا في المجلد الجذر لخادم أباتشي (والموجود في المسار ‎/var/www/html) باسم webp:

sudo mkdir /var/www/html/webp

سنغيّر ملكية هذا المجلد إلى المستخدم سامي (sammy، بفرض أنَّ لدينا في النظام مستخدمٌ بذاك الاسم، وإن لم يكن متاحًا فيمكنك إنشاؤه إن أردت، فهو أفضل من ترك الملفات بملكية الجذر [المستخدم root]) وذلك باستخدام الأمر الآتي:

sudo chown sammy: /var/www/html/webp

سنحتاج إلى بعض الصور لتجربة الأوامر عليها، لذا سنُنزِّل صورًا حرةً باستخدام الأمر wget. لاحظ أنَّ هذه الأداة مثبتة افتراضيًا في أوبنتو 16.04، لكن تثبيتها سهلٌ جدًا في CentOS 7:

sudo yum install wget

ملاحظة: لتسهيل متابعة الأوامر الموجودة في هذه المقالة، سنُنزِّل ثلاث صور حرة من الإنترنت، أوّل صورتان منها (Junonia orithyaو Mycalesis junonia) مرخصتان برخصة CC BY-SA 4.0لصاحبها Jee & Rani Nature Photography؛ أما الصورة الأخيرة (Dental Care) فهي مرخصة برخصة CC0.

wget -c "https://upload.wikimedia.org/wikipedia/commons/2/24/Junonia_orithya-Thekkady-2016-12-03-001.jpg?download" -O /var/www/html/webp/image1.jpg
wget -c "https://upload.wikimedia.org/wikipedia/commons/5/54/Mycalesis_junonia-Thekkady.jpg" -O /var/www/html/webp/image2.jpg
wget -c "https://cdn.pixabay.com/photo/2017/07/18/15/39/dental-care-2516133_640.png" -O /var/www/html/webp/logo.png

معظم عملنا سيكون داخل المجلد ‎/var/www/html/webp، لذا سنغيّر مجلد العمل الحالي إليه بكتابة الأمر:

cd /var/www/html/webp

بعد أن ثبتنا خادم أباتشي، وفعّلنا إضافة mod_rewrite، وثبتنا cwebpوبعد أن ضبطنا مجلد التجارب، يمكننا الآن أن نتابع مع الخطوات القادمة.

الخطوة الثانية: ضغط الصور باستخدام cwebp

قبل أن نناقش كيفية تخديم صور ‎.webpإلى زوار موقعنا، علينا أن نُنشِئ نسخًا بهذه الصيغة من الصور الموجودة لدينا حاليًا. يمكننا استخدام الأداة cwebpلتحويل صور JPEG أو PNG أو TIFF إلى صياغة ‎.webp. الصيغة العامة لهذا الأمر تبدو كما يلي:

cwebp image.jpg -o image.webp

يمكن تحديد مسار ملف المخرجات (بصيغة ‎.webp) بعد الخيار ‎-o، لاحظ أنَّ صور WebP تنتهي عادةً باللاحقة ‎.webp.

يمكننا ضبط جودة الصورة ‎-qإلى أيّ قيمة بين 0 و 100؛ وستكون القيمة الافتراضية، إن لم نضبطها، مساويةً إلى 75.

إذا نزّلتَ الصور التي ذكرناها في الخطوة الأولى، فيمكنك تنفيذ الأوامر الآتية لتحويل الصورة image1.jpgإلى image1.webpو image2.jpgإلى image2.webp. تذكّر أن تغيّر مجلد العمل الحالي إلى ‎/var/www/html/webp، ثم نفِّذ الأمر cwebpلتحويل الصور بجودة 100%:

cd /var/www/html/webp
cwebp -q 100 image1.jpg -o image1.webp
cwebp -q 100 image2.jpg -o image2.webp

لنلقِ نظرةً على الحجم التخزيني لملفات JPEG و WebP باستخدام الأمر ls. سنستخدم الخيار ‎-lلعرض الصيغة التفصيلية التي تتضمن حجم الملف التخزيني، والخيار ‎-hالذي يطلب من الأمر lsأن يعرض الحجم بصيغةٍ سهلة القراءة:

ls -lh image1.jpg image1.webp image2.jpg image2.webp

سيُنتِج الأمر السابق الناتج الآتي:

-rw-r--r-- 1 sammy sammy 7.4M Oct 28 23:36 image1.jpg
-rw-r--r-- 1 sammy sammy 3.9M Feb 18 16:46 image1.webp
-rw-r--r-- 1 sammy sammy  16M Dec 18  2016 image2.jpg
-rw-r--r-- 1 sammy sammy 7.0M Feb 18 16:59 image2.webp

يُظهِر ناتج الأمر lsأنَّ حجم الملف image1.jpgهو 7.4 ميغابايت، بينما حجم الملف image1.webpهو 3.9 ميغابايت؛ والمثل ينطبق على ملف image2.jpg (16 ميغابايت) و image2.webp (7.0 ميغابايت). لاحظ أنَّ حجم الملفات قد أصبح نصف ما كان عليه!

إذا كنّا نجري ضغطًا غير فقود (lossless، مما يعني أنَّ البيانات الأصلية للصورة ستُحفَظ كاملةً دون أيّ ضياع أثناء عملية الضغط)، فيمكننا أن نستعمل الخيار ‎-lossless، الذي يُعدّ أفضل طريقة للحفاظ على جودة صور PNG. إذا كانت لديك صور بصيغة PNG (كالتي نزّلناها في الخطوة السابقة) وتريد تحويلها إلى صيغة WebP لتقليل حجمها التخزيني، فيمكنك أن تستعمل الأمر الآتي:

cwebp -lossless logo.png -o logo.webp

الأمر الآتي يُظهِر أنَّ الحجم التخزيني لصورة WebP هو 60 كيلوبايت، وهو حوالي نصف الحجم التخزيني لصورة PNG (حوالي 116 كيلوبايت).

ls -lh logo.png logo.webp

ناتج الأمر السابق:

-rw-r--r-- 1 sammy sammy 116K Jul 18  2017 logo.png
-rw-r--r-- 1 sammy sammy  60K Feb 18 16:42 logo.webp

الخلاصة هي أنَّ الحجم التخزيني لنسخة WebP من الصور هي أقل بحوالي 50% من الحجم التخزيني لمثيلاتها من JPEG و PNG، لكن لاحظ أنَّ نسبة الضغط قد تختلف اعتمادًا على الصور التي عندك. يجدر بالذكر أنَّ هنالك عوامل أخرى كثيرة تؤثر على معدّل الضغط، بما في ذلك معدّل الضغط للصورة الأصلية، وصيغة الملف الأصلي، وطريقة التحويل (فقودة أم غير فقودة)، والجودة المطلوبة، ونظام التشغيل الذي تجري عليه عملية التحويل.

الخطوة الثالثة: تحويل جميع صور JPEG و PNG في أحد المجلدات

لقد حوّلنا بعض الملفات في الخطوة السابقة إلى صيغة WebP يدويًا، لكن فعل ذلك يأخذ وقتًا طويلًا ويتطلب جهدًا كثيرًا. يمكننا تبسيط هذه العملية بكتابة سكربت تحويل الذي سيبحث عن ملفات JPEG ويحولها إلى صيغة WebP بجودة 90%، وسيحوِّل أيضًا صور PNG إلى صور WebP غير فقودة.

أوّل عنصر في السكربت الذي سنكتبه هو الأمر find. يمكنك تعلّم المزيد من المعلومات حول الأمر findمن الفصل السابع عشر «البحث عن الملفات» من كتاب «سطر أوامر لينكس». سيبحث الأمر findعن الملفات في المجلد المُحدَّد، وسنستخدم معه بعض الخيارات لمطابقة أسماء تلك الملفات.

لنُنشِئ السكربت باستخدام المحرر النصي المُفضَّل لدينا. سنستخدم هاهنا المحرر nanoلكنك تستطيع أن تستعمل أيّ محرر ترتاح معه. سنُنشِئ الملف webp-convert.shفي مجلد ‎/var/www/html/webp:

nano ~/webp-convert.sh

سيبدو أوّل سطر من الملف كما يلي:

find $1 -type f -and \( -iname "*.jpg" -o -iname "*.jpeg" \)

للحصول على مسار المجلد الذي يحتوي على الصور التي نريد تحويلها، فسنستخدم المعامل الموضعي ‎$1. لاحظ أنَّنا سنُمرِّر مسار مجلّد الصور التي نريد تحويلها إلى السكربت من سطر الأوامر، وهنا سيأتي دور المعامل الموضعي السابق. الغرض من استخدامه هو القدرة على تحديد مسار مجلد الصور بغض النظر عن مكان تخزين السكربت.

باستخدامنا للخيار ‎-type fأخبرنا الأمر findأن يبحث عن الملفات العادية فقط (أي أننا لا نريد أن نحصل على مسارات المجلدات في نواتجه). نريد أيضًا أن نُطابِق اسم الملف مع نمطٍ معيّن باستخدام الاختبار ‎-iname. لاحظ أنَّنا استخدمنا اختبارًا غيرَ حساسٍ لحالة الأحرف (وذلك باستخدامنا للاختبار ‎-inameبدلًا من ‎-name)، وهذا الاختبار سيبحث عن أيّة ملفات تنتهي باللاحقة ‎.jpg‏(‎*.jpg) أو ‎.jpeg‏(‎*.jpeg). رمز النجمة *هو محرفٌ خاصٌ يُطابِق محرفًا عاديًا صفر مرة أو أكثر. لاحظ أيضًا أنَّنا استخدمنا المعامل المنطقي ‎-o (الذي يعني «أو») لنطلب من الأمر findأن يعرض الملفات التي تُطابِق الاختبار الأول ‎-iname (أي ‎-iname "*.jpg"‎) أوالاختبار الثاني (‎-iname "*.jpeg"‎). وضعنا كلا الاختبارين بين قوسين لنحرص على أنَّ الاختبار الأول (أي ‎-type f) سيُنفَّذ دومًا باستخدام المعامل المنطقي ‎-and.

بعد العثور على الملفات المطلوبة، علينا أن نتخذ إجراءً لتحويلها إلى صيغة WebP. سنفعل ذلك باستخدام المعامل ‎-execفي السطر الثاني من السكربت الذي نعمل عليه (لاحظ أنَّنا استخدمنا الشرطة المائلة الخلفية \للسماح بامتداد الأمر findعلى أكثر من سطر). البنية العامة لهذا المعامل هي ‎-exec command {} \;‎. السلسلة النصية {}ستُستبدل بمسار كل ملف يعثر عليه الأمر find (أي أنَّ الأمر المُحدَّد بهذا المعامل سيُنفَّذ على جميع الملفات، كلًا على حدة). استخدمنا ;لنخبر الأمر findأين ينتهي الأمر (لاحظ أنَّنا هربنا [escape] المحرف ;لأنَّ له معنى خاص في الصدفة [shell] ‏bash، وهو الإشارة إلى نهاية الأوامر).

علينا أن نتحقق أولًا من عدم وجود نسخة ‎.webpمن الصور وذلك لكل صورة يُعثر الأمر findعليها، وإن لم تكن موجودةً فسنحوِّلها باستخدام الأمر cwebpكما ناقشنا في الخطوة السابقة. السؤال الآن هو ما هو الأمر الذي علينا تنفيذه مع المعامل ‎-exec؟ صراحةً، سنحتاج إلى تنفيذ أكثر من أمر واحد لتحويل الصور إلى ‎.webp. ولهذا السبب، سنستخدم الأمر bashلتنفيذ سكربت صغير الذي سيُنشِئ نسخة ‎.webpمن الملف إن لم تكن موجودةً. ولفعل ذلك سنُمرِّر هذا السكربت الصغير كسلسلة نصية (محاطة بعلامتي اقتباس) باستخدام الخيار ‎-c. إلى هذه المرحلة، لقد تضمّن الأمر findالمعامل ‎-exec، الذي يُنفِّذ الأمر bashالذي سنُمرِّر إليه سكربتًا صغيرًا (يُمثَّل فيما يلي بالمحتوى النائب `'commands') الذي سيُنفَّذ مجموعة أوامر على ملفات JPEG. يجب أن يبدو الملف الذي نعمل عليه كما يلي في هذه المرحلة:

find $1 -type f -and \( -iname "*.jpg" -o -iname "*.jpeg" \) \
-exec bash -c 'commands' {} \;

أما داخل 'commands' (أي السكربت الموجود بين علامتي اقتباس بعد الخيار ‎-cالتابع للأمر bash)، فسنبدأ بتهيئة متغير جديد باسم webp_pathللاحتفاظ بمسار ملف WebP الجديد، الذي سنولِّده بتبديل لاحقة الملف المُطابَق من الأمر find (أي ‎.jpgأو ‎.jpeg) باللاحقة ‎.webp. سنستخدم الأمر sedهنا لتبديل الملف لاحقة الملف الأصلي (أي جميع المحارف التي تأتي بعد آخر نقطة .في اسم الملف) باللاحقة ‎.webp. رجاءً ارجع إلى قسم الأمر sedفي الفصل العشرين «معالجة النصوص» في كتاب سطر أوامر لينكسلمزيدٍ من المعلومات حوله. المعامل الموضعي ‎$0سيحمل مسار الملف المُطابَق هنا، وذلك لأنَّنا مررنا مسار كل ملف إلى الأمر bashبوضع السلسلة النصية {}كمعامل له (تذكّر أنَّ الشكل العامل للأمر كان bash -c 'commands' {} \;‎). مرّرنا اسم الملف الناتج إلى مجرى الدخل القياسي للأمر sedباستخدام here stringوهي العلامة ‎<<<‎ (راجع الصفحة 411 من كتاب سطر أوامر لينكسللتفاصيل):

webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0");

للحفاظ على طاقة المعالجة في الخادم، فسنختبر إن كان هنالك ملفٌ محوّلٌ مسبقًا إلى صيغة WebP، وذلك باستخدام الأمر if. سنختبر ‎[‎إن لم يكن !هنالك ملفٌ ‎-fباسم ‎"$webp_path"‎موجودًا مسبقًا. لاحظ وجود علامتي اقتباس حول اسم الملف لتفادي حدوث مشاكل فيما لو احتوى على فراغات:

if [ ! -f "$webp_path" ]; then 
  # conversion command
fi;

في النهاية، إذا لم يكن الملف موجودًا، فسنستخدم الأمر cwebpلإنشائه، كما فعلنا عند تحويل الصور في مجلد webpفي الخطوة السابقة:

cwebp -quiet -q 90 "$0" -o "$webp_path";

ملاحظة: ربما لاحظتَ أنَّ الأمر cwebpيُظهِر الكثير من المخرجات، وقد لا نرغب بها في حال استخدمناه ضمن سكربتات، لذا يمكننا الاستفادة من الخيار ‎-quietلإخبار الأمر cwebpألّا يعرض أيّ شيء.

يجب أن يبدو السكربت المستخدم لتحويل صور JPEG كما يلي عند هذه المرحلة:

# converting JPEG images
find $1 -type f -and \( -iname "*.jpg" -o -iname "*.jpeg" \) \
-exec bash -c '
webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0");
if [ ! -f "$webp_path" ]; then 
  cwebp -quiet -q 90 "$0" -o "$webp_path";
fi;' {} \;

أما لتحويل صور PNG، فسنستعمل شيئًا شبيهًا جدًا بما فعلناه مع صور JPEG، باستثناء أمرين اثنين: أولهما هو تغيير النمط المستعمل في الأمر findإلى ‎"*.png"‎، وثانيهما هو استعمال الخيار ‎-losslessفي الأمر cwebpلتحويل صور PNG بطريقة غير فقودة (كما ناقشنا في الخطوة الثانية).

سيبدو الملف كله كما يلي:

#!/bin/bash

# converting JPEG images
find $1 -type f -and \( -iname "*.jpg" -o -iname "*.jpeg" \) \
-exec bash -c '
webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0");
if [ ! -f "$webp_path" ]; then 
  cwebp -quiet -q 90 "$0" -o "$webp_path";
fi;' {} \;

# converting PNG images
find $1 -type f -and -iname "*.png" \
-exec bash -c '
webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0");
if [ ! -f "$webp_path" ]; then 
  cwebp -quiet -lossless "$0" -o "$webp_path";
fi;' {} \;

لنختبر الآن السكربت webp-convert.sh، سنستخدم الملفات التي أنشأناها في الخطوة السابقة لتجربته. لكن احرص أولًا على جعل ملف السكربت قابلًا التنفيذ:

chmod a+x ~/webp-convert.sh

لنشغِّل السكربت على المجلد ‎/var/www/html/webp:

./webp-convert.sh /var/www/html/webp

لم يحدث شيء! ذلك لأنَّ السكربت بحث عن وجود نسخة ‎.webpمن الصور في المجلد ‎/var/www/html/wepb، لكننا حولناها كلها في الخطوة الثانية من هذا الدرس. علينا إذًا أن نحصل على صورٍ جديدةٍ أو نحذف نسخة ‎.webp. الأمر الآتي سيحذف جميع ملفات ‎.webpالموجودة في المجلد ‎/var/www/html/webp:

rm /var/www/html/webp/*.webp

بعد حذف جميع صور ‎.webp، يمكننا تشغيل السكربت مرةً أخرى للتحقق أنَّه يعمل:

./webp-convert.sh /var/www/html/webp

سيؤكد الأمر lsأنَّ السكربت قد حوّل الصور بنجاح:

ls -lh /var/www/html/webp

الناتج:

-rw-r--r-- 1 sammy sammy 7.4M Oct 28 23:36 image1.jpg
-rw-r--r-- 1 sammy sammy 3.9M Feb 18 16:46 image1.webp
-rw-r--r-- 1 sammy sammy  16M Dec 18  2016 image2.jpg
-rw-r--r-- 1 sammy sammy 7.0M Feb 18 16:59 image2.webp
-rw-r--r-- 1 sammy sammy 116K Jul 18  2017 logo.png
-rw-r--r-- 1 sammy sammy  60K Feb 18 16:42 logo.webp

هذه الخطوة هي أساس استخدام صور WebP في موقعنا، لأننا نحتاج إلى وجود نسخة WebP من جميع الصورة في موقعنا. سننظر في الخطوات القادمة كيف يمكننا الاستفادة من تلك الصور لتسريع مواقع الويب!

الخطوة الرابعة: مراقبة ملفات الصور في أحد المجلدات

حوّلنا جميع الصور عندنا إلى صيغة ‎.webpفي الخطوة الثالثة، لكننا قد نحتاج إلى أتمتة هذه الخطوة للتعامل مع الصور الجديدة التي لم تحوَّل إلى WebP بعد. يمكننا إضافة سكربت جديد لتحويل لمراقبة التغييرات التي تحصل في مجلد الصور لتحويل الصور الجديدة مباشرةً دون الحاجة إلى تشغيل سكربت webp-convert.shيدويًا في كل مرة نضيف فيها صورةً جديدةً.

إحدى المشاكل في سكربت webp-convert.shهي أننا لا نستطيع أن نعرف أنَّ صورةً ما قد أُعيدَت تسميتها أو حُذِفَت. فمثلًا، لو أنشأنا صورةً باسم foo.jpgوشغّلنا سكربت webp-convert.sh، ثم أعدنا تسمية تلك الصورة إلى bar.jpgوشغّلنا السكربت webp-convert.shمجددًا، فسينتهي بنا المطاف بوجود ملفي ‎.webpمتطابقين (وهما foo.webpو bar.webp). لهل هذه المشكلة، ولتفادي تشغيل السكربت يدويًا، فسنُضيف مراقبات (watchers) التي تراقب ملفاتٍ أو مجلداتٍ معيّنة للتغييرات، وتُشغِّل أوامر ردًا على تلك التغييرات.

يمكننا ضبط تلك المراقبات باستخدام الأمر inotifywait، الذي هو جزءٌ من الحزمة inotify-tools، وهي مجموعةٌ من الأوامر السطرية التي توفِّر واجهةً بسيطةً لنظام inotify في نواة نظام لينكس. يمكننا تثبيت هذه الحزمة في نظام أوبنتو بالأمر الآتي:

sudo apt-get install inotify-tools

أما لتوزيعة CentOS 7، فالحزمة inotify-toolsمتوافرة في مستودع EPEL. يمكننا تثبيت مستودع EPEL وتثبيت الحزمة inotify-toolsباستخدام الأمرين الآتيين:

sudo yum install epel-release
sudo yum install inotify-tools

الأمر inotifywaitينتظر حدوث تغييرات في مجلدٍ معيّن. الخيار ‎-qسيخبر الأمر inotifywaitألّا يخرج الكثير من المخرجات. نرغب أيضًا أن يعمل الأمر inotifywaitدون أجلٍ مسمى (‎-m) كيلا ينتهي تنفيذه بعد الحصول على أوّل حدث وقع في المجلد. إضافةً إلى ذلك، نرغب بضبط المراقبات في المجلد المُحدَّد وجميع المجلدات الفرعية التابعة له تعاوديًا باستخدام الخيار ‎-r.

الصيغة التي نريد الحصول عليها عند وقوع تغييرٍ في المجلد هي «اسم الحدث» متبوعًا بمسار الملف، ويمكننا تغيير الصيغة باستخدام الخيار ‎--format. الأحداث التي نريد مراقبتها هي close_write (الذي سيُطلَق عند إنشاء ملف وانتهاء عملية كتابته إلى القرص)، و moved_fromو moved_to (التي ستُطلَق عند نقل ملف)، والحدث delete (الذي سيُطلَق عند حذف ملف).

يمكننا إنشاء السكربت بمحررنا النصي المُفضَّل كما فعلنا في الخطوة السابقة مع السكربت webp-convert.sh. الأمر الآتي سيُنشِئ الملف webp-watchers.shفي المجلد ‎/var/www/html/webp:

nano ~/webp-convert.sh

سيبدو أوّل سطرٍ في السكربت كما يلي:

inotifywait -q -m -r --format '%e %w%f' -e close_write -e moved_from -e moved_to -e delete $1

لتفحص ما هي المخرجات التي سيُظهرها هذا الأمر، فنحاول تشغيله في المجلد ‎/var/www/html/webp، مع تشغيله في الخلفية بإضافة الرمز &في نهاية الأمر. سننتقل الآن من تعديل السكربت إلى سطر الأوامر لاختبار سلوك الأمر inotifywait (احرص على حفظ الملف والخروج من المحرِّر):

inotifywait -q -m -r --format '%e %w%f' -e close_write -e moved_from -e moved_to -e delete /var/www/html/webp &

لمعرفة المخرجات التي يُنتِجها الأمر inotifywait، فسنُنشِئ عدِّة ملفات ونجري عمليات عليها. سنُنِشئ أولًا ملفًا جديدًا فارغًا باسم new_fileباستخدام الأمر touch. أدخِل الأمر الآتي في سطر الأوامر:

touch /var/www/html/webp/new_file

ثم سنُعيد تسمية الملف (أي ننقله) إلى moved_fileباستخدام الأمر mv:

mv /var/www/html/webp/new_file /var/www/html/webp/moved_file

وفي النهاية سنحذف الملف moved_fileباستخدام الأمر rm:

rm /var/www/html/webp/moved_file

سنشاهد ناتجًا شبيهًا بالناتج الآتي في الطرفية:

CLOSE_WRITE,CLOSE /var/www/html/webp/new_file
MOVED_FROM /var/www/html/webp/new_file
MOVED_TO /var/www/html/webp/moved_file
DELETE /var/www/html/webp/moved_file

سيظهر أوّل سطر بعد إنشاء الملف الجديد، وسيظهر السطران الثاني والثالث بعد نقل الملف (ويشيران إلى مسار المصدر والوجهة). في النهاية، آخر سطر يُظهِر أنَّ الملف قد حُذِف.

بالعودة إلى أوّل سطر في سكربت webp-watchers.sh، سنستخدم الأمر grepلمعرفة إن كانت الملفات التي أطلقت أحد الأحداث السابقة هي ملفات بصيغة JPEG أو PNG؛ ولمّا كان الأمر inotifywaitلا يوفِّر الخيار ‎--includeلمراقبة الملفات التي تُطابِق تعبيرًا نمطيًا محدَّدًا، فنحن مجبرون لاستخدام الأمر grepلحلّ التفافي لهذا القصور. أمر grepالآتي سيؤدي إلى مطابقة صور JPEG أو PNG فقط. وسنستخدم فيه الخيار ‎-iلتجاهل حالة الأحرف، والخيار ‎-Eلاستخدام التعابير النمطية الموسّعة (extended regular expressions). سنضيف أيضًا الخيار ‎--line-bufferedإلى أمر grepلتمرير الأسطر التي جرت مطابقتها إلى حلقة التكرار (التي سنُناقشها بعد قليل):

| grep -i -E '\.(jpe?g|png)$' --line-buffered

أي أنَّ ناتج الأمر inotifywaitسيُمرِّر مسار الملفات التي تغيّرت في المجلد المُحدَّد عبر أنبوب (pipe، أي الرمز |) إلى الأمر grep، الذي بدوره سيتحقق إن كان الملف صورةً.

الخطوة الآتية هي بناء حلقة التكرار while. يمكننا الاستفادة من حلقة التكرار whileمع الأمر readفي حالات مثل حالتنا؛ مما يسمح لنا بمعالجة كل سطر من الأسطر المُمرَّرة إلى الحلقة فور إخراجها. سيُخزِّن الأمر readالحدث في متغيرٍ باسم ‎$operationوسيخزِّن مسار الملف المُعالَج في متغيرٍ باسم ‎$path:

| while read operation path; do
  # commands
done;

لندمج ذلك مع أمر inotifywaitالموجود في أوّل سطر من السكربت:

inotifywait -q -m -r --format '%e %w%f' -e close_write -e moved_from -e moved_to -e delete $1 \
| grep -i -E '\.(jpe?g|png)$' --line-buffered \
| while read operation path; do
  # commands
done;

حلقة whileستتحقق من الحدث المُطلَق من الأمر inotifywait، ومن ثم ستجري الأوامر الموجودة داخل الحلقة الأفعال الآتية:

  • إنشاء ملف WebP جديد إن أنشأنا صورةً جديدةً أو نقلناها إلى المجلد الهدف.

  • حذف ملف WebP إذا حُذِفَت الصورة الأصلية أو نُقِلَت من المجلد الهدف.

هنالك ثلاثة أقسام رئيسية في حلقة التكرار. أولها هو تعريف متغيرٍ باسم webp_pathالذي هيّأناه ليُخزِّن نسخة ‎.webpمن الصورة الهدف (أنشأناه بأسلوب مشابه لما فعلناه في الخطوة الثالثة):

webp_path="$(sed 's/\.[^.]*$/.webp/' <<< "$path")";

الخطوة المنطقية التالية هي اختبار الحدث الذي وقع:

if [ $operation = "MOVED_FROM" ] || [ $operation = "DELETE" ]; then
  # commands to be executed if the file is moved or deleted
elif [ $operation = "CLOSE_WRITE,CLOSE" ] || [ $operation = "MOVED_TO" ]; then
  # commands to be executed if a new file is created
fi;

إذا نقلنا أو حذفنا الملف، فسنتحقق من وجود نسخة ‎.webpمنه، فإذا كانت موجودةً فسنحذفها باستخدام الأمر rm:

if [ -f "$webp_path" ]; then
  $(rm -f "$webp_path");
fi;

أما بالنسبة إلى الملفات المُنشَأة حديثًا، فسنختبر إن كان الملف بصيغة PNG (باستخدام ifو grepكما فعلنا في الخطوة الثالثة). فعلنا لذا سيسمح لنا باستخدام التحويل غير الفقود (عبر الخيار ‎-lossless). إذا لم يكن الملف المُطابَق بصيغة PNG فسنجري تحويلًا فقودًا باستخدام نفس الأمر المذكور في الخطوة الثانية (أي بتحديد جودة الصورة عبر المعامل ‎-q):

if [ $(grep -i '\.png$' <<< "$path") ]; then
  $(cwebp -quiet -lossless "$path" -o "$webp_path");
else
  $(cwebp -quiet -q 90 "$path" -o "$webp_path");
fi;

قد تتساءل لماذا لم ننقل ملف ‎.webpعند نقل الملف الأصلي المرتبط به، ذلك لأننا اتبعنا المنهجية الأسهل: حذف ملف WebP ثم إعادة إنشاءه من الصفر؛ ذلك لأننا لا نريد تعقيد السكربت في حال أضفنا الجزء المسؤول عن نقل نسخة ‎.webpالمرتبطة بالملفات الأصلية.

يجب أن يكون كامل ملف webp-watchers.shكما يلي:

#!/bin/bash
echo "Setting up watches.";

# watch for any created, moved, or deleted image files
inotifywait -q -m -r --format '%e %w%f' -e close_write -e moved_from -e moved_to -e delete $1 \
| grep -i -E '\.(jpe?g|png)$' --line-buffered \
| while read operation path; do
  webp_path="$(sed 's/\.[^.]*$/.webp/' <<< "$path")";
  if [ $operation = "MOVED_FROM" ] || [ $operation = "DELETE" ]; then # if the file is moved or deleted
    if [ -f "$webp_path" ]; then
      $(rm -f "$webp_path");
    fi;
  elif [ $operation = "CLOSE_WRITE,CLOSE" ] || [ $operation = "MOVED_TO" ]; then  # if new file is created
     if [ $(grep -i '\.png$' <<< "$path") ]; then
       $(cwebp -quiet -lossless "$path" -o "$webp_path");
     else
       $(cwebp -quiet -q 90 "$path" -o "$webp_path");
     fi;
  fi;
done;

لا تنسَ أن تجعل السكربت قابلًا للتنفيذ:

chmod a+x ~/webp-convert.sh

يمكننا الآن تشغيل السكربت على المجلد ‎/var/www/html/webpلمراقبته (وجميع المجلدات الفرعية فيه) للتغيرات. ربما ترغب بتشغيل الأمر في الخلفية بإضافة الرمز &في نهاية الأمر:

./webp-watchers.sh /var/www/html/webp

في هذه المرحلة، حوّلنا جميع الصور الموجودة في المجلد ‎/var/www/html/webpإلى صيغة WebP، وضبطنا المراقبات باستعمال سكربت webp-watchers.sh. حان الوقت الآن لاستكشاف خياراتنا بخصوص طريقة تخديم صور WebP إلى زوار مواقعنا.

الخطوة الخامسة: تخديم ملفات WebP إلى الزوار

إذا اتبعتَ التعليمات الموجودة في الخطوات السابقة، فيجب أن تصبح عندك نسخة ‎.webpلكل صورة JPEG أو PNG موجودة في مجلد ‎/var/www/html/webp. يمكننا الآن التفكير بطريقة تخديم تلك الصور إلى المتصفحات الداعمة لها.

سنفعل ذلك بمنهجيتين اثنتين: استخدام عناصر HTML5 (العنصر تحديدًا)، ووحدة mod_rewriteفي خادم الويب أباتشي. سنناقش طريقة استخدام العنصر في هذه الخطوة، وسنُرجئ شرح الوحدة mod_rewriteإلى الخطوة القادمة.

إذا كنتَ مطوِّر (أو صائن) موقعك، فيمكنك استخدام العنصر لتضمين الصور في صفحات الويب في موقعك. يسمح هذا العنصر بتعريف أكثر من مصدر (source) للصورة. وإذا كان المتصفح يدعم صيغة WebP فسيُنزِّل نسخة ‎.webpبدلًا من الصورة الأصلية، مما يُسرِّع تخديم الصفحة. يجدر بالذكر أنَّ العنصر مدعومٌ دعمًا جيدًا في المتصفحات الحديثة التي تدعم صيغة WebP.

العنصر هو حاوية التي تحتوي على عناصر لتحديد «مصدر» مختلف للصورة المُحدَّدة في العنصر المحتوى فيها. إذا استخدمنا العنصر للإشارة إلى صورة ‎.webp، فسينظر المتصفح إن كان قادرًا على تفسير تلك الصفحة، وإن لم يكن قادرًا فسيستعمل الصورة المُحدَّدة في الخاصية srcفي العنصر .

لنقل أنَّ لدينا صورة PNG باسم logo.pngوحولنا إلى logo.webpباستخدام السكربتات السابقة، فيمكننا استخدام شيفرة HTML الآتية لعرض الصورة logo.webpلأي متصفح يدعم صيغة WebP، والصورة logo.pngللمتصفحات الأخرى التي لا تدعم صيغة WebP أو لا تدعم العنصر . لنفتح محررنا النصي المُفضَّل ونُنشِئ ملف HTML في المسار ‎/var/www/html/webp/picture.html:

nano /var/www/html/webp/picture.html

سنختصر الصفحة الاختبارية إلى البنية الآتية:

Site Logo

يمكن استخدام العنصر لتوفير أكثر من نسخة من الصورة، مما يسمح للمتصفح باختيار أكثر صورة ملائمة بينها لعرضها. هذا أبسط خيارٍ متاحٍ أمامنا لتخديم صور ‎.webp.

بعد أن شرحنا كيفية تخديم صور ‎.webpمباشرةً من شيفرة HTML، سننتقل الآن إلى شرح طريقة أتمتة هذه العملية باستخدام وحدة mod_rewriteالتابعة لخادم أباتشي.

الخطوة السادسة: تخديم صور WebP باستخدام وحدة mod_rewrite

إذا أردنا تحسين سرعة موقعنا، لكنه يحتوي على عددٍ كبيرٍ من الصفحات أو لدينا وقتٌ وموارد قليلة لتعديل شيفرة HTML، فستساعدنا وحدة mod_rewriteفي أتمتة عملية تخديم صور ‎.webpإلى المتصفحات الداعمة لها.

أولًا، علينا اختبار إذا كانت وحدة mod_rewriteمتوافرةً، وذلك في ملف ‎.htaccessباستخدام التعليمة ifModule؛ وإذا كانت الوحدة متاحةً فسنُفعِّلها باستخدام التعليمة RewriteEngine On. يمكن إنشاء ملف ‎.htaccessفي مجلد ‎/var/www/html/webpباستخدام الأمر الآتي:

nano /var/www/html/webp/.htaccess

الصيغة الأوليّة لملف ‎.htaccessستكون كما يلي:


  RewriteEngine On 
  # further directives

لكي نعرف متى علينا تخديم صور ‎.webpإلى المستخدم، فيجب أن يجري خادم الويب عدِّة اختبارات. فعندما يجري المتصفح طلبيةً، فسيُضمِّن فيها ترويسةً تُخبِر الخادم ماذا يستطيع المتصفح تشغيله. وفي حالة صور WebP، سيُرسِل الخادم ترويسة Acceptالتي تحتوي على image/webp. سنتحقق إذا كان المتصفح قد أرسل هذا الترويسة باستخدام التعليمة RewriteCond. التعليمة RewriteCondتُحدِّد المعايير أو الشروط التي يجب أن تُطابَق حتى يُنفَّذ ما في التعليمة RewriteRule. راجع توثيق وحدةmod_rewriteالرسمي لمزيدٍ من المعلومات:

RewriteCond %{HTTP_ACCEPT} image/webp

علينا ترشيح كل الملفات ما عدا صور JPEG و PNG، وذلك باستخدام تعبيرٍ نمطيٍ شبيهٍ بالتعبير المستخدم في الأقسام السابقة، وذلك لمطابقة عنوان URI المطلوب من المتصفح. لاحظ أننا استخدمنا ‎(?i)لجعل عملية المطابقة غير حساسة لحالة الأحرف:

RewriteCond %{REQUEST_URI}  (?i)(.*)(\.jpe?g|\.png)$ 

لتتحقق أنَّ نسخة ‎.webpمن الملف موجودة (من البدهي أننا لا نريد تخديم صورة غير موجودة إلى المستخدم)، فيمكننا استخدام تعليمة RewriteCondكما يلي:

RewriteCond %{DOCUMENT_ROOT}%1.webp -f

في النهاية، إذا تحققت كل الشروط السابقة، فسنُعيد توجيه صورة JPEG أو PNG المطلوبة إلى ملف WebP المرتبط بها. لاحظ أننا «نعيد توجيه الملف» (redirect، أي سيُطلَب من المتصفح أن يجري طلبية جديدة لرابط URI جديد يُشير إلى ملف ‎.webp) باستخدام الراية R، ولا «نعيد كتابة رابط URI» ‏(rewrite). الفرق بين إعادة التوجيه وإعادة كتابة رابط URI هي أنَّ المتصفح سيُخدِّم رابط URI الجديد دون إخبار المتصفح بذلك، مما يعني أنَّ الملف المنقول إلى المتصفح هو ‎.webpلكنّه سيبقى مخدّمًا بنفس رابط URI الأصلي. بعبارةٍ أخرى، سيظهر أنَّ رابط URI يُشير إلى ملف ‎.png (على سبيل المثال)، لكنه في الحقيقة ملف ‎.webp:

RewriteRule (?i)(.*)(\.jpe?g|\.png)$ %1\.webp [L,T=image/webp,R] 

عند هذه المرحلة، أنهينا قسم mod_rewriteفي ملف ‎.htaccess، لكن ماذا سيحدث لو كان هنالك خادم تخزين مؤقت بين خادمنا وجهاز المستخدم؟ قد يؤدي ذلك إلى تخديم النسخة الخطأ من الملف إلى الزائر، ولهذا السبب علينا أن نتحقق إذا كانت الوحدة mod_headersمفعّلةً، وذلك لإرسال ترويسة Vary: Accept. الترويسة Varyتُخبر الخوادم الوسيطة (proxy servers) أنَّ نوع المحتوى للمستند (أي MIME type. بعبارةٍ أخرى: صيغة الملف المُخدَّم) تختلف (Vary) اعتمادًا على قدرات المتصفح الذي طلب الملف. إضافةً إلى ذلك، إنَّ المحتوى المُخدَّم إلى الزائر قد وُلِّد اعتمادًا على ترويسة Acceptالموجودة في الطلبية. فطلبيةٌ أخرى لها ترويسة Acceptمختلفة قد تحصل على ناتج آخر. لاحظ أنَّ إرسال هذه الترويسة هو أمرٌ ضروري لمنع الخوادم الوسيطة من تخديم صور WebP إلى المتصفحات غير الداعمة لها:


  Header append Vary Accept env=REDIRECT_accept

في نهاية ملف ‎.htaccess، سنضبط نوع MIME لملفات ‎.webpإلى image/webpباستخدام التعليمة AddType. فعلنا ذلك لتخديم الصور باستخدام نوع MIME الصحيح:

AddType image/webp .webp

هذه هي النسخة النهائية من ملف ‎.htaccess:


  RewriteEngine On 
  RewriteCond %{HTTP_ACCEPT} image/webp
  RewriteCond %{REQUEST_URI}  (?i)(.*)(\.jpe?g|\.png)$ 
  RewriteCond %{DOCUMENT_ROOT}%1.webp -f
  RewriteRule (?i)(.*)(\.jpe?g|\.png)$ %1\.webp [L,T=image/webp,R] 
  Header append Vary Accept env=REDIRECT_accept

AddType image/webp .webp

ملاحظة: لاحظ أنَّك تستطيع دمج ملف ‎.htaccessالسابقة مع الملف الموجود مسبقًا عندك. فلو كنتَ تستخدم ووردبريس مثلًا، فيمكنك نسخ ملف ‎.htaccessالسابق ولصقه في بدايةالملف الموجود عندك.

لنجرِّب ما فعلناه في هذه الخطوة. لو اتبعنا الخطوات السابقة، فيجب أن يكون لدينا ملف باسم logo.pngو logo.webpفي مجلد ‎/var/www/html/webp. لنجرِّب استخدام عنصر بسيط لتضمين صورة الشعار logo.pngفي صفحة الويب. يمكننا إنشاء ملف HTML تجريبي مثلما فعلنا في الخطوة السابقة:

nano /var/www/html/webp/img.html

أدخِل شيفرة HTML في ملف ‎/var/www/html/webp/img.html:

Site Logo

عندما تزو صفحة الويب السابقة باستخدام متصفح Chrome بزيارة الرابط http://example.com/webp/img.htmlفستلاحظ أنَّ الصورة المُخدَّمة هي نسخة ‎.webpمن الشعار (جرِّب مثلًا فتح الصورة في لسانٍ جديد)؛ أما إذا كنتَ تستخدم Firefox فستحصل على نسخة ‎.pngتلقائيًا.

الخلاصة

تعلمنا في هذه المقالة عن كيفية استخدام صيغة صور WebP لجعل تحميل صفحات الويب أسرع، وشرحنا كيفية استخدام الأداة cwebpلتحويل الملفات. أوّل طريقة استعملناها لتخديم الملفات هي عبر عنصر ، أما الخطوة الثانية فكانت باستعمال وحدة mod_rewriteفي أباتشي.

ما شرحناه في هذا الدرس كافٍ لتحقيق هدف تسريع الموقع باستخدام صور WebP، لكن يمكنك تخصيص السكربتات لتناسب احتياجاتك. ننصحك بأخذ وقتك لتصفح المراجع الآتية:

  • لتعلّم المزيد حول ميزات صيغة WebP وكيفية استخدام أدوات التحويل، فانظر إلى توثيقWebP.

  • لمزيدٍ من التفاصيل والأمثلة عن استخدام العنصر ، فانظر إلى صفحته في موسوعة حسوب.

  • للتوسع في فهم وحدة mod_rewrite، فألقِ نظرةً على توثيقها.

استخدام صيغة WebP لصور موقعك سيُقلِّل حجمها التخزيني بنسبةٍ كبيرة، مما يُقلِّل حجم التراسل الشبكي ويجعل تحميل الصفحات أسرع، خصوصًا إذا كان موقعك يحتوي على عددٍ كبيرٍ من الصور.

مصدر هذه المقالة هو مقالة How To Create and Serve WebP Images to Speed Up Your Websiteالمنشورة في DitgitalOcean والتي كتبها عبد اللطيف ايمش.

عبد اللطيف ايمشالسبت, 2018/04/14 - 2:40م
disqus

صدور أوبنتو 18.04

$
0
0
صدور أوبنتو 18.04

ubuntu-1804-desktop-screenshot.jpg

أعلنت شركة كانونيكال عن إطلاق أوبنتو ١٨.٠٤طويلة الدعم تحت مسمى ”Bionic Beaver“ والذي يعني القندس ذي الأعضاء الآلية، تعتبر هذه النسخة نقلة نوعية وعودة أوبنتو إلى أصولها، بعد أن استثمرت طويلا في سطح المكتب يونتي رجعت أخيرا إلى سطح مكتب جنوم واعتمدت بشكل رسمي لنسخة أوبنتو الموجهة إلى سطح المكتب.

كذلك أعلنت الانتقال إلى خادم العرض ويلاند وبما أن هذه النسخة طويلة الدعم فقط ارتأت الشركة إبقاء خادم العرض القديم X.org وتوفير خادم ويلاند بشكل اختياري.

من المميزات الجديدة أيضا إضافة ميزة التثبيت بأقل المتطلبات، الإصدارة الجديدة تأتي بنواة لينكس ٤.١٥ و نسخة السادسة من برامج الأوفيس ليبر أوفيس.

إن الانتقال إلى سطح جنوم من وجهة نظري الشخصية هو أكبر ميزة تقدمها أوبنتو ١٨.٠٤ وخصوصا أن الدعم الفني لهذه الإصدارة سيستمر إلى عام٢٠٢٣.

الفيديو التالي يعرض أهم المميزات في هذه الإصدارة:


للمزيد واستعراض كل المميزات الجديدة من هنا.

لتنزيل هذه الإصدارة من هنا.

adminالجمعة, 2018/04/27 - 11:17ص
disqus

صدور جمب ٢.١٠

$
0
0
صدور جمب ٢.١٠

gimp2.10.jpg

بعد عمل دام ست سنوات متواصلة من العمل المستمر، أعلن مطورو برنامج تحرير الصور GIMP الشهير في عالم البرمجيات الحرة، إطلاق الإصدارة ٢.١٠.

أبرز المميزات الجديدة في هذه الإصدارة:

١- انتقال إلى محرك جديد لمعالجة الصور يدعى GEGL وهذه الخطوة تعتبر ضرورية لإضافة مميزات جديدة يخطط لها المطورون في الإصدارة ٣.٢ ، بالإضافة سمح هذا الانتقال معالجة الصور عالية الدقة من مثل 32 بت، وإضافة المعالجة المتوازية وتسريع معالجة البكسلات المعتمد على العتاد.

٢- أصبح إدارة الألوان ميزة رئيسة في البرنامج حيث تعتمدها كل أدواته المختلفة.

٣- تحسين عمل أدوات تحرير الصور الحالية وإضافة أدوات جديدة.

٤- إضافة ميزة معاينة المرشحات مباشرة التي نقلت إلى محرك GEGL الجديدة.

GEGL preview curtain - original image by Aryeom Han

٥- تحسين تقنيات الرسم الرقمي بإضافة ميزة الرسم المتناظر وتدوير الرسوم ودعم فرش MyPaint.

٦- دعم هيئات صور جديدة من مثل OpenEXR و RGBE وWebP و HGT.

٧- تحسين دعم البيانات الوصفية وتحريرها.

Metadata Editor

٨- إضافة دعم HiDPI.

٩- سمات جديدة للبرنامج الداكنة والرمادية والفاتحة.

GIMP Icon Themes

١٠- أصبح بالإمكان إضافة قناع لمجموعة من الطبقات.

Mask on a layer group

وغيرها الكثير من المميزات الجديدة التي يمكن الاطلاع عليها هنا.

لتنزيل هذه الإصدارة من هنا.

Fahadالسبت, 2018/04/28 - 11:29ص
disqus
Viewing all 579 articles
Browse latest View live