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

Ola Abbas

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

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

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

كل منشورات العضو Ola Abbas

  1. تشكل حاليًا بيانات الوسائط المتعددة المكونة من الصوت والفيديو والصور الثابتة غالبية حركة المرور على الإنترنت، حيث كان للتقدم الحاصل في تقنية الضغط دورًا في جعل نقل الوسائط المتعددة على نطاقٍ واسع عبر الشبكات ممكنًا. وبما أن بيانات الوسائط المتعددة يستهلكها البشر باستخدام حاستي الرؤية والسمع ويعالجها الدماغ البشري، فهناك تحدياتٌ فريدة لعملية ضغطها، حيث تحاول الاحتفاظ بالمعلومات الأعلى أهمية للإنسان، مع التخلص من أي شيء لا يحسّن إدراك الإنسان للتجربة البصرية أو السمعية، ليأتي دور كلٍّ من علوم الحاسوب ودراسة الإدراك البشري. سنلقي نظرةً في هذا القسم على بعض الجهود الرئيسية في تمثيل بيانات الوسائط المتعددة وضغطها. لا تقتصر استخدامات الضغط على بيانات الوسائط المتعددة بالطبع، فقد تستخدم أداة مساعدة مثل zip أو compress لضغط الملفات قبل إرسالها عبر الشبكة، أو لإلغاء ضغط ملف البيانات بعد التنزيل، وقد اتضح أن التقنيات المستخدمة لضغط البيانات والتي عادةً ما تكون غير فَقودة lossless، لأن معظم الأشخاص لا يحبون فقدان البيانات من ملف، وتظهر أيضًا كأنها جزءٌ من الحل .المطروح لضغط الوسائط المتعددة. لا يَعِد الضغط الفقود lossy compression الذي يشيع استخدامه على بيانات الوسائط المتعددة بأن تكون البيانات المستلمة هي نفسها البيانات المرسلة تمامًا، لأن بيانات الوسائط المتعددة غالبًا تحتوي على معلوماتٍ ذات فائدة قليلة للشخص الذي يستقبلها، حيث يمكن لحواسنا وأدمغتنا فقط إدراك الكثير من التفاصيل، كما أنها جيدة جدًا في ملء الأجزاء المفقودة وحتى تصحيح بعض الأخطاء فيما نراه أو نسمعه. تحقق عادةً الخوارزميات الفَقُودة نسبَ ضغطٍ أفضل بكثير من نظيرتها التي تكون غير فقودة، حيث يمكن أن تكون بمستوى وترتيب أهم من ناحية الحجم. افترض المثال التالي للتعرف على مدى أهمية الضغط في انتشار الوسائط المتعددة المتصلة بالشبكة: تحتوي شاشة التلفاز عالية الدقة على 1080 × 1920 بكسل، ويحتوي كلٌّ منها على 24 بت من معلومات الألوان، لذلك يكون حجم كل إطار هو: 1080 × 1920 × 24 = 50 Mb لذلك فإذا أردت إرسال 24 إطارًا في الثانية، فسيكون ذلك أكثر من 1 جيجابت في الثانية، وهذا أكثر مما يمكن لمعظم مستخدمي الإنترنت الوصول إليه، لكن يمكن لتقنيات الضغط الحديثة الحصول على إشارة HDTV عالية الجودة بدرجة معقولة تصل إلى نطاق 10 ميجابت في الثانية، وهو تخفيضٌ بمقدار درجتين ويكون في متناول معظم مستخدمي النطاق العريض. تنطبق مكاسب الضغط المماثلة على مقاطع الفيديو ذات الجودة المنخفضة مثل مقاطع YouTube، حيث لم يكن من الممكن أن يصل فيديو الويب إلى شعبيته الحالية بدون الضغط لجعل كل مقاطع الفيديو المسلية هذه ملائمةً لحيز النطاق التراسلي لشبكات اليوم. كانت تقنيات الضغط المطبقة على الوسائط المتعددة مجالًا للابتكار ولا سيما الضغط الفقود، وتقنيات الضغط غير الفقودة لها دورٌ مهم أيضًا. تتضمن معظم التقنيات الفقودة بعض الخطوات غير الفقودة، لذلك نبدأ مناقشتنا بنظرة عامة على الضغط غير الفقودة للبيانات. تقنيات الضغط غير الفقودة لا يمكن فصل الضغط عن تشفير البيانات، فعند التفكير في كيفية تشفير جزءٍ من البيانات ضمن مجموعةٍ من البتات، قد نفكر أيضًا في كيفية تشفير البيانات في أصغر مجموعةٍ ممكنة من البتات. إذا كان لديك كتلة بياناتٍ مكونة من 26 رمزًا من A إلى Z على سبيل المثال وكان لكلٍّ من هذه الرموز فرصةٌ متساوية للتواجد في كتلة البيانات التي تشفّرها، فإن تشفير كل رمزٍ ضمن 5 بتات يكون أفضل ما يمكنك فعله بما أن 25 = 32 هي أقل قوةٍ للعدد 2 بعد 26؛ لكن إذا ظهر الرمز R بنسبة 50% من الوقت، فسيكون من الجيد استخدام عددٍ أقل من البتات لتشفير R موازنةً بأي من الرموز الأخرى. إذا عرفت الاحتمال النسبي لظهور كل رمزٍ في البيانات، فيمكنك إسناد عددٍ مختلف من البتات لكل رمزٍ محتمل بطريقةٍ تقلل من عدد البتات اللازمة لتشفير كتلةٍ معينةٍ من البيانات، وهذه هي الفكرة الأساسية لشيفرات هوفمان Huffman codes وهي إحدى أهم التطورات الأولى في ضغط البيانات. تشفير طول التشغيل أسلوب تشفير طول التشغيل Run Length Encoding أو اختصارًا RLE هو أسلوب ضغطٍ يتمتع ببساطة أسلوب القوة القاسية brute-force. الفكرة هي باستبدال التكرارات المتتالية لرمزٍ معين بنسخةٍ واحدةٍ فقط من الرمز بالإضافة إلى عدد مرات ظهور هذا الرمز، ومن هنا أتى اسم طول التشغيل run length. ستُشفَّر السلسلة AAABBCDDDD إلى 3A2B1C4D على سبيل المثال. تبين أن تشفير RLE مفيدٌ لضغط بعض أصناف الصور، حيث يمكن استخدامه من خلال موازنة قيم البكسل المتجاورة ثم تشفير التغييرات فقط، فإن هذه التقنية فعالةً للغاية بالنسبة للصور التي تحتوي على مناطق متجانسة كبيرة، وليس غريبًا أن يحقق RLE نسب ضغطٍ بترتيب 8 إلى 1 للصور النصية الممسوحة ضوئيًا على سبيل المثال. يعمل RLE جيدًا مع مثل هذه الملفات لأنها تحتوي غالبًا على قدرٍ كبير من المساحات الفارغة الممكن إزالتها. كان RLE قديمًا بمثابة خوارزمية الضغط الرئيسية المستخدمة لإرسال الفاكسات. من الممكن أن يؤدي الضغط إلى زيادة حجم بايتات الصورة بالنسبة للصور التي تحتوي على درجةٍ صغيرة من الاختلاف المحلي، نظرًا لأن الأمر يتطلب بايتين لتمثيل رمزٍ واحد عندما لا يتكرر هذا الرمز. تعديل شيفرة النبضات التفاضلية تقنية تعديل شيفرة النبضات التفاضلية Differential Pulse Code Modulation أو اختصارًا DPCM هي خوارزمية ضغطٍ بسيطة أخرى. الفكرة هنا هي إخراج رمز مرجعي reference symbol أولًا ثم إخراج الفرق بين هذا الرمز والرمز المرجعي لكل رمزٍ في البيانات. ستُشفَّر السلسلة AAABBCDDDD باستخدام الرمز A المرجعي على أنها A0001123333 على سبيل المثال لأن الرمز A هو نفس الرمز المرجعي، ويختلف الرمز B عن الرمز المرجعي بمقدار 1، وهلم جرًا. لاحظ أن هذا المثال البسيط لا يوضح الفائدة الحقيقية لخوارزمية DPCM المتمحورة حول امكانية تشفير الاختلافات باستخدام بتاتٍ أقل من الرمز نفسه عندما تكون هذه الاختلافات صغيرة. يمكن تمثيل مجال الاختلافات، الذي هو 0-3، ببتَين لكلٍ منها في هذا المثال بدلًا من 7 أو 8 بتات التي يتطلبها الحرف الكامل، ويُحدَّد رمزٌ مرجعي جديد بمجرد أن يصبح الاختلاف كبيرًا جدًا. تعمل DPCM بصورةٍ أفضل من RLE في معظم الصور الرقمية، لأنها تستفيد من حقيقة أن البكسلات المتجاورة متشابهة عادةً؛ ويمكن بسبب هذه العلاقة أن يكون المجال الديناميكي للاختلافات بين قيم البكسلات المتجاورة أقل بكثيرٍ من النطاق الديناميكي للصورة الأصلية، وبالتالي يمكن تمثيل هذا المجال باستخدام بتاتٍ أقل. كانت قد قيست نسب الضغط من 1.5 إلى 1 على الصور الرقمية باستخدام DPCM. تعمل DPCM أيضًا على الصوت، حيث من الممكن أن تكون العينات المتجاورة لموجة صوتية متقاربة القيمة. تشفّر طريقةٌ مختلفة قليلًا، تسمى تشفير دلتا delta encoding رمزًا على أنه اختلافٌ عن الرمز السابق، وبالتالي سيجري تمثيل السلسلة AAABBCDDDD على أنها A001011000 على سبيل المثال. لاحظ أنه يمكن أن يعمل تشفير دلتا جيدًا لتشفير الصور حيث تتشابه البكسلات المتجاورة، ويمكن أيضًا تنفيذ RLE بعد تشفير دلتا، حيث من الممكن أن نجد سلاسل طويلة مؤلفة من أصفار إذا كان هناك العديد من الرموز المتشابهة بجانب بعضها بعضًا. الطرق القائمة على القاموس الطريقة النهائية للضغط دون فقد التي هي الطريقة القائمة على القاموس Dictionary-Based Methods، وتُعد خوارزمية ضغط Lempel-Ziv أو اختصارًا LZ الأشهر من بينها. تستخدم أوامر يونيكس compress وgzip أنواعًا من خوارزمية LZ. تتمثل فكرة خوارزمية الضغط القائمة على القاموس في إنشاء قاموس (جدول) لسلاسلٍ متغيرة الطول يمكن عدُّها جملًا شائعة تتوقع العثور عليها في البيانات، ثم استبدال كلٍّ من هذه السلاسل عند ظهورها في البيانات مع فهرس القاموس المقابل. يمكنك التعامل مع كل كلمة على أنها سلسلة وإخراج الدليلindex المقابل في القاموس لتلك الكلمة بدلًا من العمل مع كل حرفٍ في البيانات النصية على سبيل المثال. افرض أن للكلمة compression دليلٌ هو 4978 في قاموسٍ واحد معين، أي أنها الكلمة رقم 4978 في /usr/share/dict/words. لضغط النص، سنستبدل السلسلة "compression" بالفهرس 4978 في كل مرةٍ تظهر فيها هذه السلسلة. بما أن هذا القاموس المعين يحتوي على ما يزيد عن 25000 كلمة فيه، فقد يحتاج تشفير الفهرس 15 بتًا، مما يعني أن السلسلة "compression" يمكن تمثيلها في 15 بتًا بدلًا من 77 بت التي يتطلبها ASCII ذو 7 بتات، وهذه نسبة ضغط من 5 إلى 1. تمكنّا من الحصول على نسبة ضغط 2 إلى 1 في مكانٍ آخر عندما طبقنا الأمر compress على الشيفرة المصدرية للبروتوكولات الموضحة في هذا الكتاب. وهذا يدفعنا للتساؤل عن مصدر القاموس. أحد الخيارات هو تحديد قاموس ثابت، ويفضل أن يكون قاموسًا مُصممًا للبيانات المضغوطة. والحل الأعم الذي يستخدمه ضغط LZ هو تعريف القاموس تكيُّفيًا بناءً على محتويات البيانات التي يجري ضغطها، ولكن يجب في هذه الحالة إرسال القاموس المُنشَأ أثناء الضغط مع البيانات حتى يتمكن جزء فك الضغط من الخوارزمية من اتمام عمله. تمثيل الصور وضغطها باستخدام GIF وJPEG تُستخدَم الصور الرقمية في كل مكان، حيث نشأ هذا الاستخدام عن طريق اختراع العروض الرسومية graphical displays وليس عن طريق الشبكات عالية السرعة، فأصبحت الحاجة إلى صيغ التمثيل القياسية وخوارزميات الضغط لبيانات الصور الرقمية ضرورية. حددت منظمة ISO استجابةً لهذه الحاجة صيغة صورةٍ رقمية تُعرف باسم JPEG، سُميت باسم المجموعة المشتركة لخبراء التصوير Joint Photographic Experts Group التي صممتها. يشير "Joint" في JPEG إلى جهدٍ مشترك بين منظمتي ISO / ITU. صيغة JPEG هي النوع الأكثر استخدامًا للصور الثابتة المستخدمة اليوم، وتظهر العديد من التقنيات المستخدمة في JPEG أيضًا في MPEG، وهي مجموعة معايير ضغط الفيديو ونقله أنشأتها مجموعة خبراء الصور المتحركة Moving Picture Experts Group. نلاحظ أن هناك خطواتٍ قليلة جدًا قبل الخوض في تفاصيل JPEG للانتقال من صورةٍ رقمية إلى تمثيلٍ مضغوط لتلك الصورة التي يمكن نقلها وفك ضغطها وعرضها بصورةٍ صحيحة بواسطة المستقبل. تتكون الصور الرقمية من بكسلات ولأجل ذلك تُذكر الميجابكسلات في إعلانات كاميرا الهاتف الذكي. يمثل كل بكسل موقعًا واحدًا في الشبكة ثنائية الأبعاد التي تتكون منها الصورة، ويكون لكل بكسل قيمة رقمية تمثل لونًا بالنسبة للصور الملونة. هناك العديد من الطرق لتمثيل الألوان يشار إليها باسم فضاءات اللون color spaces، وأكثر ما يعرفه الناس هو RGB (أحمر، أخضر، أزرق). يمكنك التفكير في اللون على أنه كمية ثلاثية الأبعاد، حيث يمكنك صنع أي لون من الضوء الأحمر والأخضر والأزرق بكمياتٍ مختلفة. هناك العديد من الطرق الصحيحة المختلفة لوصف نقطةٍ معينة في الفضاء ثلاثي الأبعاد بافتراض الإحداثيات الديكارتية والقطبية على سبيل المثال، وهناك طرقٌ مختلفة لوصف اللون باستخدام ثلاث كميات، وبديل RGB الأكثر شيوعًا هو YUV، حيث تمثل Y السطوع luminance أي تقريبًا السطوع الكلي للبكسل، ويتضمن U وV التشبّع اللوني chrominance أو معلومات اللون. هناك عددٌ قليل من التفاوتات المختلفة لفضاء اللون YUV أيضًا. تكمن أهمية هذه المناقشة في أن تشفير الصور الملونة ونقلها سواءٌ كانت ثابتة أو متحركة يتطلب اتفاقًا بين الطرفين على فضاء اللون، وإلا فسينتهي بك الأمر مع ألوانٍ مختلفةٍ يعرضها المستقبل عن الألوان التي التقطها المرسل. إن الاتفاق على تعريف فضاء أو مساحة اللون وربما طريقة للإبلاغ عن المساحة المُخصصة المستخدمة، هو جزءٌ من تعريف أي صورة أو تنسيق فيديو. لنلق نظرةً على مثال تنسيق تبادل الرسوميات Graphical Interchange Format أو اختصارًا GIF. يستخدم GIF فضاء ألوان RGB ويبدأ بتمثيل 8 بتات لكلٍّ بعدٍ من أبعاد اللون الثلاثة بإجمالي 24 بتًا. يقلل GIF أولًا من الصور الملونة 24 بت إلى صورٍ ملونة 8 بت بدلًا من إرسال 24 بت لكل بكسل، وذلك عن طريق تحديد الألوان المستخدمة في الصورة والتي سيكون عددها عادةً أقل من 224 لونًا، ثم اختيار 256 لونًا التي تقترب من الألوان المستخدمة في الصورة؛ لكن قد يكون هناك أكثر من 256 لونًا، لذا تكمن الحيلة في محاولة عدم تشويه اللون كثيرًا عن طريق اختيار 256 لونًا بحيث لا يتغير لون البكسل كثيرًا. يجري تخزين 256 لونًا في جدول يمكن فهرسته في رقمٍ مؤلفٍ من 8 بتات، وتُستبدَل قيمة كل بكسل بالفهرس المناسب. لاحظ أن هذا مثال على ضغطٍ مع فقد لأية صورةٍ تحتوي على أكثر من 256 لونًا. يشغّل GIF بعد ذلك LZ على النتيجة، حيث يتعامل مع التسلسلات الشائعة من البكسلات على أنها السلاسل التي يتكون منها القاموس وهي عمليةٌ بلا فقد. يكون GIF باستخدام هذا الأسلوب أحيانًا قادرًا على تحقيق نسب ضغط من رتبة 1:10، ولكن فقط عندما تتكون الصورة من عددٍ صغير نسبيًا من الألوان المنفصلة. يجري التعامل مع الشعارات الرسومية على سبيل المثال جيدًا بواسطة GIF، بينما لا يمكن ضغط صور المشاهد الطبيعية والتي غالبًا ما تتضمن طيفًا أكثر استمرارية من الألوان بهذه النسبة باستخدام GIF، كما أنه من السهل على العين البشرية اكتشاف التشوه الناجم عن تقليل لون GIF المفقود في بعض الحالات. تُعَد صيغة JPEG أكثر ملاءمةً للصور الفوتوغرافية، حيث لا تقلل JPEG من عدد الألوان مثل GIF، لكنها تحول ألوان RGB التي تحصل عليها عادةً من الكاميرا الرقمية إلى فضاء YUV بدلًا من ذلك. يعود السبب وراء ذلك بالطريقة التي ترى بها العين الصور، فهناك مستقبلاتٌ في العين للسطوع، ومستقبلاتٌ أخرى للون، وبما أننا بارعون جدًا في إدراك الاختلافات في السطوع، فمن المنطقي إنفاق المزيد من البتات على نقل معلومات السطوع. إن المكون Y لفضاء YUV هو تقريبًا سطوع brightness البكسل، لذلك يمكننا ضغط هذا المكوّن بصورةٍ منفصلة، وأقل قوةً من المكونين الآخرين أي التشبع اللوني chrominance. تُعد YUV وRGB طرقًا بديلة لوصف نقطة في فضاءٍ ثلاثي الأبعاد، ومن الممكن التحويل من فضاءٍ لوني إلى آخر باستخدام المعادلات الخطية، حيث تكون المعادلات بالنسبة لفضاء YUV شائع الاستخدام لتمثيل الصور الرقمية هي: Y = 0.299R + 0.587G + 0.114B U = (B-Y) x 0.565 V = (R-Y) x 0.713 القيم الدقيقة للثوابت هنا غير مهمة طالما أن المشفر وجهاز فك التشفير يتفقان على ماهيتها. سيتعين على وحدة فك التشفير تطبيق التحويلات العكسية لاستعادة مكونات RGB اللازمة لتشغيل العرض، ولكن يجري اختيار الثوابت بعناية بناءً على الإدراك البشري للون. يمكنك أن ترى أن السطوع Y هو مجموع مكونات الأحمر والأخضر والأزرق، بينما U وV هما مكونان لاختلاف اللون، حيث يمثل U الفرق بين السطوع والأزرق، ويمثل V الفرق بين السطوع والأحمر. قد تلاحظ أن ضبط R وG وB على قيمها القصوى والتي ستكون 255 لتمثيلات 8 بتات سيؤدي أيضًا إلى إنتاج قيمة Y = 255 بينما سيكون U وV في هذه الحالة صفرًا. أي أن البكسل الأبيض بالكامل هو (255,255,255) في فضاء RGB و(255,0,0) في فضاء YUV. يمكننا الآن التفكير في ضغط كل مكونٍ من المكونات الثلاثة على حدة بمجرد تحويل الصورة إلى فضاء YUV. نريد أن نكون أقوى في ضغط مكونات U وV، حيث تكون عيون الإنسان أقل حساسية. هناك طريقةٌ واحدةٌ لضغط مكونات U وV وهي أخذ عينةٍ فرعيةٍ منها، حيث تتمحور الفكرة الأساسية لأخذ العينات الفرعية في أخذ عددٍ من البكسلات المتجاورة، وحساب متوسط قيمة U أو V لتلك المجموعة من البكسلات ونقل ذلك بدلًا من إرسال القيمة لكل بكسل، حيث يوضح الشكل السابق هذه النقطة. لا تُؤخذ عينات من مكون السطوع Y، لذلك ستُرسَل قيمة Y لجميع البكسلات، كما هو موضحٌ من خلال شبكة 16 × 16 بكسل على يسار الشكل السابق. نتعامل مع كل أربعة بكسلات متجاورة على أنها مجموعة group في حالة U وV، ونحسب متوسط قيمة U أو V لتلك المجموعة ونرسلها. وبالتالي ننتهي مع شبكة 8 × 8 من قيم U وV جاهزة للإرسال. وهكذا نرسل ست قيم (أربع قيم Y وقيمة لكلٍ من U وV) لكل أربعة بكسلات في هذا المثال بدلًا من القيم الأصلية الاثني عشر (أربع قيم لكلٍ من المكونات الثلاثة)، لتقليل المعلومات بنسبة 50%. من الجدير بالذكر أنه يمكن أن نكون أكثر أو أقل قوةً عند أخذ العينة الفرعية، مع الزيادات المقابلة في الضغط وانخفاض الجودة. تحدث طريقة أخذ العينات الفرعية الموضحة هنا، والتي يجري فيها أخذ عيناتٍ فرعية من التشبع اللوني بعامل اثنين في كلا الاتجاهين الأفقي والشاقولي وذلك من خلال التعريف 4:2:0، لمطابقة النهج الأكثر شيوعًا المستخدم لكلٍ من JPEG وMPEG. أصبح لدينا الآن ثلاث شبكات من البكسلات للتعامل معها بمجرد الانتهاء من أخذ العينات الفرعية، ونتعامل مع كل شبكةٍ على حدة. يحدث ضغط JPEG لكل مكونٍ على ثلاث مراحل كما هو موضح في الشكل السابق. يجري تغذية الصورة من جهة الضغط من خلال هذه المراحل الثلاث وكتلة واحدة 8 × 8 في كل مرة. تطبّق المرحلة الأولى تحويل جيب التمام المتقطّع discrete cosine transform أو اختصارًا DCT على الكتلة. إذا افترضنا أن الصورة إشارةٌ signal في النطاق المكاني، فسيحوّل DCT هذه الإشارة إلى إشارةٍ مكافِئة في نطاق التردد المكاني، وهذه عملية دون فقد ولكنها تمهيدٌ ضروري للخطوة التالية، التي هي عملية مع فقد. تطبِّق المرحلة الثانية تحويلًا كميًّا أو ما يسمّى تكميمًا quantization على الإشارة الناتجة بعد DCT، وبذلك تُفقَد المعلومات الأقل أهميةً والموجودة في تلك الإشارة. تشفّر المرحلة الثالثة النتيجة النهائية، ولكنها تضيف أيضًا عنصر الضغط بدون فقد إلى الضغط مع فقد الذي تحقق في المرحلتين الأوليتين. يتّبع فك الضغط هذه المراحل الثلاث نفسها، ولكن بترتيب عكسي. مرحلة DCT تحويل DCT هو تحويل وثيق الصلة بتحويل فورييه السريع fast Fourier transform أو اختصارًا FFT، حيث يأخذ مصفوفة دخل 8 × 8 من قيم البكسلات ويخرج مصفوفة 8 × 8 بمعاملات التردد. يمكنك التفكير في مصفوفة الإدخال على أنها إشارةٌ من 64 نقطةٍ محددة في بعدين مكانيين (x وy)، حيث تقسّم تقنية DCT هذه الإشارة إلى 64 ترددًا مكانيًا. للحصول على فهمٍ أوسع للتردد المكاني، تخيل نفسك تتحرك عبر صورة في الاتجاه x على سبيل المثال، حيث سترى قيمة كل بكسل تتغير مع بعض دوال x؛ فإذا تغيرت هذه القيمة ببطء مع زيادة x فإن لها ترددًا مكانيًا منخفضًا؛ وإذا تغيرت بسرعة، فسيكون لها ترددًا مكانيًا عاليًا. لذا فإن الترددات المنخفضة تتوافق مع السمات الإجمالية للصورة، بينما تتوافق الترددات العالية مع التفاصيل الدقيقة. تكمن الفكرة وراء DCT في فصل الميزات الإجمالية الضرورية لمشاهدة الصورة عن التفاصيل الدقيقة الأقل أهمية والتي بالكاد تدركها العين في بعض الحالات. يُعرَّف DCT الذي يستعيد البكسلات الأصلية أثناء فك الضغط بالصيغ التالية جنبًا إلى جنب مع معكوسه: حيث تكون C(x)=1/2 عندما x = 0 وC(x)=1 عندما x > 0 وpixel(x,y) هي قيمة التدرج الرمادي للبكسل في الموضع (x , y) في كتلة 8 × 8 التي يجري ضغطها، وN = 8 في هذه الحالة. يُسمى معامل التردد الأول في الموقع (0,0) في مصفوفة الخرج بمعامل DC أو DC coefficient. يمكننا أن نرى أن معامل DC هو مقياسٌ لمتوسط قيمة 64 بكسل دخل. تسمى العناصر 63 الأخرى في مصفوفة المخرجات معاملات AC التي تضيف معلومات التردد المكاني الأعلى إلى هذه القيمة المتوسطة. وهكذا عند انتقالك من معامل التردد الأول نحو معامل التردد 64، فإنك تنتقل من المعلومات منخفضة التردد إلى المعلومات عالية التردد، من الخطوط العريضة للصورة إلى التفاصيل الدقيقة ثم الأدق. هذه المعاملات ذات التردد العالي غير مهمة بصورةٍ متزايدة للجودة المحسوسة للصورة. تقرر المرحلة الثانية من JPEG أي جزءٍ من المعاملات يجب التخلص منه. مرحلة التكميم المرحلة الثانية من JPEG هي التكميم Quantization حيث يصبح الضغط مع فقد lossy.تحويل DCT بحد ذاته لا يفقد المعلومات، حيث يحوّل الصورة إلى نموذجٍٍ يسهل معرفة المعلومات المراد إزالتها؛ وعلى الرغم من أنه لا يحوي فقدًا، لكن يوجد بالطبع بعض الفقد أثناء مرحلة DCT بسبب استخدام حساب النقطة الثابتة. التكميم ببساطة مسألة إسقاط بتات معاملات التردد غير المهمة. لمعرفة كيفية عمل مرحلة التكميم، تخيل أنك تريد ضغط بعض الأعداد الصحيحة الأقل من 100، مثل 45 و98 و23 و66 و7، فإذا قررت أن معرفة هذه الأرقام المقتطعةٌ إلى أقرب مضاعف للعدد 10 كافيةٌ بالنسبة لك، فيمكنك بعد ذلك قسمة كل رقم على الكم quantum الذي هو 10 باستخدام حساب العدد الصحيح، مما ينتج عنه 4 و9 و2 و6 و0، ويمكن تشفير هذه الأرقام في 4 بتات بدلًا من 7 بتات اللازمة لتشفير الأرقام الأصلية. table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } الكم Quantum 3 5 7 9 11 13 15 17 5 7 9 11 13 15 17 19 7 9 11 13 15 17 19 11 9 11 13 15 17 19 21 23 11 13 15 17 19 21 23 25 13 15 17 19 21 23 25 27 15 17 19 21 23 25 27 29 17 19 21 23 25 27 29 31 يستخدم JPEG جدول تكميم quantization table يعطي الكم المُستخدم من أجل كلٍ من المعاملات بدلًا من استخدام نفس الكم لجميع المعاملات التي عددها 64، كما هو محدد في الصيغة الواردة أدناه. يمكنك التفكير في Quantum في هذا الجدول على أنه معاملٌ يمكن ضبطه للتحكم في مقدار المعلومات المفقودة وبالتالي مقدار الضغط المُحقَّق. يحدد معيار JPEG عمليًا مجموعةً من جداول التكميم التي أثبتت فعاليتها في ضغط الصور الرقمية، وقد ورد مثالٌ لجدول تكميم في الجدول السابق. يكون للمعاملات المنخفضة كمٌّ قريبٌ من 1 في جداول مثل الجدول السابق مما يعني فقدان القليل من المعلومات منخفضة التردد، ويكون للمعاملات العالية قيمٌ أكبر مما يعني فقدان المزيد من معلومات الترددات العالية. تصبح قيم العديد من المعاملات عالية التردد صفرًا بعد التكميم نتيجة لجداول التكميم هذه، مما يجعلها مستعدةً لمزيدٍ من الضغط في المرحلة الثالثة. معادلة التكميم الأساسية هي: QuantizedValue(i,j) = IntegerRound(DCT(i,j), Quantum(i,j)) حيث: IntegerRound(x) = Floor(x + 0.5) if x >= 0 Floor(x - 0.5) if x < 0 ثم يُعرَّف فك الضغط Decompression ببساطة كما يلي: DCT(i,j) = QuantizedValue(i,j) x Quantum(i,j) إذا كان معامل DC أي DCT(0,0) لكتلةٍ معينة يساوي 25 على سبيل المثال، فسينتج عن تكميم هذه القيمة باستخدام الجدول السابق: Floor(25/3+0.5) = 8 ستجري بعد ذلك استعادة هذا المعامل أثناء فك الضغط ليصبح 8 × 3 = 24. مرحلة التشفير تشفّر المرحلةُ الأخيرة من JPEG معاملات التردد الكمومية في نموذجٍ مضغوط، فينتج عن ذلك ضغطٌ إضافي لكنه ضغطٌ بدون فقد. تُعالَج المعاملات بدءًا من معامل DC في الموضع (0,0) في تسلسل متعرّج zigzag كما هو موضحٌ في الشكل التالي. ويُستخدَم نموذجُ من تشفير طول التشغيل run length encoding على طول هذا التسلسل المتعرج، حيث يبقي RLE على المعاملات 0 فقط، وهو أمرٌ مهم لأن العديد من المعاملات اللاحقة تساوي 0، ثم تُشفَّر قيم المعامل الفردية باستخدام شيفرة هوفمان. يسمح معيار JPEG للمنفّذ باستخدام الترميز الحسابي بدلًا من شيفرة هوفمان. بما أن معامل DC يحتوي على نسبةٍ كبيرة من المعلومات حول كتلة 8 × 8 من الصورة المصدر، وتتغير عادةً الصور ببطء من كتلةٍ إلى أخرى، لذلك يُشفَّر كل معامل DC على أنه الاختلاف عن معامل DC السابق، ويسمى هذا الأسلوب بأسلوب تشفير دلتا. تتضمن JPEG عددًا من التغيرات التي تتحكم في مقدار الضغط الذي تحققه مقابل دقة الصورة، ويمكن فعل ذلك باستخدام جداول تكميمٍ مختلفة على سبيل المثال. تجعل هذه الاختلافات إضافةً إلى حقيقة أن الصور المختلفة لها خصائص مختلفة تحديد نسب الضغط الممكن تحقيقها باستخدام JPEG بدقة أمرًا مستحيلًا. تُعَد النسبة 30:1 شائعة، ومن المؤكد أن النسب الأعلى ممكنة، لكن ستصبح التشوهات الصنعية artifacts أي التشوهات الملحوظة بسبب الضغط أكثر حدةً عند النسب الأعلى. ترجمة -وبتصرّف- للقسم Multimedia Data من فصل End-to-End Data من كتاب Computer Networks: A Systems Approach اقرأ أيضًا التوجيه Routing بين الأجهزة المتنقلة في الشبكات الحاسوبية بروتوكولات طرف إلى طرف End-to-End Protocols في الشبكات الحاسوبية المقال السابق: بيانات شبكات طرف إلى طرف الحاسوبية
  2. يزوّد نظام مكونات A‎dobe X‎D المصممين بميزات لإنشاء نماذج أولية prototype للمنتجات الرقمية، ولكنه لا يخلو من الحالات التي تحتاج معاملةً خاصة. سيؤدي استخدام الاختصارات الذكية واتباع أفضل الممارسات إلى تمكين المصممين من تبسيط سير عمل نماذج X‎D الأولية الخاصة بهم. تطوّر Adobe X‎D منذ طرحه رسميًا في أواخر عام 2017 بخطوات كبيرة، بحيث أصبح أداة تخطيط شبكي وإنشاء نماذج أولية عالية التنافسية لمصممي تجربة المستخدم UX، إذ يوسّع نظام المكونات الجديد في Adobe X‎D نوع التفاعلات التي يمكن للمصممين تجربتها، ولكن هذه المكونات لا تخلو من العيوب. يفيد اعتماد مجموعة من ممارسات سير العمل لتجنب الهدر واستخدام إمكانات النظام الكاملة عند العمل مع مكونات X‎D. مكونات Adobe X‎D مكونات X‎D هي مجموعات من العناصر التي يمكن إعادة استخدامها مثل النصوص أو الأشكال أو الخطوط. يحتوي كل مكون على مكون رئيسي Main Component يعمل كأب، وآخر نسخ instances أو أولاد تُوضَع على لوحة الرسم، حيث تنتشر التغييرات في جميع النسخ عند تغيير المكون الرئيسي. بديل نظام الرموز symbol السابق في X‎D والذي يؤدّي غرضًا مشابهًا هو أن تقدّم المكونات أداة تمييز رئيسية key differentiator، حيث يمكن أن يكون لهذه المكونات حالات states متعددة تستجيب لمدخلات مختلفة محددة في وضع نموذج X‎D الأولي. يمكن أن يكون للزر مثلًا حالة افتراضية ولكنه يغيّر مظهره في حالة المرور فوق hover أو النقر clicked فوقه، أو يمكنه تشغيل صوت عند النقر عليه أو تغيير مظهره وفقًا للمدخلات من خلال تمييز الكلام speech recognition. يُعَد نظام المكونات موفّرًا للوقت، ولكنه يتطلب معاملةً خاصة، لذلك يجب اتباع نهج مدروس وسير عمل مُعَدّ بعناية لزيادة قوة النظام. توسّع إضافة المكونات إمكانات إنشاء نماذج Adobe X‎D الأولية نصائح للإلمام ببرنامج Adobe X‎D سيستفيد المصممون الذين يتمتعون بدرجة معقولة من الإلمام ببرنامج Adobe X‎D بأكبر قدر ممكن من النصائح والاقتراحات أدناه. نزّل أولًا أدوات تصميم Adobe XD Design Kit من الصفحة الرئيسية لمواد التصميم Material Design الخاصة بجوجل Google، حيث ستوفر هذه الأدوات مجموعة مكونات Adobe X‎D لتجربتها وتحليلها بالتفكيك deconstruct. نصيحة رقم 1: ضع في حساباتك جميع الحالات قبل إنشاء مكون يجب على المصممين عند إنشاء مكونٍ ذي حالات لأول مرة فهم كيفية تأثير تغييرات أحد المكونات المحتمَلة على نسخٍ أخرى. لنفترض قائمةً منسدلةً ذات حالات متعددة هي الآتية: الحالة الافتراضية default state: القائمة مطوية. حالة المرور فوقها hover state: قد يتغير لون حدود القائمة عندما يكون المؤشر فوقها. حالة توسعة القائمة والنقر عليها expanded, clicked state: تظهر خيارات القائمة المنسدلة. إنشاء وتسمية واختيار حالات المكونات في الشريط الجانبي إذا عُدِّلت الحالة الافتراضية للنسخة الابن من القائمة المنسدلة، فلن تُنشَر هذه التغييرات إلى حالتَي الحومان hover أو النقر clicked، إذ يجب إجراء التغييرات على الحالة الافتراضية في المكون الرئيسي لتحديث حالتي المرور فوق أو النقر لكل النسخ. قد يكون الانتقال إلى المكونات الرئيسية وتكرارها أمرًا جذابًا، ولكن قد تحدث مشكلات غير متوقعة في بعض الأحيان بسبب الاختلافات في كيفية تصرف المكونات الرئيسية والمكونات الأبناء. من الممارسات الجيدة، النظر في كل ما هو مطلوب في حالة المكون الرئيسي الافتراضية وتوقّعها قبل إضافة حالات أخرى أو إنشاء نسخٍ من المكون، ويمكن الذهاب إلى أبعد من وضع الحالات المختلفة جنبًا إلى جنب. يجب على المصممين أن يضعوا في حساباتهم أنه يمكنهم إضافة العناصر وتغييرها في الحالات غير الافتراضية للمكون الرئيسي أو النسخ الأبناء دون التأثير على الحالة الافتراضية، ولكن العكس ليس صحيحًا. يمكن فحص المكونات بالتفصيل في لوحة Assets نصيحة رقم 2: سم المكونات عند إنشائها يؤدّي إنشاء مكون -من خلال النقر بزر الفأرة الأيمن فوق عنصر، ثم تحديد الخيار Make Component من القائمة، أو الضغط على Cmd-K على جهاز Mac أو Ctrl-K على نظام ويندوز- إلى إضافة المكون إلى لوحة Assets في الشريط الجانبي الأيسر. سيعطي X‎D للمكون اسمًا افتراضيًا هو Component XX، حيث أن XX يُعَد عددًا، إذ لا يصِف هذا الاسم المكونَ جيدًا، لذلك يُفضَّل إعطاؤه اسمًا فريدًا وقابلًا للبحث، حيث سيصبح هذا الأمر غير عملي إذا بدأت جميع المكونات بالاسم الافتراضي نفسه مع عددٍ لا معنى له عند امتلاء قائمة المكونات. قد يساعد خيار العرض tile view في ذلك، ولكنه لا يحتوي على تسميات نصية، مما يجعل التحديد المرئي بطيئًا وصعبًا. كما أن عرض القائمة list view مع الصور المصغَّرة الصغيرة يصعّب تحديد الاختلافات بين المكونات ذات الأسماء غير القابلة للفهم. يمكن أن تضيع المكونات، وبالتالي فإنّ جعلها قابلةً للبحث عن طريق تسميتها سيوفّر الوقت لاحقًا. يمكن تنظيم مكونات X‎D وإعادة تسميتها من لوحة Assets نصيحة رقم 3: نظم المكونات الرئيسية يُعَد وضع المكون الرئيسي على لوحة الرسم بطريقة عشوائية أمرًا سهلًا عند إنشاء مكون. يوفّر X‎D أدوات للعثور على المكونات الرئيسية إما عن طريق البحث في لوحة Assets أو النقر بزر الفأرة الأيمن وتحديد تحرير المكون الرئيسي Edit Main Component من النسخة الابن، ولكن يُعَد إجراء تغييرات غير مقصودة على المكون الرئيسي مع الاعتقاد بأنه نسخة أمرًا سهلًا، ولكن قد يؤدي تطبيق ذلك إلى العديد من التغييرات غير المرغوب فيها عبر لوحات الرسم المتعددة. قد يكون هناك عدد قليل فقط من نسخ المكونات على لوحة الرسم، ولكن يمكن أن تخرج الأمور عن السيطرة بمجرد استنساخ لوحة الرسم، كما يمكن أن يؤدي التغيير غير المقصود للمكون الرئيسي إلى زيادة وقت التنظيف cleanup time الذي كان تجنّبه أمرًا ممكنًا. يُفضَّل التعود على عادة نقل المكونات الرئيسية من لوحات الرسم الخاصة بالتصميم فور إنشائها، حيث تتمثّل الطريقة المثالية لتطبيق ذلك في وضع المكونات الرئيسية على لوحة اللصق pasteboard في ملف X‎D أو على لوحات رسم مخصصة ومحدَّدة بوضوح، مما يؤدي إلى جعل الأشياء أكثر كفاءة لاحقًا. تُعَد تسمية الطبقات بعناية أمرًا أساسيًا، لأن استخدام انتقالات الحركة التلقائية تعتمد عليها كثيرًا نصيحة رقم 4 ابق منظما مع لوحة الطبقات من السهل تجربة الأفكار على لوحة الرسم والدخول في تدفق تجميع أو فك تجميع المكونات وتغيير خصائص حالات المكونات. قد ترغب في تصغير الشريط الجانبي الأيسر لتوفير مساحة عمل أكبر، ولكن هناك فرصة كبيرة بألّا تتصرّف حالات وانتقالات المكون بالشكل المتوقع ضمن موجة التكرارات، وقد يحدث ذلك بسبب انحراف تنظيم العناصر الفرعية وتجميعها، مثل الأشكال أو الرسوم المتجهة vectors أو النصوص، بعيدًا عما يجب أن تكون عليه الانتقالات لتعمل بالصورة الصحيحة. يوفّر عرض الطبقة Layer شفافيةً بنسبة 100% من ناحية التسلسل الهرمي وتسمية العناصر، كما أن تنظيمه المحكم أمر أساسي. يتطلب استخدام انتقال الحركة التلقائية Auto-Animate القوية في X‎D بين الحالات أن يكون للعناصر الاسم والموضع نفسه في تسلسل طبقة المكون الهرمي، وإلا فسيجري الانتقال افتراضيًا إلى التلاشي بدلًا من الانتقال من خلال الحركات التلقائية الجذابة. يُستحسَن في بعض الأحيان منع استكمال خاصية عند انتقالات الحركة التلقائية، من خلال تمكين المصممين من إعادة تسمية عنصر في حالة مكوِّن أو لوحة رسم مختلفة لكسر الارتباط المستند إلى الاسم. يمكن في كلتا الحالتين استخدام عرض الطبقات لاستكشاف الأخطاء وإصلاحها عند ظهور مشاكل غير متوقعة، إذ يجب أن تكون الخطوة الأولى عند تنقيح أخطاء إنشاء النماذج الأولية، سواءً في حالة الانتقال بين حالات المكون أو بين لوحات الرسم. لوحة الطبقات Layers في Adobe X‎D نصيحة رقم 5: استخدم تلاشي ألفا Alpha Fading لاستكمال الألوان تُعَد الحركة التلقائية Auto-Animate إضافةً ممتازة إلى X‎D، ولكنها تأتي مع بعض القيود والخصوصيات التي تتوضّح عند تغيير لون عنصر بين حالتي مكون أو بين لوحتي رسم باستخدام الحركة التلقائية، حيث يتغير اللون فجأةً عند الاختبار بدلًا من الاستكمال السلس بين اللونين. الحل الحالي لهذه المشكلة صعب قليلًا وله تداعيات تؤثر على كيفية تنظيم حالات المكونات الرئيسية، إذ ينطوي هذا الحل على إضافة كائنين بألوان مختلفة بدلًا من كائن واحد، ثم تطبيق تلاشي ألفا على الكائنين في كلتا الحالتين لتحقيق انتقال سلس. قد ينجح انتقال التلاشي الافتراضي، ولكنه قد لا يكون كافيًا إذا استخدم استكمال الأشكال والأحجام الحركة التلقائية. كيفية تلاشي الألوان الصحيح باستخدام الحركة التلقائية في X‎D نصيحة رقم 6: استفد من المكونات في شبكة التكرار Repeat Grid تُعَد شبكة التكرار Repeat Grid ميزةً أخرى ممتازةً لتوفير الوقت في X‎D التي تسهّل تنظيم مصفوفات العناصر المتشابهة وتحافظ عليها. تمتلك شبكات التكرار مثل المكونات علاقةً هرمية، حيث يكون العنصر الأول في الزاوية اليسرى العلوية في الشبكة هو العنصر الأب الذي يحدد خصائص العناصر الأبناء، وهناك استثناءات بالتأكيد مثل الصور النقطية bitmaps والسلاسل النصية التي تكون فريدة للعنصر الابن، ولكن ليست خصائص النص كذلك. تتغير الأمور عند استخدام المكونات داخل شبكات التكرار Repeat Grids، حيث تنتشر التغييرات التي أُجريت على العنصر الأب إلى أبنائه على الفور. ولا تنتشر تغييرات المكون الرئيسي إلّا إلى العناصر الأبناء في شبكة التكرار إن لم تكن هناك تجاوزات للخاصية المحلية، أي يؤدي تغيير خاصية المكون في الشبكة إلى قفلها من أجل ألّا تنتشر التغييرات من المكون الرئيسي. تُقفَل خاصية اللون المحلي داخل مكون نسخة ابن في شبكة التكرار Repeat Grid، ولكن لا يُقفَل الحجم يمكن نشر التغييرات من المكون الأب الموجود في شبكة التكرار من خلال تصغير حجم الشبكة ليناسب الأب فقط، مما يؤدي إلى إزالة أبنائه، بعدها يمكنك سحب المقابض إلى الأبعاد المرغوبة لتحديث الأبناء. تُقفَل خاصية اللون المحلي داخل مكون نسخة ابن في شبكة التكرار Repeat Grid، ولكن لا يُقفَل الحجم إن تمكّن المصممون من التغلب على خصائص المكونات وشبكات التكرار، فيمكن أن يكون الجمع بينها قويًا. النصيحة رقم 7: افترض أن انتقالات حالة المكون المستندة إلى الوقت غير موجودة حاليا إذا طبّقنا انتقالات بين لوحات الرسم باستخدام التأخيرات المستندة إلى الوقت (وليس بناءً على الدخل)، فيمكنك افتراض توفّر الشيء نفسه بين حالات المكون، ولكن يجب أن تستند جميع تغييرات الحالة القائمة على المكون إلى مدخلات المستخدم أو إلى التفاعلات في وضع النموذج الأولي دون الاستناد إلى الوقت. توجد الانتقالات المستندة إلى الوقت بين لوحات الرسم فقط، ولا توجد بين حالات المكون نصيحة رقم 8: كن دقيقا عند استنساخ تسلسلات المكونات الرئيسية الهرمية قد لا يواجه مصممو X‎D كثيرًا هذه الحالة ولكن يجب أن يكونوا على دراية بها. لنفترض احتياج المكون الرئيسي إلى حالة لا تزال تحتفظ بجودة واحد إلى متعدد one-to-many الخاصة بالأبناء التي ترث الخصائص، ولكنها لا تؤثر على أي مكونات أبناء موجودة مسبقًا. يمكنك إنشاء تسلسل هرمي جديد للمكوِّن الرئيسي من خلال فك تجميع أحد المكونات المنسوخة وإعادة بنائها من البداية. ستفقد مكونات فك التجميع جميع الحالات وخصائص الانتقال المضبوطة في وضع النموذج الأولي، ولكن يمكنك حل هذه المشكلة كما يلي: استنسخ نسخةً من المكون لكل حالة فيه. اضبط حالة كل نسخة على حالة مختلفة. فك تجميع كل نسخة مكون. ابدأ في إجراء التعديلات والتغييرات المرغوبة على كل نسخة مكون. أعِد إنشاء المكون الرئيسي الجديد. انتقل إلى وضع النموذج الأولي وأعِد إنشاء التفاعلات وأنواع الانتقال المضبوطة مسبقًا. قد يكون خيار التكرار duplicate مفيدًا عند النقر بزر الفأرة الأيمن على أحد المكونات مقومات النجاح للنماذج الأولية باستخدام مكونات Adobe X‎D أجرى برنامج Adobe X‎D تحسينات كبيرة على العمليات والأدوات في السنوات القليلة الماضية، إذ تطوّر بسرعة ليصبح بديلًا تنافسيًا لبرنامج سكيتش Sketch وأدوات إنشاء النماذج الأولية الأخرى، ويُحتمَل أن تكون هناك العديد من التحسينات الأخرى القادمة استنادًا إلى كيفية تطوره منذ بدايته. يتمتّع نظام مكونات Adobe X‎D بإمكانات ممتازة لتحسين وتوسيع أنواع التفاعلات التي يمكن للمصممين إنشاؤها. فيما يلي بعض النقاط الرئيسية التي يجب وضعها في الحسبان: افهم كيفية انتشار التغييرات بين المكونات الرئيسية والنسخ الأبناء. كن على دراية بكيفية تفاعل المكونات مع ميزات Adobe X‎D الأخرى، مثل الحركة التلقائية Auto-Animate وشبكة التكرار Repeat Grid. احرص على تبني ممارسات سير عمل مناسبة لتوفير الوقت، مثل تسمية المكونات والحفاظ على منطقة لوحة لصق pasteboard مكون رئيسي منفصلةً في ملف X‎D. ستزيد مراعاة خصوصيات العمل مع مكونات Adobe X‎D، مع الحفاظ على سير عمل منظَّم من إنتاجية التصميم، وسيؤدي ذلك إلى تجنّب التنظيف والصيانة غير الضروريين كما سيمنح مصممي X‎D ميزةً فعّالةً عند إنشاء النماذج الأولية للمنتجات الرقمية. ترجمة -وبتصرّف- للمقال Productive XD Prototyping – An Adobe XD Components Tutorial لصاحبه Edward Moore. اقرأ أيضًا طريقة اعتماد نهج تكراري لتصميم واجهة المستخدم UI موازنة بين أفضل أدوات تصميم واجهة المستخدم UI دليل استخدام Adobe Xd للمبتدئين في عالم التصميم 10 إضافات مجانية للفوتوشوب متعلقة بتصميم المواقع
  3. يكون الويب موجهًا للجميع عند تصميمه تصميمًا جيدًا، ولكن التصميم السيئ سيشكّل حاجزًا، مما يؤدي إلى الإخفاق ومنع الوصول والفشل في تمثيل الأفراد وحرمان المجموعات من حقوقها. يدرك الويب إمكانياته المتمثلة في العمل من أجل جميع الأشخاص -أي إمكانية الوصول وقابلية الاستخدام والشمولية-، وذلك عندما ينجح المصممون والمطورون في عملهم. يبدأ التطوّر من خلال الوضوح والتفاهم المشترك، ولكن الناس يبدّلون في عالم التصميم الرقمي وتجربة المستخدم بين المصطلحات، مما يشوّش المختصين في هذا المجال، مثلما يحدث عندما يشير العملاء إلى تجربة المستخدم UX على أنها واجهة المستخدم UI، أو عند استخدام مبدأ أجايل Agile على أنه عملية تطوير البرامج بسرعة مثلًا. وقد أدى الاستخدام غير الرسمي للمصطلحات غير الدقيقة المتعلقة بإمكانية الوصول accessibility والشمولية inclusivity إلى حدوث ارتباك يمتد إلى عالم التصميم، فهناك أوجه تشابه وتداخل بين المصطلحَين، مع وجود اختلافات رئيسية. يشرح هذا المقال الفرق بين هذين المصطلحين وأهميتهما للعاملين في مجال التصميم والتطوير. تعريف إمكانية الوصول والشمولية والاختلاف بينهما تضمن إمكانية الوصول Accessibility أن يتمكّن أيّ شخص من الوصول إلى تجربة أو وظيفة بغضّ النظر عن قدرته، إذ يركّز التعريف التقليدي لإمكانية الوصول الرقمية على تلبية احتياجات الأشخاص ذوي الإعاقة عند استخدام موقع ويب أو تطبيق أو نظام رقمي. تحدّد الإرشادات مثل إرشادات إمكانية الوصول إلى محتوى الويب في W3C، المعاييرَ التقنية والبرمجية والتفاعلية والتصميمية، مثل نسب تباين الألوان وأهداف اللمس وأحجام الخطوط والنص البديل والتنقّل باستخدام لوحة المفاتيح وما إلى ذلك، وتضمن تلبية هذه المتطلبات للأفراد الذين يعانون من إعاقات في النطق أو السمع أو البصر أو الحركة أن يفهموا ويتفاعلوا ويتنقّلوا دون عوائق بغض النظر عن قدرتهم. تستند هذه الإرشادات إلى مبادئ W3C الأربعة لإمكانية الوصول وهي: قابلية الإدراك Perceivable: يجب أن تكون المعلومات ومكونات واجهة المستخدم قابلةً للعرض على المستخدمين بطرقٍ يمكن إدراكها، حيث يمكن للشخص المصاب بإعاقة بصرية قراءة المحتوى باستخدام قارئ شاشة، أو يمكن توفير نصوص الأصوات التوضيحية للشخص الأصم. قابلية التشغيل Operable: يجب أن تكون مكونات واجهة المستخدم والتنقل قابلةً للتشغيل، إذ يجب أن يكون الأشخاص قادرين على التفاعل مع المحتوى المُدرَك سواءً عن طريق لوحة المفاتيح أو الصوت أو الفأرة أو اللمس. إمكانية الفهم Understandable: يجب أن تكون معلومات واجهة المستخدم وتشغيلها مفهومَين، حيث يجب أن يكون المستخدمون قادرين على فهم العرض المُقدَّم. المتانة Robust: يجب أن يكون المحتوى متينًا بدرجة كافية، بحيث يمكن تفسّره مجموعة متنوعة من وكلاء المستخدم بما في ذلك التقنيات المساعدة تفسيرًا موثوقًا، إذ يجب أن يكون المستخدمون قادرين على الوصول إلى المحتوى حتى في حالة تطور التقنيات. قد يكون بعض الأشخاص على دراية بمبادئ وإرشادات إمكانية الوصول السابقة، ولكنهم قد لا يكونون على دراية بمستويات التوافق conformance المختلفة، حيث يحدد كل مستوى بوضوح المتطلبات التي يمكن تطبيقها ومراقبتها وهي: المستوى A: وهو المستوى الأدنى من خلال تلبية جميع متطلبات إمكانية الوصول الأساسية. المستوى AA: يتمثّل بتلبية متطلبات إمكانية الوصول متوسطة المستوى، وهو المستوى الذي تهدف الشركات إلى الوصول إليه. المستوى AAA: وهو تلبية أكبر عدد من المتطلبات، ويتضمّن المستويات A وAA وAAA. تؤثّر المكونات المتعددة التي يجب أن تعمل جميعها معًا على إمكانية الوصول، مثل مكونات محتوى الويب بما في ذلك العناصر الموجودة على الشاشة وخارجها والشيفرة البرمجية، حيث تؤثر هذه المكونات على طريقة الوصول إلى المحتوى مثل المتصفحات والصوت والمشغّلات والبرمجيات، وعلى طريقة الإنتاج مثل البرمجيات والخدمات وأدوات التأليف authoring tools وأنظمة إدارة المحتوى وسكربتات التشغيل وغيرها. تتعلق معايير إمكانية الوصول إلى حد كبير بمعمارية وتنسيق المعلومات وكيفية تقديمها، ولكنها لا تتعلق بالمعلومات بحد ذاتها، إذ قد تكون الكلمات والصور ومقاطع الفيديو عديمة القيمة أو مسيئةً أو تمييزيةً أو متحيزة، ولكن لا يزال يمكن الوصول إليها. لا يضمن اتباع أفضل الممارسات المتعلقة بإمكانية الوصول شعور الأشخاص بأنهم ممثَّلون ويريدون استخدام شيء ما أو الإعجاب به، فهذا هو المجال الذي يناسبه اتباع نهج التصميم الشامل. التصميم الشامل Inclusive Design: من القدرات إلى وجهات النظر تسعى الشمولية إلى إنشاء شيء يمكن لجميع الأشخاص استخدامه مع وجود الرغبة في استخدامه أيضًا، وهي تشمل الأشخاص ذوي القدرات المختلفة إلى جانب الأقليات والسكان المتنوعين.يُعَد التصميم الشامل نهج تصميمٍ يأخذ في الحسبان تنوع سمات الأشخاص وخبراتهم وأحوالهم، مثل: الجنس. العمر. الموقع. الحضارة. اللغة. التعليم والثقافة. الكفاءة والخبرة التقنية. العوامل الاجتماعية والاقتصادية. البيئة الفيزيائية. التقنية والأجهزة والاتصالات. تعرِّف مايكروسوفت Microsoft التصميم الشامل بأنه منهجيةٌ نشأت من البيئات الرقمية، حيث تتيح هذه المنهجية مجال التنوع البشري الكامل وتعتمد عليه، وهذا يعني تضمين الأشخاص الذين لديهم مجموعةً من وجهات النظر والتعلم منهم. يكون الهدف من التصميم الشامل هو إنتاج موقع ويب أو واجهة أو منتج رقمي يمكن استخدامه على أوسع نطاقٍ ممكن، وذلك بغض النظر عن الحالة أو القدرة. لا يحتوي التصميم الشامل على قواعد موثَّقة أو إطار عمل محدَّد، على عكس التصميم الذي يمكن الوصول إليه، والذي حدد المتطلبات والإرشادات، لأن التصميم الشامل يركّز على عملية صنع التصميم الذي سيرغب الجميع في استخدامه، فهو أكثر عاطفيةً وأقل منطقية، وبالتالي لا يوجد نهج قابل للتطبيق عالميًا ومناسبٌ للجميع، إذ قد يتضمن التصميم الناتج حلولًا مختلفة. كتبت خبيرة ورائدة التصميم الشامل سوزان جولتسمان Susan Goltsman: وهذا يطرح سؤالين مرتبطين وهما: السؤال الأول: هل التصميم الذي يمكن الوصول إليه شامل، وهل يمكن الوصول إلى تصميم شامل؟ يمكن أن يدعم التصميم الذي يمكن الوصول إليه جوانب التصميم الشامل، ولكن تركيزه الأساسي سينصبّ على معالجة الإعاقات وليس على الانتماء الأوسع، بينما يفيد التصميم الشامل جميع المستخدمين سواء كانوا يعانون من إعاقة أم لا. يجب أن تؤدي عملية التصميم الشامل إلى تصميم يمكن الوصول إليه، ولكن ليست التصاميم التي يمكن الوصول إليها شاملةً دائمًا. السؤال الثاني: هل التنوع diversity يعني الشمول inclusion، وهل التصميم لأحدهما يضمن كليهما؟ يشير التنوع إلى أوجه التشابه أو الاختلاف بين الأفراد فيما يتعلق بالتركيبة السكانية وخصائص هويتهم، مثل الهوية الجنسية والعمر والعرق. من بين الأمثلة التي يمكن أن يعتمدها المصممون، نجد اختيار صور متنوعة مثل الصور الفوتوغرافية لأشخاص ليسوا سليمي البنية أو ان لديهم صفة مختلفة عن العادة، وذلك للابتعاد عن الصور النمطية؛ بينما بالنسبة لصانعي المحتوى، فإن استخدام الضمائر المحايدة بين الجنسين أو الشاملة في الكتابة أو استخدام لغة الشخص الأول person-first language من شأنه أن يأخذ التنوع في الحسبان. يمثّل التنوع الاختلاف بين الأفراد، بينما تمثّل الشمولية طريقة احتضان الأفراد ذوي الهويات المتنوعة وإدماجهم. أسباب أهمية إمكانية الوصول والشمولية يريد معظمنا عالمًا يحقق المساواة ويتيح الفرص نفسها للجميع، فالشيء العادل والصحيح الذي ينبغي عمله هو أن يتمتع كل شخص بوصول متساوٍ إلى المعلومات والخبرات الرقمية. ولكن إن لم تلتزم القيادة أو المالكون بالأخلاق وحدها في عالمٍ يكون فيه المال أكثر أهمية من الأشخاص، فإليك كيفية تأثير هذه المفاهيم أو تجاهلها على المحصلة النهائية. تقليل المخاطر تتعرض الشركات لخطر أن تكون هدفًا لدعاوى قضائية عندما يتعذر الوصول إلى التصاميم، وتتزايد الدعاوى القضائية بسبب عدم الامتثال لقانون الأمريكيين ذوي الإعاقة والمادة 508، فإذا تعذّر الوصول إلى شيءٍ ما، فهذا يمثّل تمييزًا. خلق قيمة للأعمال تخلق المنتجات الأفضل مزيدًا من القيمة، فإن لبَّت مواقع الويب أو التطبيقات أو الحلول الرقمية مزيدًا من احتياجات الأشخاص، فستتمتع بجاذبية أوسع وستستهدف مزيدًا من الأسواق، وكلما زاد عدد الأشخاص الذين يمكنهم استخدام المنتج، زادت احتمالية النجاح والربح. تحسين رضا العملاء يُعَد الاحتفاظ بالمستخدمين والعملاء أسهل من اكتساب عملاء جدد، وتزداد احتمالية رضا العملاء واستمرار عودتهم إليك من خلال فهم واحتضان ومعالجة تنوع قاعدة المستخدمين، وهذا مفيدٌ للأفراد والشركات. اتخاذ الإجراءات التي يمكن أن ينفذها مجتمع تجربة المستخدم UX يعرف المبتدئون والخبراء في تجربة المستخدم UX على حد سواء أن هناك دائمًا فرصة لجعل الأمور أسهل وأكثر فاعليةً وجاذبية. إليك كيفية البدء في إنشاء تصميمات ذات إمكانية وصول وشمولية أكبر: تحديد الأهداف والأولويات التي تتعلق بإمكانية الوصول أو الشمولية بناءً على جمهور المشروع وأهدافه وموارده. الاستفادة من الإرشادات والأدوات الراسخة لتحديد مجالات التحسين وتتبّع التقدم. التوظيف والتعاون والاختبار مع مستخدمين متنوعين لفهمٍ أفضل للتحديات والفرص. الاستمرار في استخدام مناهج وتقنيات تجربة المستخدم التي أثبتت جدواها مثل إجراء البحوث واستخدام الشخصيات personas ذات الصلة والتخطيط العاطفي empathy mapping وتحديد حالات الاستخدام والاختبارات التكرارية. طلب المساعدة من الخارج من خلال جلب الخبراء، أو استخدام الخدمات الخارجية لتقييم إمكانية الوصول أو مراجعات الشيفرة البرمجية أو اختبار المستخدم. بناء الفرق المتنوعة التي ستؤثر هوياتها ووجهات نظرها وخبراتها المختلفة على التصميمات. لا يمكن تحسين التجربة لكل مستخدم، ولكن يمكن تطبيق شيءٍ ما لجذب مزيدٍ من الأشخاص عند اقترابهم من التصميم، فهناك دائمًا طريقة لتحسين التجربة وتحقيق نتائج أفضل. مصادر التصاميم التي تتمتع بإمكانية الوصول والشمولية معايير W3C لإمكانية الوصول. قائمة أدوات إمكانية الوصول الخاصة بالويب في W3C. تطوير جوجل لإمكانية الوصول. أداة فحص إمكانية الوصول من أدوبي. إضافات إمكانية الوصول من ووردبريس. مجموعة أدوات التصميم الشامل من مايكروسوفت. دليل التصميم الشامل من مركز الأبحاث الشامل. فيديو جون مايدا John Maeda: تصميم فرق ومنتجات شاملة، تصميم من أجل التنوع. ترجمة -وبتصرّف- للمقال Accessibility and Inclusivity: Distinctions in Experience Design لصاحبته Jennifer Leigh Brown. اقرأ أيضًا تصميم تجربة تهيئة المستخدم User Onboarding الكتابة لتجربة المستخدم UX Writing أساس التهيئة الفعالة للواجهات ما هي الكتابة لتجربة المستخدم UX Writing؟ تاريخ موجز عن تجربة المستخدم
  4. ترسل برامج التطبيقات رسائلًا إلى بعضها بعضًا، وكلٌّ من هذه الرسائل هي مجرد سلسلة غير مفسّرة من البايتات من منظور الشبكة، لكن هذه الرسائل تحتوي على أنواعٍ مختلفة من البيانات من منظور التطبيق، مثل مصفوفاتٍ من الأعداد الصحيحة وإطارات الفيديو وأسطر النص والصور الرقمية وما إلى ذلك، أي أن هذه البايتات لها معنى. نأخذ الآن في الحسبان مشكلةَ أفضل طريقةٍ لتشفير الأنواع المختلفة من البيانات التي تريد برامج التطبيقات تبادلها ضمن سلاسل البايت، وهذا يشبه في كثيرٍ من النواحي مشكلة تشفير سلاسل البايتات ضمن إشاراتٍ كهرومغناطيسية التي رأيناها سابقًا. هناك شكلان أساسيان للتشفير، أولهما يكون فيه المستقبِل قادرًا على استخراج نفس الرسالة من الإشارة التي أرسلها المرسل، وهذه هي مشكلة التأطير framing، والثاني هو جعل التشفير فعالًا قدر الإمكان. كلٌّ من هذه المخاوف موجودةٌ أيضًا عند تشفير بيانات التطبيق ضمن رسائل الشبكة. لكي يتمكن المستقبل من استخراج الرسالة التي أرسلها المرسل، سيحتاج الطرفان إلى الموافقة على صيغة الرسالة المُسماة غالبًا صيغة العرض presentation format؛ فمثلًا إذا أراد المرسل إرسال مصفوفةٍ من الأعداد الصحيحة إلى المستقبِل، فيجب على الجانبين الاتفاق على شكل كلِّ عدد صحيح من ناحية عدد البتات، وكيفية ترتيب البايتات، وما إذا كان البايت الأعلى أهمية يأتي أولًا أو أخيرًا على سبيل المثال، وعدد العناصر الموجودة في المصفوفة. يصف القسم الأول ترميزات مختلفة لبيانات الحاسوب التقليدية مثل الأعداد الصحيحة والأعداد العشرية وسلاسل الأحرف والمصفوفات والبنى. توجد أيضًا صيغٌ لبيانات الوسائط المتعددة، حيث يُنقل الفيديو في العادة مثلًا بإحدى الصيغ التي أنشأتها مجموعة خبراء الصور المتحركة Moving Picture Experts Group أو اختصارًا MPEG، وتُرسَل الصور الثابتة بصيغة المجموعة المشتركة لخبراء التصوير Joint Photographic Experts Group أو اختصارًا JPEG. نناقش المشاكل الخاصة التي تنشأ في تشفير بيانات الوسائط المتعددة لاحقًا. تتطلب أنواع بيانات الوسائط المتعددة منا التفكير في كلٍ من العرض presentation والضغط compression، وتتعامل الصيغ المعروفة لنقل وتخزين الصوت والفيديو مع هاتين المسألتين من خلال التأكد من أن الذي جرى تسجيله أو تصويره أو سماعه لدى المرسل يمكن أن يفسّره المستقبل بصورةٍ صحيحة، وفعل ذلك بطريقةٍ تؤدي إلى عدم إغراق الشبكة بكمياتٍ هائلة من بيانات الوسائط المتعددة. للضغط و لكفاءة التشفير تاريخٌ غني يعود إلى ابتكار شانون في نظرية المعلومات في فترة الأربعينات، فهناك قوتان متعارضتان تعملان هنا، وقد ترغب في الحصول على أكبر قدرٍ ممكن من التكرار في البيانات حتى يتمكن المستقبل من استخراج البيانات الصحيحة، حتى إذا أُدخلت أخطاءٌ في الرسالة. تضيف شيفرات اكتشاف الأخطاء وتصحيحها التي رأيناها في فصلٍ سابق معلومات زائدة إلى الرسائل لهذا الغرض، لكن نود إزالة أكبر قدرٍ ممكن من التكرار من البيانات حتى نتمكن من ترميزها في أقل عددٍ ممكن من البتات. توفّر بيانات الوسائط المتعددة ثروةً من الفرص للضغط بسبب الطريقة التي تعالج بها حواسنا وأدمغتنا الإشارات المرئية والسمعية، حيث أننا لا نسمع الترددات العالية وكذلك الترددات المنخفضة، ولا نلاحظ التفاصيل الدقيقة مثل الصورة الأكبر في الصورة، خاصةً إذا كانت الصورة تتحرك. يُعَد الضغط مهمًا لمصممي الشبكات لعدة أسباب، ليس فقط لأننا نادرًا ما نجد وفرةً في حيز النطاق التراسلي bandwidth في كل مكانٍ في الشبكة، حيث تؤثر الطريقة التي نصمم بها خوارزمية ضغطٍ على حساسيتنا للبيانات المفقودة أو المتأخرة على سبيل المثال، وبالتالي قد تؤثر على تصميم آليات تخصيص الموارد وبروتوكولات طرفٍ إلى طرف. وبالمقابل إذا كانت الشبكة الأساسية غير قادرةٍ على ضمان مقدارٍ ثابت من حيز النطاق التراسلي طوال مدة مؤتمر الفيديو، فقد نختار تصميم خوارزميات ضغط متكيّفة مع ظروف الشبكة المتغيرة. أخيرًا، تتمثل أحد الجوانب المهمة لكلٍ من صيغة العرض وضغط البيانات في أنهما يتطلبان من مضيفَي الإرسال والاستقبال معالجة كل بايتٍ من البيانات في الرسالة، ولهذا السبب يُطلق أحيانًا على تنسيق العرض وضغطه اسم وظيفتي معالجة البيانات data manipulation، وهذا على عكس معظم البروتوكولات المشروحة سابقًا، والتي تعالج الرسالة دون النظر إلى محتوياتها مطلقًا. وتؤثر معالجة البيانات على معدل النقل من طرفٍ إلى طرف عبر الشبكة بسبب تلك الحاجة إلى قراءة كل بايت من البيانات في رسالة وحسابها وكتابتها، حيث يمكن أن تكون هذه المعالَجات هي العامل المحدد في بعض الحالات. صيغة العرض إحدى أكثر عمليات تحويل بيانات الشبكة شيوعًا هو التحويل من التمثيل الذي يستخدمه برنامج التطبيق إلى نموذجٍ مناسبٍ للإرسال عبر الشبكة والعكس صحيح، ويسمى هذا التحويل عادةً صيغة العرض presentation formatting، حيث يترجم برنامج الإرسال البيانات التي يريد نقلها من التمثيل الذي يستخدمه داخليًا إلى رسالةٍ يمكن إرسالها عبر الشبكة كما هو موضحٌ في الشكل الآتي؛ أي أن البيانات مشفرةٌ encoded في رسالة، ثم يترجم التطبيق هذه الرسالة القادمة على الجانب المستقبل إلى تمثيلٍ يمكنه بعد ذلك معالجته؛ وهذا يعني أنه فُك تشفير decoded الرسالة. تُسمى هذه العملية أحيانًا تنظيم الوسطاء argument marshalling أو التسلسل serialization، وتأتي هذه المصطلحات من عالم استدعاء الإجراء البعيد Remote Procedure Call أو اختصارًا RPC، حيث يعتقد العميل أنه يستدعي إجراءً مع مجموعة من الوسطاء، ولكن يجري بعد ذلك تجميع هذه الوسطاء وترتيبها بطريقةٍ مناسبة وفعالة لتشكيل رسالة شبكة. قد تسأل ما الذي يجعل هذه المشكلة صعبة، فأحد الأسباب هو تمثيل الحواسيب للبيانات بطرقٍ مختلفة، فقد تمثّل بعض الحواسيب الأعداد العشرية بصيغة معيار IEEE القياسي 754 على سبيل المثال، بينما لا تزال بعض الأجهزة القديمة تستخدم الصيغة غير القياسية الخاصة بها. تستخدم المعماريات المختلفة أحجامًا مختلفةً حتى بالنسبة لشيءٍ بسيط مثل الأعداد الصحيحة، مثل 16 بت و32 بت و64 بت. تُمثَّل الأعداد الصحيحة في بعض الأجهزة بصيغة big-endian أي أن البت الأعلى أهميةً من الكلمة هو ضمن البايت ذو العنوان الأعلى (أي تخزين البتات الأقل أهمية أولًا)، بينما تُمثَّل الأعداد الصحيحة في الأجهزة الأخرى بصيغة little-endian أي أن البت الأعلى أهميةً هو ضمن البايت ذو العنوان الأدنى (أي تخزين البتات الأكثر أهمية أولًا). تُعَد معالجات PowerPC على سبيل المثال من الآلات التي تتبع نمط big-endian، وتُعَد عائلة Intel x86 ذات معمارية little-endian. تدعم اليوم العديد من المعماريات كلا التمثيلين وتسمى bi-endian، ولكن النقطة المهمة هي أنه لا يمكنك أبدًا التأكد من كيفية تخزين المضيف الذي تتواصل معه للأعداد الصحيحة. يعرض الشكل التالي تمثيلات big-endian وlittle-endian للعدد الصحيح 34677374: السبب الآخر الذي يجعل التنظيم صعبًا هو أن برامج التطبيق مكتوبة بلغات مختلفة، وحتى عندما تستخدم لغةً واحدةً فقد يكون هناك أكثر من مصرّفٍ compiler واحد، حيث تملك المصرّفات مقدارًا لا بأس به من المجالات في كيفية تخطيط البُنى (السجلات) في الذاكرة، مثل مقدار الحاشية padding التي تُوضَع بين الحقول التي تتكون منها البنية، وبالتالي لا يمكنك ببساطة نقل بنيةٍ من جهازٍ إلى آخر حتى لو كان كلا الجهازين لهما نفس المعمارية وكان البرنامج مكتوبًا بنفس اللغة، لأن المصرّف على الجهاز الوجهة قد يصف الحقول في البنية بصورةٍ مختلفة. التصنيف على الرغم من أن تنظيم الوسطاء ليس علمًا صعبًا للغاية، ولكن هناك عددٌ كبير من خيارات التصميم التي يجب عليك معالجتها. نبدأ بإعطاء تصنيفٍ بسيط لأنظمة تنظيم الوسطاء. ليس التصنيف التالي الوحيد القابل للتطبيق، ولكنه كافٍ لتغطية معظم البدائل المهمة. أنواع البيانات السؤال الأول هو ما هي أنواع البيانات التي سيدعمها النظام؟ هنا يمكننا تصنيف الأنواع التي تدعمها آلية تنظيم الوسطاء ضمن ثلاثة مستويات، حيث يعقّد كل مستوى المهمة التي يواجهها نظام التنظيم. يعمل نهج التنظيم على مجموعةٍ معينة من الأنواع القاعدية base types في أدنى مستوى، حيث تتضمن الأنواع القاعدية الأعداد الصحيحة والأعداد العشرية والأحرف، وقد يدعم أيضًا الأنواع الترتيبية ordinal types والبوليانية Booleans. إن المعنى الضمني لمجموعة الأنواع القاعدية هو أن عملية التشفير يجب أن تكون قادرةً على تحويل كل نوعٍ قاعدي من تمثيلٍ إلى آخر، مثل تحويل عددٍ صحيح من النمط big-endian إلى النمط little-endian. توجد أنواعٌ مسطحة flat types في المستوى التالي مثل البنى structures والمصفوفات. قد لا تبدو الأنواع المسطحة للوهلة الأولى أنها تعقّد تنظيم الوسطاء، ولكنها بالحقيقة تفعل ذلك. تكمن المشكلة في أن المصرّفات المستخدمة في تصريف برامج التطبيقات تدخل أحيانًا حاشيةً بين الحقول التي تشكّل البنية وذلك لصفِّ هذه الحقول على حدود الكلمات. ويحزم نهج التنظيم البنى بحيث لا تحتوي على حاشية. قد يتعين على نهج التنظيم التعامل مع الأنواع المعقدة complex types ضمن أعلى مستوى، وهي الأنواع المُنشأة باستخدام المؤشرات pointers، أي أن بنية البيانات التي يريد أحد البرامج إرسالها إلى برنامجٍ آخر قد لا تكون متضمنةً في بنيةٍ واحدة، ولكنها قد تتضمن بدلًا من ذلك مؤشراتٍ من بنية إلى بنيةٍ أخرى. تُعد الشجرة مثالًا جيدًا لنوعٍ معقد يتضمن مؤشرات، ومن الواضح أن مشفر البيانات يجب أن يُعِد بنية البيانات للإرسال عبر الشبكة لأن عناوين الذاكرة تطبّق المؤشرات، ولا يعني مجرد وجود بنيةٍ ما في عنوان ذاكرةٍ معين على جهازٍ ما أنها ستكون بنفس العنوان على جهازٍ آخر، أي يجب أن يسلسل serialize (يسوّي) نهج التنظيم بنية البيانات المعقدة. بناءً على مدى تعقيد نظام الأنواع، تتضمن مهمة تنظيم الوسطاء تحويل الأنواع القاعدية، وحزم البنيات، وتخطيط بنيات البيانات المعقدة لتشكيل رسالةٍ متجاورة يمكن نقلها عبر الشبكة. يوضح الشكل التالي هذه المهمة. استراتيجية التحويل إن المشكلة التالية لإنشاء نظام الأنواع هي استراتيجية التحويل Conversion Strategy والتي سيستخدمها منظّم الوسطاء، وهناك خياران عامان، هما نموذج الوسيط المتعارف عليه canonical intermediate، ونموذج المستقبِل يفعل الصواب receiver-makes-right. تتمثل فكرة نموذج الوسيط المتعارف عليه في الاستقرار على تمثيلٍ خارجي لكل نوع، حيث يترجم المضيف المرسل من تمثيله الداخلي إلى هذا التمثيل الخارجي قبل إرسال البيانات، ويترجم المستقبل من هذا التمثيل الخارجي إلى تمثيله المحلي عند تلقي البيانات. ولتوضيح الفكرة بصورةٍ أكبر، ضع في الحسبان بيانات الأعداد الصحيحة مع التأكيد على أن التعامل مع الأنواع الأخرى يجري بطريقةٍ مماثلة، فقد تصرّح بأنك ستستخدَم صيغة big-endian على أنها تمثيل خارجي للأعداد الصحيحة، وبالتالي يجب أن يترجم مضيف الإرسال كل عددٍ صحيح يرسله إلى شكل big-endian، كما يجب على المضيف المستقبل ترجمة الأعداد الصحيحة ذات صيغة big-endian إلى أي تمثيلٍ يستخدمه، وهذا ما يجري في الإنترنت على ترويسات البروتوكولات، وقد يستخدم مضيفٌ معين بالفعل نموذج big-endian، فلا يلزم في هذه الحالة التحويل. الخيار البديل هو نموذج المستقبل يفعل الصواب، حيث يرسل المرسل بياناته بالتنسيق المحلي الداخلي الخاص به، أي لا يحوّل المرسل الأنواع الرئيسية، ولكنه يضطر إلى حزم وتسوية بنيات البيانات الأعقد، ثم يصبح المستقبل مسؤولًا عن ترجمة البيانات من صيغة المرسل إلى صيغته المحلية الخاصة. تكمن مشكلة هذه الاستراتيجية في أن كل مضيفٍ يجب أن يكون مستعدًا لتحويل البيانات من جميع بنيات الآلة الأخرى ويُعرف ذلك في الشبكات باسم حل N-by-N، حيث يجب أن تكون كل معماريةٍ من بين N معمارية آلة قادرةً على التعامل مع كل المعماريات N الأخرى؛ بينما في نظام يستخدم نموذج الوسيط المتعارف عليه، فيحتاج كل مضيفٍ إلى معرفة كيفية التحويل بين تمثيله الخاص وتمثيلٍ آخر فقط، الذي هو التمثيل الخارجي. من الواضح أن استخدام صيغة خارجية مشتركة هو الشيء الصحيح الواجب فعله، وقد كانت هذه بالتأكيد الحكمة التقليدية في مجتمع الشبكات لأكثر من 30 عامًا، ولكن اتضح أنه لا توجد العديد من التمثيلات المختلفة للأصناف القاعدية المختلفة، أي أن N ليست كبيرةً كفاية. إن الحالة الأكثر شيوعًا هي أن تتواصل آلتان من نفس النوع مع بعضهما بعضًا، حيث تبدو ترجمة البيانات من تمثيل تلك المعمارية إلى تمثيلٍ خارجيٍ غريب في هذه الحالة أمرًا ساذجًا، وبالتالي فكل ما يتوجب على المستقبل هو إعادة ترجمة البيانات إلى تمثيل نفس المعمارية على المستقبل. أما الخيار الثالث وعلى الرغم من عدم معرفتنا أي نظام موجودٍ يستغله، فهو يستخدم نموذج المستقبل يفعل الصواب receiver-makes-right إذا كان المرسل يعلم أن الوجهة لها نفس المعمارية، بينما سيستخدم المرسل صيغة الوسيط المتعارف عليه إذا كان الجهازان يستخدمان معمارياتٍ مختلفة، لكن كيف سيتعلم المرسل معمارية المستقبل؟ يمكن أن يتعلم هذه المعلومات إما من خادم أسماء name server أو عن طريق استخدام حالة اختبار بسيطة أولًا لمعرفة ما إذا كانت النتيجة المناسبة قد حدثت. الوسوم تكمن المشكلة الثالثة في تنظيم الوسطاء في كيفية معرفة المستقبل لنوع البيانات الموجودة في الرسالة التي يتلقاها. وهناك طريقتان شائعتان هما البيانات الموسومة tagged والبيانات غير الموسومة untagged. وهنا تُعَد طريقة البيانات الموسومة أسهل، لذلك سنشرحها أولًا. الوسم tag هو أية معلوماتٍ إضافية مدرجةٍ في الرسالة، حيث تتجاوز التمثيل الملموس للأنواع القاعدية وتساعد المستقبل في فك تشفير الرسالة، وهناك العديد من الوسوم المحتملة الممكن تضمينها في الرسالة، فقد يُعزّز كل عنصر بيانات مع وسم نوع type tag على سبيل المثال، والذي يشير إلى أن القيمة التالية هي عددٌ صحيح، أو عددٌ عشري، أو أيًا كان؛ أما المثال الآخر فهو وسم الطول length tag المُستخدَم للإشارة إلى عدد العناصر في المصفوفة أو حجم عدد صحيح؛ بينما المثال الثالث فهو وسم المعمارية architecture tag الممكن استخدامه مع استراتيجية المستقبل يفعل الصواب لتحديد المعمارية التي أُنشِئت البيانات الموجودة في الرسالة بناءً عليها. يوضح الشكل التالي كيفية تشفير عددٍ صحيحٍ بسيط مؤلفٍ من 32 بت في رسالة موسومة. البديل بالطبع هو عدم استخدام الوسوم، لكن كيف يعرف المستقبل كيفية فك تشفير البيانات في هذه الحالة؟ إنه يعرف لأنه كان مبرمَجًا على ذلك، فإذا استدعيتَ إجراءً بعيدًا يأخذ عددين صحيحين وعددًا عشريًا على أنهم وسطاء، فلا داعي لأن يفحص الإجراءُ البعيد الوسومَ لمعرفة ما استلمه للتو، حيث يفترض ببساطةٍ أن الرسالة تحتوي على عددين صحيحين وعددٍ عشري ويفك تشفيرها وفقًا لذلك. لاحظ أنه بينما يعمل هذا في معظم الحالات بصورةٍ جيدة، ولكن المكان الوحيد الذي ينهار فيه هو عند إرسال مصفوفات متغيرة الطول، حيث يُستخدم وسم الطول بصورةٍ شائعة للإشارة إلى طول المصفوفة في هذه الحالة. من الجدير بالذكر أيضًا أن النهج غير الموسوم يعني أن صيغة العرض هي حقًا طرفٌ إلى طرف؛ حيث لا يمكن لبعض الوكلاء الوسيطين تفسير الرسالة دون وضع وسومٍ على البيانات. قد تسأل لماذا يحتاج الوكيل الوسيط إلى تفسير رسالة؟ الجواب هنا هو أنه بسبب حدوث أشياءٍ غريبة ناتجة في الغالب عن حلولٍ مخصصة ad hoc لمشاكلٍ غير متوقعة، لم يُصمَّم النظام للتعامل معها، ولكن التصميم السيئ للشبكة خارج نطاق هذا الكتاب. الجذوع الجذع Stub هو جزءٌ من الشيفرة التي تنفَّذ تنظيم الوسطاء، حيث تُستخدم الجذوع عادةً لدعم آلية RPC. ينظّم الجذعُ وسطاءَ الإجراء على جانب العميل في رسالةٍ يمكن إرسالها عن طريق بروتوكول آلية RPC، ويحوِّل الجذع على جانب الخادم الرسالةَ مرةً أخرى إلى مجموعةٍ من المتغيرات المُمكن استخدامها، مثل وسطاء من أجل استدعاء الإجراء البعيد. يمكن تفسير الجذع أو تصريفه. يحتوي كل إجراء على جذع عميل وجذع خادم مخصَّصَين في النهج القائم على التصريف، ويمكن كتابة الجذع يدويًا، إلا أنه يُنشَأ عادةً بواسطة مصرّف الجذع بناءً على وصف واجهة الإجراء، وهذا الموقف موضحٌ في الشكل الآتي. بما أن الجذع يمكن تصريفه، فهو عادة فعالٌ للغاية، إذ يوفر النظام جذوع عميل وجذوع خادم عامةً في النهج القائم على التفسير، ويضبط وصف واجهة الإجراء معاملات هذه الجذوع. تغيير هذا الوصف أمرٌ سهل، لذلك تتميز الجذوع المُفسَّرة بأنها مرنة، وتُعَد الجذوع المصرَّفة Compiled stubs أكثر شيوعًا عمليًا. أمثلة عن تمثيلات البيانات XDR وASN.1 وNDR وProtoBufs نصف الآن بإيجاز أربعة تمثيلات بيانات شبكة شائعة من حيث هذا التصنيف. نستخدم النوع الأساسي للعدد الصحيح لتوضيح كيفية عمل كل نظام. تمثيل XDR تمثيل البيانات الخارجية External Data Representation أو اختصارًا XDR هو الصيغة الشبكية المُستخدمة مع SunRPC، حيث يكون XDR مسؤولًا عن المهام التالية: دعم نظام النوع C الكامل باستثناء المؤشرات الوظيفية. تحديد صيغة الوسيط المتعارف عليه. لا يستخدم الوسوم باستثناء الإشارة إلى أطوال المصفوفة. يستخدم جذعًا مُصرَّفًا. تمثيل XDR للعدد الصحيح هو عنصر بيانات مؤلَّف من 32 بتًا يشفِّر عددًا صحيحًا من النوع C، ويُمثَّل في صيغة المكمل الثنائي twos’ complement من خلال وضع البايت الأعلى أهميةً من العدد الصحيح C في البايت الأول من العدد الصحيح XDR، ووضع البايت الأقل أهميةً من العدد الصحيح C في البايت الرابع من العدد الصحيح XDR، أي أن XDR تستخدم صيغة big-endian للأعداد الصحيحة. يدعم XDR كلًا من الأعداد الصحيحة ذات الإشارة والتي بدون إشارة، تمامًا كما يفعل النوع C. يمثِّل XDR المصفوفات متغيرة الطول من خلال تحديد عددٍ صحيح بدون إشارة وبحجم 4 بايت يعطي عدد العناصر في المصفوفة، متبوعًا بالعديد من العناصر من النوع المناسب، ويرمِّز XDR مكونات البنية بترتيب تصريحها في البنية، كما يمثَّل حجم كل عنصرٍ أو مكونٍ بمضاعفات 4 بايتات لكلٍ من المصفوفات والبنى، وتُحشى أنواع البيانات الأصغر حجمًا حتى 4 بايتات باستخدام أصفار. استُثنيت الأحرف من قاعدة " الحشو حتى 4 بايتات pad to 4 bytes" التي تُشفَّر بحرفٍ لكل بايت. يعطي جزء الشيفرة التالي مثالًا على بنية C وهي item، وإجراء XDR الذي يشفِّر / يفك تشفير هذه البنية وهو xdr_item. حيث يبين الشكل السابق تخطيطًا لتمثيل XDR على السلك لهذه البنية عندما يكون الحقل name مكونًا من سبعة أحرف والمصفوفة list تحتوي على ثلاث قيم. في هذا المثال، تُعَد كل من xdr_array وxdr_int وxdr_string ثلاث دوالٍ بدائية يوفِّرها XDR لتشفير المصفوفات والأعداد الصحيحة وسلاسل الأحرف وفك تشفيرها على التوالي، حيث يُعَد الوسيط xdrs متغير سياق يستخدمه XDR لتتبع مكانه في الرسالة التي يجري معالجتها، ويتضمن رايةً تشير إلى ما إذا كان هذا الإجراء مُستخدَمٌ لتشفير أو فك تشفير الرسالة، أي تُستخدَم إجراءات مثل xdr_item على كلٍ من العميل والخادم. لاحظ أنه يمكن لمبرمج التطبيق إما كتابة الإجراء xdr_item يدويًا أو استخدام مصرّف جذع يُسمَى rpcgen، وهو غير موضحٍٍ هنا لإنشاء إجراء التشفير / فك التشفير، ويأخذ rpcgen في الحالة الأخيرة الإجراء البعيد الذي يعرّف بنية البيانات item على أنها دخلٌ وخرجٌ للجذع المقابل. #define MAXNAME 256; #define MAXLIST 100; struct item { int count; char name[MAXNAME]; int list[MAXLIST]; }; bool_t xdr_item(XDR *xdrs, struct item *ptr) { return(xdr_int(xdrs, &ptr->count) && xdr_string(xdrs, &ptr->name, MAXNAME) && xdr_array(xdrs, &ptr->list, &ptr->count, MAXLIST, sizeof(int), xdr_int)); } تعتمد كيفية أداء XDR بالضبط على مدى تعقيد البيانات، فمن أجل حالةٍ بسيطة من مصفوفة من الأعداد الصحيحة والتي يجب تحويل كل عددٍ صحيح فيها من ترتيب بايتٍ واحد إلى آخر، سيتطلب الأمر ثلاث تعليمات لكل بايت وسطيًا، مما يعني أن تحويل المصفوفة بأكملها من المحتمل أن يكون مقيدًا بحيّز نطاق ذاكرة الجهاز. وستكون التحويلات الأعقد التي تتطلب مزيدًا من التعليمات لكل بايت محدودةً بوحدة المعالجة المركزية CPU، وبالتالي ستعمل بمعدل بيانات أقل من حيز نطاق الذاكرة التراسلي. تمثيل ASN.1 يُعد تمثيل السياق المجرد الأول Abstract Syntax Notation One أو اختصارًا ASN.1 إحدى معايير ISO التي تحدد تمثيل البيانات المرسلة عبر الشبكة إضافةً إلى عدة أشياءٍ أخرى. ويُسمى الجزء الخاص بالتمثيل من ASN.1 بقواعد التشفير الأساسية Basic Encoding Rules أو اختصارًا BER. تدعم ASN.1 نظام النوع C بدون مؤشرات دالةٍ، وتحدد النموذج الوسيط المتعارف عليه، كما تستخدم وسوم النوع، ويمكن تفسير أو تصريف جذوعها. إن أحد ادعاءات شهرة ASN.1 BER هو استخدامها بواسطة بروتوكول إدارة الشبكة البسيط Simple Network Management Protocol أو اختصارًا SNMP القياسي عبر الإنترنت. تُمثِّل ASN.1 كل عنصر بيانات بثلاثيةٍ وفق النموذج التالي: (tag, length, value) يكون الوسم tag حقلًا ذا 8 بتات، على الرغم من أن ASN.1 يسمح بتعريف وسوم متعددة البايتات. يحدِّد حقل الطول length عدد البايتات التي تشكل القيمة value، وسنناقش حقل الطول length بصورةٍ أكثر أدناه. يمكن إنشاء أنواع بيانات مركبة مثل البنى structures عن طريق تداخل الأنواع البدائية، كما هو موضح في الشكل التالي. إذا كانت القيمة value هي 127 بايت أو أقل، فسيُحدَّد الطول length في بايتٍ واحد، وبالتالي يُشفَّر عددًا صحيحََا مؤلفًا على سبيل المثال من 32 بتًا على الشكل التالي: نوع type مؤلفٌ من 1 بايت، وطول length مؤلف من 1 بايت، و4 بايتات تشفِّر العدد الصحيح، كما هو موضحٌ في الشكل الآتي. تُمثَّل القيمة value نفسها في حالة عدد صحيح، في صيغة مكملٍ ثنائي وشكل big-endian، تمامًا كما في XDR. ضع في الحسبان أنه على الرغم من تمثيل قيمة value العدد الصحيح بالطريقة نفسها تمامًا في كلٍ من XDR وASN.1، ولكن لا يحتوي تمثيل XDR على وسوم النوع type والطول length المرتبطة بهذا العدد الصحيح. يشغل هذان الوسمان حيزًا في الرسالة، والأهم من ذلك أنهما يتطلبان معالجةً أثناء التنظيم وإلغاء التنظيم، وهذا هو أحد الأسباب التي تجعل ASN.1 غير فعالٍ مثل XDR؛ أما السبب الآخر فهو حقيقة أن كل قيمة بيانات مسبوقة بحقل طول length تعني أنه من غير المحتمل أن تقع قيمة البيانات على حد بايتٍ طبيعي، مثل عدد صحيح يبدأ عند حد كلمة، وهذا يعقّد عملية التشفير / فك التشفير. إذا كانت القيمة value هي 128 بايت أو أكثر، فسيجري استخدام عدة بايتات لتحديد طولها length، لكن قد تسأل لماذا يمكن للبايت تحديد طول يصل إلى 127 بايت بدلًا من 256 بايت؟ إن السبب في ذلك هو استخدام بتٍ واحدٍ لحقل الطول length للإشارة إلى طول حقل الطول length. يشير الرقم 0 في البت الثامن إلى حقل الطول length المؤلف من 1 بايت. لتحديد طول length أطول، يُضبَط البت الثامن على القيمة 1، وتشير البتات السبعة الأخرى إلى عدد البايتات الإضافية التي تشكِّل حقل الطول length. يوضح الشكل التالي حقل طول length بسيط يبلغ 1 بايت وطولًا length متعدد البايتات. تمثيل NDR تمثيل بيانات الشبكة Network Data Representation أو اختصارًا NDR هو معيار تشفير البيانات المُستخدَم في بيئة الحوسبة الموزعة Distributed Computing Environment أو اختصارًا DCE. ويستخدم NDR نموذج المستقبل الذي يفعل الصواب receiver-makes-right على عكس XDR وASN.1، ويحدث ذلك عن طريق إدخال وسم معمارية في مقدمة كل رسالة، وتكون عناصر البيانات بدون وسوم، ويستخدم NDR مصرّفًا لتوليد الجذوع. يأخذ هذا المصرّف وصفًا لبرنامج مكتوبٍ بلغة تعريف الواجهة Interface Definition Language أو اختصارًا IDL، ويولّد الجذوع اللازمة. يشبه IDL إلى حدٍ كبير C، ولذا فهو يدعم بصورةٍ أساسية نظام النوع C. يوضح الشكل السابق وسم تعريف معمارية مؤلف من 4 بايتات مضمَّن في مقدمة كل رسالةٍ مشفرة بواسطة NDR. يحتوي البايت الأول على حقلين مؤلفين من 4 بتات. ويحدد الحقل الأول IntegrRep صيغة جميع الأعداد الصحيحة الموجودة في الرسالة، كما يشير الرقم 0 في هذا الحقل إلى الأعداد الصحيحة big-endian، ويشير الرقم 1 إلى الأعداد الصحيحة little-endian. يشير حقل CharRep إلى صيغة الأحرف المستخدمة، حيث 0 يعني ASCII أي الشيفرة القياسية الأمريكية لتبادل المعلومات American Standard Code for Information Interchange، و1 يعني EBCDIC وهو بديلٌ أقدم من ASCII تحدده شركة IBM. ثم يحدد بايت FloatRep تمثيل الأعداد العشرية المستخدم، حيث 0 تعني IEEE 754 و1 تعني VAX و2 تعني Cray و3 تعني IBM، والبايتان الأخيران محجوزان للاستخدام المستقبلي. لاحظ أنه في الحالات البسيطة مثل مصفوفات الأعداد الصحيحة، يجري NDR نفس مقدار العمل الذي يجريه XDR، وبالتالي فهو قادرٌ على تحقيق نفس الأداء. تمثيل ProtoBufs توفّر مخازن البروتوكول المؤقتة Protocol Buffers أو اختصارًا Protobufs طريقة لغة محايدة ومنصةً محايدةً لتسلسل البيانات ذات البنى، وهي شائعة الاستخدام مع gRPC. تستخدم Protobufs استراتيجيةً ذات وسوم مع نموذجٍ وسيطٍ متعارف عليه، حيث يُنشَأ الجذع على كلا الجانبين من ملف .proto مُشارك، وتَستخدم هذه المواصفات صيغةً بسيطةً تشبه لغة C، كما يوضح المثال التالي. message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } required PhoneNumber phone = 4; } حيث يمكن تفسير الرسالة message تقريبًا على أنها مكافئة لبنية typedef struct في لغة C، ويُعَد باقي المثال بديهيًا إلى حد ما، باستثناء إعطاء كل حقل معرفًا رقميًا لضمان التفرُّد في حالة تغيير المواصفات بمرور الوقت، ويمكن الإشارة لكل حقلٍ على أنه إما إجباري required أو اختياري optional. طريقة تشفير Protobufs للأعداد الصحيحة جديدة، حيث تستخدم تقنيةً تسمى varints اختصارًا للأعداد الصحيحة ذات الطول المتغير variable length integers، حيث يستخدم كلُّ بايت مؤلف من 8 بتات البتَ الأعلى أهمية للإشارة فيما إذا كان هناك عددٌ أكبر من البايتات في العدد الصحيح، وتُستخدم البتات السبعة الأقل أهميةً لتشفير تمثيل المكمل الثنائي لمجموعة السبعة بتات في القيمة، وتكون المجموعة الأقل أهميةً هي الأولى في التسلسل. هذا يعني أنه يمكن تشفير عددٍ صحيح صغيرٍ أي أقل من 128 في بايتٍ واحد، مثل تشفير العدد الصحيح 2 بالشيفرة 0000 0010، بينما يلزم المزيد من البايتات بالنسبة لعدد صحيح أكبر من 128، مثل تشفير العدد 365 كما يلي: 1110 1101 0000 0010 لتحقيق ذلك، أسقِط أولًا البت الأعلى أهمية من كل بايت، لأنه موجودٌ لإخبارنا فيما إذا كنا قد وصلنا إلى نهاية العدد الصحيح. يشير الرقم 1 في البت الأعلى أهميةً في البايت الأول في هذا المثال إلى وجود أكثر من بايتٍ واحد في varint: 1110 1101 0000 0010 → 110 1101 000 0010 بما أن طرق varint -وهي طرق لسَلسَلة الأعداد الصحيحة باستخدام بايتٍ واحد أو أكثر، حيث تأخذ الأعداد الأصغر عددًا أقل من البايتات- تخزِّن الأعداد ذات المجموعة الأقل أهمية أولًا، فإنك تعكس بعد ذلك المجموعتين المكونتين من سبع بتات، ثم تجمّعها للحصول على القيمة النهائية. 000 0010 110 1101 → 000 0010 || 110 1101 → 101101101 → 256 + 64 + 32 + 8 + 4 + 1 = 365 يمكنك التفكير في تدفق البايت المتسلسل على أنه مجموعةٌ من أزواج مفتاح / قيمة key/value بالنسبة لمواصفات الرسالة الأكبر، حيث يحتوي المفتاح أي الوسم على جزأين فرعيين هما المعرف الفريد للحقل أي تلك الأرقام الإضافية في مثال ملف proto.، ونوع السلك wire type للقيمة مثل Varint وهو أحد أمثلة نوع السلك التي رأيناها حتى الآن. تتضمن أنواع الأسلاك المدعومة الأخرى 32-bit و64-bit للأعداد الصحيحة ذات الطول الثابت، ومحددة الطول length-delimited للسلاسل والرسائل المُضمنة. تخبرك محدّدة الطول بعدد بايتات الرسالة المضمنة (البنية)، ولكنها وصفٌ آخر للرسالة في ملف proto. الذي يخبرك بكيفية تفسير تلك البايتات. اللغات التوصيفية مثل XML نناقش مشكلة صيغة العرض من منظور RPC، أي كيفية تشفير أنواع البيانات الأولية وبنية البيانات المُركبة، بحيث يمكن إرسالها من برنامج عميلٍ إلى برنامج خادم، ولكن تحدث نفس المشكلة الأساسية في إعداداتٍ أخرى، مثل كيفية وصف خادم الويب صفحة ويب بحيث يعرف أي عددٍ من المتصفحات المختلفة ما الذي يجب عرضه على الشاشة، وتكون الإجابة في هذه الحالة المحددة هي لغة توصيف النص التشعبي HyperText Markup Language أو اختصارًا HTML، والتي تشير إلى وجوب عرض سلاسل أحرفٍ معينة بخطٍ غامق أو مائل، ونوع الخط الذي يجب استخدامه وحجمه، ومكان وضع الصور. أدى توفر جميع أنواع تطبيقات الويب والبيانات أيضًا إلى خلق موقفٍ تحتاج فيه تطبيقات الويب المختلفة إلى التواصل مع بعضها بعضًا وفهم بيانات بعضها البعض. قد يحتاج موقع التجارة الإلكترونية مثلًا إلى التحدُّث إلى موقع شركة الشحن على الويب للسماح للعميل بتتبع الطرد دون مغادرة موقع التجارة الإلكترونية على الإطلاق. ويبدأ هذا بسرعة في الظهور بصورةٍ كبيرة مثل RPC، ويستند النهج المتبع في الويب اليوم لتمكين مثل هذا الاتصال بين خوادم الويب على لغة التوصيف الموسعة Extensible Markup Language أو اختصارًا XML، وهي طريقةٌ لوصف البيانات المتبادلة بين تطبيقات الويب. تأخذ لغات التوصيف -والتي تُعَد كلٌ من HTML وXML مثالين عنها-، نهج البيانات الموسومة إلى أقصى الحدود. تُمثل البيانات على هيئة نص وتتداخل وسوم النص المعروفة باسم markup مع نص البيانات للتعبير عن معلوماتٍ حول البيانات. تشير markup في حالة HTML إلى كيفية عرض النص، حيث يمكن للغات التوصيف الأخرى مثل XML التعبير عن نوع وبنية البيانات. لغة XML هي في الواقع إطار عملٍ لتعريف لغات التوصيف المختلفة لأنواعٍ مختلفة من البيانات. لقد استخدمت لغة XML على سبيل المثال لتحديد لغة توصيفٍ مكافئة تقريبًا للغة HTML تُسمى Extensible HyperText Markup Language أو اختصارًا XHTML، ويعرّف XML صيغةً أساسيةً لخلط الترميز مع نص البيانات، لكن على مصمم لغة ترميزٍ معينة تسمية وتحديد الترميز الخاص بها، ومن الشائع الإشارة إلى اللغات الفردية القائمة على XML ببساطة باسم XML، لكننا سنؤكد على التمييز بينها هنا. تشبه صياغة XML صياغة HTML، فقد يبدو سجل الموظف على سبيل المثال بلغةٍ افتراضيةٍ قائمةٍ على XML مثل مستند XML الآتي، والذي قد يُخزَّن في ملف باسم employee.xml، ويشير السطر الأول إلى إصدار XML المُستخدَم، كما تمثل الأسطر المتبقية أربعة حقولٍ تشكل سجل الموظف، ويحتوي آخرها hiredate على ثلاثة حقولٍ فرعية؛ أي توفِّر صياغة XML بنيةً متداخلةً لأزواج الوسم / القيمة tag/value، والتي تعادل بنية شجرة للبيانات الممثلة، حيث يكون employee هو الجذر. يُعَد هذا مشابهًا لقدرة XDR وASN.1 وNDR على تمثيل الأنواع المركبة، ولكن بصيغةٍ يمكن معالجتها بواسطة البرامج وقراءتها بواسطة البشر، ويمكن استخدام برامجٍ مثل المحللات اللغوية parsers على لغاتٍ مختلفة تستند إلى لغة XML، لأن تعريفات هذه اللغات يُعبَّر عنها على أنها بيانات قابلة للقراءة آليًا ويمكن إدخالها إلى البرامج. <?xml version="1.0"?> <employee> <name>John Doe</name> <title>Head Bottle Washer</title> <id>123456789</id> <hiredate> <day>5</day> <month>June</month> <year>1986</year> </hiredate> </employee> على الرغم من أن التوصيف والبيانات الواردة في هذا المستند توحي بشدة بإمكانية قراءتها للإنسان، إلا أن تعريف لغة تسجيل الموظف هو الذي يحدد في الواقع الوسوم المسموح بها وما تعنيه هذه الوسوم وأنواع البيانات التي تشير إليها. لا يمكن للقارئ البشري أو الحاسوب معرفة ما إذا كان عام 1986 الموجود في حقل العام year هو سلسلةٌ أو عددٌ صحيح أو عددٌ صحيح بدون إشارة، أو عدد عشري مثلًا بدون تعريفٍ رسميٍ للوسوم. يُعطى تعريفُ لغةٍ معينة قائمةٍ على XML من خلال مخطط schema، وهو مصطلح قاعدة بيانات لتحديد كيفية تفسير مجموعةٍ من البيانات. لقد جرى تعريف العديد من لغات المخطط للغة XML، حيث سنركز هنا على المعيار الرائد والمعروف باسم مخطط XML الذي لا يثير الدهشة. يُعرَف المخطط الافرادي المُعرَّف باستخدام مخطط XML باسم مستند مخطط XML أو XML Schema Document واختصارًا XSD، يمثل ما يلي إحدى طرق توصيف XSD لهذا المثال، حيث يحدّد اللغة التي يتوافق معها نموذج المستند، وقد يُخزَّن في ملفٍ يسمى employee.xsd. <?xml version="1.0"?> <schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name="employee"> <complexType> <sequence> <element name="name" type="string"/> <element name="title" type="string"/> <element name="id" type="string"/> <element name="hiredate"> <complexType> <sequence> <element name="day" type="integer"/> <element name="month" type="string"/> <element name="year" type="integer"/> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema> يشبه ملف XSD هذا مثالنا في المستند employee.xml، ولسببٍ وجيه هو أن مخطط XML بحد ذاته لغةٌ قائمة على لغةXML. توجد علاقةٌ واضحةٌ بين ملف XSD هذا والوثيقة أعلاه، حيث يشير السطر التالي إلى أن القيمة الموضوعة بين قوسين title يجب تفسيرها على أنها سلسلة string: <element name="title" type="string"/> كما يشير تسلسل هذا السطر وتداخله في XSD إلى أن الحقل title يجب أن يكون العنصر الثاني في سجل الموظف employee record. يوفّر مخطط XML على عكس بعض لغات المخطط أنواع بيانات مثل السلسلة والعدد الصحيح والعدد العشري والبولياني، ويسمح بدمج أنواع البيانات تسلسليًا أو بصورةٍ متداخلة كما هو الحال في employee.xsd لإنشاء أنواع بياناتٍ مركبة. لذا فإن XSD يحدد أكثر من صيغة، كما يحدد نموذجَ البيانات المجُرّد الخاص به. يمثل المستند الذي يتوافق مع XSD مجموعةً من البيانات التي تتوافق مع نموذج البيانات. تكمن أهمية XSD في تحديد نموذج بياناتٍ مجردة وليس مجرد صيغةٍ في إمكانية وجود طرقٍ أخرى إلى جانب XML لتمثيل البيانات التي تتوافق مع النموذج. إن XML به بعض أوجه النقص عند التمثيلٍ على طول السلك on-the-wire، فهو ليس مضغوطًا مثل تمثيلات البيانات الأخرى، كما أنه بطيء نسبيًا في التحليل. هناك عددٌ من التمثيلات البديلة الموصوفة المُستخدمة مثل التمثيل الثنائي. نشرت منظمة المعايير الدولية ISO تمثيلًا يُدعى Fast Infoset، في حين أنتجت World Wide Web Consortium أو اختصارًا W3C مقترح تبادل XML الفعال Efficient XML Interchange أو اختصارًا EXI. تضحي التمثيلات الثنائية بإمكانية القراءة البشرية من أجل زيادة الكثافة والتحليل الأسرع. حيز أسماء XML يجب أن تحل XML مشكلةً شائعةً وهي مشكلة تعارض الأسماء، حيث تظهر هذه المشكلة لأن لغات المخطط مثل مخطط XML تدعم جزئية إمكانية إعادة استخدام المخطط على أنه جزءٌ من مخططٍ آخر. افترض تعريف اثنين من XSD بصورةٍ مستقلة عن بعضهما، وكلاهما يعرّف اسم العلامة على أنها idNumber. ربما يستخدم XSD هذا الاسم لتحديد موظفي الشركة، ويستخدمه XSD آخر لتحديد الحواسيب المحمولة المملوكة للشركة. قد نرغب في إعادة استخدام هاتين XSDs في XSD ثالث لوصف الأصول المرتبطة بالموظفين، ولكننا نحتاج لفعل هذا إلى بعض الآليات للتمييز بين أرقام معرّفات idNumbers الموظفين وأرقام معرّفات idNumbers الحواسيب المحمولة. يُدعى حلُّ XML لهذه المشكلة حيز أسماء namespaces XML وهو مجموعةٌ من الأسماء، حيث يُحدَّد كل حيز أسماء XML بواسطة معرّف الموارد الموحد Uniform Resource Identifier أو اختصارًا URI. سنشرح URIs بشيء من التفصيل في فصلٍ لاحق؛ لكن كل ما تحتاج إلى معرفته حقًا في الوقت الحالي هو أن URIs هي شكل من أشكال المعرّف الفريد عالميًا، وعنوان HTTP URL هو نوعٌ خاص من UNI. يمكن إضافة اسم رمزٍ بسيط مثل idNumber إلى حيز الأسماء طالما أنه فريد داخله، وبما أن حيز الأسماء فريد عالميًا والاسم البسيط فريدٌ داخل حيز الأسماء، فإن الجمع بين الاثنين هو اسمٌ مؤهلٌ qualified name فريد عالميًا لا يمكن أن يتعارض مع أي شيءٍ آخر. يحدد XSD حيز أسماء الهدف من خلال السطر التالي: targetNamespace="http://www.example.com/employee" وهو معرف مواردٍ موحدٍ يحدد حيز الأسماء. ستنتمي جميع الرموز الجديدة المحددة في XSD إلى حيّز الأسماء هذا. إذا أراد XSD الإشارة إلى الأسماء المعرّفة في XSDs أخرى، فيمكنه ذلك عن طريق تأهيل هذه الأسماء ببادئة حيز الأسماء؛ وهذه البادئة هي اختصارٌ قصيرٌ لـ URI الكامل الذي يعرِّف بالفعل حيز الأسماء. يسند السطر التالي مثلًا emp إلى بادئة حيز أسماء الموظف: xmlns:emp="http://www.example.com/employee" وسيجري تأهيل أي رمزٍ من حيز الأسماء هذا عن طريق وضع :emp قبله، كما هو الحال في السطر التالي: <emp:title>Head Bottle Washer</emp:title> أي أن emp: title هو اسمٌ مؤهل، ولن يتعارض مع الاسم title من حيز أسماءٍ آخر. من اللافت للنظر كيفية استخدام XML على نطاقٍ واسع الآن في التطبيقات التي تتراوح من الاتصال بأسلوب RPC بين الخدمات المستندة إلى الويب إلى أدوات الإنتاجية المكتبية وإلى المراسلة الفورية. إنه بالتأكيد أحد البروتوكولات الأساسية التي تعتمد عليها الآن الطبقات العليا للإنترنت. ترجمة -وبتصرّف- للقسم Presentation Formatting من فصل End-to-End Data من كتاب Computer Networks: A Systems Approach اقرأ أيضًا المقال السابق: التحكم في الازدحام المعتمد على المساواة وهندسة حركة المرور المعرفة بالبرمجيات بروتوكولات طرف إلى طرف End-to-End Protocols في الشبكات الحاسوبية التوجيه Routing بين الأجهزة المتنقلة في الشبكات الحاسوبية كتاب دليل إدارة خواديم أوبنتو
  5. سنتعلم في هذا المقال كيفية التعامل مع إطارات النصوص في سكريبوس، وسننطلق من كيفية إنشائها. إنشاء إطار نص يمكنك إنشاء إطار نص باستخدام إحدى الطرق التالية: انقر على أيقونة "إدراج إطار نص Insert Text Frame" من شريط الأدوات. أو اختر قائمة إدراج Insert ثم إطار نص Text Frame من القائمة. أو من لوحة المفاتيح بالضغط على T. ثم يمكنك باستخدام الفأرة أن تحدّد مكان وحجم إطار النص. انقر باستمرار على زر الفأرة، ثم اسحب قطريًا على الصفحة، حيث تحدّد النقرة إحدى زوايا الإطار، فتُترَك الزاوية المقابلة قطريًا، ولهذا يُفضَّل أن تبدأ بالزاوية العلوية اليسرى، ولكن يمكنك أن تبدأ من أي زاوية تريدها. حذف إطار نص يمكنك حذف إطار محدَّد بالضغط على مفتاح Delete من لوحة المفاتيح أو الاختصار Ctrl + X. إنشاء إطار نص تلقائي يمكنك إنشاء إطارات نصية تلقائيًا في الإصدارات 1.3.3‎.x والإصدارات الأعلى. يوضّح الشكل التالي جزءًا من النافذة التي تظهر عند طلب إنشاء مستند جديد: حدّد عدد الصفحات المطلوبة وعدد الأعمدة والفراغ، ثم انقر على موافق، وبالتالي ستُنشَأ صفحاتك مع إطارات نصية تملأ المساحة المتاحة، كما أنها ستُربَط تلقائيًا، بحيث سينتقل النص تلقائيًا إلى الإطار أو الصفحة التالية حسب الحاجة عند استيراده. لاحظ أن الصفحات المُضافَة ستتبع نظام إطار النص التلقائي عندما تفتح قائمة صفحة Page، ثم تختار إدراج Insert بعد ذلك. قائمة السياق Context Menu يُظهِر النقر بزر الفأرة الأيمن قائمة السياق التي تحتوي على عمليات الإطارات الشائعة المتعددة، ومن أهمها القدرة على تحويل إطار نص إلى نوع آخر من الإطارات. حجم وموقع إطار النص ستجد في هذه المرحلة أن نافذة الخصائص Properties هي عنصرٌ لا غنى عنه للعمل مع سكريبوس Scribus. إن لم تجد هذه النافذة، فافتحها من قائمة نوافذ Windows ثم خصائص Properties، حيث سيعرض التبويب X وY وZ في نافذة الخصائص معلومات دقيقة للغاية حول موضع X وموضع Y في الزاوية اليسرى العلوية، وعرض الإطار وارتفاعه، وتدوير الإطار. لاحظ أن المعلومات تُعرَض فقط للإطار المحدَّد المعروض كحد أحمر متقطع، حيث يُحدَّد الإطار عند إنشائه تلقائيًا، ويمكنك إلغاء تحديد إطار من خلال النقر على الصفحة الموجودة خارج حدود هذا الإطار، كما يمكنك تحديده مرةً أخرى بالنقر داخله، ويجب تحديد إطار لتعديله أو لإعادة تموضعه. تغيير الحجم Resizing وإعادة التموضع Repositioning باستخدام الفأرة: انقر مع السحب في أي مكان داخل الإطار لتغيير موضعه. قد تُوضَع الإطارات خارج الصفحة، أو تنزلق من صفحة إلى أخرى، وهذا يكون اعتمادًا على إصدار سكريبوس. انقر مع السحب على أيّ من المستطيلات الحمراء الصغيرة على طول الحدود لتغيير حجم الإطار. من نافذة خصائص: هناك ثلاث طرق لتغيير الإعدادات هي: التعديل باستخدام لوحة المفاتيح. النقر على السهمين للأعلى أو للأسفل بجانب كل قيمة أو باستخدام أسهم لوحة المفاتيح للأعلى وللأسفل. استخدام عجلة الفأرة، وقد يكون تحريك المؤشر كافيًا، وإلا فانقر على القيمة أولًا. لاحظ أن الضغط باستمرار -في الطريقتين 2 و-3 على مفاتيح Ctrl أو Shift أو Ctrl + Shift (يعمل مع مفاتيح الأسهم للأعلى وللأسفل أيضًا) سيغيّر المكان العشري المتأثر، وقد يكون العرض والارتفاع مرتبطَين افتراضيًا، ولكن يمكنك إلغاء ارتباطهما من خلال النقر على الرمز الذي يشبه السلسلة. سيؤدي الضغط باستمرار على Ctrl وShift وما إلى ذلك إلى تعديل الرقم الذي تغيّر فقط عند استخدام عجلة الفأرة. سيؤدي الانتقال إلى قائمة صفحة ثم اختيار اتبع الشبكة Snap to Grid إلى "التصاق" إطارك بخطوط الشبكة على الصفحة، كما يؤدي الانتقال إلى قائمة عرض View ثم الشبكة والأدلة ثم الضغط على الخيار إظهار الشبكة Show Grid؛ إلى التبديل بين إظهار الشبكة وإخفائها (لا تُطبَع الشبكة وليست جزءًا من ملف PDF). إذا أردت ضبط تباعد الأسطر في الشبكة، فانتقل إلى قائمة ملف File ثم تفضيلات Preferences ثم الأدلة Guides. سيؤدي الانتقال إلى قائمة صفحة ثم اختيار اتبع الأدلة Snap to Guides إلى التصاق إطارك بخطوط الأدلة على الصفحة، ويؤدي الانتقال إلى قائمة عرض ثم الشبكة والأدلة ثم الضغط على الخيار إظهار الأدلة Show Guides؛ إلى التبديل بين إظهار الأدلة وإخفائها (لا تُطبَع الأدلة وليست جزءًا من ملف PDF)، ولهذا فإن أردت تعديل أو إضافة أدلة، فانتقل إلى قائمة صفحة ثم إدارة الأدلة Manage Guides أو من قائمة ملف ثم تفضيلات ثم الأدلة. التدوير Rotation باستخدام الفأرة: انقر على أيقونة تدوير العنصر في شريط الأدوات (أو اضغط على R من لوحة المفاتيح)، ثم انقر داخل الإطار واسحب مع التدوير إلى الزاوية المرغوبة. من نافذة خصائص: توجد الطرق الثلاث نفسها لتغيير الدوران رقميًا تمامًا مثل تغيير الحجم وإعادة التموضع، كما يوجد رمز (يبدو كأحد وجوه حجر النرد) لتغيير النقطة التي يحدث حولها الدوران، مثل نقطة المركز أو إحدى الزوايا الأربع. نسخ الإطارات والعمليات المماثلة هناك عدة طرق مختلفة لنسخ الإطارات أو نقلها وهي: يجب أن تكون على دراية بالنسخ واللصق (باستخدام الاختصارين Ctrl + C وCtrl + V من لوحة المفاتيح) والقص واللصق (باستخدام الاختصارين Ctrl + X وCtrl + V)، والتي يمكن الوصول إليها من قائمة تحرير Edit ومن قائمة السياق بالنقر بزر الفأرة الأيمن في الإطار. كما يمكنك اللصق في صفحة أخرى من خلال الانتقال إلى تلك الصفحة والنقر عليها ثم اللصق، حيث ستكون للإطار الإحداثيات نفسها الموجودة في الصفحة الأصلية. توجد عملية التكرار باستخدام الاختصار Ctrl + Alt + Shift + D من لوحة المفاتيح، أو من قائمة عنصر Item، ثم مضاعفة/تحويل، ثم نسخ مطابق Duplicate. تؤدي هذه العملية إلى إنشاء نسخة مزاحة قليلًا عن النسخة الأصلية وعلى طبقة فوقها. هناك عملية التكرار المتعدد من قائمة عنصر ثم مضاعفة/تحويل، ثم نُسخ مطابقة Multiple Duplicate لإنشاء نسخ متعددة كما يحلو لك، مع إزاحة متسلسلة قابلة للتعديل. يمكنك استخدام هذه العملية لتكرارٍ واحد عندما تريد ضبط الإزاحة. لاحظ أن عملية التكرار من قائمة عنصر ثم نسخ مطابق، ستستخدم نفس الإزاحة بمجرد ضبط الإزاحة في عملية التكرار المتعدد. يمكن سحب عنصر باستخدام زر الفأرة الأيمن، وتظهر نافذة بعد تحرير الزر، حيث تطلب هذه النافذة إما نسخ العنصر أو تحريكه أو إلغاء العملية. أخيرًا، هناك سجل القصاصات Scrapbook من قائمة عنصر Item، ثم إرسال إلى سجل القصاصات Send to Scrapbook أو من قائمة السياق بالنقر بزر الفأرة الأيمن ضمن الإطار، حيث سينشئ ذلك نسخةً باسم من الإطار المحدَّد ومحتوياته في سجل القصاصات، ويمكنك استرداد عنصر محفوظ من سجل القصاصات من قائمة نوافذ Windows ثم سجل القصاصات Scrapbook، لتظهر نافذة تمكّنك من لصق عنصر في الصفحة. لاحظ أنه يمكنك حفظ سجل القصاصات بأكمله في ملف يمكن تحميله بعد ذلك واستخدامه في مستند آخر. ستوضّح لك التجربة أن الإطارات يمكن أن تكون خارج حدود المستند، ولا يزال بإمكانك نسخها وتكرارها ومعالجتها بطرق مختلفة، وستُحفَظ مع المستند في هذه المواقع. فإذا حاولت إنشاء ملف PDF، فستتلقى رسائل خطأ حول عدم وجود كائنات على الصفحة؛ فإذا تجاهلتها، فلن يحتوي ملف PDF على هذه الكائنات، وقد تفقد تتبّع هذه الكائنات خارج المستند خاصة في مستند كبير متعدد الصفحات. إدخال وتحرير نص في الإطار باستخدام محرر القصص Story Editor حدّد إطار النص، ثم انقر على أيقونة محرّر القصص Story Editor من شريط الأدوات، أو من قائمة تحرير Edit ثم حرّر النص باستخدام محرّر القصص، ويتوفر ذلك في قائمة السياق بالنقر بزر الفأرة الأيمن في الإطار. يُعَد محرّر القصص إحدى طرق إدخال النص يدويًا، حيث سيعرض النص بلون الخط الصحيح، ولكن نوع الخط والمسافات لن تظهر في شاشة محرر القصص. يمكنك الاطلاع على المقال كيفية التعامل مع محرّر القصص في سكريبوس للتعرّف على ميزات محرر القصص المتعددة بالتفصيل، واطّلع على فقرة تبويب نص في نافذة خصائص أدناه التي تشرح الميزات نفسها. لاحظ وجود مجموعة كبيرة من ميزات النص في محرّر القصص، بما في ذلك نوع الخط واللون والتباعد بين الأسطر، والتباعد بين الأحرف والمحاذاة والمزيد. سيؤدي تغيير أحد الإعدادات فقط إلى تعديل النص الذي حدّدته والنص الذي سيُدخَل لاحقًا، وهنا من الأحسن أن تأخذ الوقت الكافي لتعلّم كيفية إنشاء واستخدام الأنماط Styles، لتوفير الوقت عند تكرار استخدام خط مع مجموعة محددة من الميزات. التحرير من الصفحة الرئيسية انقر على أيقونة تحرير محتويات الإطار على شريط الأدوات، أو بالضغط على E من لوحة المفاتيح، بعدها انقر داخل الإطار، وسترى مؤشرًا رأسيًا وامضًا، حيث يمكنك إضافة نص أو تحريره. يمكنك تحديد النص وتغيير ميزات النص المحدَّد من تبويب نص Text في نافذة خصائص، أو من نافذة خصائص النص في الإصدار 1.5.7 من سكريبوس التي يمكن الوصول إليها من قائمة نوافذ ثم خصائص المحتوى، حيث ستكون الخيارات مماثلةً لتلك الموجودة في محرّر القصص. تحرير كامل النص في الإطار إن لم يكن إطار النص محدَّدًا فعليًا، فانقر على أيقونة تحديد عنصر Select item من شريط الأدوات، أو بالضغط على C من لوحة المفاتيح، ولكن لاحظ أنه إذا كنت في وضع تحرير محتويات الإطار، فإن الضغط على C سيدخل الحرف C مثل نص في الإطار. حدّد الإطار الذي ترغب في تحرير نصه، وإذا أجريت تغييرات في تبويب نص من نافذة خصائص، أو في نافذة خصائص المحتوى في الإصدار 1.5.7 من سكريبوس، فسيعدَّل كل النص في الإطار. المحارف الخاصة والمحارف المكتوبة بلغة أجنبية هناك إمكانية لإدراج محارف بلغة أجنبية ورموز خاصة غير موجودة على لوحة المفاتيح ورموز طباعية (مثل علامات الاقتباس الطباعية وواصلة طويلة em dash وواصلة قصيرة en dash ومسافات متغيرة الحجم مثلًا) ومحارف الربط Ligatures، حيث يمكن العثور على هذه الإمكانية إما في القائمة الرئيسية، أو قائمة محرّر القصص ضمن قائمة إدراج Insert ثم صورة رمزية Glyph، وقائمة إدراج Insert ثم حرف Character، وقائمة إدراج Insert ثم اقتباس Quote، وقائمة إدراج Insert ثم المسافات والفواصل Spaces & Breaks، وقائمة إدراج Insert ثم الربط Ligature. إذا فشل عرض محارفك الخاصة، فغالبًا هذا يعني أنها غير متوفرة في الخط الذي اخترته، كما لا يعني ظهورها في محرّر القصص أنها ستظهر على الصفحة. تحميل نص من ملف يمكنك تحميل نص من ملف من قائمة السياق بالنقر بزر الفأرة الأيمن في الإطار، ثم استيراد نص Get Text، أو من قائمة ملف ثم استيراد ثم استيراد نص. يمكنك إلحاق نص Append Text، أي استيراد النص ليحل محل النص الذي في الإطار، ويمكنك تحميل ملف في محرّر القصص. هناك ملفات خاصة لنص لوريم إيبسوم "lorem ipsum"، والتي يمكن الوصول إليها بسهولة من قائمة السياق بالنقر بزر الفأرة الأيمن في الإطار، ثم اختيار نص نموذجي Sample Text، أو من قائمة إدراج ثم نص نموذجي. يحتوي سكريبوس على نصوص لوريم إيبسوم في لغات متعددة. مشكلة سطور الأعمدة غير المتساوية إن وضعت نصًا في إطار مكوَّن من عمودين أو أكثر، فقد تظهر الأسطر في هذه الأعمدة غير متساوية، وخاصةً عند دمج إطار نص مع إطار صورة. يمكنك رؤية ذلك عندما يكون لديك إطاران منفصلان من النصوص جنبًا إلى جنب، إذ تظهر هذه المشكلة كما يوضح الشكل التالي، بحيث يمكنك إظهار الخطوط الموضَّحة في الشكل من قائمة عرض View ثم إطارات النص، ثم بالضغط على "أظهِر خط الشبكة الأساسي Show Baseline Grid": يمكن حل هذه المشكلة من تطبيق نمط فقرة Paragraph Style، حيث يمكنك إنشاء وتحرير الأنماط من قائمة تحرير Edit ثم الأنماط Styles، ولكن بما أنك تريد تطبيق النمط، فانتقل إلى محرّر القصص، وانقر على قائمة تحرير Edit، ثم تحرير الأنماط Edit Styles، لتفتح مدير الأنماط إما عن طريق النقر على نمط الفقرة الافتراضي Default Paragraph Style، أو بالنقر على الزر جديد، ثم تحديد نمط الفقرة. سترى داخل مربع المسافات والمحاذاة Distances and Alignment زرًا يشير افتراضيًا إلى تباعد أسطر ثابت Fixed Linespacing، وعندها انقر على هذا الزر وحدد الخيار "حاذِ لخط الشبكة الأساسي Align to Baseline Grid"، ثم طبّق هذا النمط على الفقرات في محرّر القصص حسب الحاجة، أو يمكنك بدلًا من ذلك تحديد النمط في نافذة خصائص النص، وبالتالي ستُحَل المشكلة السابقة ويظهر الحل مشابهًا للشكل التالي: يمكنك ضبط أو تعديل التباعد في شبكة الخط الأساسي Baseline Grid من قائمة ملف File، ثم تفضيلات Preferences، ثم الأدلة Guides للمستندات المستقبلية؛ أو من قائمة File ثم إعداد المستند Document Setup، ثم الأدلة Guides للمستند الحالي. ربط إطار بآخر قد يستمر النص من إطار إلى آخر على الصفحة نفسها أو على صفحات مختلفة، وهنا يمكنك ربط إطار بآخر باستخدام الخطوات التالية: حدّد الإطار الأول. انقر على أيقونة ربط إطارات النصوص Link Text Frames في شريط الأدوات بالضغط على N من لوحة المفاتيح. ثم انقر على الإطار الثاني. استمر في النقر لمواصلة ربط مزيد من الإطارات، وتذكّر أن الروابط تسير بالترتيب الذي تنقر عليه من إطار إلى التالي، ثم انقر على أيقونة الربط Link، أو انقر خارج الإطارات المرتبطة لإنهاء الارتباط. يمكنك إضافة مزيد من الإطارات لاحقًا من خلال تحديد الإطارات المرتبطة، ثم أيقونة الربط، ثم الإطارات التي تريد إضافتها، إذ يجري إلحاق الإطارات المضافة حديثًا في النهاية. لاحظ أنه يمكن ربط الإطارات قبل أو بعد أن تحتوي أيّ محتوى. تعمل عملية فك ربط الإطارات Unlink Text Frames بالآلية نفسها بالنقر على الإطار الأول، ثم على أيقونة فك الربط Unlink، ثم على الإطارات المراد فك ارتباطها. المستويات والطبقات تمثّل الإطارات عامةً -وليس إطارات النص فقط- مساحةً ثنائية الأبعاد يمكنك معالجتها وتحريكها حول مساحة العمل مثل ملاحظة صغيرة، حيث توضَع الواحدة تلو الأخرى على الصفحة، وتوضَع ملاحظات أخرى جديدة على طبقة فوق الطبقة السابقة. يسمح لك المربع الصغير المسمَّى المستوى Level في تبويب X وY وZ من نافذة الخصائص بتحريك الطبقات المحددة للأعلى أو للأسفل باستخدام الأسهم. وبما أن خلفية الإطار قد تكون معتمة أو شفافة، فسيؤثر المستوى الذي يوجد به الإطار على مقدار الإطار الذي يمكن رؤيته بالاعتماد على الإطارات الأخرى المتداخلة أو الموجودة مسبقًا. باقي الخيارات الموجودة في تبويب X وY وZ تعمل الأزرار المتبقية في تبويب X وY وZ ما يلي: قلب الإطار المحدَّد أفقيًا أو رأسيًا. قفل أو وَصد الإطار في مكانه، إذ يُغلَق كل شيء متعلق بإطارك، مثل الحجم والموضع والمحتويات، وقد يؤدي نسخ إطار مقفَل ولصقه إلى نتائج غير متوقعة. قفل حجم الإطار فقط، حيث تختفي رموز التحرير من زوايا وجوانب الإطار. تفعيل أو تعطيل طباعة الإطار، لأنك قد ترغب في استخدام إطار من الصفحة يمثّل رسالةً لك أو لشخص آخر، ولكنه ليس جزءًا من العمل النهائي المطبوع، أو قد يكون الإطار مجرد موفّر مساحة لبعض الأغراض الأخرى. تبويب شكل Shape في نافذة خصائص انقر على تبويب شكل Shape في نافذة خصائص التي ستظهر مثل الشكل التالي: إذا نقرت على الزر الذي يحوي مربعًا في منتصفه في الجزء العلوي من تبويب شكل، فيمكنك تبديل شكل المستطيل بسرعة إلى مجموعة من الأشكال الأخرى، وإذا نقرت على تحرير Edit Shape، فسيصبح لديك تحكم كامل في تحرير الشكل من خلال نافذة محرر العقد مثل الشكل التالي: يمكنك استخدام أداة المضلع Polygon في شريط الأدوات لإنشاء مضلع، ثم تحويله إلى إطار نص باستخدام قائمة السياق، وذلك بالنقر بزر الفأرة الأيمن على المضلع. تدوير الزوايا يمكّنك هذا الخيار من تعديل درجة تدوير زوايا إطار النص (يمكنك استخدام قيم سالبة). تباعد النص انتقل إلى تبويب نص Text في نافذة خصائص، أو إلى نافذة خصائص النص في الإصدار 1.5.7 من سكريبوس؛ بعد ذلك افتح تبويب الأعمدة وتباعد النص Columns & Text Distances، حيث ستجد الخيارات التالية: الأعمدة Columns والفراغ Gap: لضبط عدد الأعمدة داخل الإطار والفراغ بين الأعمدة، ولكن لا يمكنك ضبط أكثر من فراغ واحد، حيث هناك تبديل بين الفراغ بين الأعمدة أو عرض Width الأعمدة، ويجب أن يكون لجميع عروض الأعمدة نفس القيمة. أعلى وأسفل ويسار ويمين: لضبط المسافة بين حافة الإطار والنص الموجود بداخله. مجدولات Tabulators: لضبط علامات الجدولة ضمن الإطار. تدفق أو التفاف النص حول الإطار يمكنك استخدام ذلك لتحديد ما يحدث للنص الموجود أسفل الإطار المحدَّد. يكون مربع الإحاطة Bounding Box (للصورة) وخط الإحاطة Contour Line عند إنشاء إطار صورة بالحجم والموضع نفسه، ولكن انقر على تحرير في تبويب شكل من نافذة خصائص، ويمكنك تغيير حجم خط الإحاطة وموضعه وشكله حسب الرغبة، وذلك من خلال تحديد المربع الخاص بتحرير محيط الخط Edit Contour Line في نافذة محرّر العقد كما يلي: فيما يلي مثال لإطار صورة، ولكنه يمكن أن يكون إطار نص أو شكل: تبويب نص Text في نافذة خصائص توجد في الأعلى عائلة الخط ونمطه. تذكر أنه إذا كنت في وضع تحديد عنصر بدلًا من وضع تحرير المحتويات، فإن التغييرات في إعدادات الخط ستغير كل النص في الإطار، بحيث يمكنك تعديل جزء من النص فقط بالتبديل إلى وضع تحرير المحتويات من خلال الضغط على E من لوحة المفاتيح، ثم تحديد النص الذي ترغب في تعديله. يوجد بعد ذلك حجم الخط Font Size، ثم تباعد الأسطر Linespacing -أي المسافة بين سطور النص-، حيث ستظهر قائمة تقدم ثلاثة خيارات هي: تباعد أسطر ثابت Fixed Linespacing. تباعد أسطر تلقائي Automatic Linespacing. حاذِ لخط الشبكة الأساسي Align to Baseline Grid. يمكن في الخيار الأول ضبط تباعد الأسطر يدويًا، ولكن لا يمكن ذلك في الخيار الثاني. إذا كنت في وضع تحديد عنصر، فسيتغير تباعد الأسطر تلقائيًا أثناء ضبط حجم الخط، ولكن يمكن تعديله بعد ذلك من تباعد الأسطر الثابت بينما لن يتغيّر تلقائيًا في وضع تحرير المحتويات ما لم تستخدم تباعد أسطر تلقائيًا. ويمكنك تغيير درجة تباعد الأسطر تلقائيًا من قائمة ملف ثم تفضيلات ثم فنيات الطباعة Typography؛ أما الخيار الثالث فيعني أنه سيجري محاذاة النص إلى خط الشبكة الأساسي Baseline Grid. تُضبَط المسافة بين هذه الخطوط الأساسية من قائمة ملف ثم إعداد المستند ثم الأدلة للمستند الحالي، ومن قائمة ملف ثم تفضيلات ثم الأدلة للمستندات المستقبلية، ويمكنك إظهار أو إخفاء خط الشبكة الأساسي من قائمة عرض View ثم إطارات النص ثم أظهر خط الشبكة الأساسي Show Baseline Grid. يحدّد الصف التالي من الأزرار المحاذاة Justification، ويفرض الزر الأخير منها محاذاة النص الكاملة، مما قد يؤدي إلى نتائج غير متوقعة، بعدها نجد زر لغة النص. ويمكنك تحديد لغة للوصل التلقائي من تبويب وصل الكلمات Hyphenator الذي يمكنك الوصول إليه من قائمة ملف ثم إعداد المستند ثم الواصلة للمستند الحالي، أو من قائمة ملف ثم تفضيلات ثم الواصلة للمستندات المستقبلية. يسمح زر النمط بالتطبيق السهل لمجموعة من ميزات الخط، حيث يمكنك الانتقال إلى قائمة تحرير ثم أنماط الفقرة Paragraph Styles أو تحرير ثم أنماط الخط Line Styles لإنشاء نمط جديد، أو حفظ الأنماط واستيرادها. إذا فتحنا تبويب إعدادات متقدمة، فسنجد ما يلي: أزِح لخط الحروف الأساسي: والذي يزيد باستخدام القيم الموجبة، أو يقلّل إزاحة الأحرف المحدَّدة عن الخط الأساسي، ويُعَد هذا التعديل غير موجود في محرّر القصص. المسافة بين الأحرف Kerning أو تعقب الدليل. تحجيم عرض الأحرف: لاحظ أن الارتفاع يظل ثابتًا، وأن التغييرات الكبيرة تشوِّه شكل الحروف. تحجيم ارتفاع الأحرف: لاحظ أن العرض يظل ثابتًا، وأن الأحرف تظل على الخط الأساسي. إذا فتحنا تبويب الألوان والمؤثرات فسنجد ما يلي: توجد 3 خيارات للألوان، حيث يشير الخيار الأول إلى لون النص المحدّد أو لون التعبئة، ويشير الخيار الثاني إلى لون حواف النص و/ أو الظل، في حين يشير الخيار الثالث إلى لون خلفية النص المحدَّد. يمكنك ضبط التشبّع بغض النظر عن الصبغة اللونية بالنقر المطوَّل على الرقم الموجود على جانب كل خيار للحصول على قائمة خيارات. يَتْبَع ذلك صف من الأزرار من اليمين إلى اليسار: تسطير النص Underline بما في ذلك المسافات بين الكلمات، حيث يكون عرض الخط والإزاحة قابلَين للتعديل. تسطير كلمات فقط، حيث يكون عرض الخط والإزاحة قابلَين للتعديل. رمز سفلي Subscript. رمز علوي Superscript. كل الحروف كبيرة Superiors: يُطبَّق على الأحرف. أحرف صغيرة Small Caps: يُطبَّق على الأحرف فقط، حيث لاتتأثر أحجام الأحرف الأخرى والأحرف الكبيرة. شطب النص Strikethrough: عرض الخط وموضعه قابلان للتعديل. إضافة مخطط للنص: عرض الخط قابل للتعديل. نص مظلل: وهو في جوهره نسخة طبق الأصل من الحرف وخلفه مباشرةً، ويكون موضعه قابلًا للتعديل. قد يكون لديك كل من المخطط والظل، ولكن لهما اللون والتظليل نفسه. تبويب خط Line في نافذة خصائص يشير خط إطار النص إلى حدود هذا الإطار، وأول شيء يجب أن تعرفه هو أن الإعداد الافتراضي للون الحد Line Color هو "لا شيء None"، لذلك لن يظهر أي شيء حتى يُضبَط لون الحد بغض النظر عن الإعدادات في تبويب خط. اضبط لون الحد من تبويب ألوان في نافذة خصائص، حيث يمكنك اختيار لون لحدود وتعبئة الإطارات والمضلعات. تكون بخلاف ذلك إعدادات الخط المختلفة واضحةً ومباشرة. وإذا كان أحد الإعدادات معطَّلًا، فهذا يعني أنه لا يمكن تطبيقه على الإطارات. تبويب ألوان Color في نافذة خصائص يشير لون الحد Line Color إلى حدود الإطار الذي إعداده الافتراضي هو لا شيء كما ذكرنا سابقًا، ويُعَد لون التعبئة Fill Color هو لون خلفية الإطار، فإذا كان لون التعبئة "لا شيء None"، فهذا يعني أن الخلفية شفافة، ويمكن ضبط لون النص في تبويب نص في نافذة خصائص، ومن نافذة خصائص النص في الإصدار 1.5.7، أو من محرّر القصص. يشير الظل Shade إلى تشبع اللون، بحيث تمثل القيمة 0% لونًا محايدًا بتدرج رمادي. تشير العتمة Opacity في تبويب شفافية إلى التعتيم أو الشفافية النسبية، مع كون 100% معتمًا تمامًا، و0% شفافًا تمامًا. وتجدر الإشارة إلى أن بعض إصدارات PDF وبعض برامج عرض ملفات PDF لا تدعم الشفافية Transparency. لاحظ هنا أنك لست مقيدًا بالألوان التي تراها في تبويب ألوان، كما أنك لست مضطرًا للحصول على كل هذه الخيارات من الألوان. حيث يمكنك الانتقال إلى قائمة تحرير Edit ثم الألوان والتعبئة Colors لإضافة ألوان أو تحريرها أو إزالتها، ويمكن أن تؤدي إزالة الألوان إلى تبسيط استخدام سكريبوس وتقليل حجم الملف المحفوظ. ترجمة -وبتصرّف- للمقال Working with text frames. اقرأ أيضًا كيفية وضع نص على مسار باستخدام برنامج سكريبوس Scribus كيفية التعامل مع إطارات الصور في برنامج سكريبوس Scribus كيفية وضع نص ضمن صورة في سكريبوس scribus كيفية إنشاء تأثير الصور القديمة في برنامج سكريبوس كيفية تطبيق تأثيرات فنية على الصور مع إضافة إطار لها بحواف ضبابية في سكريبوس
  6. سنوضّح كيفية إنشاء غلاف لمجلة "Famous Monsters of Filmland" الساخرة مثل الشكل التالي: ولفعل ذلك يجب أن تكون على دراية مسبقة بكيفية فعل الآتي: إنشاء إطارات نصية وتغيير تنسيق النص الأساسي. إنشاء إطارات الصور وتغيير حجمها. إنشاء الأشكال وضبط ألوان تعبئة وحدود الشكل. الإعداد ستحتاج إلى بعض الموارد قبل بدء العمل، وتتمثل هذه الموارد في العناصر الآتية: الخطوط سنحتاج ثلاثة خطوط هي: الأول: هو الخط "Misfits" الذي سنستخدمه للشعار. الثاني: هو الخط "FreakFinder" الذي سنستخدمه للنص الأساسي. الثالث: هو أي نوع من أنواع الخطوط السميكة Bold -أو يُفضَّل أن يكون النوع الأسمك Black- من خط Arial أو Helvetica، ويُحتمَل أن يكون لديك خط من هذه الخطوط على نظامك، ولكن يمكنك تنزيلها من مواقع الويب المختلفة. الصور سنحتاج صورتين هما: الصورة الأولى هي وجه وحش فرانكشتاين. الصورة الثانية التي اسمها "The Fly"، وهي صورة الغلاف الرئيسية. حيث يمكنك الحصول على نسخة منها من خلال النقر بزر الفأرة الأيمن عليها، ثم حفظها في وحدة التخزين المحلية. إعدادات الصفحة افتح برنامج سكريبوس، ولكن لا تنشئ مستندًا جديدًا لأنه يجب ضبط الهوامش ضبطًا صحيحًا أولًا. اضبط حجم الورقة على القياس "A4" والاتجاه إلى "رأسي Portrait". اضبط الوحدة الافتراضية على الوحدة "نقاط Points". اضبط الهوامش على النحو التالي: يسارًا 20 نقطة، ويمينًا 30 نقطة، وأعلى 30 نقطة، وأسفل 40 نقطة. اضغط على موافق لإنشاء المستند الجديد. اختر قائمة صفحة Page، وتأكد من تحديد الخيار اتبع الأدلة Snap to Guides. اختر قائمة ملف File، ثم إعداد المستند Document Setup. انتقل إلى تبويب "أدلة Guides" وتأكد من ضبط موضع الأدلة في الأمام (في أعلى القائمة). اضغط على موافق لإكمال إعداد المستند الأساسي. يجب الآن إنشاء بعض الألوان التي سنستخدمها لاحقًا. الألوان اختر قائمة تحرير Edit، ثم الألوان والتعبئة Colours. اضغط على احذف غير المستخدم Removed Unused لحذف جميع الألوان باستثناء الألوان الأساسية. إذا كنت لا تعرف كيفية إنشاء الألوان في سكريبوس، فاقرأ مقال كيف تنشئ ألوانك الأساسية في سكريبوس قبل المتابعة. أنشئ الألوان التالية: اللون Main Logo Fill بالقيم: R = 248 وG = 29 وB = 28، وهو لون تعبئة الشعار الأساسي. اللون Sub Logo Fill بالقيم: R = 255 وG = 234 وB = 83، وهو لون تعبئة الشعار الفرعي. اللون Inkscape بالقيم: R = 172 وG = 248 وB = 0. اللون Scribus بالقيم: R = 32 وG = 125 وB = 255. انسخ اللون Main Logo Fill بالاسم "GIMP". انسخ اللون Sub Logo Fill بالاسم "Blender". انسخ اللون Scribus بالاسم "Boxout Fill". انسخ اللون Inkscape بالاسم "Featuring". انسخ اللون الأبيض White بالاسم "Main Logo Outline". انسخ اللون الأسود Black بالاسم "Sub Logo Outline". اضغط على موافق. يجب أن تكون لديك الآن بعض إعدادات الألوان كما في الشكل التالي: يمكنك إعادة استخدام نفس الألوان مع عناصر مختلفة، ولكن إذا قررت تغيير لون كلون "Main Logo Fill"، فسيتغير لون النص "GIMP". قد لا يسبّب ذلك مشاكل في مثالنا، ولكن قد لا تلاحظ التغيير في المستندات الأكثر تعقيدًا إلا بعد فوات الأوان. الخلفية اختر قائمة عرض View ثم تقريب، ثم ملائمة للارتفاع Fit to Height لإظهار الصفحة بأكملها. اختر قائمة إدراج Insert، ثم إطار صورة Image Frame. اسحب من الزاوية العلوية اليسرى من الصفحة إلى الزاوية السفلية اليمنى. بما أنك ضبطت خيار "اتبع الأدلة" سابقًا، فيُفترَض أن ينجذب الإطار إلى حدود الصفحة، وإذا لم يحدث ذلك، فتأكد من تحديد خيار "اتبع الأدلة" واسحب مقابض تحكم الإطار، بحيث يستقر على حواف الصفحة. انقر بزر الفأرة الأيمن على الإطار واختر استيراد صورة Get Image من القائمة. اختر موقع صورة "The Fly" التي نزّلتها مسبقًا، وحدّدها ثم اضغط على موافق. الصورة صغيرة قليلًا بالنسبة للإطار حاليًا، فهي مرتفعة في أعلى الصفحة كما في الشكل التالي: حدّد الصورة، ثم انتقل إلى تبويب صورة Image في نافذة خصائص Properties، أو انتقل إلى نافذة خصائص الصورة في الإصدار 1.5.7 من سكريبوس التي يمكن الوصول إليها من قائمة نوافذ ثم خصائص المحتوى. حدّد خيار "تحجيم حر Free Scaling". غيّر قيمة X-Pos إلى ‎-67 نقطة. غيّر قيمة Y-Pos إلى 30 نقطة. اضبط قيم X-Scale وY-Scale على 120%. بهذا تكون قد أصبحت الصورة أكبر وانتقلت للأسفل لتلائم الشعار الذي سننشئه لاحقًا، لكن لديك الآن لسوء الحظ فراغ أبيض في أعلى الصفحة، ومع ذلك فلا بأس في وجوده في هذه المرحلة. اختر قائمة إدراج ثم شكل Shape، ثم أشكال افتراضية Default Shapes، ثم مستطيل Rectangle. اسحب الشكل من الزاوية العلوية اليسرى من الصفحة إلى الجانب الأيمن من الصفحة، واجعل ارتفاعه نحو 50 نقطة (لست بحاجة إلى أن تكون دقيقًا، ولكن تأكّد من تداخل الشكل مع الصورة بأكثر من نصف ارتفاع الفراغ الأبيض). انتقل إلى تبويب ألوان Colours في نافذة خصائص. انقر على لون التعبئة "Fill". اختر خيار "متدرج خطي Vertical Gradient" من القائمة. حدّد نقطة توقف التدرج اليمنى في شريط التدرج، بحيث تتحول إلى اللون الأحمر. غيّر "التعتيم أو العتمة Opacity" (تحت قائمة الألوان) إلى 0%. اسحب نقطة توقف التدرج اليسرى إلى الموضع 60%، فإذا اختفى الفراغ الأبيض تمامًا فهذا جيد، وإن لم يكن الأمر كذلك، فاسحب نقطة توقف التدرج اليسرى أكثر إلى اليمين إلى أن يختفي الفراغ. يجب أن تبدو صفحتك الآن مثل الشكل التالي: الشعار اختر قائمة نوافذ Windows، ثم الطبقات Layers لفتح نافذة طبقات. اضغط على زر + لإنشاء طبقة جديدة. انقر نقرًا مزدوجًا على اسم الطبقة الجديدة وأعِد تسميتها بالاسم "Logo". يمكّنك وضع الشعار على طبقة منفصلة من التأكد من أنه لا يمكنك العبث -أو تحديد- أي شيء على طبقات أخرى عن طريق الخطأ عندما تعمل على هذه الطبقة. الشعار الرئيسي اختر قائمة إدراج Insert، ثم إطار نص Text Frame. اضغط مع الاستمرار على المفتاح Shift من لوحة المفاتيح، وانقر على أي مكان بالقرب من منتصف الصفحة، حيث سيؤدي استخدام طريقة الضغط على مفتاح Shift لإدراج إطار إلى اقتراب حجم هذا الإطار تلقائيًا من الأدلة، بما في ذلك الهوامش وحواف الصفحة. اضبط طبقة "الخلفية" على أنها غير مرئية، واضغط على خيار "العين" في نافذة طبقات. انقر نقرًا مزدوجًا على إطار النص وأدخِل النص "MonsTers" (بدون علامات الاقتباس)، حيث يكون الحرفان "M" و"T" كبيرين. ألغ تحديد إطار النص من خلال النقر في أي مكان على الصفحة، ثم أعِد تحديده. غيّر الخط إلى "Misfits" من تبويب نص Text في نافذة خصائص، أو من نافذة خصائص النص في الإصدار 1.5.7 من سكريبوس التي يمكن الوصول إليها من قائمة نوافذ ثم خصائص المحتوى. غيّر حجم الخط إلى 154 نقطة. غيّر اللون في في تبويب الألوان والمؤثرات Color and Effects إلى اللون "Main Logo Fill". غيّر "التتبع اليدوي Manual Tracking"، وهو الرمز TI مع سهم برأسين أسفله في تبويب "إعدادات متقدمة Advanced Settings" إلى القيمة ‎-8%. غيّر المحاذاة Alignment إلى "اليمين". يجب أن يكون لديك الآن شيء يشبه الشكل التالي: اضغط على أيقونة "مخطط Outline" في تبويب "الألوان والمؤثرات". غيّر لون حواف النص أعلى أيقونة "المخطط" إلى اللون Main Logo Outline. اضغط على أيقونة "مخطط" واستمر في الضغط على زر الفأرة (نقرةً طويلة) إلى أن يظهر مربع حوار ضبط صغير. غيّر قيمة "عرض الخط Line Width" إلى 3%. وبذلك نكون قد أنشأنا الشعار الرئيسي، وفي التالي اجعل طبقة "الخلفية" مرئيةً مرةً أخرى في نافذة طبقات لمشاهدة التأثير كما في الشكل التالي: أجزاء الشعار الفرعي النص Publication اجعل طبقة "الخلفية" غير مرئية مرةً أخرى. اختر قائمة إدراج Insert ثم إطار نص Text Frame، وأنشئ شكل مستطيل يبلغ نحو نصف عرض الصفحة ونصف ارتفاع الشعار. انقر نقرًا مزدوجًا على إطار النص الذي أنشأته للتو وأدخِل النص "A NONSUCH PUBLICATION" (بدون علامات الاقتباس). ألغِ تحديد كل شيء، ثم أعِد تحديد إطار النص. انتقل إلى تبويب نص في نافذة خصائص (أو نافذة خصائص النص في الإصدار 1.5.7 من سكريبوس). غيّر الخط إلى "Arial Black"، أو أي خط سميك آخر. غيّر حجم الخط إلى 10 نقاط. غيّر المحاذاة إلى اليمين. اسحب إطار النص إلى الأعلى واليمين لينجذب إلى داخل الهوامش. افتح تبويب الألوان والمؤثرات وغيّر اللون إلى الأبيض، وهنا يجب أن يختفي النص. حدّد نص الشعار الرئيسي. افتح تبويب "الأعمدة وتباعد النص Columns & Text Distances"، واضبط المسافة من "الأعلى" على القيمة 10 نقاط. اجعل طبقة "الخلفية" مرئيةً لرؤية النتيجة. ثم يجب إكمال النص الذي يتكون من اسم المجلة. النص Infamous اجعل طبقة "الخلفية" غير مرئية مرةً أخرى. اختر قائمة إدراج ثم إطار نص وأنشئ شكل مستطيل يقارب نصف عرض الصفحة ونحو نصف ارتفاع الشعار. انقر نقرًا مزدوجًا على إطار النص الذي أنشأته للتو وأدخِل النص "INFAMOUS" (بدون علامات الاقتباس). ألغِ تحديد كل شيء ثم أعِد تحديد إطار النص. انتقل إلى تبويب نص في نافذة خصائص، أو انتقل إلى نافذة خصائص النص في الإصدار 1.5.7 من سكريبوس. غيّر الخط إلى Arial Black، أو أي خط سميك آخر. غيّر حجم الخط إلى 22 نقطة. افتح تبويب الألوان والمؤثرات (إن لم يكن مفتوحًا سابقًا)، وغيّر لون تعبئة Fill Color النص إلى اللون Sub Logo Fill. اضغط على أيقونة "مخطط Outline" (يمكنك استخدام تلميحات الأدوات للعثور عليها). تأكد من ضبط اللون الأسود للون حواف النص Outline colour أعلى أيقونة مخطط. انقر نقرًا طويلًا على أيقونة "مخطط" وغيّر قيمة عرض الخط Line Width إلى 3%. اسحب إطار النص "INFAMOUS" بين الحرفين M وT للشعار الرئيسي، وتأكّد من أنه في منتصف المسافة بين هذين الحرفين (إن لم يكن الأمر كذلك، فيمكنك تعديله لاحقًا). النص Fossland حدّد إطار النص INFAMOUS، ثم اختر قائمة عنصر Item، ثم مضاعفة/تحويل ثم نسخ مطابق Duplicate. انقر نقرًا مزدوجًا على إطار النص المكرَّر وغيّر النص إلى "OF FOSSLAND" (بدون علامات الاقتباس). ألغِ تحديد كل شيء ثم أعِد تحديد إطار النص "OF FOSSLAND". انتقل إلى تبويب نص في نافذة خصائص، أو انتقل إلى نافذة خصائص النص في الإصدار 1.5.7 من سكريبوس. غيّر المحاذاة إلى اليمين. اسحب الإطار إلى اليمين، بحيث ينجذب إلى الهامش الأيمن. اجعل طبقة "الخلفية" مرئية. اضبط موضع الإطار الرأسي بحيث يبدو صحيحًا، ويمكنك ضبط إطار "INFAMOUS" إن لزم الأمر. يجب أن يكون لديك الآن شعارك النهائي الذي يشبه الشكل التالي: ثم سننشئ مربع معلومات في أعلى اليسار. مربع المعلومات اختر قائمة نوافذ Windows، ثم الطبقات Layers لفتح نافذة طبقات إن لم تكن مفتوحة مسبقًا. اضغط على زر + لإنشاء طبقة جديدة. انقر نقرًا مزدوجًا على اسم الطبقة الجديدة وأعد تسميتها بالاسم "Boxout". حرّك مؤشر الفأرة إلى يسار لوحة رسم سكريبوس، بحيث يكون فوق المسطرة الرأسية، وإذا كانت المساطر غير مرئية، فاختر قائمة عرض View ثم القياس ثم أظهر المساطر Show Rulers. اسحب المسطرة إلى اليمين وحرّر زر الفأرة عندما تكون بالقرب من 90 نقطة لإنشاء دليل رأسي جديد، حيث سيُعرَض أثناء السحب تلميح لإخبارك بمكان إنشاء الدليل، ولهذا فلا حاجة إلى أن تكون دقيقًا هنا. حرّك مؤشر الفأرة إلى أعلى لوحة رسم سكريبوس بحيث يكون فوق المسطرة الأفقية. اسحب المسطرة للأسفل وحرّر زر الفأرة عندما تكون عند 190 نقطة لإنشاء دليل أفقي جديد. اختر قائمة عرض ثم تقريب ثم 200% للتقريب ثم مرّر الصفحة لتتمكن من رؤية أعلى يسارها. يسهّل استخدام الأدلة إنشاء الأشياء التي ستنتقل ضمن المساحة التي أنشأتها بين الهوامش والأدلة. اختر قائمة إدراج، ثم شكل، ثم أشكال افتراضية، ثم مستطيل. انقر مع الضغط على مفتاح Shift داخل المسافة بين الهوامش والأدلة لإنشاء مستطيل جديد. انتقل إلى تبويب ألوان في نافذة خصائص. اضغط على "لون الحد Outline" واضبط اللون على "لا شيء None". اضغط على لون التعبئة واضبطه على اللون "Boxout Fill". ثم سننشئ الصورة التي تتماشى مع هذه المعلومات. صورة وحش فرانكشتاين اختر قائمة إدراج ثم إطار صورة. انقر مع الضغط على مفتاح Shift داخل المسافة بين الهوامش والأدلة لإنشاء الإطار الجديد. اسحب مقبض التحكم السفلي لإطار الصورة للأعلى، بحيث يغطي الإطار الثلثين العلويين من المستطيل الأزرق، ولا حاجة إلى أن تكون دقيقًا هنا. انقر بزر الفأرة الأيمن على إطار الصورة واختر استيراد صورة Get Image من القائمة. اختر موقع صورة وحش فرانكشتاين، وحدّدها ثم اضغط على موافق. انقر بزر الفأرة الأيمن على إطار الصورة واختر اضبط الصورة إلى الإطار Adjust Image to Frame من القائمة. لديك الآن الصورة في الإطار لكنها صغيرة جدًا، لذلك يجب إجراء بعض التعديلات. حدّد الخيار "تحجيم حر" في تبويب صورة من نافذة خصائص، أو من نافذة خصائص الصورة في الإصدار 1.5.7 من سكريبوس. غيّر قيم X-Pos وY-Pos وX-Scale وY-Scale ليصبح الوجه كبيرًا ويتوسّط الإطار، حيث ستعتمد القيم التي تحتاجها على مكان إنشاء الأدلة وكيفية تغيير حجم الإطار. ثم يجب إضافة نص تحت الصورة بعد وضعها في المكان المناسب الذي تريده. إضافة المعلومات اختر قائمة إدراج ثم إطار نص. انقر مع الضغط على مفتاح Shift داخل المسافة بين الهوامش والأدلة لإنشاء الإطار الجديد. انقر نقرًا مزدوجًا على إطار النص وأدخل النص "INFAMOUS" (بدون علامات الاقتباس). ألغِ تحديد كل شيء ثم أعِد تحديد إطار النص "INFAMOUS". غيّر الخط إلى Arial Black، أو أي خط سميك آخر. غيّر حجم الخط إلى 10 نقاط. غيّر محاذاة النص إلى المركز. اسحب مقبض التحكم العلوي لإطار النص للأسفل ليصبح أسفل إطار الصورة. حدّد إطار النص، ثم اختر قائمة عنصر ثم مضاعفة/تحويل، ثم نُسخ مطابقة Multiple Duplicate، ثم اضغط موافق لإنشاء إطار مكرر فوق النسخة الأصلية، ويمكنك استخدام نسخ / لصق لتطبيق ذلك. حدّد الإطار المكرَّر الجديد وغيّر النص إلى "MONSTERS" (بدون علامات الاقتباس). ألغِ تحديد كل شيء ثم أعِد تحديد إطار النص "MONSTERS". افتح تبويب "إعدادات متقدمة" في تبويب نص من نافذة خصائص، أو من نافذة خصائص النص في الإصدار 1.5.7 من سكريبوس، وغيّر "تحجيم ارتفاع الحروف Scaling Height" إلى 140%، واستخدم تلميحات الأدوات لمعرفة الحقل الذي يجب تغييره. اسحب مقبض التحكم العلوي لإطار النص للأسفل ليصبح أسفل النص "INFAMOUS". كرّر الآن الإجراءات نفسها الموجودة في قسم إضافة النص "INFAMOUS" ولكن غيّر نص "INFAMOUS" إلى "‎#145"، وغيّر اللون إلى الأبيض وحجم الخط إلى 16 نقطة. اسحب الجزء العلوي من هذا الإطار الجديد إلى أسفل نص "MONSTERS". كرّر الخطوات نفسها ولكن غيّر النص إلى "Sep 2015"، وغيّر اللون إلى "الأبيض" وحجم الخط إلى 9 نقاط، ثم اسحب الجزء العلوي من هذا الإطار الجديد إلى أسفل النص "‎#145". يجب أن يكون لديك الآن كل النص لهذا المربع، ولكن قد تحتاج إلى تعديله ليبدو صحيحًا مثل الشكل التالي: إن لم تكن راضيًا عن النتيجة، فاستمر في إجراء التعديلات. سننشئ الآن النص المميّز Featuring أسفل الصفحة. النص المميز أسفل الغلاف Featuring اختر قائمة نوافذ Windows ثم طبقات Layers لفتح نافذة طبقات إن لم تكن مفتوحة مسبقًا. اضغط على زر + لإنشاء طبقة جديدة. انقر نقرًا مزدوجًا على اسم الطبقة الجديدة وأعِد تسميتها بالاسم "Feature". اختر قائمة إدراج ثم إطار نص. انقر مع الضغط على مفتاح Shift في المساحة الموجودة أسفل هامش الصفحة السفلي لإنشاء الإطار الجديد. اسحب مقبض تحكم الإطار الأيسر إلى اليسار، بحيث ينجذب إلى الحافة اليسرى من الصفحة. اسحب مقبض تحكم الإطار الأيمن إلى اليمين، بحيث ينجذب إلى الحافة اليمنى من الصفحة. يجب أن يغطي الإطار الآن المساحة الصغيرة أسفل الهامش السفلي تمامًا. انقر نقرًا مزدوجًا على إطار النص وأدخِل النص "FEATURING THE FIVE FACES OF LIBREOFFICE" (بدون علامات الاقتباس). ألغِ تحديد كل شيء ثم أعِد تحديد إطار النص "FEATURING THE FIVE FACES OF LIBREOFFICE". غيّر الخط إلى "FreakFinder" من تبويب نص في نافذة خصائص، أو من نافذة خصائص النص في الإصدار 1.5.7 من سكريبوس. غيّر حجم الخط إلى 33 نقطة. غيّر اللون إلى الأبيض. غيّر محاذاة النص إلى المركز. افتح تبويب "إعدادات متقدمة"، وغيّر "التتبع اليدوي" إلى 6%. افتح تبويب "الأعمدة وتباعد النص"، وغيّر المسافة من "الأعلى" إلى 7 نقاط. انقر نقرًا مزدوجًا على إطار النص، وحدّد الكلمة "FEATURING" فقط. غيّر اللون إلى "Featuring". ألغِ تحديد إطار النص لرؤية التغييرات. أعِد تحديد إطار النص. حدّد لون "التعبئة" في تبويب ألوان من نافذة خصائص وغيّره إلى اللون "الأسود". اختر قائمة عرض ثم تقريب، ثم ملائمة للارتفاع لرؤية الصفحة بأكملها. يجب أن تبدو صفحتك الآن بالشكل التالي: سننشئ الآن العناوين. العناوين العناوين الرئيسية اختر قائمة نوافذ Windows، ثم الطبقات Layers لفتح نافذة طبقات إن لم تكن مفتوحة مسبقًا. اضغط على زر + لإنشاء طبقة جديدة. انقر نقرًا مزدوجًا على اسم الطبقة الجديدة وأعِد تسميتها بالاسم "Headlines". اختر قائمة إدراج ثم إطار نص. انقر في مكان ما أسفل المعلومات. أدخل عرضًا قيمته 300 نقطة وارتفاعًا قيمته 140 نقطة واضغط موافق لإنشاء إطار نص. حدّد إطار النص، ثم انتقل إلى تبويب نص في نافذة خصائص، أو انتقل إلى نافذة خصائص النص في الإصدار 1.5.7 من سكريبوس. غيّر الخط إلى FreakFinder. غيّر حجم الخط إلى 46 نقطة. غيّر تباعد الأسطر Line Spacing إلى 42 نقطة. غيّر اللون إلى الأبيض. اختر قائمة عنصر ثم مضاعفة/تحويل، ثم نُسخ مطابقة Multiple Duplicate. انتقل إلى تبويب بعدد الصفوف والأعمدة By Rows & Columns. غيّر قيمة "عدد الصفوف Rows" إلى 4، ثم اضغط موافق. لديك الآن أربعة إطارات نصية، ولكن لا يمكنك رؤيتها لأنها لا تحتوي على نصوص. اختر قائمة تحرير Edit، ثم تحديد الكل Select All لتحديد كل شيء في الطبقة الحالية (إطارات النص الأربعة). اسحب الإطارات إلى اليسار حتى تنجذب إلى الهامش الأيسر، وليس إلى الدليل الذي أضفته مسبقًا. لا تقلق في هذه المرحلة بشأن ترتيب الإطارات عموديًا، إذ يجب تعديل ذلك لاحقًا. ألغِ تحديد كل شيء، ثم انقر نقرًا مزدوجًا على إطار النص العلوي. أدخِل النص "TREMBLE BEFORE THE RAZOR-SHARP INKSCAPE" (بدون علامات الاقتباس). انقر نقرًا مزدوجًا على إطار النص التالي وأدخِل النص "AN ENCOUNTER WITH THE CUNNING SCRIBUS" (بدون علامات الاقتباس). انقر نقرًا مزدوجًا على إطار النص التالي وأدخِل النص "WRITHE IN THE BLOOD & GUTS[ENTER] OF GIMP" (بدون علامات الاقتباس)، حيث [ENTER] يعني أنه يجب عليك الضغط على مفتاح ENTER من لوحة المفاتيح للنزول إلى سطر جديد، ثم المتابعة في إدخال النص. انقر نقرًا مزدوجًا على إطار النص التالي وأدخِل النص "BEHOLD THE BEAST OF BLENDER[ENTER] NOW IN 3D!‎" (بدون علامات الاقتباس). لا تنسَ الضغط على مفتاح ENTER. يجب أن يكون لديك الآن شيء يشبه الشكل التالي: اختر قائمة تحرير ثم تحديد الكل لتحديد كل إطارات النص. استخدم المفتاحين للأعلى وللأسفل من لوحة المفاتيح، لدفع كل الإطارات للأعلى أو للأسفل من أجل توزيع النص بين الإطارات المتباعدة تباعدًا مناسبًا بين مربع المعلومات في أعلى الصفحة والنص المميز في الأسفل. سنباعد بين النصوص وليس بين الإطارات، لذلك يُفضَّل تشغيل "نمط المعاينة" -كما ذكرنا سابقًا- حتى لا تعترض الإطارات طريقك. حدّد إطار النص العلوي واختر قائمة عنصر، ثم تحويل لـ Convert To، ثم مخططات تفصيلية Outlines. أعِد تحديد النص مرةً أخرى، واختر قائمة عنصر، ثم التجميع ثم فك التجميع Ungroup. كرّر الخطوتين الأخيرتين على إطارات النص الأخرى في نفس الطبقة. محاذاة العناوين سنعالج النص بحيث يتدفق حول الكائن الموجود في الصورة الرئيسية. سنطبّق ذلك يدويًا ولكن يُفضَّل أن تكون لديك أدلة Guide للعمل وفقها، وبما أن سكريبوس لا يسمح إلا بأدلة مستقيمة، فيجب التحايل للوصول إلى النتيجة المطلوبة الآتية: افتح نافذة طبقات وأنشئ طبقةً جديدة، دون الاهتمام بإعادة تسميتها. اختر قائمة إدراج ثم شكل ثم أشكال افتراضية، ثم دائرة. ارسم شكلًا بيضويًا يغطي الكائن. يوضح الشكل التالي مثالًا عن ذلك (باللون الأخضر): استخدم تبويب ألوان Colours في نافذة خصائص Properties لتغيير لون حد الشكل البيضوي إلى لون ساطع يمكن رؤيته بسهولة. استخدم تبويب خط Line في نافذة خصائص لتغيير عرض الخط إلى حوالي 4 نقاط، لتتمكّن من رؤية حدود هذا الشكل بصورة أفضل. يمكنك الآن استخدام الجانب الأيسر من الشكل البيضوي دليلًا لمحاذاة أو لتغيير حجم النص. استخدم نافذة طبقات للعودة إلى الطبقة "Headlines"، وسنغيّر الآن حجم النص بحيث يتوافق مع "دليل" الشكل البيضوي، ولا يتداخل معه. اسحب مع التحديد الأحرف التي تشكل السطر الأول من النص "TREMBLE BEFORE". استخدم مقبض تحكم النص المحدَّد الأيمن لسحب الجانب الأيمن من النص إلى حيث يلتقي بمركز خط الشكل البيضوي، إذ يجب أن يمنحك السهم الأزرق في الشكل التالي فكرةً عمّا يجب عليك تنفيذه: كرّر الخطوتين الأخيرتين لكل سطر من النص، إذ يجب أن يكون لديك الآن شيء يشبه الشكل التالي: تعديلات العناوين يمكنك الحصول على تأثير أفضل من خلال تصغير بعض الكلمات -مثل THE وOF وما إلى ذلك-، بحيث يمكن تكبير الكلمات الأهم. اسحب مع التحديد الكلمة "THE" في السطر "THE RAZOR-SHARP"، واسحب مقبض التحكم الأيمن للتحديد إلى اليسار قليلًا. اسحب مع التحديد النص "RAZOR-SHARP" واسحب جانبه الأيسر إلى اليسار لتكبيره، مع الحفاظ على فراغ مناسب بينه وبين الكلمة "THE". كرّر الخطوات السابقة لتصغير جزء واحد من النصوص مثل الأسطر التالية مع جعل الجانب الآخر من هذه الأسطر أعرض والتأكد من الالتزام بدليل الشكل البيضوي: "AN" في النص "AN ENCOUNTER". "WITH THE" في السطر "WITH THE CUNNING". "IN THE" في السطر "WRITHE IN THE". "OF" في السطر "OF GIMP" "OF" في السطر "OF BLENDER". يُفضَّل أن تعدّل 3 و! في 3D!‎ -في نص Blender- لتكون هذه الأحرف بنفس الحجم من خلال الخطوات التالية: حدّد الرقم 3، ثم اضغط على مفتاح Shift مع تحديد إشارة !، ثم اضغط على مفتاح Shift مع تحديد الحرف D. اختر قائمة نوافذ Windows، ثم حاذِ ووزّع Align & Distribute لفتح نافذة حاذِ ووزّع. حدّد الاختيار الأخير Last Selected من قائمة "متصل بـ Relative To". حدّد الخيار "غيّر الحجم Resizing" من قائمة "حاذِ الجوانب بـ Align Sides By". اضغط على أيقونة "حاذِ الجوانب العليا Align Tops". بهذا انتهينا من "دليل" الشكل البيضوي الآن، حيث يمكنك إما حذف تلك الطبقة أو جعلها غير مرئية، فالخيار متروك لك. التعديلات النهائية حدّد حرفًا في السطر الأول من النص ثم اضغط على مفتاح Shift مع تحديد ثلاثة أو أربعة أحرف أخرى في نفس السطر عشوائيًا. اسحب مقبض تحكم الأحرف المحدَّدة العلوي للأسفل قليلًا، بحيث تصبح هذه الأحرف أصغر قليلًا. استخدم مفتاحًا للأعلى من لوحة المفاتيح لدفع هذه الأحرف قليلًا عن باقي النص الموجود في هذا السطر. كرر الآن التعليمات الأخيرة على أحرف مختلفة، مما يجعلها أصغر قليلًا ومدفوعة للأعلى بعض الشيء. كرّر تعليمات تغيير الحجم والدفع لكل سطر من النص. قد تحتاج إلى تغيير حجم مجموعة واحدة فقط من الأحرف عندما يحتوي السطر على كلمة واحدة فقط، لذلك اختر ما يناسبك. يجب أن تحصل في النهاية على شيء يشبه الشكل التالي: تلوين النص ستبقى أسماء التطبيقات الموجودة في النص -INKSCAPE وSCRIBUS وGIMP وBLENDER- بيضاء بينما سنلوّن النص المتعلّق بكل منها. حدّد أي حرف في السطر الأول مثل الحرف T في "TREMBLE". تأكّد من اختيار لون التعبئة Fill من تبويب ألوان Colours في نافذة خصائص. اسحب مع التحديد كلّ النص "TREMBLE BEFORE". حدّد لون التعبئة الذي اسمه "Inkscape" من تبويب ألوان في نافذة خصائص. كرّر الخطوات نفسها للسطر "RAZOR-SHARP" مع التأكد من تحديد أحد الأحرف وفتح تبويب "ألوان" قبل سحب وتحديد كل السطر. استخدم نفس الخطوات لتلوين الأسطر الأخرى باللون المرتبط بكل تطبيق في النص. الإصلاح النهائي قد تلاحظ تعارض النص والخلفية في بعض الأماكن، ولكن يمكن إصلاح ذلك بتعبئة متدرجة. استخدم نافذة طبقات لتحديد طبقة "الخلفية". اختر قائمة إدراج ثم شكل ثم أشكال افتراضية، ثم مستطيل. اسحب الشكل من أعلى يسار الصفحة إلى أسفل يمينها. تأكّد من أنك قريب من زوايا الصفحة، بحيث ينجذب الشكل إلى الجوانب. انتقل إلى تبويب ألوان في نافذة خصائص واضغط على "لون الحد". غيّر اللون إلى "لا شيء". اضغط على لون التعبئة. حدّد الخيار "متدرج خطي Horizontal Gradient"، حيث يجب أن تختفي صورة الخلفية خلف مستطيل أسود ولكن لا بأس في ذلك. حدّد نقطة توقف التدرج الأيمن ثم غيّر التعتيم Opacity إلى 0%. اسحب نقطة توقف التدرج الأيمن إلى اليسار إلى الموضع 50% مثلًا. الخلاصة إذا اعتقدت أن إنشاء غلاف مجلة يتطلب كثيرًا من العمل، فلا بأس في ذلك لأنه يستحق كل هذا العناء. لا تتردد في تعديل أي شيء تراه في تخطيط الغلاف غير مناسب حسب الضرورة. ترجمة -وبتصرّف- للمقال How to make a parody magazine cover. اقرأ أيضًا كيفية وضع نص ضمن صورة في سكريبوس scribus كيفية التعامل مع إطارات الصور في برنامج سكريبوس Scribus كيفية تصميم خريطة كنز باستخدام برنامج سكريبوس كيفية رسم صندوق منظوري الشكل في برنامج سكريبوس Scribus كيفية إنشاء شارة تقليدية ذات شريط في برنامج سكريبوس Scribus
  7. يشير مصطلح الخدمات المتكاملة أو اختصارًا IntServ، إلى مجموعةٍ من الأعمال التي أنتجتها منظمة IETF في الفترة ما بين عامي 1995-1997، حيث طوَّرت مجموعة عمل IntServ مواصفات عددٍ من فئات الخدمة المصمَّمة لتلبية احتياجات بعض أنواع التطبيقات الموضحة أعلاه، كما حددت كيفية استخدام بروتوكول RSVP لإجراء حجوزات باستخدام فئات الخدمة هذه، وستقدم الفقرات التالية لمحةً عامة عن هذه المواصفات والآليات المستخدَمة لتطبيقها. فئات الخدمة صُمِّمت إحدى فئات الخدمة من أجل التطبيقات غير المتسامحة، حيث تتطلب هذه التطبيقات عدم وصول الرزمة في وقتٍ متأخر أبدًا، ويجب أن تضمن الشبكة أن الحد الأقصى للتأخير الذي ستشهده أي رزمة له قيمةٌ محددة، كما يمكن للتطبيق بعد ذلك ضبط نقطة التشغيل الخاصة به، بحيث لا تصل أي رزمةٍ بعد وقت التشغيل. سنفترض أنه يمكن دائمًا معالجة الوصول المبكر للرزم عن طريق التخزين المؤقت، ويشار إلى هذه الخدمة باسم الخدمة المضمونة guaranteed service. نظرت منظمة IETF في العديد من الخدمات الأخرى، بالإضافة إلى الخدمة المضمونة، لكنها استقرت في النهاية على خدمةٍ لتلبية احتياجات التطبيقات المتسامحة والتكيفية، والتي تُعرف باسم الحِمل المُتحكَّم به controlled load، وقد كان الدافع وراء ذلك هو ملاحظة أن التطبيقات الحالية من هذا النوع تعمل جيدًا على الشبكات غير المحمَّلة بصورةٍ كبيرة، وتعدّل تطبيقات الصوت على سبيل المثال نقطة التشغيل الخاصة بها، مع اختلاف تأخير الشبكة وتنتج جودة صوت معقولة طالما تبقى معدلات الفقد في حدود 10% أو أقل. يُعَد الهدف من خدمة الحِمل المُتحكَّم به، هو محاكاة شبكةٍ محمَّلة بصورةٍ خفيفة لتلك التطبيقات التي تطلب الخدمة، على الرغم من أن كل الشبكة قد تكون في الواقع محمَّلة بصورةٍ كبيرة، وتتمثل الحيلة في ذلك في استخدام آلية أرتال مثل آلية WFQ لعزل حركة مرور الحِمل المتحكَّم به عن حركة المرور الأخرى، وأحد أشكال التحكم في القبول للحد من إجمالي حركة مرور الحِمل المُتحكَّم به على رابطٍ بحيث يظل الحِمل منخفضًا بصورةٍ معقولة. سنناقش التحكم في القبول admission control بمزيدٍ من التفاصيل أدناه. من الواضح أن هاتين الفئتين من الخدمات تمثلان مجموعةً فرعيةً من جميع الأصناف التي قد يجري توفيرها، فقد حُدِّدت الخدمات الأخرى ولكنها لم تُوحَّد على أنها جزءٌ من عمل IETF، وقد أثبتت الخدمتان الموصوفتان أعلاه حتى الآن جنبًا إلى جنب مع خدمة أفضل جهد التقليدية أنهما مرنتان بما يكفي لتلبية احتياجات مجموعةٍ واسعة من التطبيقات. نظرة عامة على الآليات لقد عززنا الآن نموذج الخدمة الأفضل جهدًا لدينا مع بعض فئات الخدمة الجديدة، ولكن السؤال التالي هو كيف ننفذ شبكةً توفر هذه الخدمات للتطبيقات؟ يوضح هذا القسم الآليات الرئيسية، لهذا ضع في الحسبان أثناء قراءة هذا القسم أن الآليات الموصوفة لا تزال قيد التطوير بواسطة مجتمع تصميم الإنترنت، وأن الشيء الرئيسي الذي يجب استبعاده من المناقشة هو الفهم العام للأجزاء المتضمنة في دعم نموذج الخدمة الموضح أعلاه. أولًا، يمكننا مع خدمة أفضل جهد فقط، إخبار الشبكة بالمكان الذي نريد أن تذهب إليه رزمنا ونتركها عند هذا الحد، ولكن الخدمة في الوقت الحقيقي ستتضمن إخبار الشبكة بشيءٍ أكثر عن نوع الخدمة التي نطلبها، فقد نعطيها معلوماتٍ نوعية مثل "استخدام خدمة حِملٍ متحكَّمٍ به"، أو معلوماتٍ كمية مثل "أحتاج إلى تأخير 100 ميلي ثانية بحدٍ أقصى"، وسنحتاج إلى إخبار الشبكة بشيءٍ حول ما سنحقنه فيها، بالإضافة إلى وصف ما نريده، نظرًا لأن تطبيق حيز النطاق التراسلي المنخفض سيتطلب موارد شبكةٍ أقل من تطبيق حيز النطاق التراسلي العالي. يُشار إلى مجموعة المعلومات التي نقدمها للشبكة باسم flowspec، ويأتي هذا الاسم من تسمية مجموعة الرزم المرتبطة بتطبيقٍ واحد، والتي تشترك في المتطلبات المشتركة باسم التدفق flow. وفي خطوة ثانية، يجب أن تقرر الشبكة ما إذا كان يمكنها في الواقع تقديم خدمةٍ معينة عندما نطلب من الشبكة تزويدنا بها، فإذا طلب 10 مستخدمين على سبيل المثال خدمةً يستخدم فيها كل منهم 2 ميجابت في الثانية من سعة الرابط باستمرار وكلهم يشتركون في رابطٍ بسعة 10 ميجابت في الثانية؛ فسيتعين على الشبكة أن تقول لا لبعضهم، و تسمى عملية تحديد الوقت المناسب لقول "لا" بالتحكم بالقبول admission control. سنحتاج في الخطوة الثالثة إلى آليةٍ يتبادل من خلالها مستخدمو الشبكة ومكونات الشبكة نفسها المعلومات، مثل طلبات الخدمة وflowpecs وقرارات التحكم في القبول؛ ويسمى ذلك أحيانًا بإصدار إشارات signalling، ولكن نظرًا لأن هذه الكلمة لها عدة معانٍ، فإننا سنشير إلى هذه العملية على أنها حجز للموارد resource reservation، حيث تُحقَّق باستخدام بروتوكول حجز الموارد. أخيرًا، ستحتاج مبدلات وموجّهات الشبكة إلى تلبية متطلبات التدفقات عند وصف التدفقات ومتطلباتها، واتخاذ قرارات التحكم في القبول. ويتمثل جزءٌ أساسي من تلبية هذه المتطلبات، في إدارة طريقة وضع الرزم في الرتل وجدولتها للإرسال في المبدلات والموجهات، وتُسمَّى هذه الآلية الأخيرة بجدولة الرزم packet scheduling. معلومات Flowspecs يمكن فصل flowspec إلى قسمين، بحيث يصف القسم الأول خصائص حركة التدفق ويُسمى TSpec، والقسم الآخر هو الذي يصف الخدمة المطلوبة من الشبكة RSpec، وهي خدمةٌ محددةٌ للغاية ويسهل وصفها نسبيًا، حيث تُعَد RSpec بسيطةً وبديهيةً مع خدمة الحِمل المُتحكَّم به، إذ يطلب التطبيق خدمة حِمل متحكم به فقط دون معلاملاتٍ إضافية، ويمكنك هنا تحديد هدف أو حد تأخير مع خدمةٍ مضمونة. وبطبيعة الحال لن نحدّد التأخير في مواصفات الخدمة المضمونة لمنظمة IETF، بل كميةً أخرى يمكن من خلالها حساب التأخير. أما TSpec فهي أعقد بعض الشيء، حيث سنحتاجُ إلى تزويد الشبكة بمعلوماتٍ كافيةٍ حول حيز النطاق التراسلي الذي يستخدمه التدفق من أجل السماح باتخاذ قراراتٍ ذكية للتحكم في القبول، علمًا أن حيز النطاق التراسلي ليس رقمًا واحدًا بالنسبة لمعظم التطبيقات، فهو شيءٌ يتغير باستمرار، حيث يولّد تطبيق الفيديو على سبيل المثال المزيد من البتات في الثانية عندما يتغير المشهد بسرعةٍ أكبر مما كان عليه. إن مجرد معرفة متوسط حيز النطاق التراسلي طويل المدى لا يُعَد كافيًا كما يوضح المثال التالي: افترض أن لدينا 10 تدفقات تصل إلى مبدلٍ على منافذ إدخال منفصلة، وأن جميعها متصلة على نفس الرابط ذو 10 ميجابت في الثانية، وبفرض أنه من المتوقع ألا يرسل كل تدفقٍ أكثر من 1 ميجابت في الثانية خلال فاصلٍ زمني طويل مناسب. قد تعتقد أن هذا لا يمثل مشكلة، ولكن إذا كانت هذه تطبيقاتٌ ذات معدل بت متغير مثل الفيديو المضغوط، فإنها ترسل أحيانًا أكثر من متوسط معدلاتها، فإذا أرسلت مصادرٌ كافية بمعدلاتٍ أعلى من المتوسط، فإن المعدل الإجمالي الذي تصل به البيانات إلى المبدل سيكون أكبر من 10 ميجابت في الثانية. ستُوضَع هذه البيانات الزائدة في رتلٍ قبل إرسالها على الرابط، وسيطول الرتل كلما طالت هذه الحالة. قد يتعين إسقاط الرزم، وحتى إن لم يحدث ذلك، فستتأخر البيانات الموجودة في الرتل؛ وإذا تأخرت الرزم لفترةٍ كافية، فلن تُوفَّر الخدمة المطلوبة. سنناقش فيما يلي كيفية إدارة الأرتال تمامًا للتحكم في التأخير وتجنب إسقاط الرزم. لاحظ هنا أننا بحاجة إلى معرفة شيءٍ ما حول كيفية اختلاف حيز نطاق المصادر التراسلي مع مرور الوقت، حيث يُطلق على إحدى الطرق لوصف خصائص حيز نطاق المصادر التراسلي؛ اسم مرشح حاوية الرمز المميز token bucket filter. يُوصَف هذا المرشح بواسطة معاملين، هما معدل الرمز token rate وهو r، وعمق الحاوية bucket depth وهو B، حيث يعمل هذا المرشح على النحو التالي: يجب أن يكون لديك رمزٌ مميز لكي تتمكن من إرسال بايت، ونحتاج إلى n رمز مميز لإرسال رزمة بطول n، وستبدأ بدون رموزٍ مميزة وتُراكِمها بمعدل r في الثانية، ولا يمكنك تجميع أكثر من B رمزٍ مميز، وهذا يعني أنه يمكنك إرسال رشقةٍ تصل إلى بايتٍ في الشبكة بأسرع ما تريد، ولكن لا يمكنك إرسال أكثر من r بايت في الثانية خلال فترةٍ زمنيةٍ طويلة بما فيه الكفاية. اتضح أن هذه المعلومات مفيدة جدًا لخوارزمية التحكم في القبول عندما تحاول معرفة ما إذا كان يمكنها استيعاب طلبٍ جديد للخدمة. يوضح الشكل السابق كيفية استخدام حاوية الرمز المميز لتوصيف متطلبات حيز نطاق التدفق التراسلي. افترض للتبسيط أن كل تدفقٍ يمكنه إرسال البيانات على هيئة بايتاتٍ فردية وليس رزمًا، حيث يولّد التدفق A البيانات بمعدلٍ ثابت يبلغ 1 ميجابايت في الثانية، لذلك يمكن وصفها بواسطة مرشح حاوية الرمز المميز بمعدلٍ r يساوي 1 ميجابايت في الثانية وعمق حاوية يبلغ 1 بايت، وهذا يعني أنه يتلقى الرموز بمعدل 1 ميجابايت في الثانية، ولكن لا يمكنه تخزين أكثر من رمزٍ واحد، فهو يستهلكها على الفور. يرسل التدفق B أيضًا بمعدلٍ يبلغ متوسطه 1 ميجابايت في الثانية على المدى الطويل، ولكنه يفعل ذلك بإرسال 0.5 ميجابايت في الثانية لمدة ثانيتين، ثم بسرعة 2 ميجابايت في الثانية لمدة ثانية واحدة. يمكن وصف التدفق B بواسطة حاوية رموز بمعدل 1 ميجابايت في الثانية، نظرًا لأن معدل حاوية الرمز المميز r هو متوسط المعدل طويل الأجل، ولكن يحتاج التدفق B على عكس التدفق A إلى عمق حاويةٍ B لا يقل عن 1 ميجابايت، بحيث يمكن للتدفق B تخزين الرموز المميزة عندما يرسل بسرعةٍ أقل من 1 ميجابايت في الثانية لاستخدامها عند الإرسال بسرعة 2 ميجابايت في الثانية. يتلقى التدفق B الرموز بمعدل 1 ميجابايت في الثانية لأول ثانيتين في هذا المثال، ولكنه يستهلكها عند 0.5 ميجابايت في الثانية فقط، لذلك يمكنه توفير ما يصل إلى 2 × 0.5 = 1 ميجابايت من الرموز، والتي يستهلكها بعد ذلك في الثانية الثالثة مع الرموز الجديدة التي تستمر في التراكم في تلك الثانية لإرسال البيانات بسرعة 2 ميجابايت في الثانية. يبدأ التدفق B في حفظ الرموز المميزة مجددًا بإرسال 0.5 ميجابايت في الثانية مرةً أخرى في نهاية الثانية الثالثة بعد إنفاق الرموز المميزة الزائدة. من المثير للاهتمام ملاحظة أنه يمكن وصف التدفق المنفرد بواسطة العديد من مجموعات الرموز المختلفة، حيث يمكن بمثالٍ بسيط وصف التدفق A بنفس حاوية الرموز المميزة للتدفق B، وبمعدل 1 ميجابايت في الثانية وعمق حاوية 1 ميجابايت. ليست حقيقة أن التدفق A لا يحتاج فعليًا إلى تجميع الرموز المميزة وصفًا خاطئًا، ولكنه يعني أننا فشلنا في نقل بعض المعلومات المفيدة إلى الشبكة، فالتدفق A متناسبٌ للغاية مع احتياجات حيز النطاق التراسلي، ولذلك من الجيد أن نكون صريحين بشأن احتياجات حيز النطاق التراسلي لتطبيقٍ ما قدر الإمكان لتجنب الإفراط في تخصيص الموارد في الشبكة. التحكم في القبول تُعَد الفكرة وراء التحكم في القبول بسيطة، فعندما يريد التدفق الجديد تلّقي مستوىً معين من الخدمة، فسينظر التحكم في القبول إلى TSpec وRSpec للتدفق، ويحاول تحديد ما إذا كان يمكن توفير الخدمة المطلوبة لهذا المقدار من حركة المرور بالموارد المتاحة حاليًا، وذلك دون التسبب في تلّقي أي تدفق مقبولٍ مسبقًا لخدمةٍ أسوأ مما قد طلب، فإذا كان بإمكانه تقديم الخدمة فيُقبَل التدفق، وإذا لم يكن كذلك فسيُرفَض، والجزء الصعب هنا هو معرفة متى تقول نعم ومتى تقول لا. يعتمد التحكم في القبول كثيرًا على نوع الخدمة المطلوبة، وعلى نظام الرتل المُستخدَم في الموجّهات، كما سنناقش الموضوع الأخير لاحقًا في هذا القسم، حيث يجب أن تكون لديك خوارزميةٌ جيدةٌ لاتخاذ قرارٍ نهائي بنعم أو لا، وذلك للحصول على خدمةٍ مضمونة. يكون القرار واضحًا إلى حدٍ ما عند استخدام رتلٍ عادلٍ وموزون في كل موجّه، وقد يعتمد على الاستدلال heuristics بالنسبة لخدمة الحِمل المُتحكم به، مثل "في آخر مرة سمحتَ فيها بالتدفق باستخدام TSpec إلى هذه الفئة، تجاوزت التأخيراتُ الخاصة بالفئة الحدَّ المقبول، لذلك من الأفضل أن تقول لا"، أو "تأخيراتيك الحالية هي حتى الآن ضمن الحد بحيث يجب أن تكون قادرًا على قبول تدفقٍ آخر دون صعوبة". لا ينبغي الخلط بين التحكم في القبول ووضع السياسات policing، فالتحكم في القبول هو قرارٌ لقبول تدفقٍ جديد أم لا، أما السياسة فهي وظيفة مُطبَّقة على أساس كل رزمةٍ للتأكد من أن التدفق يتوافق مع TSpec المُستخدَم لإجراء الحجز، فإذا لم يتوافق التدفق مع TSpec الخاص به على سبيل المثال لأنه يرسل ضعف عدد البايتات في الثانية، فمن المحتمل أن يتداخل مع الخدمة المقدَّمة للتدفقات الأخرى، ولا بد هنا من اتخاذ بعض الإجراءات التصحيحية. هناك العديد من الخيارات والخيار الواضح هو إسقاط الرزم المخالفة، بينما يتمثّل الخيار الآخر في التحقق من تداخل الرزم فعليًا مع خدمة التدفقات الأخرى؛ فإذا لم تتداخل، فيمكن إرسال الرزم بعد تمييزها بعلامة تقول "هذه رزمة غير متوافقة، أسقطها أولًا إذا كنت بحاجة إلى إسقاط أي رزم". يرتبط التحكم في القبول ارتباطًا وثيقًا بأمرٍ مهم هو السياسة policy، فقد يرغب مسؤول الشبكة على سبيل المثال في السماح بقبول الحجوزات التي أجراها الرئيس التنفيذي لشركته، مع رفض الحجوزات التي أجراها الموظفون الأقل شأنًا، وقد يستمر فشل طلب الحجز المقدّم من الرئيس التنفيذي في حالة عدم توفُّر الموارد المطلوبة، لذلك نرى أنه يمكن معالجة مشكلات السياسة وتوافر الموارد عند اتخاذ قرارات التحكم في القبول. ويُعَد تطبيق السياسة على الشبكات مجالًا يحظى باهتمامٍ كبير في وقت كتابة هذا الكتاب -بنسخته الأصلية-. بروتوكول الحجز لقد احتاجت الشبكات الموجَّهة بالاتصال دائمًا إلى نوعٍ من بروتوكول الإعداد لإنشاء حالة الدارة الافتراضية الضرورية في المبدلات، ولكن لا تملك الشبكات عديمة الاتصال connectionless مثل شبكة الإنترنت هكذا بروتوكولات، ومع ذلك نحتاج إلى توفير الكثير من المعلومات لشبكتنا عندما نريد منها خدمةً في الوقت الحقيقي. توجد عدة بروتوكولات إعداد مقترحةٍ للإنترنت، ولكن البروتوكول الذي يركّز عليه معظم الاهتمام الحالي؛ هو بروتوكول RSVP؛ الذي يختلف اختلافًا كبيرًا عن بروتوكولات إصدار الإشارات signalling التقليدية للشبكات الموجّهة بالاتصال. أحد الافتراضات الرئيسية الكامنة وراء بروتوكول RSVP هو أنه لا ينبغي أن ينتقص من المتانة التي نجدها في الشبكات عديمة الاتصال اليوم. تعتمد الشبكات عديمة الاتصال على حالةٍ قليلة أو معدومة مُخزَّنة في الشبكة نفسها، وبالتالي من الممكن أن تتعطل الموجّهات ويعاد تشغيلها، بحيث ترتفع الروابط لأعلى ولأسفل مع استمرار الاتصال من طرفٍ إلى طرف. سيحاول بروتوكول RSVP الحفاظ على هذه المتانة باستخدام فكرة الحالة اللينة soft state في الموجّهات، حيث لا تحتاج الحالة اللينة على عكس الحالة الصلبة hard state الموجودة في الشبكات الموجَّهة بالاتصال إلى حذفها صراحةً عند عدم وجود حاجةٍ إليها، وبدلًا من ذلك تنتهي مهلتها بعد فترةٍ قصيرة إلى حدٍ ما بحدود دقيقة واحدة مثلًا، عند عدم تحديثها دوريًا. من خصائص بروتوكول RSVP المهمة الأخرى، هي أنه يهدف إلى دعم تدفقات البث المتعدد بنفس فعالية تدفقات البث الأحادي، وهذا ليس مفاجئًا، لأن العديد من التطبيقات الأولى التي قد تستفيد من جودة الخدمة المحسّنة قد كانت أيضًا تطبيقات متعددة البث مثل أدوات مؤتمرات الفيديو. تتمثل إحدى الأفكار الثاقبة لمصممي بروتوكول RSVP في أن معظم تطبيقات البث المتعدد لديها مستقبلين أكثر بكثير من المرسلين، مثل وجود جمهورٍ كبير ومتحدثٍ واحد في المحاضرة، وقد تكون للمستقبلين أيضًا متطلبات مختلفة؛ فقد يرغب أحد المستقبلين في تلقي البيانات من مرسلٍ واحد فقط على سبيل المثال، في حين قد يرغب الآخرون في تّلقي البيانات من جميع المرسلين. من المنطقي السماح للمستقبِلين بتتبع احتياجاتهم الخاصة بدلًا من جعل المرسلين يتتبعون عددًا كبيرًا محتملًا من المستقبلين، وهذا يشير إلى النهج الموجَّه بالمستقبِل الذي يعتمده بروتوكول RSVP. تترك الشبكات الموجَّهة بالاتصال أمورَ حجزَ الموارد للمرسل، تمامًا كما هو الحال عندما يتسبب منشئ مكالمةٍ هاتفية في تخصيص الموارد في شبكة الهاتف. وتعطي الحالة اللينة والطبيعة الموجَّهة بالمستقبل لبروتوكول RSVP عددًا من الخصائص الجيدة، حيث تتمثل إحدى هذه الخصائص في أنه من السهل جدًا زيادة أو تقليل مستوى تخصيص الموارد المقدَّم إلى المستقبِل، وبما أن كل مستقبِل يرسل رسائل تحديثٍ دوريًا للحفاظ على الحالة اللينة في مكانها؛ فمن السهل إرسال حجزٍ جديد يطلب مستوىً جديدًا من الموارد. ستتعامل الحالة اللينة بتسامحٍ مع إمكانية فشل الشبكة أو العقدة، حيث سينهي المضيف في حالة تعطله مهلة الموارد المخصصة للتدفق بصورةٍ طبيعية ثم يحرَّرها. نحتاج إلى إلقاء نظرةٍ عن كثب على آليات إجراء الحجز، لمعرفة ما يحدث في حالة فشل الموجّه أو الرابط، لهذا ضع في حساباتك في البداية حالة مرسلٍ ومستقبلٍ يحاولان الحصول على حجزٍ لحركة المرور المتدفقة بينهما، إذ هناك شيئان يجب حدوثهما قبل أن يتمكن المستقبِل من إجراء الحجز، وهما: يحتاج المستقبل إلى معرفة حركة المرور التي من المحتمل أن يرسلها المرسل حتى يتمكن من إجراء الحجز المناسب، أي أنه بحاجةٍ إلى معرفة TSpec المرسل. يحتاج المستقبل إلى معرفة المسار الذي ستتبعه الرزم من المرسل إلى المستقبل حتى يتمكن من إنشاء حجز موردٍ في كل موجهٍ على المسار. يمكن تلبية هذين المطلبين عن طريق إرسال رسالةٍ من المرسل إلى المستقبل تحتوي على TSpec، وبالتالي سيعرف المستقبل TSpec. الشيء الآخر الذي سيحدث هو أن كل موجّهٍ ينظر إلى هذه الرسالة التي تُسمى PATH أثناء مرورها، ويحدد المسار العكسي الذي سيُستخدَم لإرسال الحجوزات من المستقبل إلى المرسل، في محاولةٍ لإعطاء الحجز لكل موجّهٍ على المسار. تُبنى شجرة الإرسال المتعدد في المقام الأول من خلال آليات مثل تلك الموضحة سابقًا في فصلٍ آخر. يرسِل المستقبل حجزًا احتياطيًا لشجرة الإرسال المتعدد في رسالة RESV بعد تلقي رسالة PATH، حيث تحتوي هذه الرسالة على TSpec للمرسل، وRSpec الذي يصف متطلبات هذا المستقبل. وينظر كل موجّهٍ على المسار في طلب الحجز ويحاول تخصيص الموارد اللازمة لتلبية ذلك، فإذا كان من الممكن إجراء الحجز، فسيُمرَّر طلب RESV إلى الموجه التالي، وإذا لم يكن الأمر كذلك، فستُرجَع رسالة خطأ إلى المستقبل الذي قدم الطلب، فإذا سارت الأمور على ما يرام، فسيثبَّت الحجز الصحيح في كل موجهٍ بين المرسل والمستقبل، وطالما أن المستقبل يريد الاحتفاظ بالحجز، فإنه يرسل نفس رسالة RESV مرةً واحدة كل 30 ثانية. يمكننا الآن رؤية ما يحدث عند فشل الموجّه أو الرابط، حيث تتكيف بروتوكولات التوجيه مع الفشل وتنشئ مسارًا جديدًا من المرسل إلى المستقبل، وتُرسَل رسائل PATH كل 30 ثانية تقريبًا، كما قد تُرسَل في وقتٍ أقرب إذا اكتشف الموجّه تغييرًا في جدول التمرير الخاص به، وبالتالي ستصل الرسالة الأولى بعد استقرار المسار الجديد إلى المستقبل عبر المسار الجديد. ستتبع رسالة RESV التالية للمستقبل المسارَ الجديد، وإذا سارت الأمور على ما يرام، فأنشِئ حجزًا جديدًا على المسار الجديد؛ وفي الوقت نفسه ستتوقف الموجّهات التي لم تعد على المسار عن تلقي رسائل RESV، وستنتهي مهلة هذه الحجوزات وستُحرَّر. وبالنتيجة سيتعامل بروتوكول RSVP جيدًا مع التغييرات في مخطط الشبكة، طالما أن تغييرات التوجيه ليست متكررة كثيرًا. الشيء التالي الذي نحتاج إلى مراعاته هو كيفية التعامل مع البث المتعدد multicast، حيث قد يكون هناك عدة مرسلين إلى مجموعة مستقبلين ومستقبلين متعددين، وهذا الموقف موضحٌ في الشكل السابق. دعنا أولًا نتعامل مع مستقبلين متعددين لمرسلٍ واحد، فعندما تنتقل رسالة RESV إلى أعلى شجرة الإرسال المتعدد من المحتمل أن تصطدم بجزءٍ من الشجرة حيثما أُنشئ بالفعل حجزٌ لبعض المستقبلين الآخرين، ولكن قد تكون الموارد المحجوزة في أعلى هذه النقطة كافيةً لخدمة كلا المستقبلين، وإذا أجرى المستقبل A حجزًا يوفّر تأخيرًا مضمونًا بأقل من 100 ميلي ثانية فعليًا، وكان الطلب الجديد من المستقبل B بتأخيرٍ أقل من 200 ميلي ثانية؛ فلا حاجة لحجزٍ جديد. وإذا كان الطلب الجديد يتعلق بتأخيرٍ أقل من 50 ميلي ثانية، فسيحتاج الموجّه أولًا إلى معرفة ما إذا كان يمكنه قبول الطلب؛ أما إذا كان الأمر كذلك فسيُرسَل الطلب إلى الأعلى. لن يحتاج الموجّه إلى تمرير هذا الطلب في المرة التالية التي يطلب فيها المستقبل A تأخيرًا لا يقل عن 100 ميلي ثانية. ويمكن عمومًا دمج الحجوزات بهذه الطريقة لتلبية احتياجات جميع المستقبلين في أدنى نقطة الدمج. إذا كان هناك أيضًا عدة مرسلين في الشجرة، فيجب على المستقبلين جمع TSpecs من جميع المرسلين وإجراء حجزٍ كبير بما يكفي لاستيعاب حركة المرور من جميع المرسلين، ولكن قد لا يعني هذا أن هناك حاجةً إلى إضافة TSpecs؛ فعلى سبيل المثال ليست هناك فائدةٌ كبيرةٌ في تخصيص موارد كافية لنقل 10 تدفقات صوتية في مؤتمرٍ صوتي مع 10 مكبرات صوت، وذلك نظرًا لأن نتيجة تحدُّث 10 أشخاص في وقتٍ واحد ستكون غير مفهومة، وبالتالي يمكننا أن نتخيل حجزًا كبيرًا بما يكفي لاستيعاب متحدثَين اثنين وليس أكثر من ذلك. إن حساب TSpec الإجمالي الصحيح من كل TSpecs الخاصة بالمرسلين أمرٌ خاصٌ بالتطبيق، فقد نكون مهتمين فقط بالاستماع إلى مجموعةٍ فرعية من جميع المتحدثين المحتملين، بحيث يحتوي بروتوكول RSVP على أنماط حجزٍ مختلفة للتعامل مع خياراتٍ مثل "حجز الموارد لجميع المتحدثين" و"حجز الموارد لأي n متحدث " و"احتفظ بالموارد للمتحدثَين A وB فقط". تصنيف الرزم وجدولتها بعد وصف حركة المرور الخاصة بنا وخدمة الشبكة المطلوبة لدينا، وتثبيت حجزٍ مناسب على جميع الموجّهات على المسار؛ فإن الشيء الوحيد المتبقي هو أن تسلّم الموجّهات فعليًا الخدمة المطلوبة إلى رزم البيانات. وهناك شيئان يجب فعلهما: ربط كل رزمةٍ بالحجز المناسب حتى يمكن التعامل معها بصورةٍ صحيحة، وهي عملية تُعرف باسم تصنيف الرزم. إدارة الرزم في الأرتال بحيث يتلقون الخدمة المطلوبة، وهي عملية تُعرف باسم جدولة الرزم. يُنفَّذ الجزء الأول من خلال فحص ما يصل إلى خمسة حقول في الرزمة، هي عنوان المصدر source address، وعنوان الوجهة destination address، ورقم البروتوكول protocol number، ومنفذ المصدر source port، ومنفذ الوجهة destination port. يمكن استخدام حقل FlowLabel في ترويسة IPv6 لتفعيل البحث بناءً على مفتاحٍ واحدٍ أقصر، كما يمكن وضع الرزمة بناءً على هذه المعلومات في الصنف المناسب، حيث يمكن تصنيفها في أصناف الحِمل المُتحكَّم به على سبيل المثال، أو قد تكون جزءًا من تدفقٍ مضمون يحتاج إلى التعامل معه بصورةٍ منفصلةٍ عن جميع التدفقات المضمونة الأخرى. هناك ربطٌ mapping من المعلومات الخاصة بالتدفق في ترويسة الرزمة مع معرّف صنفٍ واحد يحدد كيفية معاملة الرزمة في الرتل، وقد يكون هذا ربطًا واحدًا لواحد one-to-one mapping بالنسبة للتدفقات المضمونة، بينما بالنسبة للخدمات الأخرى، فقد يكون متعددًا لواحد many to one. ترتبط تفاصيل التصنيف ارتباطًا وثيقًا بتفاصيل إدارة الأرتال. يجب أن يكون واضحًا أن شيئًا بسيطًا مثل رتل FIFO في الموجّه لن يكون مناسبًا لتوفير العديد من الخدمات المختلفة ومستوياتٍ مختلفة من التأخير داخل كل خدمة، وقد نوقشت العديد من تخصصات إدارة الرتل الأكثرتعقيدًا في قسمٍ سابق، ومن المحتمل استخدام مزيجٍ منها في الموجّه. لا ينبغي تحديد تفاصيل جدولة الرزم بصورةٍ مثالية في نموذج الخدمة، فهذا مجالٌ يمكن أن يحاول فيه المنفِّذون فعل أشياء إبداعية لتحقيق نموذج الخدمة بكفاءة، فقد ثبُت أن نظام أرتال عادلٍ موزون في حالة الخدمة المضمونة، والذي يحصل فيه كل تدفقٍ على رتلٍ فردي خاصٍ به مع حصةٍ معينة من الرابط؛ سيوفر حد تأخيرٍ مضمون من طرفٍ إلى طرف يمكن حسابه بسهولة. ويمكن استخدام مخططاتٍ أبسط للحِمل المتحكَّم به، كما سيشمل أحد الاحتمالات معالجة كل حركة مرور حِملٍ متحكَّمٍ به على أنها تدفقٌ واحد مجمَّع مع الاهتمام بآلية الجدولة، وتحديد وزن هذا التدفق بناءً على الحجم الإجمالي لحركة المرور المقبولة في صنف الحِمل المتحكَّم به. تزداد المشكلة صعوبةً عند التفكير في احتمالية توفير العديد من الخدمات المختلفة بصورةٍ متزامنة في موجهٍ واحد، وكل خدمةٍ من هذه الخدمات قد تتطلب خوارزمية جدولةٍ مختلفة، وبالتالي هناك حاجةٌ إلى خوارزمية إدارة رتلٍ شاملة لإدارة الموارد بين الخدمات المختلفة. مشاكل قابلية التوسع على الرغم من أن معمارية الخدمات المتكاملة وبروتوكول RSVP يمثلان تحسينًا كبيرًا لنموذج خدمة أفضل جهد لبروتوكول IP، إلا أن العديد من مزودي خدمة الإنترنت شعروا أنه لم يكن النموذج المناسب للنشر، ويرجع سبب هذا التحفُّظ إلى أحد أهداف التصميم الأساسية للملكية الفكرية، وهو قابلية التوسع scalability. تخزّن الموجهات في الإنترنت في نموذج الخدمة الأفضل جهدًا حالةً قليلةً أو معدومةً بشأن التدفقات الفردية التي تمر عبرها، وبالتالي مع نمو الإنترنت، فإن الشيء الوحيد الذي يتعين على الموجّهات فعله لمواكبة هذا النمو هو نقل المزيد من البتات في الثانية، والتعامل مع جداول التوجيه الأكبر حجمًا، ولكن بروتوكول RSVP يثير احتمالًا بأن يكون لكل تدفقٍ يمر عبر موجهٍ حجزًا مقابلًا لهذا التدفق. لفهم مدى خطورة هذه المشكلة، افترض أن كل تدفق على رابط OC-48 أو 2.5 جيجابت في الثانية، سيمثل تدفقًا صوتيًا بسرعة 64 كيلوبت في الثانية، حيث أن عدد هذه التدفقات يساوي: 2.5 × 109 / 64 × 103 = 39,000 يحتاج كلٌّ من هذه الحجوزات إلى قدرٍ من الحالة التي يجب تخزينها في الذاكرة وتحديثها دوريًا، ويحتاج الموجه إلى تصنيف كلٍّ من هذه التدفقات ووضع سياسات عليها، ووضعها ضمن رتل، حيث يجب اتخاذ قرارات التحكم في القبول في كل مرةٍ يطلب فيها هذا التدفق حجزًا، وهناك حاجةٌ إلى بعض الآليات "للرد push back" على المستخدمين، مثل فرض رسوم على بطاقات الائتمان الخاصة بهم، بحيث لا يجرون حجوزاتٍ كبيرة عشوائيًا لفتراتٍ زمنية طويلة. لقد أدت مخاوف قابلية التوسع هذه إلى الحد من انتشار IntServ على نطاقٍ واسع، لذلك طُوِّرت مناهجٌ أخرى لا تتطلب الكثير من الحالات "لكل تدفق"، وسيناقش المقال التالي عددًا من هذه الأساليب. ترجمة -وبتصرّف- للقسم Quality of Service من فصل Congestion Control من كتاب Computer Networks: A Systems Approach. اقرأ أيضًا المقال السابق: متطلبات تطبيق جودة الخدمة ضمن الشبكات الحاسوبية الشبكات الفرعية والعناوين والأخطاء في بروتوكول IP كشف الأخطاء على مستوى البت في الشبكات الحاسوبية
  8. سنتعلّم في هذا الدرس كيفية التعامل مع إطارات الصور التي نضيفها إلى المشاريع والصفحات في برنامج سكريبوس بكل ما يتضمنه من خيارات التعديل والتخصيص الإدراج المختلفة. الإنشاء أنشئ إطار صورة باستخدام إحدى الطرق التالية: النقر على رمز إدراج إطار صورة من شريط الأدوات. اختيار قائمة إدراج Insert ثم إطار صورة Image Frame. بالضغط على I من لوحة المفاتيح. يمكنك بعدها وضع إطار الصورة وتحديد حجمه من خلال النقر مع الاستمرار على زر الفأرة، ثم السحب قطريًا على الصفحة، حيث تحدّد النقرة إحدى زوايا الإطار، والأصح أن تبدأ رسم الإطار من الزاوية العلوية اليسرى، ولكن يمكنك أن تبدأ من أي زاوية تريدها. قائمة السياق Context Menu يؤدي النقر بزر الفأرة الأيمن إلى إظهار قائمة السياق Context Menu التي تحتوي على عمليات إطارات متعددة، ومن أهمها القدرة على تحويل إطار الصورة إلى نوع آخر من الإطارات. الحجم والموضع ستجد أن نافذة الخصائص عنصرٌ لا غنى عنه للعمل مع سكريبوس. وإن لم تكن هذه النافذة موجودةً فعلًا، فافتحها من قائمة نوافذ Windows ثم خصائص Properties. يعرض تبويب X وY وZ في نافذة الخصائص معلومات دقيقة للغاية حول موضع X وموضع Y، وعرض الإطار وارتفاعه، وتدوير الإطار. لاحظ أن هذه النافذة تعرض معلومات الإطار المحدد فقط الذي يُعرَض مثل إطار أحمر، إذ يُحدَّد الإطار عند إنشائه تلقائيًا. ويُلغَى تحديد إطار بالنقر على الصفحة الموجودة خارج حدود الإطار، ثم يُحدَّد مرةً أخرى بالنقر داخله، ويجب تحديد إطار لتعديله أو لتغيير موضعه. تحميل صورة في الإطار سيكون إطار الصورة فارغًا عند إنشائه لأول مرة باستثناء وجود علامة X مرسومة من زوايا متقابلة، مما يدل على عدم وجود صورة. تنسيقات الصور المقبولة للاستيراد هي TIFF وJPEG وPNG وGIF وXPM وEPS. يمكنك أيضًا استيراد ملف PDF، لكن ستُحمَّل الصفحة الأولى منه فقط في الإطار (انظر أدناه للتغلب على هذه المشكلة). انتقل إلى قائمة مساعدة Help ثم Scribus Help ثم Documentation بعدها Importing، أو اضغط F1 من لوحة المفاتيح ثم Documentation ثم Importing، وذلك للحصول على نصائح حول استخدام التنسيقات. حمّل صورة من قائمة السياق (انقر بزر الفأرة الأيمن في الإطار) ثم اختر استيراد صورة Get Image، أو اضغط على الاختصار Ctrl + D من لوحة المفاتيح؛ أو من قائمة ملف File ثم استيراد Import ثم استيراد صورة Get Image، أو الاختصار المقابل لها من لوحة المفاتيح. ستُحمَّل الصورة بحجمها الأصلي افتراضيًا، بحيث تكون زاوية الإطار العلوية اليسرى هي زاوية الصورة العلوية اليسرى أيضًا. قد تكون قادرًا على تغيير حجم الإطار ببساطة، ولكن يُرجَّح أنك ستحتاج إلى ضبط قياس الصورة إذا عرفت الحجم النهائي الذي تريد أن يكون عليه الإطار، ولهذا اتبع الإرشادات الواردة في القسم التالي، ثم انتقل إلى تبويب صورة في نافذة خصائص، أو انتقل إلى نافذة خصائص الصورة في الإصدار 1.5.7 من سكريبوس التي يمكن الوصول إليها من قائمة نوافذ ثم خصائص المحتوى. ملفات SVG يُعَد النوع SVG تنسيق رسوميات متجهة مفتوح المصدر، وهو تنسيق رسوميات مثالي للنشر DTP. لا يستخدِم النوع SVG إطارًا، ولكن يمكن استيراده مباشرةً إلى سكريبوس باستخدام قائمة ملف File ثم استيراد Import، ثم احصل على ملف متجهي Import SVG. يمكن تغيير حجم ملف SVG وموضعه، كما أن بعض إمكانات التحرير ممكنة أيضًا، ولكن بعض ميزات تنسيق الملف غير مدعومة حتى الآن في سكريبوس، والطريقة الوحيدة حاليًا لاستخدام ملف SVG في إطار الصورة هي استخدام برنامج رسم متجهي مثل برنامج إنكسكيب Inkscape لحفظ الملف بأحد التنسيقات المذكورة سابقًا. ستحتاج عندها إلى جعل الحجم أكبر بكثير، أي أكبر من المقياس عدد النقاط في الإنش DPI من الحجم الافتراضي لتقليل البكسلة أو عدم الوضوح في ناتج سكريبوس النهائي. استيراد صفحات متعددة من ملف PDF يمكن ذلك حاليًا فقط مع البرامج الخارجية مثل Adobe Acrobat، حيث توجد مشاريع متعددة مفتوحة المصدر يمكنها أن تقسم ملف PDF متعدد الصفحات إلى ملفات PDF من صفحة واحدة مثل برنامج pdftk، وبرنامج آخر مكتوب بلغة Java Swing يعمل على نظام ويندوز يسمَّى PDF Split and Merge، والذي يمكنه تقسيم صفحات متعددة إلى صفحة واحدة، ودمج مستندات pdf المختلفة في مستند واحد. توفّر الأداة KPDFtool واجهة مستخدم رسومية سهلة الاستخدام لعمليات PDF البسيطة، مثل استخراج صفحات مفردة من ملفات PDF متعددة الصفحات. ضع في بالك أن سكريبوس يمكنه إنشاء عدة ملفات PDF مؤلَّفة من صفحة واحدة، وابحث عن هذا الخيار عند التصدير إلى PDF. يمكنك أيضًا فتح ملف PDF وحفظه محوّلًا إلى ملف سكريبوس SLA. يؤدي ذلك إلى إنشاء مستند SLA متعدد الصفحات إذا احتوى ملف PDF على صفحات متعددة، ثم يمكن نسخ محتوى الصفحات المطلوبة ولصقه إلى المستند حيثما تريد، أو إنشاء ملفات PDF مؤلَّفة من صفحة واحدة باستخدام سكريبوس أيضًا لاستيرادها مثل صور في مستند آخر. تغيير الحجم والتموضع في تبويب X وY وZ من نافذة خصائص يمكن تغيير حجم وتموضع إطار الصورة في تبويب X وY وZ في نافذة خصائص بطريقتين: باستخدام الفأرة: انقر واسحب في أي مكان داخل الإطار لتغيير التموضع. قد توضَع الإطارات خارج الصفحة، أو تُنقََل من صفحة إلى أخرى (اعتمادًا على إصدار سكريبوس الذي تستخدمه). انقر واسحب أيًا من المستطيلات الحمراء الصغيرة على طول حدود الإطار لتغيير حجمه. باستخدام نافذة خصائص Properties: فهناك ثلاث طرق لتغيير الإعدادات: التحرير باستخدام لوحة المفاتيح. النقر على السهمين للأعلى أو للأسفل بجانب كل قيمة. استخدام عجلة الفأرة في كل إعداد من خلال تحريك المؤشر عليه. إن لم يتغيّر شيء، فانقر على القيمة أولًا. بعض المساعدة الإضافية يؤدي فتح قائمة صفحة Page ثم "اتبع الشبكة Snap to Grid"، إلى "التصاق" إطارك بخطوط الشبكة على الصفحة، بينما يؤدي فتح قائمة عرض View ثم الشبكات والأدلة ثم إظهار الشبكة Show Grid؛ إلى التبديل بين إظهار الشبكة وإخفائها (لا تُطبَع الشبكة ولا تكون جزءًا من ملف PDF). وإذا أردت ضبط تباعد الأسطر في الشبكة، فانتقل إلى قائمة ملف File ثم تفضيلات Preferences ثم الأدلة Guides. يؤدي فتح قائمة صفحة Page ثم "اتبع الأدلة Snap to Guides"؛ إلى "التصاق" إطارك بخطوط الأدلة على الصفحة، بينما يؤدي فتح نافذة عرض ثم الشبكات والأدلة ثم "إظهار الأدلة" إلى التبديل بين إظهار الأدلة وإخفائها (لا تُطبَع الأدلة ولا تكون جزءًا من ملف PDF). إذا أردت تحرير أو إضافة أدلة، فانتقل إلى قائمة صفحة ثم إدارة الأدلة Manage Guides أو من قائمة ملف ثم تفضيلات ثم الأدلة. تبويب صورة Image في نافذة خصائص إذا كان إطارك بالحجم الصحيح الذي تريده، فانقر على ملاءمة حجم الإطار Scale to Frame Size. ستضبط التعديلاتُ اللاحقة في حجم الإطار التحجيمَ Scaling للحفاظ عليه بحجم الإطار. سيسمح لك النقر مرةً أخرى على الخيار تحجيم حر Free Scaling بقص الحواف أو تغيير التموضع أو تغيير التحجيم. تحجيم وتغيير تموضع الصورة راجع فقرة تغيير الحجم والتموضع أعلاه للحصول على إرشادات حول تحريك الإطار وتغيير حجمه، حيث يمكن تغيير حجم وتموضع إطار الصورة في هذا التبويب بطريقتين: باستخدام الفأرة على الإطار، ويكون ذلك باتباع الآتي: الضغط المستمر على Shift + Ctrl + Alt من لوحة المفاتيح، حيث سيسمح لك النقر والسحب داخل الإطار بضبط موضع الصورة داخل الإطار (يبقى الإطار في مكانه)، ثم يمكنك العودة إلى تحريك الإطار بمجرد أن تترك المفاتيح. انقر على أيقونة حرّر محتويات الإطار من شريط الأدوات Edit Contents of Frame (أو الاختصار E من لوحة المفاتيح)، إذ سيعمل ذلك مثل الضغط المستمر على Shift + Ctrl + Alt، باستثناء أنك تبقى في وضع نقل الصورة حتى تنقر مرةً أخرى لتحديد عنصر على شريط الأدوات، أو تنقر خارج الإطار. انقر أولًا على إطار الصورة لتغيير حجمها مباشرةً باستخدام الفأرة على الإطار، ثم اضغط على المفتاح F2 من لوحة المفاتيح لفتح نافذة الخصائص، ثم حدّد تبويب صور (أو افتح نافذة خصائص الصورة مباشرة). فعّل الخيار ملاءمة حجم الإطار Scale to frame size والخيار نسبي Proportional، وبالتالي سيتغيّر حجم الصورة وفقًا لحجم الإطار. باستخدام نافذة خصائص، إذ هناك ثلاث طرق لتغيير الإعدادات كما هو الحال في تبويب X وY وZ: التحرير باستخدام لوحة المفاتيح النقر فوق السهمين للأعلى أو للأسفل بجانب كل قيمة. استخدام عجلة الفأرة في كل إعداد من خلال تحريك المؤشر عليه، وإن لم يتغيّر شيء، فانقر على القيمة أولًا. لاحظ بالنسبة للخيارين 2 و3 أن الضغط المستمر على Ctrl أو Shift أو Ctrl + Shift أو الضغط على الأسهم للأعلى وللأسفل سيعدّل القيم العشرية المتأثرة. ستكون الخصائص X-Scale وY-Scale وX-DPI وY-DPI مرتبطةً افتراضيًا، لكنك تحتاج فقط إلى النقر على الرمز الذي يشبه السلسلة لإلغاء ارتباطها. يشير X-Pos وY-Pos إلى إزاحة الصورة داخل الإطار، إذ ستُظهِر القيم السالبة لون خلفية الإطار. ترتبط قيم X-Scale وY-Scale وX-DPI الفعلي وY-DPI الفعلي مع بعضها البعض افتراضيًا، ولكن يمكنك النقر على الرمز الذي يشبه السلسلة لإلغاء هذا الارتباط. يرتبط التحجيم Scaling وعدد النقاط في الإنش DPI ارتباطًا عكسيًا، ولكن معرفة قيمة DPI للناتج النهائي يُعَد أمرًا ضروريًا بالنسبة للمطبوعات عالية الجودة لتجنب نتائج الجودة الرديئة. وإذا كان الناتج النهائي ملف PDF للويب أو لعرض تقديمي، فقد تكفي قيمة DPI أقل. بعض المعلومات الإضافية انقر بزر الفأرة الأيمن في الإطار لتظهر قائمة السياق Context Menu ثم الخيار معلومات Info الذي سيوفّر بعض المعلومات الأساسية حول صورتك مثل مصدر الملف والتحجيم الأصلي والنهائي. افتح قائمة إضافي Extras ثم الخيار أدِر صورًا Manage Pictures الذي سيوفر لك معلومات إضافية أيضًا. الدوران Rotation يمكن تدوير إطار الصورة بطريقتين هما: باستخدام الفأرة: انقر على رمز تدوير عنصر Rotate Item في شريط الأدوات، أو اضغط على R من لوحة المفاتيح؛ ثم انقر داخل الإطار واسحب ودوّر إلى الزاوية التي تريدها. باستخدام تبويب X وY وZ في نافذة خصائص: تتوفّر طرق تغيير الحجم والتموضع الثلاث نفسها لتغيير الدوران رقميًا. يوجد أيضًا أسفل تبويب X وY وZ رمز النقطة الأساسية Basepoint لتغيير النقطة التي يحدث حولها الدوران (في المركز أو إحدى الزوايا الأربع). نسخ الإطارات والعمليات المماثلة هناك عدة طرق مختلفة لنسخ الإطارات أو نقلها وهي الآتية: يجب أن تكون على دراية بالنسخ واللصق (الاختصاران Ctrl + C وCtrl + V من لوحة المفاتيح)، والقص واللصق (الاختصاران Ctrl + X و Ctrl + V من لوحة المفاتيح)، والتي يمكن الوصول إليها أيضًا من قائمة تحرير Edit، ومن قائمة السياق عند النقر بزر الفأرة الأيمن في الإطار. يمكن اللصق في صفحة أخرى من خلال الانتقال إلى تلك الصفحة والنقر عليها ثم اللصق، حيث ستكون للإطار الإحداثيات نفسها الموجودة في الصفحة الأصلية. يوجد أيضًا النسخ المطابق Duplicate (الاختصار Ctrl + Alt + Shift + D من لوحة المفاتيح) من قائمة عنصر Item، ثم مضاعفة/تحويل ثم نسخ مطابق Duplicate. يؤدي ذلك إلى إنشاء نسخة مزاحَة قليلًا عن النسخة الأصلية وعلى طبقة فوقها. توجد أيضًا النُسخ المطابقة Multiple Duplicate من قائمة عنصر ثم مضاعفة/تحويل، ثم الخيار نُسخ مطابِقة، والذي يؤدي إلى طلب إنشاء نسخ متعددة تلقائيًا بالعدد الذي تريده مع إزاحة متسلسلة قابلة للتعديل. يمكنك أيضًا استخدام ذلك لنسخة واحدة عندما تريد ضبط الإزاحة، وستستخدم عملية النسخ المطابق من قائمة عنصر ثم نسخ مطابق Duplicate؛ الإزاحة نفسها بمجرد ضبطها. هناك أخيرًا سجل القصاصات Scrapbook من قائمة عنصر، ثم أرسل إلى ثم سجل القصاصات، أو من قائمة السياق بالنقر بزر الفأرة الأيمن على الإطار. سيؤدي ذلك إلى إنشاء نسخة لها اسم معين من الإطار المحدد ومحتوياته في سجل القصاصات، بعدها يمكنك استرداد عنصر محفوظ من سجل القصاصات من قائمة نوافذ Windows ثم سجل القصاصات Scrapbook للصق عنصر في صفحة. لاحظ أيضًا أنه يمكنك حفظ سجل القصاصات بأكمله في ملف، والذي يمكن بعد ذلك تحميله واستخدامه في مستند آخر. ستوضح لك التجربة أن الإطارات يمكن أن تكون خارج حدود المستند مع بقاء إمكانية نسخها وتكرارها ومعالجتها بطرق مختلفة، وستُحفَظ مع المستند في هذه المواقع. إذا حاولت إنشاء ملف PDF، فستتلقّى رسائل خطأ حول عدم وجود كائنات على الصفحة، ولكن إذا تجاهلت هذه الرسائل، فلن يحتوي ملف PDF على هذه الكائنات. قد تفقد أيضًا تعقّب هذه الكائنات خارج المستند خاصة في مستند كبير ومتعدد الصفحات. المستويات والطبقات تمثل الإطارات عامةً -وليس إطارات الصور فقط- مساحةً ثنائية الأبعاد يمكنك معالجتها وتحريكها على مساحة العمل مثل الملاحظات الصغيرة التي تُوضَع واحدةً تلو الأخرى على الصفحة، وتوضَع الملاحظات الجديدة فوق سابقاتها. يسمح لك المربع الصغير المسمَّى مستوى Level في تبويب X وY وZ من نافذة خصائص؛ بتحريك المستويات المحددة للأعلى أو للأسفل باستخدام الأسهم. قد تكون خلفية الإطار معتمةً أو شفافة، ولذلك سيؤثر المستوى الذي يوجد به الإطار على المقدار الذي يمكن رؤيته منه اعتمادًا على الإطارات الأخرى المتداخلة معه أو الموجودة تحته. الطبقات يبدأ العمل افتراضيًا على طبقة الخلفية Background عند إنشاء مستند سكريبوس. وتُعَد طبقة الخلفية مساحة العمل النشطة الخاصة بك، والتي بدورها يمكن أن تحتوي على مستويات متعددة يمكنك العمل عليها. يمكنك إنشاء طبقات جديدة للعمل عليها من قائمة نوافذ Windows ثم الطبقات Layers (أو بالضغط على F6 من لوحة المفاتيح)، إذ تحتوي كل طبقة على مستويات متعددة قابلة للتعديل. يمكن أن تكون الطبقة بأكملها مرئيةً أو غير مرئية، وقد تُطبَع أو لا، كما قد تُقفَل أو توصَد لمنع التعديل عن طريق الخطأ كما ترى في الشكل الآتي. ويمكنك العمل على طبقة واحدة في الوقت نفسه فقط إما من خلال تحديدها في نافذة الطبقات، أو تحديدها في أسفل النافذة الرئيسية. باقي الخيارات الموجودة في تبويب X وY وZ تعمل الأزرار المتبقية في تبويب X وY وZ ما يلي: قلب الإطار المحدَّد أفقيًا أو رأسيًا. قفل أو وَصد الإطار في مكانه، إذ يُغلَق كل شيء متعلق بإطارك مثل الحجم والموضع والمحتويات، وقد يؤدي نسخ إطار مقفَل ولصقه إلى نتائج غير متوقعة. قفل حجم الإطار فقط، حيث تختفي رموز التحرير من زوايا وجوانب الإطار. تفعيل أو تعطيل طباعة الإطار، لأنك قد ترغب في استخدام إطار من الصفحة يمثّل رسالة لك أو لشخص آخر، ولكنه ليس جزءًا من العمل النهائي المطبوع، أو قد يكون الإطار مجرد موفّر مساحة لبعض الأغراض الأخرى. تبويب شكل Shape في نافذة خصائص انقر على تبويب شكل Shape في نافذة خصائص التي ستظهر مثل الشكل التالي: إذا نقرت على الزر الذي يحوي مربعًا في منتصفه في الجزء العلوي من تبويب شكل، فيمكنك تبديل شكل المستطيل بسرعة إلى مجموعة من الأشكال الأخرى، وإذا نقرت على تحرير Edit Shape، فسيصبح لديك تحكم كامل في تحرير الشكل من خلال نافذة محرر العقد مثل الشكل التالي: يمكنك أيضًا استخدام أداة المضلع Polygon في شريط الأدوات لإنشاء مضلع عادي، ثم تحويله إلى إطار صورة باستخدام قائمة السياق، وذلك بالنقر بزر الفأرة الأيمن على المضلع. تدوير الزوايا يمكّنك هذا الخيار من تعديل درجة تدوير زوايا إطار الصورة، ويمكنك أيضًا استخدام قيم سالبة. تدفقات النص حول الإطار (التفاف النص) يُستخدَم هذا الخيار لمعرفة ما يحدث للنص الموجود تحت الإطار المحدَّد. يكون مربع الإحاطة Bounding Box وخط الإحاطة Contour Line المتعلقان بالصورة بالحجم والموضع نفسه عند إنشاء إطار صورة، ولكن يمكنك تغيير حجم خط الإحاطة وموضعه وشكله حسب الرغبة من خلال النقر على تحرير الشكل. حدّد الخيار تحرير محيط الخط مثل الشكل التالي في نافذة محرّر العقد التي تظهر بعد الضغط على تحرير في تبويب شكل: تكون خيارات التفاف النص مثل الشكل التالي: حيث يلتف النص حول الصورة مثل المثال التالي: لاحظ شكل الصورة في الشكل الآتي، ومربع الإحاطة (الخط الأحمر المنقط)، وخط الإحاطة (الخط المنقط الرمادي الباهت)، حيث يمكن أن يشغل كل منها مساحات منفصلة، ولكن سيكون لمربع الإحاطة شكل مستطيل دائمًا. تدفق النص حول مسار قطع الصورة جهّز الصورة في محرر صور نقطي مثل برنامج جيمب GIMP كما يلي: حدّد الجزء المناسب من الصورة. أنشئ قناعًا Mask من التحديد وطبّقه لإزالة الخلفية. كبّر التحديد إذا أردت وجود هامش بين النص والصورة في سكريبوس. أنشئ مسارًا من التحديد. صدّر الصورة بتنسيق TIF. طبّق المسار في سكريبوس كما يلي: حمّل الصورة في الإطار. حدّد الخيار خصائص الصورة الموسَّعة Extended Image Properties في قائمة السياق. حدّد المسار الذي تريد استخدامه، فقد تكون هناك مسارات متعددة مخزَّنة في الصورة. انتقل إلى تبويب شكل في نافذة خصائص وحدّد الخيار "التفاف النص حول مسار قصاصة الصورة Use Image Clip Path". تبويب خط Line في نافذة خصائص يشير خط إطار الصورة إلى حدود هذا الإطار، وأول شيء يجب أن تعرفه هو أن الإعداد الافتراضي للون الحد Line Color هو لا شيء None، لذلك لن يظهر أي شيء حتى يُضبَط لون الحد، وذلك بغض النظر عن الإعدادات في تبويب خط، وتكون بخلاف ذلك إعدادات الخط المختلفة واضحة ومباشرة. إذا كان أحد الإعدادات معطلًا، فهذا يعني أنه لا يمكن تطبيقه على الإطارات. تبويب ألوان Color في نافذة خصائص يشير لون الحد Line Color إلى أن حدود الإطار الذي إعداده الافتراضي هو لا شيء كما ذكرنا سابقًا، أما لون التعبئة Fill Color فهو لون خلفية الإطار، فإذا كان لون التعبئة لا شيء None، فهذا يعني أن الخلفية شفافة. يشير الظل Shade إلى تشبع اللون، بحيث تمثل القيمة 0% لون محايد ذو تدرج رمادي، وتشير العتمة Opacity في تبويب شفافية إلى التعتيم أو الشفافية النسبية، مع كون 100% معتم تمامًا، و0% شفاف تمامًا. تجدر الإشارة إلى أن بعض إصدارات PDF وبعض برامج عرض ملفات PDF لا تدعم الشفافية Transparency. لاحظ أنك لست مقيدًا بالألوان التي تراها في تبويب ألوان، كما أنك لست مضطرًا للحصول على كل هذه الخيارات من الألوان، لهذا انتقل إلى قائمة تحرير Edit ثم الألوان والتعبئة، وذلك لإضافة ألوان أو تحريرها أو إزالتها. يمكن أن تؤدي إزالة الألوان إلى تبسيط استخدام سكريبوس وتقليل حجم الملف المحفوظ. تضمين صورة أو مجموعة كائنات في إطار نص يمكننا إنشاء إطار صورة، واختيار الصورة التي ستملأ الإطار، ونسخ الإطار عن طريق CTRL + C، ثم تحديد إطار النص، والدخول إلى نمط تحرير النص، ثم وضع الصورة حيث نريد في النص من خلال لصقها من خلال CTRL + V هناك. تتصرّف الصورة الآن مثل حرف في إطار النص، حيث يمكنك تحديد الصورة مع جزء نصي آخر، واستخدام "المعاملات المتقدمة" لنافذة خصائص النص، وذلك لوضع الصورة بدقة أعلى أو أسفل الخط الأساسي. يمكن أيضًا إدراج رمز SVG بسيط مثل ملف متجهي أو مثل مجموعة كائنات. يمكن بعد تضمين إطار صورة أو مجموعة كائنات في إطار نص تحريرها على أنها إطار صورة أو مجموعة كائنات من خلال الدخول إلى نمط تحرير النص، ثم وضع مؤشر التحرير قبل الإطار أو المجموعة المضمَّنة مباشرةً، ثم النقر المزدوج على الصورة أو المجموعة، كما يمكن بعد ذلك تغيير حجم الكائن وإضافة تأثيرات الصورة وفك التجميع وغير ذلك، ثم التحقق من صحة كل شيء والعودة إلى إطار النص. ترجمة -وبتصرّف- للمقال Working with image frames. اقرأ أيضًا أساسيات منحنى بيزيه Bezier Curve في سكريبوس كيفية رسم صندوق منظوري الشكل في برنامج سكريبوس Scribus كيفية وضع نص على مسار باستخدام برنامج سكريبوس Scribus كيفية إنشاء شارة تقليدية ذات شريط في برنامج سكريبوس Scribus كيفية إنشاء الظلال في برنامج سكريبوس Scribus
  9. يوجد وعدٌ بأن تدعم شبكاتُ تبديل الرزم للأغراض العامة جميعَ أنواع التطبيقات والبيانات، بما في ذلك تطبيقات الوسائط المتعددة التي تنقل تدفقات الصوت والفيديو الرقمية. وقد كانت إحدى العقبات في الأيام الأولى أمام تحقيق هذا الوعد؛ هي الحاجة إلى روابط ذات حيز نطاق تراسلي أعلى، لكن لم تُعَد هذه مشكلة، ولكن كان هناك ما هو أكثر من مجرد توفير حيز نطاق تراسلي كافٍ لنقل الصوت والفيديو عبر الشبكة. يتوقع المشاركون في محادثةٍ هاتفية على سبيل المثال، أن يكونوا قادرين على التحدث بطريقةٍ يمكن لشخصٍ ما أن يرد على شيءٍ ما قاله الآخر، وأن يُسمع صوته على الفور تقريبًا، وبالتالي يمكن أن يكون توقيت التسليم مهمًا جدًا. سنشير إلى التطبيقات الحساسة لتوقيت البيانات بتطبيقات الوقت الحقيقي real-time applications، حيث تميل تطبيقات الصوت والفيديو لتكون أمثلةً أساسيةً عن تطبيقات الوقت الحقيقي، ولكن هناك أمثلةٌ أخرى مثل التحكم الصناعي، فقد ترغب في إرسال أمرٍ إلى ذراع الروبوت للوصول إليه قبل أن يصطدم الذراع بشيءٍ ما. ويمكن أن يكون لتطبيقات نقل الملفات قيودٌ على التوقيت، مثل اشتراط استكمال تحديث قاعدة البيانات خلال الليل قبل استئناف العمل الذي يحتاج إلى البيانات في اليوم التالي. السمة المميزة لتطبيقات الوقت الحقيقي هي أنها تحتاج إلى نوعٍ من التأكيد من الشبكة، باحتمالية وصول البيانات في الوقت المحدد. ويمكن للتطبيق الذي ليس بتطبيق وقتٍ حقيقي، استخدام استراتيجية إعادة الإرسال من طرفٍ إلى طرف للتأكد من وصول البيانات بصورةٍ صحيحة، ولكن لا توفّر هذه الاستراتيجية التوقيت المناسب، حيث تُضيف إعادة الإرسال فقط إلى زمن الوصول الإجمالي إذا وصلت البيانات متأخرة. ويجب أن توفر الشبكةُ نفسها (الموجّهات) الوصول في الوقت المناسب، وليس فقط عند أطراف الشبكة (المضيفين)، لذلك نستنتج أن نموذج أفضل جهد best-effort model، والذي تحاول فيه الشبكة توصيل بياناتك ولكنها لا تقدّم أي وعودٍ وتترك عملية التحسين على الأطراف؛ لا يكفي لتطبيقات الوقت الحقيقي، فما نحتاجه هو نموذج خدمةٍ جديد، حيث يمكن للتطبيقات التي تحتاج إلى ضماناتٍ أعلى أن تطلب من الشبكة الحصول عليها. وهنا قد تستجيب الشبكة بعد ذلك من خلال تقديم تأكيدٍ بأنها ستعمل بصورةٍ أفضل، أو ربما بالقول إنها لا تستطيع أن تَعِد بأي شيءٍ أفضل في الوقت الحالي. لاحظ أن نموذج الخدمة هذا يمثّل مجموعةً شاملةً من النموذج الأصلي، حيث يجب أن تكون التطبيقات المسرورة من خدمة أفضل جهد قادرةً على استخدام نموذج الخدمة الجديد، لأن متطلباتها أقل صرامةً. وهذا يعني أن الشبكة ستتعامل مع بعض الرزم بصورةٍ مختلفة عن الأخرى، وهو أمرٌ لم يحدث في نموذج أفضل جهد. يُقال عن الشبكة التي يمكنها توفير هذه المستويات المختلفة من الخدمة بأنها تدعم جودة الخدمة quality of service أو اختصارًا QoS. متطلبات التطبيق يجب أن نحاول فهم احتياجات التطبيقات قبل النظر في البروتوكولات والآليات المختلفة الممكن استخدامها لتوفير جودة الخدمة لهذه التطبيقات، حيث يمكننا تقسيم التطبيقات بدايةً إلى نوعين هما تطبيقات الوقت الحقيقي real-time، والتطبيقات التي ليست تطبيقات وقت حقيقي non-real-time، والتي يُطلق عليها أحيانًا اسم تطبيقات البيانات التقليدية لأنها كانت تقليديًا التطبيقات الرئيسية الموجودة على شبكات البيانات، وهي تشمل معظم التطبيقات الشائعة، مثل SSH ونقل الملفات والبريد الإلكتروني وتصفح الويب، وما إلى ذلك، والتي يمكنها جميعًا العمل دون ضمانات لتسليم البيانات في الوقت المناسب. يُطلق مصطلحٌ آخر لهذا النوع من التطبيقات وهو التطبيقات المرنة elastic، لأنها قادرةٌ على التمدد بأمان في مواجهة التأخير المتزايد. لاحظ أن هذه التطبيقات قد تستفيد من فترات التأخير القصيرة، لكنها تبقى قابلةً للاستخدام مع زيادة التأخير؛ كما أن متطلبات التأخير الخاصة بها تتفاوت من التطبيقات التفاعلية مثل SSH إلى التطبيقات غير المتزامنة، في البريد الإلكتروني مثلًا مع عمليات النقل الجماعي التفاعلية عند نقل الملفات في المنتصف على سبيل المثال. مثال تطبيق صوتي في الوقت الحقيقي افترض تطبيقًا صوتيًا مشابهًا للتطبيق الموضح في الشكل السابق بمثابة مثالٍ على تطبيقات الوقت الحقيقي، حيث تُنشَأ البيانات عن طريق جمع عينات من ميكروفون وتحويلها إلى رقمية باستخدام محوّل من تناظري إلى رقمي A-to-D، وتُوضع العينات الرقمية في رزم وتُرسَل عبر الشبكة، وتُستلَم في الطرف الآخر. يجب تشغيل البيانات بمعدلٍ مناسب في المضيف المستلم، فإذا جُمِعت عينات الصوت بمعدل واحد لكل 125 ميكرو ثانية على سبيل المثال، فيجب تشغيلها بالمعدل نفسه، وبالتالي يمكننا التفكير في كل نموذج على أنه يحتوي على وقت تشغيلٍ playback time معين، وهي النقطة الزمنية التي يحتاجها المضيف المستلم. حيث تكون كل عينةٍ في المثال الصوتي لها وقت تشغيل بعد 125 ميكرو ثانية من العينة السابقة، فإذا وصلت البيانات بعد وقت التشغيل المناسب إما بسبب تأخرها في الشبكة أو بسبب إسقاطها وإعادة إرسالها لاحقًا، فإنها ستكون عديمة الفائدة. إنّ عدم جدوى البيانات المتأخرة هو الذي يُميّز تطبيقات الوقت الحقيقي، أما في التطبيقات المرنة، فقد يكون من الجيد أن تظهر البيانات في الوقت المحدد، ولكن لا يزال بإمكاننا استخدامها عند عدم حدوث ذلك. تتمثل إحدى طرق إنجاح تطبيقنا الصوتي في التأكد من أن جميع العينات تستغرق نفس القدر من الوقت لاجتياز الشبكة، وبعد ذلك ستظهر العينات في جهاز الاستقبال بنفس المعدل، وذلك نظرًا لأنها تُحقَن بمعدلٍ واحدٍ لكل 125 ميكرو ثانية وتكون جاهزةً للتشغيل. من الصعب عمومًا ضمان أن جميع البيانات المارة عبر شبكة تبديل الرزمة ستواجه نفس التأخير تمامًا، حيث تواجه الرزم أرتالًا في المبدلات أو الموجّهات، وتختلف أطوال الأرتال هذه مع الوقت، مما يعني أن التأخيرات تميل إلى التباين مع الوقت، ولذلك من المحتمل أن تكون مختلفةً لكل رزمة في تدفق الصوت، وتتمثل طريقة التعامل مع ذلك عند طرف المستقبِل في تخزين قدرٍ احتياطي من البيانات مؤقتًا، وبالتالي توفير مخزنٍ للرزم التي تنتظر تشغيلها في الوقت المناسب، فإذا تأخرت الرزمة لفترةٍ قصيرة، فإنها ستنتقل إلى المخزن المؤقت حتى يحين وقت التشغيل؛ أما إذا تأخرت لفترةٍ طويلة، فلن تحتاج إلى تخزينها لفترةٍ طويلة في المخزن المؤقت لجهاز الاستقبال قبل تشغيلها، وبذلك نكون قد أضفنا إزاحةً ثابتةً لوقت تشغيل جميع الرزم، وهذا نوعٌ من أنواع التأمين، ونسمي هذه الإزاحة نقطة التشغيل playback point. المرة الوحيدة التي نواجه فيها مشكلةً هي في حالة تأخر الرزم في الشبكة لفترةٍ طويلة، بحيث تصل بعد وقت التشغيل، مما يتسبب في نفاذ مخزن التشغيل المؤقت. يوضح الشكل الآتي عملية تخزين التشغيل المؤقتة playback buffer، حيث يوضح الخطُ القطري الأيسر الرزم المُنشَأة بمعدلٍ ثابت، ويوضح الخط المتموج وقت وصول الرزم، إذ يحدث بعض التغيُّر في الوقت بعد إرسالها، وذلك اعتمادًا على ما تواجهه في الشبكة. يُظهر الخط القطري الأيمن الرزم المُشغَّلة بمعدلٍ ثابت بعد المكوث في المخزن المؤقت للتشغيل لبعض الوقت، وطالما بقي خط التشغيل بعيدًا بما يكفي عن الوقت المناسب، فلن يلاحظ التطبيق أبدًا التباين في تأخير الشبكة، ولكن إذا حركنا خط التشغيل قليلًا إلى اليسار، فستبدأ بعض الرزم في الوصول بعد فوات الأوان ولن تكون مفيدة. هناك حدودٌ لمدى تأخير تشغيل البيانات بالنسبة لتطبيقنا الصوتي، إذ من الصعب إجراء محادثةٍ إذا زاد الوقت بين حديثك ووقت إصغار المستمع لك عن 300 ميلي ثانية، وبالتالي فإن ما نريده من الشبكة في هذه الحالة هو ضمان وصول جميع بياناتنا في غضون 300 ميلي ثانية. وإذا وصلت البيانات مبكرًا، فإننا نخزنها مؤقتًا حتى وقت التشغيل الصحيح، وإذا وصلت متأخرةً فلا فائدة منها ويجب التخلص منها. يوضح الشكل السابق التأخير أحادي الاتجاه المُقاس عبر مسارٍ معين عبر الإنترنت على مدار يومٍ معين من أجل الحصول على تقديرٍ أفضل لكيفية تأخُّر الشبكة المتغير. قد تختلف الأرقام الدقيقة اعتمادًا على المسار والتاريخ، ولكن العامل الرئيسي هنا هو تباين التأخير، والذي يوجد دائمًا في أي مسارٍ تقريبًا وفي أي وقت. وكما يتضح من النسب المئوية التراكمية المعطاة عبر الجزء العلوي من الرسم البياني، فإن 97% من الرزم في هذه الحالة لها زمن انتقالٍ يبلغ 100 ميلي ثانية أو أقل، وهذا يعني أنه إذا ضُبطت نقطة التشغيل عند 100 ميلي ثانية في تطبيقنا الصوتي على سبيل المثال، فستصل وسطيًا 3 من كل 100 رزمة متأخرة جدًا، بحيث لا يمكن استخدامها. ومن الأشياء المهمة الواجب ملاحظتها في الرسم البياني، هي أنّ ذيل المنحنى (أي إلى أي مدى يمتد إلى اليمين) طويلٌ جدًا، وبالتالي سيتعين علينا ضبط نقطة التشغيل على 200 ميلي ثانية لضمان وصول جميع الرزم في الوقت المناسب. تصنيف تطبيقات الوقت الحقيقي بعد أن أصبحت لدينا فكرةٌ ملموسةٌ عن كيفية عمل تطبيقات الوقت الحقيقي، يمكننا النظر في بعض أصناف التطبيقات المختلفة التي تعمل على تحفيز نموذج الخدمة لدينا. يدين التصنيف التالي بالكثير لكلارك Clark وبرادن Braden وشينكر Shenker، وتشانج Zhang، ويلخّص الشكل التالي تصنيف التطبيقات: السمة الأولى التي يمكننا من خلالها تصنيف التطبيقات هي تسامحها tolerance مع خسارة البيانات، حيث قد تحدث "خسارة" بسبب وصول رزمةٍ متأخرةٍ جدًا بحيث لا يمكن تشغيلها، وكذلك الرزم المفقودة الناشئة عن الأسباب المعتادة في الشبكة. يمكن استكمال عينةٍ صوتيةٍ مفقودة من العينات المحيطة مع تأثيرٍ ضئيل نسبيًا على جودة الصوت المُدركة، وتنخفض الجودة إلى الحد الذي يصبح فيه الكلام غير مفهوم، فقط مع ضياع المزيد والمزيد من العينات. من المحتمل أن يكون برنامج التحكم في الروبوت مثالًا على تطبيقٍ في الوقت الحقيقي لا يتحمل الخسارة، حيث يَعُد فقدان الرزمة التي تحتوي على الأمر الذي يأمر ذراع الروبوت بالتوقف أمرًا غير مقبول. وبالتالي يمكننا تصنيف التطبيقات في الوقت الحقيقي على أنها متسامحة tolerant أو غير متسامحة intolerant، وذلك اعتمادًا على إمكانية تحملّها للخسارة العرضية. لاحظ أن العديد من التطبيقات في الوقت الحقيقي أكثر تسامحًا مع الخسارة العرضية من التطبيقات التي ليست تطبيقات وقت حقيقي؛ فبموازنة تطبيقنا الصوتي مع تطبيق نقل الملفات؛ فقد يؤدي فقدان بتٍ واحدٍ غير مصحَّحِ إلى جعل الملف عديم الفائدة تمامًا. الطريقة الثانية لتصنيف التطبيقات في الوقت الحقيقي هي قدرتها على التكيُّف adaptability، فقد يكون تطبيق الصوت على سبيل المثال قادرًا على التكيف مع مقدار التأخير الذي تواجهه الرزم أثناء عبورها للشبكة. وإذا لاحظنا أن الرزم تصل دائمًا تقريبًا في غضون 300 ميلي ثانية من إرسالها، فيمكننا تعيين نقطة التشغيل وفقًا لذلك، مع تخزينٍ مؤقتٍ للرزم التي تصل في أقل من 300 ميلي ثانية. افترض أننا لاحظنا لاحقًا أن جميع الرزم تصل في غضون 100 ميلي ثانية من إرسالها، فإذا رفعنا نقطة التشغيل إلى 100 ميلي ثانية، فمن المحتمل أن يلاحظ مستخدمو التطبيق حدوث تحسُّن. تتطلب عملية تحويل نقطة التشغيل؛ تشغيلَ عينات بمعدلٍ متزايد لبعض الوقت، حيث يمكن فعل ذلك في التطبيق الصوتي بطريقةٍ بالكاد يمكن إدراكها وببساطة، عن طريق تقصير فترات الصمت بين الكلمات، وبالتالي يُعَد ضبط نقطة التشغيل أمرًا سهلًا إلى حدٍ ما في هذه الحالة، وقد طُبِّق بفعالية للعديد من التطبيقات الصوتية، مثل برنامج المؤتمرات الصوتية عن بعد المعروف باسم vat. لاحظ أن ضبط نقطة التشغيل يمكن أن يحدث في أيٍ من الاتجاهين، ولكنه يتضمن في الواقع تشويهًا على إشارة التشغيل أثناء فترة الضبط، وستعتمد تأثيرات هذا التشويه إلى حدٍ كبير على كيفية استعمال المستخدم النهائي للبيانات. ولاحظ أيضًا أنه إذا ضبطنا نقطة التشغيل الخاصة بنا على افتراض أن جميع الرزم ستصل في غضون 100 ميلي ثانية، ثم وجدنا أن بعض الرزم تصل متأخرة قليلًا؛ فسنضطر إلى إسقاطها، في حين أننا لن نضطر إلى إسقاطها إذا تركنا نقطة التشغيل عند 300 ميلي ثانية. وبالتالي يجب علينا تقديم نقطة التشغيل فقط عندما توفّر ميزةً ملحوظة، وذلك عندما تكون لدينا بعض الأدلة على أن عدد الرزم المتأخرة سيكون صغيرًا بصورةٍ مقبولة، وقد نفعل بذلك بسبب التاريخ الحديث المُلاحظ أو بسبب بعض التأكيد من الشبكة. وسنسمي التطبيقات التي يمكنها تعديل نقاط التشغيل الخاصة بها بالتطبيقات المتكيفة مع التأخير delay-adaptive applications. توجد فئةٌ أخرى من التطبيقات المتكيفة هي التطبيقات المتكيفة مع المعدل rate adaptive، حيث يمكن للعديد من خوارزميات تشفير الفيديو، مثل مقايضة معدل البتات مقابل الجودة، وبالتالي إذا وجدنا أن الشبكة يمكن أن تدعم حيز نطاقٍ تراسليٍ معين، فيمكننا ضبط معاملات التشفير وفقًا لذلك، وإذا أُتيح المزيد من حيز النطاق التراسلي لاحقًا، فيمكننا تغيير المعاملات لزيادة الجودة. مناهج دعم جودة الخدمة نحتاج نموذجَ خدمة أكثر ثراءً يلبي احتياجات أي تطبيق، ويقودنا ذلك إلى نموذج خدمة ليس به فئةٌ واحدة فقط مثل نموذج أفضل جهد، بل به عدة فئات كلٌ منها متاحٌ لتلبية احتياجات مجموعةٍ معينة من التطبيقات. نحن الآن على استعدادٍ لتحقيق هذه الغاية، من خلال النظر في بعض المناهج التي طُوِّرت لتوفير مجموعةٍ من صفات الخدمة، ويمكن تقسيمها إلى فئتين رئيسيتين: المناهج الدقيقة Fine-grained التي توفّر جودة الخدمة للتطبيقات أو التدفقات الفردية. المناهج القاسية Coarse-grained التي توفّر جودة الخدمة لفئاتٍ كبيرة من البيانات أو حركة المرور المجمَّعة. سنجد في الفئة الأولى الخدمات المتكاملة Integrated Services، وهي معمارية جودة خدمة QoS طُوِّرت في منظمة IETF، وترتبط غالبًا ببروتوكول حجز الموارد Resource Reservation Protocol أو اختصارًا RSVP، حيث تكمن الخدمات المميزة Differentiated Services في الفئة الثانية، والتي ربما تكون آلية جودة الخدمة الأكثر انتشارًا اليوم. أخيرًا، ليست إضافة دعم جودة الخدمة إلى الشبكة بالضرورة القصة الكاملة حول دعم التطبيقات في الوقت الحقيقي، ننختم مناقشتنا من خلال إعادة النظر في ما قد يفعله المضيف النهائي لدعم تدفقات الوقت الحقيقي بصورةٍ أفضل، بغض النظر عن مدى انتشار آليات جودة الخدمة مثل الخدمات المتكاملة أو المميزة. ترجمة -وبتصرّف- للقسم Quality of Service من فصل Congestion Control من كتاب Computer Networks: A Systems Approach. اقرأ أيضًا المقال السابق: التحكم المتقدم في الازدحام في الشبكات الحاسوبية من خلال الطرق القائمة على المصدر الشبكات الفرعية والعناوين والأخطاء في بروتوكول IP كشف الأخطاء على مستوى البت في الشبكات الحاسوبية
  10. سنوضّح في هذه المقالة كيفية إضافة نص إلى صورة، بحيث يبدو النص كما لو أنه على طبقة "داخل" تلك الصورة، لكن قبل ذلك يجب عليك أن تكون على معرفة لكيفية استخدام أساسيات سكريبوس Scribus، بما في ذلك إنشاء إطارات الصور ووضع الصور فيها، وإنشاء إطارات نصية، وإدخال نص، وتعديل نوع وحجم ذلك النص. ستكون هناك حاجة أيضًا إلى بعض العمليات الحسابية الأساسية ولكنها سهلة. الإعداد الصورة ستحتاج أولًا لصورة لوضع النص فيها. ويُعَد اختيار الصورة مهمًا جدًا لأن التأثير لن يكون صحيحًا إذا كانت الصورة غير صحيحة، ويُفضَّل أن يكون لصورتك فرق واضح بين الخلفية والعناصر الموجودة في الأمام، كما يجب أن تكون هناك مسافة جيدة بين عناصر الصورة الأساسية وما وراءها، أو أن تكون الخلفية غير واضحة، إذ يمنحك ذلك المساحة التي تحتاجها ضمن الصورة لوضع النص، وإذا لم تكن هناك مساحة لإضافة النص، فلن تبدو الصورة صحيحة، ولهذا حاوِل اختيار صورة يكون فيها الخط الفاصل بين عناصر الصورة الرئيسية والخلفية واضحًا بدون تشويش. سنعمل في هذا المقال على صورة بسيطة وبعض النصوص الأساسية ولكن التقنية قابلة للتوسّع إلى مشاريع أكثر تعقيدًا. نزّل الصورة التي سنستخدمها في هنا، ولكن استخدم الصورة المناسبة التي تريدها. الخط Font يعتمد اختيارك لنوع خط النص على الصورة التي تستخدمها والتأثير الذي تريد إنشاءه، وسنستخدم في مثالنا خطًا يوحي بالاسترخاء، بما يتماشى مع موضوع عطلة الشاطئ في الصورة مثل الخط Lobster. الصورة افتح سكريبوس Scribus وأنشئ مستندًا جديدًا بالاتجاه الأفقي، حيث سيكون القياس A4 ورسالة Letter مناسبَين. أنشئ إطار صورة يغطي الصفحة تقريبًا. ضع الصورة التي تريد استخدامها في الإطار وغيّر حجمها بالشكل المناسب. يجب أن تضع ملاحظات ببعض القيم قبل المتابعة مثل القيم التالية: قيمة X-Pos في تبويب X وY وZ من نافذة خصائص Properties، حيث يمكنك تسمية هذه القيمة "XB". قيمة Y-Pos في تبويب X وY وZ من نافذة خصائص Properties، حيث يمكنك تسمية هذه القيمة "YB". قيمة X-Scale (أو Y-Scale، إذ يجب أن تكونا متطابقتين) في تبويب صورة Image من نافذة خصائص Properties، أو من نافذة خصائص الصورة في الإصدار 1.5.7 من سكريبوس التي يمكن الوصول إليها من قائمة نوافذ ثم خصائص المحتوى، حيث يمكنك تسمية هذه القيمة "SC". يجب الآن إنشاء بعض الطبقات. الطبقات اختر قائمة نوافذ Windows، ثم الطبقات Layers لفتح نافذة طبقات. اضغط على زر + لإنشاء طبقة جديدة. انقر نقرًا مزدوجًا على اسم الطبقة الجديد وغيّره إلى "نص Text" (بدون علامات الاقتباس)، إذ ستحتوي هذه الطبقة على النص. اضغط على الزر + مرةً أخرى لإنشاء طبقة جديدة أخرى. انقر نقرًا مزدوجًا على اسم الطبقة الجديد وغيّره إلى "تراكب Overlay" (بدون علامات الاقتباس)، حيث ستعطيك هذه الطبقة تأثيرًا خياليًا. انقر على طبقة "نص" لتحديدها لتتمكن من إضافة النص. النص أنشئ بعض إطارات النصوص وأدخِل النص الذي تريد استخدامه كما في الشكل التالي: تأكّد من أن النص يتداخل مع الزجاج كما هو موضح في الشكل التالي، وإلّا فلن ترى أي تأثير: التتبّع Tracing انقر على مربع الاختيار الموجود في أقصى يسار طبقة "نص" في نافذة طبقات أسفل أيقونة العين لجعل هذه الطبقة غير مرئية. لم تُحذَف الطبقة، ولكن يُعَد إجراء التتبّع دون وجود النص أسهل، لهذا اتبع الآتي: انقر على طبقة "تراكب" في نافذة طبقات لتحديد تلك الطبقة. قرّب الصورة حتى يملأ الكأس الزجاجي مركز لوحة رسم سكريبوس تقريبًا. اختر قائمة إدراج Insert ثم منحنى بيزيه Bezier Curve. ارسم الآن خطًا حول حافة الكأس الزجاجي. ليست هناك حاجة إلى أن تكون دقيقًا في هذه المرحلة، إذ يكفي أن ترسم شيئًا يقترب من الشكل كما في الشكل التالي، ولا تهتم بمحاولة إغلاق الخط لإنشاء شكل مغلق، حيث ستجعل سكريبوس ينفّذ ذلك نيابةً عنك لاحقًا: انتقل إلى تبويب خط Line في نافذة خصائص بعد تحديد المنحنى أو الخط. غيّر عرض الخط Line Width إلى "خط رفيع Hairline"، وذلك بالنقر على السهم الصغير المتّجه للأسفل بجانب حقل إدخال النص. لاحظ أن الخط الذي رسمته لا يبدو دقيقًا كما هو متوقع كما في الشكل التالي، لكنه جيد ويمكنك إصلاحه لاحقًا: انقر نقرًا مزدوجًا على الخط للدخول إلى نافذة محرّر العقد Node Editor. انقر على أيقونة "أغلق منحنى بيزيه هذا Close this Bezier Curve" لإغلاق المنحنى كشكل. يجب الآن سحب نقاط التحكم الزرقاء بالقرب من حافة الكأس الزجاجي إلى أن تترك فراغًا صغيرًا قدر الإمكان. ويمكنك هنا استخدام أيقونة "أضِف عُقَدًا Add Nodes" لإضافة عقدة إلى خط، أو يمكنك الانتقال إلى قائمة عنصر Item ثم أدوات المسار Path Tools، ثم تقسيم فرعي للمسار Subdivide Path لوضع عقد إضافية في منتصف كل خط موجود مسبقًا. كما يمكنك استخدام أيقونة "حرّك نقاط التحكم Move Control Points" لتغيير موضع نقاط التحكم في الخط لجعله منحنيًا بهدف ملاءمة الصورة بصورة أفضل. كلما زاد الوقت الذي تستغرقه في تطبيق ذلك، كانت النتيجة أفضل، فالهدف هو محاولة وضع المنحنى في أقرب مكان ممكن من المكان الذي يلتقي فيه الكأس الزجاجي مع الخلفية. يوضّح الشكل التالي محاولةً مناسبةً باستخدام خطوط مستقيمة فقط: اضغط على "إنهاء التحرير End Editing" أو موافق في نافذة محرّر العقد لرؤية النتيجة التي يجب أن تبدو مشابهةً للشكل التالي: يجب الآن تحويل الشكل إلى تراكب Overlay. التراكب اختر قائمة عرض View ثم تقريب، ثم 100% لرؤية الصفحة بأكملها مرةً أخرى. حدّد الشكل الذي حدّدته سابقًا. انقر على "لون الحد Line Colour" في تبويب ألوان من نافذة خصائص. اختر "لا شيء None" من قائمة الألوان. يؤدي ذلك إلى اختفاء الشكل، ولكن هذا جيد حاليًّا. انقر بزر الفأرة الأيمن على المكان الذي يجب أن يكون فيه الشكل، واختر تحويل إلى Convert to، ثم إطار صورة Image Frame. انقر بزر الفأرة الأيمن على إطار الصورة الجديد، واختر استيراد صورة Get Image. حدّد موقع الصورة التي استخدمتها للخلفية، ثم اضغط "موافق". يجب أن يكون لديك الآن شيء يشبه الشكل التالي (قد يبدو ذلك غريبًا جدًا ولكنك ستصلحه الآن): اذهب إلى تبويب X وY وZ في نافذة خصائص. انظر إلى قيمة "X-Pos" واطرحها من قيمة "XB" التي دونتها مثل ملاحظة سابقًا، وهي قيمة X-Pos لصورة الخلفية. انظر إلى قيمة "Y-Pos" واطرحها من قيمة "YB" التي دونتها كملاحظة سابقًا وهي قيمة Y-Pos لصورة الخلفية. انتقل إلى تبويب صورة Image من نافذة خصائص (أو انتقل إلى نافذة خصائص الصورة في الإصدار 1.5.7 من سكريبوس التي يمكن الوصول إليها من قائمة نوافذ ثم خصائص المحتوى). تأكّد من تحديد الخيار "تحجيم حر Free Scaling". أدخِل يدويًا في الحقلين "X-Scale" و"Y-Scale" القيمةَ "SC" التي دونتها كملاحظة سابقًا، وهي قيمة X-Scale لصورة الخلفية. أدخِل يدويًا نتيجة طرح X-Pos في الحقل X-Pos. أدخل يدويًا نتيجة طرح Y-Pos في الحقل Y-Pos. يجب أن يبدو الكأس الزجاجي وكأنه عاد إلى طبيعته كما في الشكل التالي، وإن لم يكن الأمر كذلك، فتحقق من العمليات الحسابية التي أجريتها، إذ يجب طرح قيم X-Pos وY-Pos الخاصة بالشكل من القيم المقابلة لصورة الخلفية: يمكنك الآن جعل النص مرئيًا مرةً أخرى، وذلك من خلال النقر على مربع الاختيار الموجود تحت رمز العين لطبقة "نص" في نافذة طبقات، وذلك لجعل هذه الطبقة مرئيةً مرةً أخرى. يجب أن يبدو المستند الآن مثل الشكل التالي: قد تلاحظ وجود خط داكن حول الكأس الزجاجي، لكن لا تقلق بشأن ذلك، لأنه الإطار الذي توجد به صورة التراكب ولا يظهر إلا عندما تكون إعدادات العرض مضبوطة على "إظهار الإطارات Show Frames". استخدم قائمة عرض، ثم معاينة، ثم نمط المعاينة Preview Mode لترى كيف سيظهر المستند عند تصديره. بهذا يكون قد أصبح الآن جزء من النص موجودًا خلف الكأس الزجاجي كما في الشكل التالي، ولكن يمكنك تحريكه أو تغيير لونه أو إعطاؤه مخططًا تفصيليًا أو أي شيء تريده. أمثلة عملية فيما يلي بعض الأمثلة التي تستخدم نفس التقنية، والتي قد تساعد في إظهار الأمور التي يمكن تحقيقها بكل بساطة. الرمال والبحر لم نتتبّع نجم البحر بأكمله، بل تتبّعنا الأجزاء التي ستكون بالقرب من النص فقط ودمجنا هذه الأشكال لإنشاء شكل جديد لاستخدامه صورةً للتراكب. الأهرامات تتبّعنا في هذه الصورة جزءًا من الهرم فقط، ودوّرنا النص قليلًا. الأفق Skyline سنتتبّع في هذا المثال بعض المباني فقط (بالتحديد تلك المباني التي تقع على نفس المسافة من الكاميرا)، وأضفنا للنص تعبئات متدرجة مختلفة، بحيث سيعطي هذا انطباعًا بأن النص قد أُسقِط في وسط المدينة. قنديل البحر Jellyfish أعطينا في هذا المثال طبقة صورة التراكب عتمة أقل (حوالي 80%)، بحيث تظهر طبقة النص قليلًا، مما يجعل قنديل البحر شفافًا بعض الشيء. عصا Stick 'em Up تلاعبنا في هذا المثال بالنص باستخدام تحويل عشوائي ولم تكن هناك حاجة إلى تتبع سوى الموزة ويد الشخص. عرض خاص تتبعنا في هذا المقال الهاتف المحمول فقط باستخدام التقنية نفسها وأضفنا النص. الخلاصة رأينا كيفية استخدام عمليات مختلفة في سكريبوس لوضع جزء من النص داخل صورة، كما رأينا من خلال الأمثلة كيفية تطبيق الآلية نفسها مع الصور الأخرى. جرّب ما يمكنك إنشاؤه. ترجمة -وبتصرّف- للمقال How to layer text inside an existing image. اقرأ أيضًا كيفية التعامل مع إطارات الصور في برنامج سكريبوس Scribus كيفية وضع نص على مسار باستخدام برنامج سكريبوس Scribus كيفية إنشاء تأثير الصور القديمة في برنامج سكريبوس كيفية تطبيق تأثيرات فنية على الصور وإضافة إطار صورة بحواف ضبابية في سكريبوس كيف تنشئ ألوانك الخاصة في برنامج سكريبوس Scribus
  11. سنشرح في هذا المقال طريقةً متقدمةً أخرى للتحكم في ازدحام الشبكات الحاسوبية، وذلك فقط من قِبل المضيفين النهائيين وتُطبَّق في بروتوكول TCP، مما يجعلها بديلًا عن آليات التحكم في الازدحام الموصوفة في مقالات سابقة من نفس السلسلة. الطرق القائمة على المصدر مثل آليات Vegas وBBR وDCTCP سنصف الآن استراتيجيةً لاكتشاف المراحل الأولية للازدحام قبل حدوث الخسائر في المضيفين النهائيين، على عكس مخططات تجنُّب الازدحام السابقة التي اعتمدت على التعاون مع الموجّهات. سنقدم أولًا لمحةً موجزةً عن مجموعة الآليات ذات الصلة التي تستخدم معلوماتٍ مختلفة للكشف عن المراحل المبكرة من الازدحام، ثم نصف آليتين محددتين بمزيدٍ من التفصيل. الفكرة العامة لهذه التقنيات هي مراقبة إشارةٍ من الشبكة تشير إلى تراكم رتل بعض الموجهات، وأن الازدحام سيحدث قريبًا إذا لم نفعل شيئًا حيال ذلك. قد يلاحظ المصدر على سبيل المثال وجود زيادةٍ قابلةٍ للقياس في RTT لكل رزمة تاليةٍ يرسلها مع تراكم أرتال الرزم في موجّهات الشبكة. ستستغل خوارزميةٌ معينة هذه الملاحظة على النحو التالي: تزداد نافذة الازدحام عادةً كما هو الحال في بروتوكول TCP، ولكن توخّرُ كلُّ رحلتين ذهابًا وإيابًا الخوارزميةَ للتحقق مما إذا كانت RTT الحالية أكبر من متوسط الحد الأدنى والحد الأقصى لفترات RTT التي شوهدت حتى الآن، فإذا كان الأمر كذلك، فستقلل الخوارزمية نافذة الازدحام بمقدار الثُمُن. تعمل الخوارزمية الثانية شيئًا مشابهًا، حيث يعتمد قرار تغيير حجم النافذة الحالية على التغييرات التي أجريت على RTT وحجم النافذة، وتُضبط النافذة مرةً واحدةً كل تأخرين ذهابًا وإيابًا بناءً على ناتج الجداء: (CurrentWindow - OldWindow) x (CurrentRTT - OldRTT) إذا كانت النتيجة موجبةً، فسيقلل المصدر من حجم النافذة إلى الثمن؛ وإذا كانت النتيجة سلبيةً أو 0، فسيزيد المصدر النافذة بمقدار أقصى حجمٍ للرزمة. لاحظ أن النافذة تتغير أثناء كل تعديل، أي أنها تتأرجح حول نقطتها المثلى. هناك تغييرٌ آخر يُنظَر إليه عندما تقترب الشبكة من الازدحام، وهو تسوية معدل الإرسال، حيث سيستفيد مخططٌ ثالث من هذه الحقيقة، وسيزيد حجمَ النافذة بمقدار رزمةٍ واحدة في كل RTT، كما سيوازن الإنتاجية المُحقَّقة مع الإنتاجية عندما كانت النافذة أصغر برزمةٍ واحدة. إذا كان الاختلاف أقل من نصف الإنتاجية المُحقَّقة عندما كانت رزمةٌ واحدةٌ فقط قيد النقل -كما كان الحال في بداية الاتصال-، فستقلل الخوارزمية النافذة بمقدار رزمةٍ واحدة. يحسُب هذا المخطط الإنتاجية عن طريق قسمة عدد البايتات المُعلّقة في الشبكة على RTT. آلية TCP Vegas تشبه الآليةُ التي سندرسها بمزيدٍ من التفصيل؛ الخوارزميةَ الأخيرة، وذلك من حيث أنها تنظر في التغييرات في معدل الإنتاجية أو معدل الإرسال على وجه التحديد، لكنها تختلف عن الخوارزمية السابقة في الطريقة التي تحسب بها الإنتاجية، حيث توازن معدل الإنتاجية المُقاسة بمعدل الإنتاجية المُتوقَّع بدلًا من البحث عن التغيير في منحدر الإنتاجية. لم تُنشَر خوارزمية TCP Vegas على نطاقٍ واسع في الإنترنت اليوم، ولكن جرى تبنّي الاستراتيجية التي تستخدمها من خلال تطبيقات أخرى تُنشَر الآن. يمكن رؤية الغاية الكامنة وراء خوارزمية Vegas من خلال تتبع بروتوكول TCP القياسي الوارد في الشكل التالي. يتتبع الرسم البياني العلوي الموضح في الشكل التالي نافذة ازدحام الاتصال، حيث يعرض نفس المعلومات الواردة سابقًا في هذا القسم، ويوضح الرسمان البيانيان الأوسط والسفلي معلوماتٍ جديدة، حيث يُظهر الرسم البياني الأوسط متوسط معدل الإرسال كما قِيس عند المصدر، بينما يوضح الرسم البياني السفلي متوسط طول الرتل كما قيس في موجّه عنق الزجاجة المزدحِم، وتجري مزامنة الرسوم البيانية الثلاثة في الوقت المناسب، كما تزداد نافذة الازدحام في الرسم البياني العلوي في الفترة بين 4.5 و6.0 ثوان (في المنطقة المظللة). من المُتوقع أيضًا زيادة الإنتاجية المُراقَبة، ولكنها ستظل ثابتةً (في الرسم البياني الأوسط) بدلًا من ذلك، لأن الإنتاجية لا يمكن أن تزيد عن حيز النطاق التراسلي المتاح، وستؤدي أية زيادةٍ في حجم النافذة فقط بعد ذلك إلى استهلاك الرزم مساحةَ المخزن المؤقت في موجّه عنق الزجاجة (في الرسم البياني السفلي): تصف استعارةٌ مفيدة الظاهرة الموضحة في الشكل السابق، وهي القيادة على الجليد، فقد يشير عداد السرعة (أو نافذة الازدحام) إلى أنك تسير بسرعة 30 ميلًا في الساعة، ولكن بالنظر من نافذة السيارة ورؤية الناس مارّين بجانبك على الأقدام أو معدل الإرسال المُقاس، فأنت تعلم أنك لا تسير بسرعةٍ أكثر من 5 أميال في الساعة، حيث تمتص إطارات السيارة (مخازن الموجّه المؤقتة) الطاقة الإضافية. تستخدم آلية TCP Vegas هذه الفكرة لقياس والتحكم في كمية البيانات الإضافية التي يمر بها هذا الاتصال، حيث نعني "بالبيانات الإضافية"، البيانات التي لم يكن ليرسلها المصدر إذا كان يحاول مطابقة حيز النطاق التراسلي المتاح للشبكة تمامًا، فالهدف من آلية TCP Vegas هو الحفاظ على الكمية "المناسبة" من البيانات الإضافية في الشبكة. ومن الواضح أنه إذا أرسل المصدر الكثير من البيانات الإضافية، فسيؤدي ذلك إلى تأخيرات طويلة، وربما يؤدي إلى الازدحام. وإذا أرسل الاتصال القليل جدًا من البيانات الإضافية، فلن يتمكن من الاستجابة بسرعةٍ كافية للزيادات المؤقتة في حيز النطاق التراسلي للشبكة المتاح. تعتمد إجراءات تجنب الازدحام في آلية TCP Vegas على التغييرات في المقدار المقدَّر للبيانات الإضافية في الشبكة، وليس فقط على الرزم المُسقَطة. وسنشرح الآن الخوارزمية بالتفصيل. أولًا، حدد BaseRTT لتدفقٍ معين ليكون بمثابة وقت RTT الخاص بالرزمة عندما لا يكون التدفق مزدحمًا. تضبط آلية TCP Vegas وقت BaseRTT إلى الحد الأدنى لجميع أوقات الذهاب والإياب المقاسة RTTs؛ وعادةً ما يكون RTT للرزمة الأولى التي يرسلها الاتصال، قبل زيادة أرتال الموجه بسبب حركة المرور الناتجة عن هذا التدفق. إذا افترضنا أننا لا نسبب طفحانًا في الاتصال، فستكون الإنتاجية المتوقعة هي: ExpectedRate = CongestionWindow / BaseRTT حيث تُشير CongestionWindow إلى نافذة ازدحام TCP، والتي نفترض أنها تساوي عدد البايتات قيد النقل في هذه المناقشة. ثانيًا، تحسب آلية TCP Vegas معدل الإرسال الحالي ActualRate من خلال تسجيل وقت إرسال رزمةٍ مميزة، وتسجيل عدد البايتات المُرسَلة بين وقت إرسال هذه الرزمة ووقت استلام الإشعار بها، وحساب عينة RTT للرزمة المميزة عند وصول الإشعار بالاستلام، وقسمة الرقم من البايتات المرسلة على عينة RTT، ويُجرَى هذا الحساب مرةً واحدةً لكل وقت ذهاب وإياب. ثالثًا، توازن آلية TCP Vegas معدل الإرسال الحالي ActualRate بالمعدل المتوقع ExpectedRate وتضبط النافذة وفقًا لذلك، مع افتراض أن: Diff = ExpectedRate - ActualRate لاحظ أن Diff موجب أو 0 حسب التعريف، نظرًا لأن ActualRate >ExpectedRate يعني أننا بحاجة إلى تغيير BaseRTT إلى أحدث RTT أُخِذت منها عينات. سنحدد أيضًا أن عتبتي α < β، تقابلان تقريبًا وجود القليل جدًا والكثير من البيانات الإضافية في الشبكة على التوالي. تزيد آلية TCP Vegas من نافذة الازدحام خطيًا أثناء RTT التالي عندما يكون Diff< α، وإذا كان Diff> β فستقلل آلية TCP Vegas من نافذة الازدحام خطيًا أثناء RTT التالي، وتترك آلية TCP Vegas نافذة الازدحام دون تغيير عندما يكون α < Diff < β. يمكننا أن نرى أنه كلما ابتعدت الإنتاجية الفعلية عن الإنتاجية المتوقعة، زاد الازدحام الموجود في الشبكة، مما يعني أنه يجب تقليل معدل الإرسال، وستؤدي العتبة β إلى هذا الانخفاض. من ناحيةٍ أخرى سيكون الاتصال في خطر عدم استخدام حيز النطاق التراسلي المتاح عندما يقترب معدل النقل الفعلي جدًا من الإنتاجية المتوقعة، وتؤدي عتبة α إلى هذه الزيادة. الهدف العام هو الاحتفاظ ببايتاتٍ إضافية في الشبكة بين العتبتين α وβ. يتتبع الشكل السابق خوارزمية TCP Vegas لتجنب الازدحام، حيث يتتبع الرسم البياني العلوي نافذة الازدحام، ويُظهر نفس المعلومات الواردة في هذا المقال، ويتتبع الرسم البياني السفلي معدلات الإنتاجية المُتوقعة والفعلية التي تحكم كيفية ضبط نافذة الازدحام. يوضح الرسم البياني السفلي أفضل طريقةٍ لعمل الخوارزمية، حيث يتتبع الخط الملون ExpectedRate، بينما الخط الأسود فيتتبع ActualRate. يُعطي الشريط المظلل العريض المنطقة الواقعة بين العتبتين α وβ؛ فالجزء العلوي من الشريط المظلل بعيدٌ بمقدار α كيلو بايت في الثانية عن ExpectedRate، والجزء السفلي من الشريط المظلل بعيدٌ بمقدارβ كيلو بايت في الثانية عن ExpectedRate. يكون الهدف هنا هو الحفاظ على ActualRate بين هاتين العتبتين ضمن المنطقة المظللة؛ فإذا انخفضت قيمة ActualRate إلى ما دون المنطقة المظللة أي بعيدًا جدًا عن ExpectedRate، فستقلل آلية TCP Vegas نافذة الازدحام لأنها تخشى أن تُخزَّن العديد من الرزم مؤقتًا في الشبكة؛ وكلما تجاوز ActualRate المنطقة المظللة أي اقترب كثيرًا من ExpectedRate، فستزيد آلية TCP Vegas من نافذة الازدحام لأنها تخشى من تقليل استخدامية الشبكة. بما أن الخوارزمية توازن الفرق بين معدلات الإنتاجية الفعلية والمتوقعة مع العتبتين α وβ، فستُحدَّد هاتان العتبتان بالكيلو بايت في الثانية، ولكن ربما سيكون من الأدق التفكير بهاتين العتبتين من خلال عدد المخازن المؤقتة الإضافية التي يشغلها الاتصال في الشبكة، فإذا كانت α = 30 كيلوبايت في الثانية وβ = 60 كيلوبايت في الثانية عند الاتصال مع وقت BaseRTT يبلغ 100 ميلي ثانية وحجم رزمة يبلغ 1 كيلوبايت على سبيل المثال، فيمكننا التفكير في α على أنها تحدد أن الاتصال يجب أن يَشغُل 3 مخازن مؤقتة إضافية على الأقل في الشبكة، وأن β تحدّد أن الاتصال يجب ألا يشغل أكثر من 6 مخازن مؤقتة إضافية في الشبكة. يعمل ضبط α بالقيمة 1 مخزن مؤقت وβ بقيمة 3 مخازن مؤقتة بصورةٍ جيدة عمليًا. أخيرًا، ستلاحظ أن آلية TCP Vegas تقلل من نافذة الازدحام خطيًا، وهذا يتعارض ظاهريًا مع القاعدة التي تقول بأن النقص المضاعف multiplicative decrease ضروريٌّ لضمان الاستقرار، وسبب ذلك هو أن آلية TCP Vegas تستخدم نقصًا مضاعفًا عند انتهاء المهلة؛ فالنقص الخطي الموصوف للتو هو نقصٌ مبكرٌ في نافذة الازدحام التي يجب أن تحدث قبل حدوث الازدحام وبداية إسقاط الرزم. آلية TCP BBR إن حيز النطاق عنق الزجاجة التراسلي Bottleneck Bandwidth وRTT أو اختصارًا BBR، هي خوارزمية جديدة للتحكم في الازدحام طورها باحثون في Google. حيث تعتمد BBR على التأخير مثل آلية Vegas، مما يعني أنها تحاول اكتشاف نمو المخزن المؤقت لتجنب الازدحام وفقدان الرزم. يستخدم كلٌ من BBR وVegas الحد الأدنى والأقصى من RTT كما حُسِب على مدار فتراتٍ زمنيةٍ معينة، مثل إشارات تحكمٍ رئيسيةٍ لهما. تقدم BBR أيضًا آليات جديدة لتحسين الأداء، بما في ذلك التحكم بسرعة الرزم packet pacing، والتحقق من حيز النطاق التراسلي، والتحقق من RTT. يباعِد التحكم بسرعة الرزم بين الرزم بناءً على تقدير حيز النطاق التراسلي المتاح، وهذا يزيل الرشقات والأرتال غير الضرورية، مما ينتج عنه تحسُّن بالإشارة الراجعة. تزيد BBR أيضًا معدلها دوريًا، وبالتالي يجب التحقق من حيز النطاق التراسلي المتاح، وبالمثل تخفض BBR معدلها دوريًا، وبالتالي يجب التحقق من وجود حد أدنى جديد من RTT. تحاول آلية التحقق من RTT أن تكون متزامنة ذاتيًا، أي أن تحدُث تحققاتٌ من RTT الخاصة بتدفقات BBR متعددة في نفس الوقت عند وجودها، وهذا يوفر رؤيةً أدق لمسار RTT الفعلي غير المزدحم، والذي يحل إحدى المشكلات الرئيسية المتعلقة بآليات التحكم في الازدحام القائمة على التأخير، وهي الحصول على معرفةٍ دقيقة بمسار RTT غير المزدحم. تعمل BBR بنشاطٍ وتتطور بسرعة، ولكن ينصب التركيز الرئيسي على العدل، حيث تُظهر بعض التجارب أن تدفقات CUBIC تحصل على حيز نطاقٍ تراسلي أقل بمقدار 100 مرة عند التنافس مع تدفقات BBR على سبيل المثال، وتُظهر التجارب الأخرى أن الظلم بين تدفقات BBR ممكنٌ أيضًا؛ بينما يتمثل التركيز الرئيسي الآخر في تجنب معدلات إعادة الإرسال المرتفعة، حيث يُعاد في بعض الحالات إرسال ما يصل إلى 10% من الرزم. آلية DCTCP نختتم بمثالٍ لموقفٍ صُمِّم فيه نوعٌ من خوارزمية التحكم في الازدحام في بروتوكول TCP للعمل بالتنسيق مع آلية ECN ضمن مراكز البيانات السحابية. يُسمى هذا المزيج DCTCP اختصارًا لـ Data Center TCP والذي يُمثّل مركز بيانات TCP، ويُعَد هذا الموقف فريدًا من حيث أن مركز البيانات مستقلٌ بذاته، وبالتالي من الممكن نشر نسخةٍ مخصصة من TCP، وهنا لا نحتاج للقلق بشأن معالجة تدفقات TCP الأخرى بصورةٍ عادلة. تُعَد مراكز البيانات أيضًا فريدةً من نوعها من حيث أنها مبنيةٌ باستخدام مبدّلاتٍ ذات صندوقٍ أبيض ومنخفضة التكلفة low-cost white-box switches، وتُوفَّر المبدلات عادةً دون زيادةٍ في المخازن المؤقتة، لأنه لا داعي للقلق بشأن الأنابيب الطويلة الضخمة long-fat pipes التي تمتد عبر القارة. تتكيف DCTCP مع ECN عن طريق تقدير نسبة البايتات التي تواجه الازدحام بدلًا من الاكتشاف ببساطة أن الازدحام على وشك الحدوث، ثم تقيس DCTCP بعد ذلك نافذة الازدحام في المضيفين النهائيين بناءً على هذا التقدير. لا تزال خوارزمية TCP القياسية تعمل في حالة فقد الرزمة فعليًا. وقد صُمِّم هذا النهج لتحقيق سماحٍ للرشقات العالية high-burst tolerance، وزمن انتقالٍ منخفض، وإنتاجيةٍ عالية باستخدام مبدلاتٍ سطحية shallow مخزَّنة مؤقتًا. يتمثل التحدي الرئيسي الذي تواجهه DCTCP في تقدير نسبة البايتات التي تواجه الازدحام، فإذا وصلت رزمةٌ ورأى المبدل أن طول الرتل K أعلى من العتبة، على سبيل المثال: K > (RTT × C)/7 حيث أن C هو معدل الربط وسيُقاس بالرزمة في الثانية، حيث سيضبط المبدل بت CE في ترويسة IP، وبالتالي تعقيد RED غير إلزامي. يحتفظ المستقبل بعد ذلك بمتغير بولياني boolean لكل تدفق، والذي سنشير إليه بـ SeenCE، ويطبّق آلة الحالة التالية استجابةً لكل رزمة مستلمة: إذا ضُبِط بت CE وكان SeenCE = False، فاضبط SeenCE على القيمة True وأرسل إشعارًا ACK مباشرةً. إذا لم يُضبَط بت CE وكان SeenCE = True، فاضبط SeenCE على القيمة False وأرسل إشعارًا ACK مباشرةً. خلافاً لذلك، تجاهل بت CE. النتيجة غير الواضحة لحالة "خلافاً لذلك" هي أن المستقبل يستمر في إرسال الإشعارات المتأخرة مرةً واحدة كل n رزمة، سواءٌ ضُبط بت CE أم لا، حيث ثبت أن هذا مهمٌ للحفاظ على الأداء العالي. سيحسب المرسل في النهاية نسبة البايتات التي واجهت ازدحامًا خلال نافذة المراقبة السابقة التي تُختار عادةً لتكون RTT تقريبًا، على أنها نسبة إجمالي البايتات المرسلة والبايتات المُرسل إشعارٌ بها مع ضبط رايات ECE. توسّع DCTCP نافذة الازدحام بنفس طريقة الخوارزمية القياسية تمامًا، ولكنها تقلل النافذة بما يتناسب مع عدد البايتات التي واجهت الازدحام أثناء نافذة المراقبة الأخيرة. ترجمة -وبتصرّف- للقسم Advanced Congestion Control من فصل Congestion Control من كتاب Computer Networks: A Systems Approach. اقرأ أيضًا المقال السابق: التحكم المتقدم في الازدحام في الشبكات الحاسوبية باستخدام إدارة الأرتال النشطة التحكم في الازدحام باستخدام بروتوكول TCP في الشبكات الحاسوبية أنظمة الأرتال المستخدمة في التحكم بازدحام الشبكات الحاسوبية مشكلة تخصيص الموارد للتحكم في الازدحام في الشبكات الحاسوبية
  12. يتبع النص عادةً خطًا مستقيمًا في الصفحة، أو خطًا مستقيمًا موازيًا لإطار النص العلوي إذا جرى تدوير إطار النص. هذا ما تحتاجه في معظم الحالات تقريبًا، ولكنك قد ترغب في شيء مختلف أحيانًا. سنوضّح في هذا المقال طريقتين مختلفتين ليتبع النص مسارًا ليس خطًا مستقيمًا، إذ يمكن أن يكون هذا المسار أيّ خط أو أيّ منحنى بيزيه تقريبًا. هذا المقال مناسب لأيّ شخص يعرف كيفية إنشاء أو تحرير إطارات نصية وإنشاء خطوط ومنحنيات بيزيه . إن لم تكن لديك معرفة سابقة في كيفية رسم خطوط ومنحنيات بيزيه ، فقد تجد مقال أساسيات منحنى بيزيه Bezier Curve في سكريبوس مفيدًا لتصفّحه أولًا. التقنيات المحددة المستخدمة ربط نص بمسار Attaching Text to a Path. معالجة النص باستخدام خيارات المسار. تحويل النص إلى مخططات تفصيلية Outlines. رسم مسار بمحاذاة مسار آخر. معالجة خيارات مسار بمحاذاة مسار Path Along Path. الإعداد يجب أولًا إنشاء مستندك مع بعض النصوص كما يلي: افتح برنامج سكريبوس Scribus وأنشئ مستندًا جديدًا. سيكون القياس A4 أو رسالة Letter بأي اتجاه مناسبًا. أنشئ إطار نص وأدخِل نصًا قصيرًا مثل النص "SOME TEXT". غيّر حجم الخط إلى حجم كبير (40 نقطة مثلًا). غيّر الخط ليكون عريضًا أو سميكًا (الخط "Open Sans Bold" مثالي، ولكن يمكنك استخدام الخط الذي تريده). تحتاج الآن إلى خط أو منحنى لوضع النص عليه، ويمكنك استخدام كلتا الطريقتين إما بخطوط أو منحنيات بيزيه حسب ما تريد تطبيقه، لذلك سنعرض أمثلة لكليهما. اختر قائمة إدراج Insert، ثم منحنى بيزيه Bezier Curve. ارسم الخط أو المنحنى الذي تريد وضع النص عليه. سنعرض أمثلةً لخطي بيزيه مختلفين هما خط بسيط، ومنحنى موجة جيبية بسيط كما في الشكل التالي: إذا أردت استخدام شيء بسيط فقط، فاتّبع الخطوات التالية عند اختيارك لإدراج المنحنى. انقر في مكان ما على الصفحة، ثم انقر في مكان ما على يمين وفوق النقرة الأولى، ثم انقر بزر الفأرة الأيمن، يؤدي ذلك إلى إنشاء خط بيزيه منحدر بسيط (مثل الخط الموجود في الجزء العلوي من الشكل السابق). انسخ النص والمنحنى وانقل النسخ المكرَّرة بعيدًا عن النسخ الأصلية، وذلك حتى لا تضطر إلى إعادة إنشائها لاحقًا في القسم التالي. سنشير من الآن وصاعدًا إلى كل من خطوط ومنحنيات بيزيه على أنها مجرد "منحنيات Curves". ربط نص بمسار التموضع الافتراضي حدّد كلًا من النص والمنحنى من خلال إما السحب وتحديدهما، أو من خلال تحديد الأول ثم الضغط على Shift من لوحة المفاتيح وتحديد الآخر، فترتيب التحديد ليس مهمًا. اختر قائمة عنصر، ثم أدوات المسار، ثم اربط النص بالمسار Attach Text to Path. يجب أن يكون لديك الآن شيء يشبه أيًا من المثالين في الشكل التالي: يُظهِر ذلك الطريقة الافتراضية التي يربط بها سكريبوس النص بالمسار، حيث يُدوَّر كل حرف لمحاذاة مركز قاعدته مع ظل Tangent المنحنى عند النقطة التي تلتقي عندها قاعدة الحرف مع الخط، ويوضح الشكل التالي تدوير الحرف "T" في "TEXT" بحيث تكون قاعدته متعامدةً مع المماس الأرجواني للمنحنى السماوي: قد تبدو بعض الحروف في الأسفل غير واقعة بالضبط على المنحنى الأصلي، ولكن لا تقلق بشأن ذلك حاليًا. ستلاحظ أيضًا أن بعض الحروف متداخلة، مثل الحروف "O" و"M" و"E"، وذلك لأن سكريبوس يرسم الحروف بحجمها وشكلها المناسبين، وإذا كانت هذه الحروف تشكّل زاويةً مع بعضها البعض كما يحصل عندما تتبع الحروف منحنىً مقعرًا؛ فستتداخل الحروف. سنصلح ذلك -إلى حد ما- لاحقًا. الخيار Stair Step سنغيّر الطريقة التي يربط بها سكريبوس النص بالمسار. انتقل إلى تبويب نص Text في نافذة خصائص Properties، أو انتقل إلى نافذة خصائص النص التي يمكن الوصول إليها من قائمة نوافذ ثم خصائص المحتوى في الإصدار 1.5.7 من برنامج سكريبوس. افتح التبويب "خصائص نص المسار Path Text Properties" مثل الشكل الآتي التي تفعَّل فقط عند تحديد كائن ربط نص بمسار. يعطي هذا التبويب بعض الخيارات التي تمكّنك من تغيير كيفية ربط النص بالمسار. وهذه الخيارات هي: النوع Type: نوع الارتباط الموضّح أدناه. ابدأ الإزاحة Start Offset: يحدّد المسافة من بداية المسار لبدء رسم النص. المسافة من المنحنى Distance from Curve: يخبر سكريبوس بوضع قاعدة الحروف إما أعلى أو أسفل المنحنى. اقلب النص Flip Text: يخبر سكريبوس بأن يعكس النص من خلال المنحنى. أظهر المنحنى Show Curve: يكون المنحنى عادةً غير مرئي، لذلك يمكنك استخدام هذا الخيار لجعل المنحنى مرئيًا مرةً أخرى. استخدم قائمة "النوع" لتحديد الخيار "Stair Step". يوضح الشكل التالي مثالين عن كيفية ظهور النص على المنحنى: تُكتَب الحروف عموديًا باستخدام النوع "Stair Step"، ولكن يُنقَل مركز قاعدة هذه الحروف لتتوافق مع نقاط المنحنى. لاحظ الحرفين "T" و"E" في الجزء السفلي في الشكل السابق، حيث لن يكون التباعد بين الحروف كما هو متوقع إذا رُسِمت مثل المعتاد، لأن سكريبوس لم يَعُد بإمكانه الاعتماد على حساباته المعتادة لوضع الحروف، لذلك يقدّم أفضل تخمين لذلك. إذا استخدمت نصًا على مسار مثل هذا المسار، فلن تُطبَّق مفاهيم الطباعة المناسبة مثل "التتبّع Tracking" و"التباعد بين الحروف Kerning"، إذ لا توجد طريقة لحساب التباعد الجيد عندما لا يعرف سكريبوس مكان تموضع الحروف. الانحراف Skew سنجرّب الآن نوعًا مختلفًا من التموضع، ولهذا ابع الخطوات الآتية: تأكّد من أن كائن "النص على المسار" لا يزال محدَّدًا. انتقل إلى تبويب نص Text في نافذة خصائص Properties مرةً أخرى، أو انتقل إلى نافذة خصائص النص التي يمكن الوصول إليها من قائمة نوافذ، ثم خصائص المحتوى في الإصدار 1.5.7 من برنامج سكريبوس. افتح تبويب خصائص نص المسار مرةً أخرى. استخدم قائمة "النوع" لتحديد الخيار "انحراف Skew". يوضح الشكل التالي مثالين عن استخدام نوع التموضع "انحراف Skew": يعالج سكريبوس المنحنيات التي يُرسم الحرف منها عند استخدام هذا النوع من التموضع، حيث يصعُب وصف الانحراف بدون كثير من الكلمات الرياضية المعقَّدة، لكن أسهل طريقة لذلك هي أن سكريبوس سيبقي جميع مكونات الحرف العمودية رأسيًا أثناء تعديل مكوناته الأفقية لتكون عموديةً على مماس المنحنى في مركز قاعدة الحرف كما في الشكل السابق. قد لا يبدو التباعد بين بعض الحروف صحيحًا كما هو الحال مع نوعي التموضع الآخرين. إصلاح المشاكل على المنحنى بدت الحروف أنها غير مرسومة على المنحنى تمامًا، عند استخدام جميع أنواع التموضع وخاصةً عند استخدام منحنى بدلًا من خط مستقيم (سترى الآن أن هذا ليس صحيحًا تمامًا). تأكّد من تحديد كائن "النص على المسار". افتح التبويب خصائص نص المسار واستخدم قائمة "النوع" لتحديد الخيار "افتراضي Default". حدد الخيار "أظهر المنحنى Show Curve". سترى في الشكل التالي -خاصةً في المثال السفلي- أن الحروف مرسومة فعليًا على المنحنى كما هو موضَّح باللون الأحمر، وأنه لا يتبع مربع المخطط التفصيلي الرمادي بالضبط خط المنحنى عندما لا يكون المنحنى خطًا مستقيمًا فقط، فهذه هي الطريقة التي يعمل بها سكريبوس وهي شيء عليك أن تتذكره وألّا تقلق بشأنه. ألغِ تحديد الخيار "أظهر المنحنى". يجب الآن أن نحل مشكلة تباعد الحروف. تباعد الحروف تأكّد من تحديد كائن "النص على المسار". افتح التبويب "إعدادات متقدمة Advanced Settings" في تبويب نص ضمن نافذة خصائص، أو من نافذة خصائص النص في الإصدار 1.5.7 من برنامج سكريبوس. بما أن النص الموجود على المسار لا يزال قابلًا للتعديل بالكامل، فلا يزال بإمكانك تغيير أيٍّ من خصائص النص المعتادة. غيّر إعداد "التعقّب اليدوي Manual Tracking" في تبويب الإعدادات المتقدمة، حيث سيبدو مثل الرمز "TI" مع سهم أحمر برأسين تحته. لاحظ أثناء تغيير التعقّب كيف تتحرك الحروف بعيدًا عن -أو باتجاه- بعضها البعض اعتمادًا على كيفية تغييرك للإعداد، فإذا استخدمت خطًا مستقيمًا، فيُحتمل أن يكون ذلك جيدًا، على الرغم من أنه يخالف بعض القواعد الطباعية؛ لكن -كما يتضح من الشكل الآتي- إذا كان لديك منحنىً حقيقيًا، فإن الحروف الموجودة في قسم محدب من المنحنى تبتعد عن بعضها البعض بسرعة أكبر من تلك الحروف الموجودة في قسم مقعر من المنحنى، لكن هذه هي الطريقة التي يعمل بها سكريبوس لسوء الحظ. إذا استخدمت أنواع المواضع "Stair Step" أو "الانحراف Skew"، فقد تتمكن من تغيير التباعد كما هو موضح أعلاه للحصول على شيء يبدو جيدًا، ولكن لا تتوقع الكثير. جرّب بكل الوسائل ولكن لا يجب إلقاء اللوم على سكريبوس إن لم يكن المظهر جيدًا، لأنه يحاول أفضل ما يمكنه. غيّر إعداد "التعقّب اليدوي" في تبويب "الإعدادات المتقدمة" مرةً أخرى إلى 0%، إن لم تكن كذلك بالفعل. تغيير المسار لا يزال هنا بإمكانك أيضًا تغيير المسار أثناء ربط النص بالمسار (المنحنى)، حيث يكون الكائن الذي تحدّده عند ربط نص بمسار هو المسار وليس النص، لذلك إذا غيّرت حجم الكائن فإنك تغيّر حجم المسار، ةإذا نقرت نقرًا مزدوجًا على الكائن، فستُنقَل إلى نافذة محرّر العقد Node Editor، حيث يمكنك تغيير المنحنى كما لو لم يُربَط النص به، ثم سيُعاد رسم النص وفقًا للتغييرات التي أجريتها بمجرد تغيير المنحنى. حاول تغيير حجم المسار وحرّره من خلال محرّر العقد ولاحظ ما يحدث. إعدادات أخرى جرّب الإعدادات الأخرى في خصائص نص المسار لمعرفة ما يحدث، وحدّد الخيار "أظهر المنحنى" لإعطائك فكرةً أفضل عما يحدث عند تغيير الإعدادات. إن لم يُعاد رسم النص بطريقة صحيحة، فألغِ تحديد كل شيء وأعِد تحديد النص لإعادة رسمه. فك ربط النص من المسار إن لم تَُعد تريد ربط النص بالمسار أو بالمنحنى ، فحدّد الكائن ثم اختر قائمة عنصر Item ثم فك ربط النص من المسار Detach Text from Path وسيُفصَل النص عن المنحنى. ستظل أي تغييرات أجريتها على النص أو المسار أثناء ربطهما سارية المفعول بعد فصلهما، باستثناء أن النص لن يكون مرتبطًا بالمسار وسيُكتَب أفقيًا مرةً أخرى. مسار بمحاذاة مسار Path Along Path تُعَد عملية "ربط النص بالمسار" رائعةً لبعض الأغراض، إلّا أنها ليست مثاليةً ولديها بعض العيوب، حيث يتمثل العيب الأكبر في أن النص -باستثناء النوع "الانحراف Skew"- يُرسَم دائمًا بنفس الطريقة كما هو معتاد إن لم يُربَط بمسار مثلًا. يكون ذلك مناسبًا بما يكفي لما تريده أحيانًا، ولكنك قد ترغب في شيء أفضل، وهنا يأتي دور آلية مسار بمحاذاة مسار Path Along Path. ابحث عن النسخ المكرَّرة من النص والمنحنى، وإذا كنت لم تنشئ نسخًا مكررة بعد، فيجب إعادة إنشائها. تعمل آلية "المسار بمحاذاة مسار" فقط مع المنحنيات والمضلعات (والتي هي في الواقع منحنيات)، ولن تعمل مع النص العادي، لذلك يجب تحويل النص إلى شيء آخر. حدد إطار النص. اختر قائمة عنصر Item ثم تحويل لـ Convert To، ثم مخططات تفصيلية Outlines، أو انقر بزر الفأرة الأيمن واختر تحويل إلى ثم مخططات تفصيلية. أعد تحديد النص واختر قائمة عنصر ثم التجميع فك التجميع Ungroup، أو انقر بزر الفأرة الأيمن واختر فك التجميع. اختر قائمة عنصر ثم أدوات المسار ثم ادمج المضلعات Combine Polygons. بهذا تكون قد حوّلتً النص إلى مضلع يتكون من أشكال متعددة، وفي المرحلة الموالية أنشئ نسختين من النص والمنحنى، ورتّب مجموعات النسخ حول الصفحة بحيث يمكنك رؤية الاختلافات بين التأثيرات المختلفة. حدّد مجموعةً من "النص والمنحنى" معًا، حيث يمكنك إما السحب وتحديدهما أو تحديد الأول، ثم الضغط على Shift، ثم تحديد الآخر بأي ترتيب. اختر قائمة عنصر ثم أدوات المسار Path Tools، ثم مسار بمحاذاة مسار Path Along Path. ستظهر نافذة مثل الشكل التالي: خيارات هذه النافذة هي: نوع التأثير Effect Type: نوع التأثير الذي تريده. إزاحة أفقية Horizontal Offset: يحدّد هذا الخيار المسافة من بداية المسار لبدء رسم النص، ويؤدي نفس وظيفة الخيار "ابدأ الإزاحة" في تبويب خصائص نص المسار. إزاحة رأسية Vertical Offset: يخبر هذا الخيار سكريبوس بوضع قاعدة الحروف إما أعلى أو أسفل المنحنى، ويؤدي نفس وظيفة "المسافة من المنحنى" في تبويب خصائص نص المسار. أدِر الكائنات بـ Rotate Objects By: يخبر هذا الخيار سكريبوس بمقدار تدوير المضلع (النص في هذه الحالة) حول بداية المسار (المنحنى). الفراغ بين الكائنات Gap Between Objects: يُستخدم هذا الخيار فقط للتأثيرات "المتكررة" ويخبر سكريبوس بحجم الفراغ لوضعه بين كل نسخة من الكائن المتكرر. مفرد Single اضغط على موافق لقبول كل القيم الافتراضية الموضَّحة في الشكل السابق. يوضح الشكل التالي النتيجة إذا استخدمت القيم الافتراضية: لا يختلف وضع النص على طول منحنى مستقيم كثيرًا عن استخدام الآلية الافتراضية "لربط نص بالمسار"، باستثناء أن النص يتمركز على طول المنحنى افتراضيًا، على الرغم من أنه يمكنك تغيير ذلك باستخدام الخيار "إزاحة رأسية Vertical Offset". يختلف وضع النص على طول مسار منحنٍ تمامًا عن "ربط نص بالمسار"، إذ جرى ضغط الحروف وتوسيعها على كل جانب من جوانب المنحنى كما ترى في الجزء السفلي من الشكل السابق، من أجل ألّا تتداخل الحروف مع بعضها البعض كما يحدث أحيانًا باستخدام آلية "ربط نص بالمسار". مفرد متمدد Single Stretched حدّد مجموعةً مكرَّرةً أخرى من "النص والمنحنى" معًا. اختر قائمة عنصر ثم أدوات المسار، ثم مسار بمحاذاة مسار Path Along Path. غيّر إعداد قائمة "نوع التأثير" إلى "مفرد، متمدد Single, Stretched". اضغط موافق. سترى في الشكل الآتي أن هذا النص يبدو مشابهًا للنص الموجود في الشكل السابق ولكنه متمدّد ليتناسب مع المنحنى بالكامل، بدلًا من الحفاظ على حجم الخط الذي أُنشِئ به. مكرر / مكرر ومتمدد حدد نصًا مكرَّرًا آخر. غيّر حجم النص ليكون نصف حجمه السابق. حدّد النص الذي غيّرتَ حجمه مع منحنى مكرَّر معًا. اختر قائمة عنصر ثم أدوات المسار ثم مسار بمحاذاة مسار Path Along Path. غيّر إعداد قائمة "نوع التأثير" إلى "مُكرَّر Repeated". اضغط على موافق. يوضّح الشكل التالي نتيجة استخدام الخيار "مُكرَّر Repeated" في القسم العلوي، وتوجد النتيجة إذا حددت الخيار "مُكرر، متمدد Repeated, Stretched" في القسم السفلي. لاحظ عدم وجود فراغ بين النص المكرَّر. يمكنك إصلاح ذلك عن طريق تغيير إعداد "الفراغ بين الكائنات"، كما هو موضح في الشكل التالي: ختامًا عرضنا في هذا المقال طرقًا مختلفةً يمكنك من خلالها وضع نص على طول مسار. جرب إعدادات مختلفة ولاحظ نوع التأثيرات التي يمكنك إنشاؤها. ترجمة -وبتصرّف- للمقال How to put Text on a Path. اقرأ ايضًا كيفية إنشاء تأثير نص مخيف في برنامج سكريبوس Scribus خطوات تطوير شعار باستخدام برنامج سكريبوس Scribus كيفية إنشاء الظلال في برنامج سكريبوس Scribus كيفية تصميم خريطة كنز باستخدام برنامج سكريبوس
  13. قد تحتاج أحيانًا إلى صورة قديمة ولكنك لا تملك كاميرا قديمة أو مصوِّرًا فوتوغرافيًّا قديمًا، لذلك سنوضح لك من خلال هذا المقال كيفية جعل أي صورة تبدو وكأنها مُلتقَطة من أيام الزمن الجميل. سنستخدم كلًّا من برنامجَي سكريبوس Scribus وجيمب GIMP، ولكن يمكنك تخطي قسم جيمب إن أردت ذلك. الصورة الأولية ستحتاج أولًا لصورة "لجعلها قديمة"، ويمكنك تنزيل الصورة التالية التي سنستخدمها في هذا المقال، علمًا أن القياس الذي سيُستخدم هو 1920‎×1280: إذا اخترت صورتك الخاصة، فحاول اختيار صورة تتماشى مع الزمن الذي تحاول تعديل الصورة إليه، لذلك لا تستخدم صورةً يرتدي فيها شخص ساعةً رقميةً أو صورة سيارة حديثة أو طائرة مثلًا. الخطوات التي نحتاجها على برنامج جيمب GIMP سننشئ الآن صورةً تكون بمثابة "إطار" للصورة النهائية. افتح برنامج جيمب. أنشئ صورةً جديدةً بنفس حجم صورتك الأصلية مع خلفية شفَّافة Transparent Background. يجب الآن إعداد فرشاة الرسم لإنشاء تأثيرات "بصمات الأصابع Fingerprints" و"البقع المائية Water Stains". فرشاة الرسم الأولية افتح نافذة الفُرش Brushes واختر الفرشاة "Oils 01" التي تأتي مع جيمب افتراضيًّا، وقد يلحق باسم الفرشاة "66‎ x 74" أو ما شابه ذلك. اضبط "المباعدة Spacing" على القيمة 50 أسفل قائمة الفرش، وهذا يخبر جيمب بالتحرُّك بمقدار 50% من حجم الفرشاة عند رسم الخطوط بها. افتح نافذة الأدوات Toolbox وحدِّد أداة "فرشاة التلوين Paintbrush". اضبط التعتيم أو العتامة "Opacity" على 60% من نافذة خيارات الأدوات التي تكون عادةً أسفل نافذة الأدوات مباشرةً، لأن ما سترسمه بالفرشاة سيكون شبه شفاف وسيُظهِر ما تحته بعض الشيء. اضبط "الحجم Size" ليكون 120، ولكن سنقلِّله لاحقًا. اضبط "الحركيات Dynamics" على "حركيات عشوائية Dynamics Random"، وهذا يخبر جيمب أن يغير عشوائيًّا زاوية الفرشاة التي ترسم بها، وهو أمر مهم للحصول على تأثير عشوائي مناسب دون أن ترسم كل شيء يدويًّا. حدِّد "طبِّق النفاض Apply Jitter"، واضبط "المقدار Amount" على القيمة 1، وهذا يخبر جيمب بإضافة قدر إضافي من البعثرة إلى ما ترسمه، للحصول على تأثير أفضل. إذا كانت نافذة الأدوات مثل الشكل الآتي، فهذا يعني أنك طبقت كل الخطوات تطبيقًا صحيحًا وأنشأت الفرشاة الأولى من بين الفُرَش الثلاث التي ستستخدمها. يجب الآن إنشاء أحد الألوان الثلاثة التي سنحتاجها. انقر على "لون المقدمة Foreground Colour" في نافذة الأدوات، وهو المربع اليساري من المربعين "المدمجين" أسفل نافذة الأدوات. أدخِل القيمة "ba6d1a" (بدون علامات الاقتباس) في حقل "طريقة تدوين HTML"، ثم اضغط على موافق. قيمة تدوين HTML هي لون RGB، والذي تستخدمه، ولكنه مكتوب بالنظام الست عشري بالطريقة نفسها التي تستخدمها لغة HTML وCSS للألوان في صفحات الويب. عملية الرسم اختر قائمة تحديد Select ثم الكل All، حيث يؤدي هذا إلى إنشاء تحديد بشكل مستطيل حول صورتك. اختر قائمة تحرير Edit، ثم ارسم حواف التحديد Stroke Selection للرسم حول التحديد الذي أنشأته للتو. حدِّد الخيار "Stroke with a paint tool" وتأكَّد من تحديد أداة "فرشاة التلوين". اضغط على زر Stroke للرسم حول التحديد باستخدام الفرشاة التي أنشأتها. لاحظ أن جيمب رسم بعض اللطخات البنية حول حافة صورتك. إن لم يكن الأمر كذلك، فيجب التحقق من الإعدادات السابقة، والتراجع عن الإجراء الأخير، ثم المحاولة مرةً أخرى. سننشئ الآن بعض العلامات المختلفة قليلًا، وهنا عليك باعتماد الآتي: تأكَّد من أن "فرشاة التلوين" لا تزال هي الأداة المحدَّدة في نافذة الأدوات. غيِّر "العتامة" إلى 50% في خيارات الأدوات. غيِّر أيضًا حجم الفرشاة إلى 100. انقر على "لون المقدِّمة" مرةً أخرى في نافذة الأدوات. أدخِل القيمة "9a5a16" في حقل "طريقة تدوين HTML"، واضغط على موافق. اختر قائمة تحرير Edit، ثم ارسم حواف التحديد Stroke Selection، واضغط على Stroke مرةً أخرى لرسم التحديد مرةً ثانية باستخدام الفرشاة الأصغر والداكنة التي ضبطتها للتو. بهذا نكون قد انتهينا تقريبًا من الخطوات التي نحتاجها في برنامج جيمب، ولكن بقي جزء آخر من الرسم يجب تطبيقه، وهو الآتي: تأكَّد من أن "فرشاة التلوين" لا تزال هي الأداة المحدَّدة في نافذة الأدوات. غيِّر "العتامة" إلى 40% في خيارات الأداة. غيِّر أيضًا حجم الفرشاة إلى 80. انقر على "لون المقدمة" مرةً أخرى في نافذة الأدوات. أدخِل القيمة "7d4912" في حقل "طريقة تدوين HTML"، واضغط على موافق. اختر قائمة تحرير Edit، ثم ارسم حواف التحديد Stroke Selection، ثم اضغط على Stroke مرةً أخرى. إذا كان لديك الآن صورة تشبه الشكل التالي، فقد أنشأت إطارًا للصورة النهائية: اختر قائمة ملف File، ثم تصدير كـ Export As، وصدِّر صورتك بصيغة PNG. ستحتاج إلى استخدام صورة PNG لأنك تريد الاحتفاظ بالشفافية. الخطوات التي نحتاجها على برنامج سكريبوس افتح سكريبوس. أنشئ مستندًا جديدًا، واستخدم القياس A4 أو رسالة Letter بالاتجاه الأفقي إذا كانت صورتك الأصلية صورةً أفقية، وإلَّا استخدِم الاتجاه الرأسي. اختر قائمة عرض View، ثم تقريب، ثم ملاءمة للارتفاع Fit to Height، وذلك لعرض كل الصفحة على الشاشة. الألوان سننشئ لونين يضيفان اللون البني الداكن إلى الصورة وهما: "Sepia" بالقيم: R = 135 وG = 99 وB = 56. "Dark Sepia" بالقيم: R = 84 وG = 63 وB = 33. إذا كنت لا تعرف كيفية إنشاء الألوان في سكريبوس، إذًا يجب أن تقرأ مقال كيف تنشئ ألوانك الخاصة في سكريبوس. وبعدها سيمكنك البدء في إنشاء الطبقات والإطارات. الطبقات Layers سننشئ أربعة إطارات لذلك يُفضَّل إنشاء طبقة لكل إطار. اختر قائمة نوافذ Windows، ثم الطبقات Layers لفتح نافذة طبقات Layers، حيث لديك مسبقًا طبقة الخلفية Background لذلك تحتاج إلى إنشاء ثلاث طبقات أخرى هي الآتية: طبقة "الغطاء Overlay" التي تبرز الخلفية. طبقة "الهالة Halo" التي ستحيط بصورتك. طبقة تحتوي صورة "بصمات الأصابع Fingerprints" التي أنشأتها سابقًا، وهي اللمسة النهائية. اضغط على زر + لإنشاء طبقة جديدة. انقر نقرًا مزدوجًا على الاسم "طبقة جديدة 1" وغيِّر الاسم إلى "غطاء" (بدون علامات الاقتباس). اضغط على الزر + مرةً أخرى، وأعد تسمية "طبقة جديدة 2" باسم "هالة". اضغط على الزر + مرةً أخرى، وأعد تسمية "طبقة جديدة 3" باسم "إطار". انقر على طبقة "الخلفية" لتتمكَّن من إضافة الإطارات من الأسفل إلى الأعلى. يجب أن تبدو نافذة الطبقات مثل الشكل التالي: الخلفية اختر قائمة إدراج Insert ثم إطار صورة Image Frame، وارسم الإطار بأي حجم تريده. انقر بزر الفأرة الأيمن على إطار الصورة واختر استيراد صورة Get Image من القائمة. اختر الصورة الأصلية التي نزَّلتها مسبقًا، ثم اضغط موافق لوضع الصورة في الإطار. إذا اخترت صورةً كبيرة، فيُحتمَل أن تكون كبيرةً جدًّا بالنسبة للإطار، لذلك يجب تغيير حجمها. انقر بزر الفأرة الأيمن على إطار الصورة، واختر اضبط الصورة إلى الإطار Resize Image to Frame من القائمة. انقر بزر الفأرة الأيمن على إطار الصورة، واختر اضبط الإطار إلى الصورة Resize Frame to Image للحصول على حجم الإطار الصحيح. ويجب الآن إضافة بعض التأثيرات إلى صورة الخلفية. انقر بزر الفأرة الأيمن على إطار الصورة واختر مؤثرات الصورة Image Effects لفتح نافذة محرِّر مؤثرات الصورة. يجب أولًا جعل الصورة داكنةً قليلًا، لأن ذلك يؤدي إلى تباين أفضل مع الغطاء الذي ستنشئه لاحقًا. أضف تأثير "السطوع Brightness"، واضبط السطوع على القيمة ‎-40 لتبدو الصورة كما يلي: بعدها يجب إزالة كل الألوان من الصورة، فالصور القديمة لم تكن ملوَّنة، لهذا أضف تأثير "التدرج الرمادي Greyscale" لتبدو الصورة كما يلي: يجب الآن إجراء بعض التغييرات على الألوان كما يلي: أضف تأثير "درجتين لونيتين Duotone". اضبط "اللون 1" على اللون "الأبيض". اضبط "اللون 2" على اللون "Dark Sepia". لتبدو الصورة مثل الشكل التالي: سنجري الآن تغييرات طفيفة على منحنيات ألوان الصورة. اضغط على رمز محرر المنحنى Curve Editor للون 1 الذي يبدو مشابهًا للشكل التالي: اسحب مركز المنحنى إلى الموضع 3,1 على الشبكة كما هو موضح في الشكل التالي: اضغط على رمز محرِّر المنحنى للون 1 مرةً أخرى لإخفائه. اضغط على رمز محرِّر المنحنى للون 2. اسحب مركز المنحنى إلى أسفل ويسار الموضع 3,2 على الشبكة، واسحب مركز نصف المنحنى العلوي إلى أعلى ويمين الموضع 3,3 كما هو موضَّح في الشكل التالي: اضغط على رمز محرِّر المنحنى للون 2 مرةً أخرى لإخفائه. اضغط على موافق في محرر مؤثرات الصورة لرؤية الخلفية المعدَّلة، والتي يجب أن تبدو مثل الشكل التالي: لا تبدو الصورة سيئة جدًّا حتى الآن، ولكن يمكن تحسينها. الغطاء انتقل إلى نافذة طبقات وانقر على طبقة "غطاء". اختر قائمة إدراج ثم إطار الصورة، وارسم الإطار كما فعلت لصورة الخلفية. انقر بزر الفأرة الأيمن واختر استيراد صورة Get Image، ثم حدِّد الصورة الأصلية مرةً أخرى. غيِّر حجم الإطار والصورة، بحيث يكون كلاهما بنفس حجم صورة الخلفية تمامًا. يمكن الآن رؤية الصورة الأصلية فقط، ولكن العمل السابق لم يُفقَد، لكنه موجود أسفل الصورة التي تعمل عليها الآن. بهذا يكون قد حان الوقت لإضافة مزيد من التأثيرات. انقر بزر الفأرة الأيمن على إطار الصورة واختر مؤثرات الصورة لفتح نافذة محرِّر مؤثرات الصورة. أضف تأثير "درجتين لونيتين Duotone". اضبط اللون 1 على اللون "Sepia". اضبط "اللون 2" على اللون "الأبيض". لن نحتاج إلى تغيير منحنيات الألوان لهذا التأثير، لذلك يجب أن يكون لديك شيء مشابه للشكل التالي حتى الآن: أضف تأثير "حدّ Sharpen". اضبط "نصف القطر Radius" على 2.0. اضبط "القيمة Value" على 5.0. يساعد ذلك في إخراج البياض من الصورة ويجب أن تكون صورتك الآن مماثلةً للشكل التالي: استمر في تحديد طبقة "غطاء"، ثم اختر "فاتح Screen" من قائمة "نمط الدمج Blend Modes" أعلى نافذة طبقات. وبذلك نكون قد دمجنا الصورة التي في الأمام مع الصورة التي في الخلفية، مع جعل الخلفية أفتح، وهنا يجب أن تبدو صورتك كما يلي: ستبدو الصورة أفضل مما كانت عليه سابقًا، ولكن يمكن تحسينها أكثر. الهالة سنعطي الصورة هالةً تجذب المشاهد نحو مركزها وتحجب حواف الصورة قليلًا، لأن أغلب الصور القديمة بهذا النمط بسبب الكاميرات والمواد والمعالجة المُستخدَمة في ذلك الوقت. حدِّد إطار الصورة مع بقائك في طبقة "غطاء". اختر قائمة عنصر Item ثم مضاعفة/تحويل، ثم نُسخ مطابقة Multiple Duplicate. اقبل الإعدادات الافتراضية، ثم اضغط موافق. انقر بزر الفأرة الأيمن على إطار الصورة المكرَّر الذي أنشأته للتو، واختر أرسِل إلى الطبقة Send to Layer، ثم "هالة" Halo. قد تلاحظ أن الصورة قد عادت إلى الشكل الذي كانت عليه قبل تغيير "نمط الدمج" لطبقة "غطاء"، ولا بأس بذلك لأنك ترى الآن الصورة على طبقة "هالة"، وهذه الطبقة تحتوي على نمط دمج "عادي Normal"، حيث لا يهم ذلك لأنك ستزيل الصورة من طبقة "هالة". انتقل إلى نافذة طبقات وانقر على طبقة "هالة". انقر بزر الفأرة الأيمن على إطار الصورة واختر تحويل إلى Convert To، ثم مضلع Polygon. ستبدو صورتك الآن كما كانت من قبل لأن الصورة الموجودة على طبقة "هالة" قد اختفت. لديك الآن إطار ولكنك تحتاج إلى تعبئته بتدرج لوني. حدِّد المضلع، ثم انتقل إلى تبويب ألوان Colours في نافذة خصائص Properties. اضغط على تعبئة Fill، واختر نمط التعبئة "متدرج شعاعي Radial Gradient" من القائمة. يُحتمَل أن يكون المضلع قد تحول إلى اللون الأسود، ولكن لا بأس بذلك. انقر على نقطة توقف التدرج الموجودة في أقصى اليسار أسفل مستطيل التدرج الأسود، بحيث تُلوَّن باللون الأحمر. اختر اللون "Sepia" من قائمة الألوان الموجودة تحت مستطيل التدرج. اضبط "التعتيم أو العتمة Opacity" على 0%. يجب أن تبدو صورتك الآن مثل الشكل التالي: انقر على نقطة توقف التدرج الموجودة في أقصى اليمين أسفل مستطيل التدرج الأسود، بحيث تُلوَّن باللون الأحمر. اختر اللون "Sepia" من قائمة الألوان الموجودة تحت مستطيل التدرج. إذا كان مستطيل التدرج مصل الشكل التالي، فيُحتمَل أنه صحيح: يجب أن تكون الحلقة الموجودة حول الصورة قد تحوَّلت الآن إلى تظليل بني كما في الشكل التالي: يُعَد هذا جيدًا ولكن الصورة تبدو داكنةً بعض الشيء لذلك يجب إصلاحها، وهنا عليك سحب نقطة توقف التدرج الموجودة في أقصى اليسار إلى الموضع 30%. حيث يجب أن تبدو صورتك مشابهةً الشكل التالي: بصمات الأصابع حان الوقت لاستخدام نتيجة الخطوات التي طبَّقناها على جيمب. انتقل إلى نافذة طبقات وانقر على طبقة "إطار". اختر قائمة إدراج Insert، ثم إطار صورة Image Frame، وارسم الإطار كما فعلت لصورة الخلفية والغطاء. انقر بزر الفأرة الأيمن على إطار الصورة، واختر استيراد صورة Get Image من القائمة. اختر الصورة التي أنشأتها في جيمب، ثم اضغط موافق لوضع الصورة في الإطار. انقر بزر الفأرة الأيمن على إطار الصورة، واختر اضبط الصورة إلى الإطار من القائمة، إن لزم الأمر. انقر بزر الفأرة الأيمن على إطار الصورة، واختر اضبط الإطار إلى الصورة للحصول على حجم الإطار الصحيح إن لزم الأمر. ويجب الآن أن تكون النتيجة النهائية مشابهةً للشكل التالي: الخلاصة بهذا نكون قد رأينا كيفية تحويل صورة إلى شيء يشبه صورةً فوتوغرافيةً قديمة، لكن لا تتردد في تغيير الألوان أو منحنيات الألوان أو أي شيء آخر تريد تجربته لمعرفة التأثيرات الأخرى التي يمكنك تحقيقها، إذ يمكنك الوصول إلى شيء أفضل بالتجربة. قد تكون بعض الصور القديمة أفتح من تلك الصورة التي أنشأتها للتو، أو قد يكون البعض الآخر أغمق منها، وقد يحتوي بعض منها أيضًا على هالات أَسْمَك حولها، لذلك استمتع بتجربة جميع الإعدادات لإنشاء أنواع مختلفة من الصور القديمة. ترجمة -وبتصرُّف- للمقال How to fake a vintage photo. اقرأ أيضًا كيفية التعامل مع إطارات الصور في برنامج سكريبوس Scribus دليل موجز عن إنشاء النماذج Forms في سكريبوس Scribus
  14. سنشرح في هذا المقال طريقةً متقدمةً في تجنب الازدحام في الشبكات الحاسوبية، والتي تضع قدرًا ضئيلًا من الوظائف الإضافية في الموجّه لمساعدة العقدة النهائية في توقُّع الازدحام، ويشار غالبًا إلى هذا الأسلوب باسم إدارة الأرتال النشطة Active Queue Management أو اختصارًا AQM إدارة الأرتال النشطة باستخدام آليات DECbit وRED وECN تتطلب الطريقة الأولى إجراء تغييراتٍ على الموجّهات والتي لم تكن أبدًا الطريقة المفضلة للإنترنت لتقديم ميزاتٍ جديدة، ولكنها كانت مصدرًا دائمًا للقلق على مدار العشرين عامًا الماضية، حيث تكمن المشكلة في أنه لم يكن هناك إجماعٌ على أفضل خوارزميةٍ بالضبط، في حين أنه من المتفق عليه عمومًا أن الموجّهات في وضعٍ مثالي لاكتشاف بداية الازدحام، حيث تصبح الأرتال الخاصة بها ممتلئة، وفيما يلي شرحٌ لآليتين من الآليات الكلاسيكية، ونختتم بمناقشةٍ موجزة حول الوضع الحالي. آلية DECbit لقد طُوِّرت هذه الآلية لاستخدامها في معمارية الشبكة الرقمية Digital Network Architecture أو اختصارًا DNA، وهي شبكةٌ غير متصلة ببروتوكول نقل موجَّهٍ بالاتصال، وبالتالي يمكن أيضًا تطبيق هذه الآلية على بروتوكولي TCP وIP. إن الفكرة هنا هي تقسيم مسؤولية التحكم في الازدحام على نحوٍ متساوٍ بين الموجّهات ونقاط النهاية، بحيث يراقب كل موجهٍ الحِمل الذي يواجهه، ويبلغ العقدَ النهائية صراحةً عندما يكون الازدحام على وشك الحدوث. يُطبَّق هذا الإبلاغ عن طريق ضبط بت ازدحام ثنائي في الرزم التي تتدفق عبر الموجّه، ومن هنا جاء اسم DECbit، ثم ينسخ مضيف الوجهة بت الازدحام هذا في الإشعار ACK الذي يرسله مرةً أخرى إلى المصدر، ويضبط المصدر أخيرًا معدل الإرسال الخاص به لتجنب الازدحام. توضِّح المناقشة التالية هذه الخوارزمية بمزيدٍ من التفصيل، بدءًا بما يحدث في الموجّه. يُضاف بت ازدحام واحد إلى ترويسة الرزمة، ويضبط الموجّه هذا البت في رزمةٍ إذا كان متوسط طول الرتل أكبر من أو يساوي 1 في وقت وصول الرزمة، كما يُقاس متوسط طول هذا الرتل خلال فاصلٍ زمني يمتد إلى آخر دورة انشغال busy + دورة خمول، بالإضافة إلى دورة الانشغال الحالية، حيث يكون الموجّه مشغولًا عند الإرسال ويكون خاملًا عندما لا يكون كذلك. يوضح الشكل الآتي طول الرتل في الموجّه تابِعًا للزمن، ويحسب الموجّه المنطقةَ الواقعة أسفل المنحنى ويقسّم هذه القيمة على الفاصل الزمني لحساب متوسط طول الرتل، ويُعَد استخدام طول الرتل ذو القيمة 1 على أنه منبّهٍ لضبط بت الازدحام بمثابة مقايضةٍ بين الرتل الكبير، أي إنتاجية أعلى مع زيادة وقت الخمول أي تأخير أقل، وبالتالي يبدو أن طول الرتل ذو القيمة 1 يعمل على تحسين دالة الطاقة power. نوجّه الآن انتباهنا إلى جزء المضيف host من الآلية، حيث يسجّل المصدر عدد الرزم الخاصة به التي دفعت الموجّه إلى ضبط بت الازدحام، إذ يحتفظ المصدر بنافذة ازدحام كما في بروتوكول TCP تمامًا، ويراقبها لمعرفة أي نسبةٍ من رزم النافذة الأخيرة نتج عنها ضبط البت، فإذا كان ضبط البت ضمن النسبة الأقل من 50% من الرزم، فإن المصدر يزيد من نافذة الازدحام برزمةٍ واحدة؛ أما إذا كان ضبط بت الازدحام ضمن النسبة التي تساوي أو أكثر من 50% من الرزم الأخيرة للنافذة، فإن المصدر يقلل من نافذة الازدحام إلى 0.875 مرةً من القيمة السابقة. وقد اختيرت القيمة 50% بمثابة عتبةٍ بناءً على التحليل الذي أظهر أنها تتوافق مع قمة منحنى القدرة، واختيرت قاعدة "الزيادة بمقدار 1، والنقصان بمقدار 0.875" لأن مبدأ الزيادة المضافة / النقص المضاعف additive increase/multiplicative decrease يجعل الآلية مستقرة. آلية الاكتشاف المبكر العشوائي تُسمَّى الآلية الثانية الكشف المبكر العشوائي random early detection أو اختصارًا RED، وتشبه آلية DECbit من حيث أن كل موجهٍ مبرمَجٌ لمراقبة طول الرتل الخاص به، وإعلام المصدر بضبط نافذة الازدحام عندما يكتشف أن الازدحام وشيك. تختلف آلية RED، والتي اخترعتها سالي فلويد Sally Floyd وفان جاكوبسون Van Jacobson في أوائل التسعينات، عن آلية DECbit باتجاهين رئيسيتين هما: الأول هو تطبيق آلية RED، بحيث يُعرَف ضمنيًا مصدر الازدحام عن طريق إسقاط إحدى الرزم بدلًا من إرسال رسالة إعلامٍ بالازدحام بصورةٍ صريحة إلى المصدر، فيعرف المصدر بذلك بفعالية من خلال المهلة timeout اللاحقة أو من خلال إشعارٍ ACK مكرّر. لقد صمِّمت آلية RED من أجل استخدامها مع بروتوكول TCP، والذي يكتشف حاليًا الازدحام عن طريق المهلات أو بعض الوسائل الأخرى لاكتشاف فقدان الرزمة مثل الإشعارات المكررة، وتُسقِط البوابةُ الرزمةَ في وقتٍ أبكر مما قد تحتاج إليه والذي يوحي إليه مصطلح "المبكر early" من آلية RED، وذلك لإعلام المصدر بأنه يجب عليه تقليل نافذة الازدحام في وقتٍ أقرب مما هو معتاد، أي يسقط الموجه بضع رزمٍ قبل أن يستهلك مساحة المخزن المؤقت تمامًا، وذلك لإبطاء المصدر على أمل أنه لن يضطر إلى إسقاط الكثير من الرزم لاحقًا. يتمثل الاختلاف الثاني بين آليتي RED وDECbit في تفاصيل الطريقة التي تقرّر بها آلية RED وقت إسقاط الرزمة والرزمة المُقرر إسقاطها. لنفترض استخدام رتل FIFO، حيث يمكننا أن نقرر إسقاط كل رزمةٍ قادمةٍ مع احتمال حدوث إسقاط كلما تجاوز طولُ الرتل مستوى هذا الإسقاط، بدلًا من الانتظار حتى يصبح الرتل ممتلئًا تمامًا ثم إجباره على إسقاط كل رزمةٍ قادمة -والتي هي سياسة إسقاط الذيل-، وتُسمى هذه الفكرة بالإسقاط المبكر العشوائي RED، حيث تحدد هذه الآلية تفاصيل كيفية مراقبة طول الرتل ومتى تُسقَط الرزمة. سنشرح آلية RED كما اقترحتها فلويد وجاكوبسون في الأصل في الفقرات الآتية، كما نلاحظ أنه منذ ذلك الحين اقترح المخترعون والباحثون الآخرون عدّة تعديلات، ولكن الأفكار الرئيسية المعروضة أدناه بقيت نفسها، ومعظم عمليات التطبيق الحالية قريبةٌ من الخوارزمية التالية: أولًا، تحسب آلية RED متوسط طول الرتل باستخدام متوسط تشغيل موزون مشابه للمتوسط المستخدَم في حساب مهلة بروتوكول TCP الأصلي، أي يُحسَب AvgLen كما يلي: AvgLen = (1 - Weight) x AvgLen + Weight x SampleLen حيث ‎<0 < Weight <1 وطول العينة SampleLen هو طول الرتل عند إجراء قياسٍ للعينة، ويُقاس طول الرتل في كل مرةٍ تصل رزمةٌ جديدة إلى البوابة في معظم التطبيقات البرمجية، ويمكن حساب طول الرتل ضمن بعض فترات أخذ العينات الثابتة في العتاد. يعود السبب وراء استخدام متوسط طول الرتل بدلًا من طول الرتل اللحظي instantaneous، إلى أن المتوسط يمثّل بدقةٍ أكبر فكرة الازدحام، ويمكن أن تمتلئ الأرتال بسرعةٍ كبيرة ثم تصبح فارغةً مرةً أخرى بسبب الطبيعة السريعة لحركة مرور الإنترنت. فإذا قضى الرتل معظم وقته فارغًا، فلن يكون استنتاج أن الموجّه مزدحمًا وإعلام المضيفين بضرورة التباطؤ أمرًا مناسبًا، وبالتالي يحاول حسابُ المتوسط الحالي الموزون اكتشافَ الازدحام طويل العمر كما هو موضح في الجزء الأيمن من الشكل التالي، عن طريق تصفية التغييرات قصيرة الأمد في طول الرتل. يمكنك التفكير في المتوسط الحالي على أنه مرشحُ تمرير منخفض low-pass filter، حيث يحدّد Weight ثابت وقت المرشح. سننناقش مسألة كيفية اختيار ثابت الوقت هذا أدناه. ثانيًا، تحتوي آلية RED على عتبتين لطول الرتل تشغلّان نشاطًا معينًا، هما العتبة الدنيا MinThreshold والعتبة العليا MaxThreshold، وتوازن آلية RED متوسط AvgLen الحالي بهاتين العتبتين عند وصول رزمةٍ إلى البوابة، وفقًا للقواعد التالية: if AvgLen <= MinThreshold queue the packet if MinThreshold < AvgLen < MaxThreshold calculate probability P drop the arriving packet with probability P if MaxThreshold <= AvgLen drop the arriving packet إذا كان متوسط طول الرتل أصغر من العتبة الدنيا فلن يُتخَذ أي إجراء، وإذا كان متوسط طول الرتل أكبر من العتبة العليا، فستُسقَط الرزمة دائمًا؛ أما إذا كان متوسط طول الرتل بين العتبتين، فستُسقَط الرزمة الواصلة حديثًا باحتمال P، وهذا الموقف موضح في الشكل السابق، كما تظهر العلاقة التقريبية بين الاحتمال P والمتوسط AvgLen في الشكل الآتي. لاحظ ازدياد احتمال الإسقاط ببطء عندما يكون المتوسط AvgLen بين العتبتين، ويصل إلى القيمة MaxP عند العتبة العليا. والأساس المنطقي وراء ذلك هو أنه إذا وصل المتوسط AvgLen إلى العتبة العليا، فلن يعمل النهج المتساهل القائم على إسقاط بضع رزمٍ وسيستدعي ذلك اتخاذ تدابيرٍ صارمة، مثل إسقاط جميع الرزم الواردة. لقد اقترحت بعض الأبحاث أن الانتقال السلس من الإسقاط العشوائي إلى الإسقاط الكامل بدلًا من النهج المتقطع الموضّح هنا، قد يكون مناسبًا. على الرغم من أن الشكل السابق يوضح دالة احتمالية الإسقاط بالنسبة للمتوسط AvgLen فقط، إلا أن الموقف في الواقع أعقد، وبُعَد الاحتمال P دالةً لكلٍّ من المتوسط AvgLen والمدة التي مرت منذ إسقاط الرزمة الأخيرة، والتي تُحسَب على النحو التالي: TempP = MaxP x (AvgLen - MinThreshold) / (MaxThreshold - MinThreshold) P = TempP/(1 - count x TempP) متغير TempP هو المتغير الذي رُسِم على المحور y في الشكل السابق، ويتتبّع المتغير count عدد الرزم الواردة حديثًا التي وُضِعت في الرتل ولم تُسقَط، مع وجود المتوسط AvgLen بين العتبتين. يزداد الاحتمالP ببطء مع زيادة المتغير count، مما يزيد من احتمالية حدوث إسقاطٍ مع مرور الوقت منذ حدوث آخر إسقاط، وهذا يجعل الإسقاطات المتقاربة أقل احتمالًا نسبيًا من الإسقاطات المتباعدة على نطاقٍ واسع. لقد أدخل مخترعو آلية RED هذه الخطوة الإضافية في حساب الاحتمال P عندما لاحظوا عدم توزُّع إسقاطات الرزم جيدًا في الوقت المناسب بدونها، ولكنها بدلًا من ذلك تميل إلى الحدوث ضمن عناقيد clusters. وبسبب احتمال وصول الرزم من اتصالٍ معين ضمن رشقات bursts، يُحتمَل أن تتسبب هذه العناقيد من الإسقاطات في حدوث إسقاطاتٍ متعددة في اتصالٍ واحد، وهذا أمرٌ غير مرغوبٍ فيه، نظرًا لأن إسقاطًا واحدًا فقط لكل مرة ذهابًا وإيابًا يكفي لجعل الاتصال يقلل من حجم نافذته، في حين أن الإسقاطات المتعددة قد تعيده إلى البداية البطيئة slow start. افترض مثلًا أننا ضبطنا قيمة MaxP على 0.02 وهُيِّئ المتغير count بالقيمة صفر، فإذا كان متوسط طول الرتل في منتصف المسافة بين العتبتين، فإن TempP وقيمة P الأولية، ستكونان بمقدار نصف MaxP أو 0.01، ويكون لدى الرزمة القادمة 99 من 100 فرصة للدخول إلى الرتل في هذه المرحلة. سيزداد P ببطء مع كل رزمةٍ متعاقبة لم تُسقَط، ويتضاعف P إلى القيمة 0.02 بحلول الوقت الذي وصلت فيه 50 رزمةٍ دون إسقاط. وستصل P إلى القيمة 1 في حالةٍ غير متوقعة من وصول 99 رزمةٍ دون خسارة، مما يضمن إسقاط الرزمة التالية؛ أما الشيء المهم في هذا الجزء من الخوارزمية، فهو أنه يضمن توزيعًا متساويًا تقريبًا للإسقاطات بمرور الوقت. القصد وراء ذلك أنه إذا أسقطت الآلية RED نسبةً صغيرة من الرزم عندما يتجاوز AvgLen العتبة الدنيا MinThreshold، فسيتسبب ذلك في تقليل عددٍ قليلٍ من اتصالات TCP لأحجام النوافذ الخاصة بها، مما يؤدي بدوره إلى تقليل معدل وصول الرزم إلى الموجّه. سيسير كل شيء على ما يرام، وينخفض AvgLen بعد ذلك، وسيجري تجنب الازدحام، كما يمكن أن يظل طول الرتل قصيرًا، بينما يظل معدل النقل مرتفعًا نظرًا لإسقاط عددٍ قليلٍ من الرزم. بما أن آلية RED تعمل على متوسط طول الرتل بمرور الوقت، فمن الممكن أن يكون طول الرتل اللحظي أطول بكثير من متوسط طول الرتل AvgLen، وإذا وصلت الرزمة في هذه الحالة ولم يكن هناك مكانٌ لوضعها، فيجب إسقاطها، وعندما يحدث هذا، ستعمل آلية RED في وضع إسقاط الذيل، وأحد أهداف آلية RED هو منع سلوك إسقاط الذيل إن أمكن. تُضفي طبيعة آلية RED العشوائية خاصيةً مثيرةً للاهتمام على الخوارزمية، وبما أن آلية RED تسقط الرزم عشوائيًا، فإن احتمال أن تقرّر هذه الآلية إسقاط رزمةٍ أو رزم تدفقٍ معينة يتناسب تقريبًا مع حصة حيز النطاق التراسلي الذي يحصل عليه هذا التدفق حاليًا في هذا الموجّه، وهذا لأن التدفق الذي يرسل عددًا كبيرًا نسبيًا من الرزم يوفّر المزيد من المرشحين منها للإسقاط العشوائي، وبالتالي هناك نوعٌ من التخصيص العادل للموارد المضمَّنة في آلية RED، على الرغم من أنه ليس دقيقًا بأي حالٍ من الأحوال. يمكن القول أن هذا التخصيص عادل، لأن آلية RED تُعاقِب تدفقات حيز النطاق التراسلي العالي أكثر من تدفقات حيز النطاق التراسلي المنخفض، إلا أنها تزيد من احتمالية إعادة تشغيل بروتوكول TCP، وهو أمرٌ مؤلمٌ بصورةٍ مضاعفة لتلك التدفقات ذات حيز النطاق التراسلي العالي. لاحظ أن قدرًا لا بأس به من التحليل قد أُجري في إعداد معاملات آلية RED المختلفة، مثل معاملات MaxThreshold وMinThreshold وMaxP وWeight، وكل ذلك باسم تحسين وظيفة القدرة أي نسبة الإنتاجية إلى التأخير. وقد جرى تأكيد أداء هذه المعاملات أيضًا من خلال المحاكاة، وتبين أن الخوارزمية ليست شديدة الحساسية تجاهها، ولكن من المهم أن تضع في الحسبان أن كل هذا التحليل والمحاكاة يتوقف على توصيفٍ معين لعبء الشبكة. تُعَد مساهمة RED الحقيقية آلية عمل يمكن للموجّه من خلالها إدارة طول الرتل بصورةٍ أدق، ويعتمد التحديد الدقيق لطول الرتل الأمثل على مزيج حركات المرور ولا يزال موضوعًا للبحث، حيث يجري الآن جمع معلوماتٍ حقيقية من نشر آلية RED التشغيلي في الإنترنت. افترض ضبط العتبتين MinThreshold وMaxThreshold، فإذا كانت حركة المرور متقطّعةً إلى حدٍ ما، فيجب أن تكون العتبة MinThreshold كبيرةً بما يكفي للسماح بإبقاء استخدامية الرابط في مستوى عالٍ ومقبول، ويجب أيضًا أن يكون الفرق بين العتبتين أكبر من الزيادة النموذجية في متوسط طول الرتل المحسوب ضمن وقت RTT واحد. سيبدو أن ضبط العتبة MaxThreshold على ضعف العتبة MinThreshold قاعدةً عامة معقولة، وذلك نظرًا لمزيج حركات المرور على الإنترنت اليوم، كما يجب أن تكون هناك مساحة تخزينٍ فارغة كافية فوق العتبة العليا MaxThreshold لاستيعاب الرشقات الطبيعية التي تحدث في حركة مرور الإنترنت، دون إجبار الموجّه على الدخول في وضع إسقاط الذيل، وذلك لأننا نتوقع أن يتأرجح متوسط طول الرتل بين العتبتين خلال فترات التحميل العالي. لاحظنا أعلاه أن الوزن Weight يحدد ثابت الوقت لمرشح التمرير المنخفض متوسط التشغيل، وهذا يعطينا فكرةً عن كيفية اختيار قيمةٍ مناسبةٍ له. تذكر أن آلية RED تحاول إرسال إشارات إلى تدفقات TCP عن طريق إسقاط الرزم أثناء أوقات الازدحام، وافترض أن الموجّه يسقط رزمة من اتصال TCP، ثم يعيد توجيه بعض الرزم الأخرى من نفس الاتصال على الفور، عندئذٍ سيبدأ المستقبل في إرسال ACK مكررة إلى المرسل عند وصول هذه الرزم إليه، وعندما يرى المرسل ما يكفي من إشعاراتٍ ACKs مكررة، فسيؤدي ذلك إلى تقليل حجم نافذته، لذلك يجب انقضاء وقتٍ واحد على الأقل ذهابًا وإيابًا لهذا الاتصال من الوقت الذي يُسقِط فيه الموجّهُ الرزمةَ حتى الوقت الذي يبدأ فيه نفس الموجّه في رؤية بعض الراحة من الاتصال المتأثر من حجم النافذة المصغَّر. ربما لا توجد فائدةٌ كبيرة في جعل الموجّه يستجيب للازدحام على نطاقاتٍ زمنية أقل بكثير من وقت الذهاب والإياب للاتصالات التي تمر عبره. وكما ذكرنا سابقًا، لا تُعد 100 ميلي ثانية تقديرًا سيئًا لمتوسط أوقات الذهاب والإياب في الإنترنت، وبالتالي ينبغي اختيار الوزن Weight، بحيث تجري تصفية التغييرات في طول الرتل بمرور الوقت الذي يقل كثيرًا عن 100 ميلي ثانية. بما أن آلية RED تعمل عن طريق إرسال إشاراتٍ إلى تدفقات TCP لإخبارهم بالتباطؤ، فقد تتساءل عما سيحدث إذا أُهمِلت هذه الإشارات، حيث يُطلق على هذا غالبًا مشكلة التدفق غير المُستجيب unresponsive flow، وتستخدم التدفقات غير المستجيبة أكثر من حصتها العادلة من موارد الشبكة، كما يمكن أن تتسبب في انهيارٍ مزدحمٍ congestive collapse إذا كان هناك ما يكفي منها، تمامًا كما في الأيام التي سبقت التحكم في ازدحام بروتوكول TCP. ويمكن أن تساعد بعض الأساليب الموضحة في القسم التالي على حل هذه المشكلة عن طريق عزل أصنافٍ معينة من حركة المرور عن أصنافٍ أخرى، وهناك أيضًا احتمال وجود آلية RED مختلفة قادرة على الإسقاط بصورةٍ أبطأ من التدفقات التي لا تستجيب إلى التلميحات الأولية التي يُرسلها. إشعار الازدحام الصريح تُعَد RED أكثر آلية AQM مدروسة، ولكنها لم تُنشَر على نطاقٍ واسع، ويرجع ذلك جزئيًا إلى حقيقة أنها لا تؤدي إلى سلوكٍ مثالي في جميع الظروف، ومع ذلك فإن آلية RED هي المعيار لفهم سلوك AQM. الشيء الآخر الذي اكتُشف من آلية RED هو الاعتراف بإمكانية TCP لتقديم عملٍ أفضل إذا كانت الموجهات ترسل إشارة ازدحام أوضح. أي يمكن لآلية RED أو أية خوارزمية AQM مناسبة العمل بصورةٍ أفضل إذا وضعت علامةً marks على الرزمة واستمرت في إرسالها على طول طريقها إلى الوجهة، بدلًا من إسقاط رزمة وافتراض أن بروتوكول TCP سيلاحظ في النهاية بسبب وصول ACK مكرّر على سبيل المثال، وقد دُوِّنت هذه الفكرة في التغييرات التي أجريت على ترويسات IP وTCP المعروفة باسم إشعار الازدحام الصريح Explicit Congestion Notification أو اختصارًا ECN؛ كما طُبِّقت هذه الاستجابة الراجعة feedback من خلال معاملة بتّين في حقل TOS ضمن IP على أنهما بتات ECN. يضبط المصدر بتًا واحدًا للإشارة إلى أنه يستطيع تطبيق ECN، أي أنه قادرٌ على الرد على إشعار الازدحام، وهذا ما يسمى بت ECT اختصارًا لـ ECN-Capable Transport، وتضبط الموجهات البتَ الآخر على طول المسار من طرفٍ إلى طرف عند مواجهة الازدحام، كما أنه يُحسَب بواسطة أي خوارزمية AQM قيد التشغيل، ويُسمى هذا البت CE أي مواجهة الازدحام Congestion Encountered. يتضمن ECN رايتين flags اختياريتين إلى ترويسة TCP، بالإضافة إلى البتين السابقين في ترويسة IP -اللذين يكون النقل لهما غير معروف-، حيث تصل الراية الأولى ECE (أي ECN-Echo) من المستقبل إلى المرسل الذي تلقّى رزمةً مع ضبط بت CE. وتصل الراية الثانية CWR (أي نافذة الازدحام المُخفَّضة Congestion Window Reduced)، من المرسل إلى المستقبل الذي قلّل من نافذة الازدحام. يُعَد ECN الآن التفسير القياسي لاثنين من البتات الثمانية في حقل TOS الخاص بترويسة IP ويُوصى بشدة بدعم ECN، إلا أنه غير مطلوب. لا توجد خوارزمية AQM موصى بها، ولكن بدلًا من ذلك هناك قائمةٌ بالمتطلبات التي يجب أن تفي بها خوارزمية AQM الجيدة. إنّ لكل خوارزميةٍ من خوارزميات AQM مزاياها وعيوبها مثل خوارزميات التحكم في الازدحام في بروتوكول التحكم في الإرسال TCP، ولذا فنحن بحاجةٍ إلى الكثير منها، لكن هناك سيناريو واحدٌ محدد، حيث صُمِّمت خوارزمية التحكم في الازدحام في بروتوكول TCP وخوارزمية AQM للعمل في تناغم، وهو مركز البيانات، وسنعود إلى حالة الاستخدام هذه في نهاية هذا القسم. ترجمة -وبتصرّف- للقسم Advanced Congestion Control من فصل Congestion Control من كتاب Computer Networks: A Systems Approach. اقرأ أيضًا المقال السابق: التحكم في الازدحام باستخدام بروتوكول TCP في الشبكات الحاسوبية أنظمة الأرتال المستخدمة في التحكم بازدحام الشبكات الحاسوبية مشكلة تخصيص الموارد للتحكم في الازدحام في الشبكات الحاسوبية
  15. سنوضّح كيفية إنشاء خريطة كنز صغيرة لأي مكان في العالم. قد لا تحتاج إلى تصميم هذا النوع من الأشياء، لكن الأساليب المستخدمة قد تكون مفيدة، خاصةً إذا أردت تصميم شيء ما لدرس الجغرافيا بالمدرسة أو تصميم لعبة للبحث عن الكنز على سبيل المثال. ستحتاج إلى تنزيل الخط (أو الخطوط) والخريطة، وتثبيت برنامج جيمب GIMP اختياريًا، إذ لا يُعَد تطبيق قسم جيمب ضروريًا، ولكنك سترى نتيجة أفضل إن استخدمته. يجب عليك أيضًا أن تعرف أساسيات سكريبوس، بما في ذلك إنشاء إطارات الصور وإنشاء إطارات النص وتعديل النص الأساسي وغير ذلك. الإعداد خلفية الخريطة يجب أولًا الحصول على ورقة قديمة لاستخدامها خلفيةً للخريطة، حيث يمكنك استخدام صورة شبيهة بالصورة التي سنستخدمها، ولكن استخدم الخلفية التي تريدها. الخط (أو الخطوط) تحتاج إلى استخدام خط أو خطين لطيفين على خريطتك، وهنا يمكنك إما البحث عن شيء خطّي مثل الخط Birds of Paradise، أو شيء مكتوب بخط اليد مثل الخط MAWNS Handwriting. الخيار متروك لك هنا، فقد يكون لديك خط لطيف مثبَّت على نظامك أساسًا. الخريطة يمكنك الحصول على خريطة من مصدر رائع هو OpenStreetMap، وذلك باتباع الخطوات الآتية: انتقل إلى موقع OpenStreetMap وابحث عن الخريطة التي تريدها من خلال التمرير والتقريب، أو انتقل إلى الخريطة التي سنستخدمها في هذا المقال. اضغط على أيقونة "الطبقات Layers" على يسار نافذة المتصفح (تبدو هذه الأيقونة مثل أوراق مُكدَّسة فوق بعضها البعض). حدّد نوع الخريطة التي تريدها، حيث تُظهِِر الطبقات المختلفة أنواعًا مختلفةً من المعلومات، لكن يُفضَّل أن تختار خريطة لا تحتوي على عناصر حديثة مثل أسماء الطرق وما إلى ذلك. قد تكون خريطة النقل والمواصلات، أو خريطة MapQuest Open، أو الخريطة الإنسانية اختيارات جيدة اعتمادًا على المنطقة التي حدّدتها. أغلق خيارات "الطبقات". اضغط على أيقونة "مشاركة Share"، والتي تبدو مثل مربع مع سهم يخرج منه. اختر في قسم الصورة الخيار "SVG" من قائمة "تنسيق Format". اضغط على زر تنزيل Download. ثم ستجمّع خوادم OpenStreetMap إصدار SVG من الخريطة نيابةً عنك. قد يستغرق ذلك بعض الوقت اعتمادًا على الخريطة التي اخترتها. احفظ ملف SVG الذي نزّلته في وحدة التخزين المحلية الخاصة بك. الغطاء Overlay ستحتاج أيضًا إلى غطاء لوضعه على الخريطة، مما يجعلها تبدو أقدم قليلًا، لذلك يجب استخدام برنامج جيمب. يمكنك تخطي هذا القسم إن لم تكن مرتاحًا لاستخدام جيمب GIMP، لأنه ليس ضروريًا، ولكنه يجعل النتيجة النهائية أفضل ولا يُعَدّ تطبيقه أمرًا صعبًا. افتح برنامج جيمب وأنشئ مستندًا جديدًا، واستخدم قالب 1024x768 المبني مسبقًا للحصول على صورة ذات حجم مناسب. اختر قائمة مرشّحات Filters، ثم ضجيج Noise، ثم رمي Hurl. لن تكون الإعدادات مهمةً هنا، ولكن إذا وضعت الإعدادات الموضحة في الشكل الآتي، فيجب أن تكون على ما يرام. اضغط على موافق. بعدها يجب أن تكون لديك الآن صورة مليئة بالضجيج، مثل الشكل التالي: اختر قائمة مرشّحات Filters ثم تمويه Blur، ثم بكسلة Pixelize. اضبط العرض والارتفاع على 4 بكسلات كما في الشكل التالي: اضغط على موافق. وهنا يجب أن تكون لديك الآن صورة مليئة بالضجيج المُبكسَل مثل الشكل التالي: اختر قائمة مرشّحات Filters ثم تمويه Blur ثم، Gaussian Blur. اضبط البعدين الأفقي والعمودي على 4 بكسلات وطريقة التمويه Blur Method على RLE كما في الشكل التالي: اضغط على موافق، وهنا يجب أن تكون لديك الآن صورة مليئة بالضجيج المموَّه والمكبسَل كالشكل التالي: يجب الآن إجراء بعض التعديلات على الألوان، وذلك باتباع الآتي: اختر قائمة ألوان Colors ثم المستويات Levels. اسحب الأسهم الصغيرة أسفل مخطط "مستويات الدخل Input Levels" لتكون في مواضع مماثلة لتلك الموجودة في الشكل التالي: اضغط على موافق، ويجب أن تكون لديك الآن صورة مليئة بالنقاط الملونة الداكنة مثل الشكل التالي: اختر قائمة ألوان، ثم Colorify (لا تختار "Colorize" بالقرب من أعلى القائمة، بل اختر "Colorify" بالقرب من أسفل القائمة). اضغط على لوحة الألوان بجانب "لون مخصَّص Custom Colour". استخدم عناصر التحكم المختلفة لتحديد لون بني متوسط إلى داكن (استخدم لون RGB بالقيم: 147 و72 و11). اضغط موافق ثم موافق مرةً أخرى، وهنا يجب أن تكون لديك الآن صورة مليئة بالنقاط ذات اللون البني الداكن مثل الشكل التالي: بهذا يكون قد تبقّى شيء واحد أخير في جيمب، بعدها يمكنك الانتقال إلى سكريبوس وهو اتباع الآتي: اختر قائمة طبقة Layer ثم قناع Mask، بعدها أضف قناع طبقة Add Layer Mask. حدّد الخيار "نسخة رمادية التدرج من الطبقة Greyscale copy of layer". اضغط على زر إضافة Add لإضافة قناع الطبقة. يجب أن تبدو صورتك مثل لوحة شطرنج رمادية مع القليل من اللون البني الداكن في بعض الأماكن مثل الشكل التالي: ستظهِر لوحة الشطرنج الرمادية مكان وجود بعض الشفافية فقط، أي في جميع أنحاء الصورة في هذه الحالة، ولا يظهَر اللون البني جيدًا (حاليًا). اختر قائمة ملف File ثم حفظ Save. حدد اسمًا مناسبًا واضغط على حفظ Save. اختر قائمة ملف File ثم تصدير كـ Export As. حدد نوع الملف بتنسيق PNG، وامنح الصورة اسمًا مناسبًا واضغط على تصدير Export. اقبل الإعدادات الافتراضية واضغط على تصدير مرة أخرى. لديك الآن الصورة التي ستظهر فوق خريطتك لإضافة قدر إضافي من "القِدم" إليها. رسم الخريطة الاستيراد الأوّلي افتح سكريبوس وأنشئ صفحةً جديدةً موجَّهة أفقيًا بالقياس A4 أو رسالة Letter. اختر قائمة ملف File ثم استيراد Import، ثم "احصل على ملف متجهي Get Vector File". حدد خريطة SVG التي نزّلتها سابقًا ثم اضغط موافق. قد يعرض سكريبوس رسالة تقول: "يحتوي ملف SVG على بعض الميزات غير المدعومة". اضغط على موافق ثم تابع. قد يغيّر سكريبوس حجم لوحة الرسم وقد تختفي صفحتك (لا بأس سنصلح ذلك لاحقًا). انقر في أي مكان على لوحة الرسم لاستيراد الخريطة. استوردنا الخريطة، ولكن يُحتمَل أنها كبيرة جدًا وقد تحتوي أيضًا على أشياء لا نريدها. تغيير الحجم تأكّد من تحديد كائن الخريطة وانتقل إلى تبويب X وY وZ في نافذة خصائص Properties. تأكد من أن حقلي "العرض Width" و"الارتفاع Height" مقفلان معًا من خلال النقر على الرمز الذي يشبه السلسلة بحيث يرتبط طرفا هذا الرمز. أدخِل 800 في حقل "العرض" واضغط على ENTER من لوحة المفاتيح (قد يستغرق تغيير الحجم بعض الوقت). اختر قائمة نوافذ Windows ثم حاذِ ووزّع Align and Distribute. حدّد الخريطة، ثم انتقل إلى نافذة حاذِ ووزّع واختر الخيار "صفحة Page" من القائمة "متصل بـ Relative To". اضغط على أيقونة "مركِز على المحور الرأسي Centre on Vertical Axis". اضغط على أيقونة "مركِز على المحور الأفقي Centre on Horizontal Axis". قد تختفي خريطتك ولكن لا بأس في ذلك. اختر قائمة عرض View ثم تقريب، ثم ملائمة للعرض Fit to Width. افتح قائمة عرض مرةً أخرى ثم تقريب ثم ملائمة للارتفاع Fit to Height. يجب أن تكون خريطتك الآن في وسط نافذتك، وإذا لم يكن الأمر كذلك؛ فيجب عليك التمرير حتى تراها. يوضح الشكل التالي مثالًا لكيفية ظهور الإطار على الصفحة: بعّد الصفحة قليلًا من قائمة عرض ثم تقريب ثم 50%، لتتمكّن من رؤية كل الإطار حول الخريطة. وبما أن خريطتك المستورَدة قد تحتوي على كثير من الأشياء غير المرغوب فيها، فيجب حذف ما لا تحتاجه. التنسيق حدّد الخريطة ثم انقر بزر الفأرة الأيمن، واختر فك التجميع Ungroup من القائمة. ثم انقر بزر الفأرة الأيمن واختر فك التجميع من القائمة مرةً أخرى. يجب أن تكون الآن قادرًا على رؤية جميع المتجهات التي تشكل الخريطة، إذ يُحتمَل وجود كثير من الإطارات. حدّد أي مكان لا يوجد فيه إطار لإلغاء تحديد كل شيء. حدد أي شيء يبرز خارج مستطيل الخريطة "الحقيقي" واضغط على حذف Delete. كرّر التحديد والحذف إلى أن لا يكون لديك أي شيء بارز خارج منطقة البحر في الخريطة. ثم احذف أي بحر موجود أيضًا. يجب الآن توسيط الخريطة على الصفحة. التحريك اسحب وحدّد كل شيء. انقر بزر الفأرة الأيمن واختر مجموعة Group من القائمة. تأكّد من أن نافذة حاذِ ووزّع Align and Distribute مفتوحة. تأكّد من استمرار ضبط قائمة "متصل بـ" على الخيار "صفحة". اضغط على أيقونة "مركِز على المحور الرأسي". اضغط على أيقونة "مركِز على المحور الأفقي". يجب الآن أن تتمركز خريطتك في صفحتك كما في الشكل التالي: إن لم تكن خريطتك مناسبةً للصفحة، فاتبع الخطوات التالية: حدّد الخريطة، ثم انتقل إلى تبويب X وY وZ في نافذة خصائص. تأكد من أن حقلي "العرض" و"الارتفاع" لا يزالان مقفلين معًا. انقر على الدائرة المركزية في مخطط "النقطة الأساسية Basepoint" كما يلي: أدخِل القيمة 840 في حقل "العرض" واضغط على ENTER من لوحة المفاتيح. استخدم قيم "عرض" مختلفة لجعل الخريطة صحيحة تمامًا، ولكن لا تقلق إذا تجاوزت الخريطة حافة الصفحة قليلًا. يجب الآن إصلاح لوحة رسم سكريبوس (إن حدث خطأ ما). إصلاح لوحة الرسم اختر قائمة ملف File ثم حفظ Save. امنح الملف اسمًا مناسبًا واضغط على "موافق" لحفظه. اختر قائمة ملف ثم إغلاق Close. اختر قائمة ملف File ثم فتح حديثًا Open Recent وحدّد ملفك من أعلى القائمة. سيعيد سكريبوس الآن حساب حجم اللوحة، ويجب أن يعود كل شيء إلى الوضع الطبيعي. مزيد من التعديل حدّد كائن الخريطة. انقر بزر الفأرة الأيمن واختر فك التجميع Ungroup من القائمة. إذا كان لا يزال لديك أي بحر أو محيط على خريطتك، فيجب حذفه من خلال تحديده ثم حذفه. ابحث عن أي شيء غير مناسب لخريطة الكنز -مثل المطارات وأرقام الطرق وطرقات العبور وغير ذلك- واحذفها أيضًا. قد تستغرق هذه العملية بعض الوقت، ولا تقلق إن حذفت شيئًا بسيطًا عن طريق الخطأ. يجب أن يظهر لديك الآن شيء مثل الشكل التالي: الطبقات يجب الآن إعداد بعض الطبقات لتسهيل عملية التعديل لاحقًا. اختر قائمة نوافذ Windows، ثم الطبقات Layers لفتح نافذة طبقات Layers. انقر نقرًا مزدوجًا على اسم طبقة "الخلفية Background". أعِد تسمية الطبقة بالاسم "خريطة" (بدون علامات الاقتباس) واضغط على ENTER من لوحة المفاتيح. اضغط على زر "+" لإنشاء طبقة جديدة. انقر نقرًا مزدوجًا فوق اسم الطبقة "طبقة جديدة 1" وأعِد تسميتها إلى "ورقة"، فهذه هي الطبقة التي ستضع عليها صورة الورقة التي نزّلتها في البداية. اضغط على زر "+" لإنشاء طبقة جديدة أخرى. انقر نقرًا مزدوجًا فوق اسم الطبقة "طبقة جديدة 2" وأعِد تسميتها إلى "نص"، فهذا هو المكان الذي ستضع فيه نصًا وأشياء أخرى. اضغط على زر "+" لإنشاء طبقة جديدة أخرى. انقر نقرًا مزدوجًا فوق اسم الطبقة "طبقة جديدة 3" وأعِد تسميتها إلى "غطاء"، فهذا هو المكان الذي ستضع فيه الغطاء "Wear" الذي أنشأته في برنامج جيمب لكن إذا كنت لم تطبّق الخطوات التي نفّذناها على جيمب، فلست بحاجة إلى هذه الطبقة. حدّد طبقة "ورقة" واضغط على زر اخفض الطبقة لتحريكها إلى الأسفل. يجب أن تكون طبقاتك مرتّبةً كما في الشكل التالي: أعِد تحديد الطبقة "خريطة"، ثم يجب إنشاء بعض الألوان المناسبة. الألوان إن لم تعرف كيفية إنشاء الألوان، فراجع مقال كيف تنشئ ألوانك الخاصة في سكريبوس. أنشئ اللون "Route" على أنه لون RGB بالقيم: R = 190 وG = 13 وB = 60. سنستخدم هذا اللون لإظهار الطريق المؤدّي إلى الكنز. أنشئ اللون "Outlines" على أنه لون RGB بالقيم: R = 141 وG = 86 وB = 22. سنستخدم هذا اللون للمخططات التفصيلية على الخريطة. أنشئ اللون "Land" على أنه لون RGB بالقيم: R = 255 وG = 238 وB = 182. سنستخدم هذا اللون لأرض الخريطة. أنشئ اللون "Text" على أنه لون RGB بالقيم: R = 143 وG = 111 وB = 103. سنستخدم هذا اللون للنص الموجودة على الخريطة. يجب الآن إظهار خريطتك على أنها "قديمة". المخططات التفصيلية والأرض حدّد متجهًا على خريطتك، وسيفي هنا أي متجه بالغرض. انتقل إلى تبويب ألوان Colour في نافذة خصائص Properties. انقر على "لون الحد Line Colour". اسحب وحدّد كل شيء، ولا تستخدم قائمة تحرير Edit ثم تحديد الكل Select All، لأنه سيغلق تبويب ألوان. حدد اللون "Outlines" من قائمة الألوان. انقر على "لون التعبئة Fill Colour" في تبويب ألوان. حدّد اللون "Land" من قائمة الألوان. انتقل إلى تبويب خط Line في نافذة خصائص. أدخِل القيمة 1.5 نقطة لعرض الخط Line Width، ولا تستخدم أزرار الزيادة والنقصان، بل أدخِل القيمة يدويًا ثم اضغط على ENTER من لوحة المفاتيح. يجب أن يكون لديك شيء مثل الشكل التالي، حيث يتكون كل شيء من مخططات تفصيلية بنية اللون مع تعبئة صفراء خفيفة: لا تقلق من بقاء بعض الأشياء خارج الصفحة، إذ ستُقَص عند إنشاء ملف PDF النهائي. احفظ المستند باسم جديد بحيث يكون لديك إصدار سابق يمكنك الرجوع إليه إذا أردت إجراء بعض التغييرات. إضافة الورقة بعّد الصفحة بمقدار 75% مثلًا، لتتمكّن من رؤية الصفحة بأكملها. حدّد الطبقة "ورقة" في نافذة طبقات. اختر قائمة إدراج Insert ثم إطار صورة Image Frame. ارسم إطار الصورة من خارج الجزء العلوي الأيسر من صفحتك إلى خارج الجزء السفلي الأيمن مباشرةً، بحيث يغطي الإطار الصفحة بالكامل. حدّد الإطار، ثم انقر بزر الفأرة الأيمن واختر استيراد صورة Get Image من القائمة. حدّد موقع صورة الورقة التي نزّلتها في البداية ثم اضغط موافق. انقر بزر الفأرة الأيمن واختر "اضبط الصورة إلى الإطار Adjust Image to Frame". انتقل إلى تبويب صورة Image في نافذة خصائص، أو انتقل إلى نافذة خصائص الصورة في الإصدار 1.5.7 من برنامج سكريبوس التي يمكن الوصول إليها من قائمة نوافذ، ثم خصائص المحتوى. انقر على الخيار "تحجيم حر Free Scaling". تأكّد من أن الحقلين "X-Scale" و"Y-Scale" مقفلان معًا من خلال النقر على الرمز الذي يشبه السّلسلة، بحيث يرتبط طرفا هذه السلسلة. غيّر قيم "X-Scale" أو "Y-Scale" بحيث تغطّي الصورةُ الإطارَ بالكامل. يجب أن يكون لديك شيء مثل الشكل التالي: التحقق من وجود حالات شاذة يجب أن تلقي الآن نظرةً على خريطتك للتأكد من صحة كل شيء، فقد لا تمتلئ بعض الأشكال باللون "Land" مثلًا أو العكس وغيرها من المشاكل. يمكنك إصلاح بعض المشاكل الصغيرة باستخدام أداة منحنى بيزييه Bezier Curve لرسم شكل حول منطقة المشكلة، وإزالة مخطط الشكل الجديد التفصيلي وتعبئته باللون "Outlines"، أو يمكنك تغيير لون التعبئة إلى "لا شيء None" أو حذف الكائن الذي يبدو خاطئًا، لذلك يجب أن تقرر ما هو الأفضل بالنسبة لك. الطريق حدّد الطبقة "نص" في نافذة طبقات. اختر قائمة إدراج Insert ثم منحنى بيزييه. ارسم طريق خريطة الكنز من نقطة البداية إلى نقطة النهاية. يمكنك فقط استخدام الخطوط المستقيمة أو سحب النقاط ليصبح الخط منحنيًا. إن لم تستخدم منحنى بيزييه من قبل، فألقِ نظرةً على المقال أساسيات منحنى بيزييه Bezier Curve: أشكال هندسية بسيطة قبل المتابعة. حدّد الطريق الذي رسمته، ثم انتقل إلى تبويب ألوان في نافذة خصائص. اضغط على "لون الحد Line Colour". حدد اللون "Route" من القائمة. انتقل إلى تبويب خط Line في نافذة خصائص. غيّر "عرض الخط" إلى 3 نقاط. غيّر "نوع الخط Type of Line" إلى أول خط متقطع في القائمة. غيّر "النهايات Endings" إلى "مستديرة Round Cap". بهذا تكون قد حصلت الآن على الطريق كما في الشكل التالي: ولكنك تحتاج أيضًا إلى الجزء الأهم وهو وضع علامة "X" على مكان الكنز. علامة X اختر قائمة إدراج Insert ثم منحنى بيزييه Bezier Curve. ارسم الشكل الملوّن باللون الأزرق بالنقر والسحب كما هو موضَّح في الشكل التالي: انقر نقرًا مزدوجًا على الشكل للدخول إلى نافذة محرّر العقد Node Editor. انقر على رمز "أغلق منحنى البيزييه هذا Close this Bezier Curve". انقر على رمز "حرّك نقاط تحكم Move Control Points". اسحب الدائرة الأرجوانية الموجودة أسفل اليمين إلى منتصف المنحنى العلوي كما هو موضّح في الشكل التالي: اضغط على إنهاء التحرير End Editing أو موافق في نافذة محرّر العقد. انتقل إلى تبويب ألوان Color في نافذة خصائص. غيّر "لون الحد" إلى "لا شيء None". غيّر لون التعبئة إلى اللون "Route". اذهب إلى تبويب X وY وZ في نافذة خصائص. غيّر قيمة "التدوير Rotation" إلى 45 درجة. اختر قائمة عنصر Item ثم مضاعفة/تحويل، ثم نسخ مطابق Duplicate. حدّد النسخة المكرَّرة، ثم انتقل إلى تبويب X وY وZ في نافذة خصائص. اضغط على زر "اقلب أفقيًا Flip Horizontal". غيّر "التدوير" إلى 315 درجة. اضغط Shift وحدّد المنحنى الأصلي. افتح نافذة حاذِ ووزّع Align and Distribute. اضبط قائمة "متصل بـ Relative To" على "الاختيار الأول First Selected". اضغط على الزر "مركِز على المحور الرأسي". اضغط على الزر "مركِز على المحور الأفقي". انقر بزر الفأرة الأيمن على أيٍّ من المنحنيات واختر مجموعة Group من القائمة. اسحب الشكل الناتج "X" إلى نهاية الطريق إلى الكنز. يجب أن يكون لديك الآن شيء يشبه الشكل التالي: إضافة نص يمكنك إضافة النص الذي تريده، لكن تأكّد فقط من وضعه على طبقة "نص" ومنحه اللون "Text". إضافة الغطاء حدّد الطبقة "غطاء" في نافذة طبقات. اختر قائمة إدراج Insert ثم إطار صورة. ارسم إطار الصورة من خارج الجزء العلوي الأيسر من صفحتك إلى خارج الجزء السفلي الأيمن مباشرةً، بحيث يغطّي الإطار الصفحة بالكامل. حدّد الإطار، ثم انقر بزر الفأرة الأيمن واختر استيراد صورة Get Image من القائمة. حدّد موقع صورة الغطاء التي أنشأتها في برنامج جيمب، ثم اضغط على موافق. انقر بزر الفأرة الأيمن واختر اضبط الصورة إلى الإطار Adjust Image to Frame. انتقل إلى تبويب صورة Image في نافذة خصائص، أو انتقل إلى نافذة خصائص الصورة التي يمكنك الوصول إليها من قائمة نوافذ ثم خصائص المحتوى في الإصدار 1.5.7 من برنامج سكريبوس. انقر على الخيار "تحجيم حر Free Scaling". تأكّد من أن الحقلين "X-Scale" و"Y-Scale" مقفلان معًا من خلال النقر على الرمز الذي يشبه السّلسلة، بحيث يرتبط طرفا هذه السلسلة. غيّر قيم "X-Scale" أو "Y-Scale" لتغطي الصورة الإطارَ بالكامل. يجب أن تبدو الخريطة بأكملها الآن "أقدم" قليلًا من ذي قبل. اللمسات الأخيرة حدّد طبقة "خريطة" في نافذة طبقات. اضبط "التعتيم أو العتمة Opacity" على القيمة 50% أو 60% (اختر القيمة المناسبة لك). اضبط العتمة Opacity لطبقة "نص" لتكون القيمة 80%. تهانينا، بهذا تكون قد أنشأت خريطة كنز مشابهة للشكل التالي: ختامًا لقد أنشأت خريطة الكنز التي تريدها، ولكن الشيء المهم هو معرفة التقنيات المستخدمة للعمل، لذلك ننصحك بإجراء بعض التعديلات وملاحظة ما يحدث مثل: تغيير الألوان. إضافة المزيد من النصوص. إزالة تفاصيل من الخريطة. العثور على بعض القصاصات الفنية لتنانين أو لكائنات بحرية وإضافتها إلى طبقة "نص". تغيير عتامة طبقتَي "خريطة" و"نص" لمعرفة ما يحدث. ترجمة -وبتصرّف- للمقال How to make a treasure map. اقرأ أيضًا كيف تعزل صورة وتنشئ مسار قطع Clipping Path لتدفق النص في سكريبوس كيفية رسم صندوق منظوري الشكل في برنامج سكريبوس Scribus كيفية إنشاء تأثير نص مخيف في برنامج سكريبوس Scribus
  16. يقدم هذا القسم المثال السائد والمُستخدَم اليوم للتحكم في الازدحام من طرفٍ إلى طرف، والذي يطبّقه بروتوكول TCP. تتمثل الإستراتيجية الأساسية لبروتوكول TCP في إرسال رزمٍ إلى الشبكة دون حجز، ومن ثم الاستجابة للأحداث الملاحَظة، كما يَفترض بروتوكول TCP وجود رتل FIFO فقط في موجّهات الشبكة، ولكنه يعمل أيضًا مع رتلٍ عادل. أدخل فان جاكوبسون Van Jacobson التحكم في الازدحام باستخدام بروتوكول TCP إلى الإنترنت في أواخر الثمانينات، وذلك بعد ثماني سنوات تقريبًا من تشغيل مكدس بروتوكولات TCP / IP، وقبل ذلك الوقت مباشرةً كان يعاني الإنترنت من انهيار الازدحام congestion collapse، حيث يرسل المضيفون رزمهم إلى الإنترنت بالسرعة التي تسمح بها النافذة المُعلن عنها، ويحدث الازدحام في بعض الموجّهات، مما يتسبب في إسقاط الرزم، وتنتهي مهلة المضيفين ويعيدون إرسال الرزم الخاصة بهم، مما يؤدي إلى مزيدٍ من الازدحام. تتمثل فكرة التحكم في الازدحام باستخدام بروتوكول TCP، في أن يحدد كل مصدرٍ مقدار السعة المتاحة في الشبكة، بحيث يعرف عدد الرزم التي يمكنه نقلها بأمان. وبمجرد أن يكون لدى مصدرٍ معين هذه الرزم العديدة قيد النقل، فإنه يستخدم وصول إشعارٍ ACK في إشارةٍ إلى أن إحدى رزمه قد غادرت الشبكة، وبالتالي فمن الآمن إدخال رزمةٍ جديدة في الشبكة دون زيادةٍ على مستوى الازدحام. يُقال أن بروتوكول TCP يضبط وقته ذاتيًا self-clocking، وذلك باستخدام الإشعارات لتسريع إرسال الرزم. وبطبيعة الحال فعملية تحديد السعة المتاحة ليست بالمهمة السهلة، ومما يزيد الطين بلةً أن حيز النطاق التراسلي المتاح يتغير بمرور الوقت نظرًا لأن الاتصالات الأخرى تأتي وتذهب، مما يعني أن أي مصدرٍ معينٍ يجب أن يكون قادرًا على ضبط عدد الرزم المنقولة، وسيشرح هذا القسم الخوارزميات التي يستخدمها بروتوكول TCP لمعالجة هذه المشاكل وغيرها. نلاحظ أنه وعلى الرغم من أننا نشرح آليات التحكم في الازدحام في بروتوكول TCP واحدةً تلو الأخرى، وهذا يُعطي انطباعًا بأننا نتحدث عن ثلاث آليات مستقلة، لكنها تشكّل معًا التحكم في الازدحام باستخدام بروتوكول TCP. سنبدأ هنا بنوعٍ من التحكم في الازدحام باستخدام بروتوكول TCP المُشار إليه غالبًا باسم TCP القياسي standard TCP، ولكننا سنرى أن هناك فعليًا عدد قليل من أنواع التحكم في الازدحام باستخدام بروتوكول TCP قيد الاستخدام اليوم، ومع ذلك يستمر الباحثون في استكشاف أساليبٍ جديدة لمعالجة هذه المشكلة التي سنناقشها أدناه. الزيادة المضافة / النقص المضاعف يحتفظ بروتوكول TCP بمتغير حالةٍ جديدٍ لكل اتصال، يُسمى نافذة الازدحام CongestionWindow، والذي يستخدمه المصدر للحدِّ من مقدار البيانات المسموح به أثناء النقل في وقتٍ معين. تُعَد نافذة الازدحام CongestionWindow نسخةً للتحكم في الازدحام للنافذة المُعلن عنها للتحكم في التدفق، ويُعدَّل بروتوكول TCP بحيث يكون الحد الأقصى المسموح به لعدد بايتات البيانات غير المعترف بها هو الحد الأدنى من نافذة الازدحام والنافذة المُعلن عنها، وبالتالي تُعدَّل النافذة الفعالة لبروتوكول TCP على النحو التالي باستخدام المتغيرات المحددة سابقًا: MaxWindow = MIN(CongestionWindow, AdvertisedWindow) EffectiveWindow = MaxWindow - (LastByteSent - LastByteAcked) وهذا يعني أن يحل الحد الأقصى MaxWindow محل النافذة المُعلن عنها AdvertisedWindow في حساب النافذة الفعالة EffectiveWindow، وبالتالي لا يُسمَح لمصدر بروتوكول TCP بالإرسال بصورةٍ أسرع مما يستوعبه المكوّن الأبطأ مثل الشبكة أو المضيف الوجهة. تكمن المشكلة في كيفية تعلّم بروتوكول TCP قيمةً مناسبةً لنافذة الازدحام CongestionWindow، حيث لا يوجد شيء يرسل هذه القيمة المناسبة إلى جانب الإرسال من بروتوكول TCP بخلاف النافذة المعلَن عنها AdvertisedWindow، والتي يرسلها الجانب المتلقي من الاتصال، لكن تكمن الإجابة هنا في أن يضبط مصدر TCP نافذة الازدحام CongestionWindow بناءً على مستوى الازدحام الذي يتخيّل وجوده في الشبكة، ويتضمن ذلك تقليل نافذة الازدحام عندما يرتفع مستوى الازدحام وزيادة نافذة الازدحام عندما ينخفض مستوى الازدحام، وتسمى هذه الآلية مجتمعةً بالزيادة المضافة / النقص المضاعف additive increase/multiplicative decrease أو اختصارًا AIMD، وسيُوضّح السبب وراء هذا الاسم أدناه. إذًا، كيف يحدد المصدر أن الشبكة مزدحمة وأنه يجب أن يقلّل من نافذة الازدحام؟ تستند الإجابة إلى ملاحظة أن السبب الرئيسي لعدم تسليم الرزم ونتائج المهلة الزمنية timeout؛ هو أن الرزمة قد أُسقِطت بسبب الازدحام، إذ من النادر أن تُسقَط رزمةٌ بسبب خطأ أثناء الإرسال، ولذلك يفسّر بروتوكول TCP تشغيل المهلات على أنه علامة على الازدحام، فيقلّل من معدل الإرسال، بحيث يضبط المصدر نافذة الازدحام CongestionWindow إلى نصف قيمتها السابقة في كل مرةٍ تعمل فيها المهلة. ويتوافق هذا التقسيم إلى النصف في نافذة الازدحام CongestionWindow لكل مهلةٍ مع جزء "النقص المضاعف multiplicative decrease" من آلية AIMD. على الرغم من تعريف نافذة الازدحام CongestionWindow في صورة بايتات، إلا أنه من الأسهل فهم الانخفاض المضاعف باستخدام الرزم الكاملة. افترض أن نافذة الازدحام مضبوطة حاليًا على 16 رزمة على سبيل المثال، فإذا اكتشِفت خسارة، فستُضبَط هذه النافذة على 8، حيث يجري اكتشاف خسارة عند انتهاء المهلة -ولكن بروتوكول TCP لديه آليةٌ أخرى لاكتشاف الرزم المُهمَلة-. تتسبب الخسائر الإضافية في تقليل نافذة الازدحام CongestionWindow إلى 4، ثم إلى 2، وأخيرًا إلى رزمةٍ واحدة. ولا يُسمح لنافذة الازدحام CongestionWindow بالانخفاض عن حجم رزمةٍ واحدة، أو باستخدام مصطلحات بروتوكول TCP، بالانخفاض عن الحد الأقصى لحجم جزء maximum segment size أو اختصارًا MSS. من الواضح أن استراتيجية التحكم في الازدحام التي تعمل على تقليل حجم النافذة متحفظة للغاية، حيث سنحتاج أيضًا إلى أن نكون قادرين على زيادة نافذة الازدحام للاستفادة من السعة المتوفرة حديثًا في الشبكة، وهذا هو جزء "الزيادة المضافة additive increase" من آلية AIMD، والذي يعمل على النحو التالي: يضيف المصدر ما يعادل رزمةً واحدةً إلى نافذة الازدحام CongestionWindow في كل مرةٍ يُرسل فيها المصدر رزمًا بمقدار هذه النافذة بنجاح، أي يحدث إقرار بإرسال كل رزمة مُرسَلةٍ خلال آخر وقت ذهابٍ وإياب round-trip time، أو اختصارًا RTT (هذه الزيادة الخطية موضحة في الشكل السابق). لاحظ أنه من الناحية العملية، لا ينتظر بروتوكول TCP إشعارات بمقدار رزمةٍ كاملة لإضافة ما يعادل رزمة واحدة إلى نافذة الازدحام، ولكن بدلًا من ذلك تزيد نافذة الازدحام CongestionWindow بمقدارٍ ضئيل لكل إشعارٍ ACK يصل، حيث تُزاد نافذة الازدحام على النحو التالي: Increment = MSS x (MSS/CongestionWindow) CongestionWindow += Increment أي بدلًا من زيادة نافذة الازدحام CongestionWindow بمقدار كل بايتات الحد الأقصى لحجم جزءMSS في كل فترة RTT، فإننا نزيده بجزءٍ بسيط من الحد الأقصى MSS في كل مرةٍ يُستلَم إشعار ACK فيها. وبافتراض أن كل إشعار ACK يقر باستلام بايتات الحد الأقصى MSS، فإن هذا الجزء المٌضاف هو MSS/CongestionWindow. يستمر هذا النمط من الزيادة والنقصان المستمرين في نافذة الازدحام طوال فترة الاتصال. وإذا رُسمت القيمة الحالية لنافذة الازدحام CongestionWindow على أنها دالةً بالنسبة للوقت، فسنحصل على نمط سن المنشار الموضح في الشكل السابق. إنّ المفهوم المهم الواجب فهمه حول آلية AIMD؛ هو أن المصدر مستعد لتقليل نافذة الازدحام بمعدلٍ أسرع بكثير من زيادة نافذة الازدحام الخاصة، وهذا على النقيض من استراتيجية الزيادة المضافة / النقص الإضافي، حيث تُزاد النافذة بمقدار رزمةٍ واحدةٍ عند وصول إشعار ACK، وتنخفض بمقدار 1 عند مرور المهلة، وقد ثبُت أن آلية AIMD شرطٌ ضروري لاستقرار آلية التحكم في الازدحام. التفسير البديهي لتخفيض بروتوكول TCP النافذة بقوة وزيادتها بصورةٍ متحفّظة هو تفاقم عواقب وجود نافذةٍ كبيرة جدًا، حيث سيُعاد إرسال الرزم التي أُسقِطت عندما تكون النافذة كبيرةً جدًا، مما يزيد الازدحام سوءًا، ومن المهم الخروج من هذه الحالة بسرعة. في الأخير، سيحتاج بروتوكول TCP إلى أدق آليةٍ ممكن منحها لتحديد المهلة، نظرًا لأن حدوث المهلة هو مؤشرٌ على الازدحام الذي يؤدي إلى انخفاضٍ مضاعف. لقد غطينا فعليًا آلية مهلة بروتوكول TCP سابقًا، لذلك لن نكررها هنا، والشيئان الرئيسيان اللذان يجب تذكرهما بشأن هذه الآلية، هما ضبط المهلات الزمنية على أنها دالةً لكلٍ من متوسط فترات RTT والانحراف المعياري في ذلك المتوسط، واختبار بروتوكول TCP وقتَ الذهاب والإياب فقط مرةً واحدة لكل فترة RTT بدلًا من مرةٍ واحدة لكل رزمة، باستخدام ساعةٍ ذات حبيبات خشنة (500 ميلي ثانية)، نظرًا لتكلفة قياس كل إرسال بساعة دقيقة. آلية البداية البطيئة آلية الزيادة المضافة التي وُصفت للتو هي الطريقة الصحيحة للاستخدام عندما يعمل المصدر بالقرب من السعة المتاحة للشبكة، ولكن الأمر سيستغرق وقتًا طويلًا لتكثيف الاتصال عندما يبدأ من نقطة الصفر، لذلك يوفر بروتوكول TCP آليةً ثانيةً تسمى البداية البطيئة Slow Start، والتي تُستخدَم لزيادة نافذة الازدحام بسرعة من نقطة البداية الباردة cold start، حيث تعمل البداية البطيئة على زيادة نافذة الازدحام أسيًا، وليس خطيًا. يبدأ المصدر بضبط نافذة الازدحام CongestionWindow إلى رزمةٍ واحدة، ويضيف بروتوكول TCP إلى نافذة الازدحام قيمة 1 عند وصول إشعار ACK لهذه الرزمة ثم يرسل رزمتين، وعند تلقي الإشعارين المقابلين يزيد بروتوكول TCP قيمة نافذة الازدحام CongestionWindow بمقدار 2 أي 1 لكل إشعار، ثم يرسل بعد ذلك 4 رزم. والنتيجة النهائية هي أن بروتوكول TCP يضاعف بفعالية عدد الرزم التي ينقلها في كل فترة RTT. يوضّح الشكل التالي النمو في عدد رزم النقل ضمن آلية البداية البطيئة: سبب تسمية أية آليةٍ أسية بأنها "بطيئة" هو أمرٌ محير في البداية، ولكن يمكن تفسيره إذا وُضِع في السياق التاريخي المناسب، إذ سنحتاج إلى موازنة البداية البطيئة بالسلوك الأصلي لبروتوكول TCP وليس بالآلية الخطية. ضع في الحسبان ما يحدث عند إنشاء اتصال وبدء المصدر في إرسال الرزم -أي عندما لا يحتوي المصدر حاليًا على رزمٍ قيد النقل-، فإذا أرسل المصدر العديد من الرزم التي تسمح بها النافذة المعلَن عنها وهو بالضبط ما فعله بروتوكول TCP قبل تطوير البداية البطيئة؛ فعندئذٍ حتى إذا كان هناك قدرٌ كبير نسبيًا من حيز النطاق التراسلي المتاح في الشبكة، فقد لا تتمكن الموجهات من استهلاك رشقة burst الرزم هذه، وكل ذلك يتوقف على مقدار مساحة التخزين المؤقت المتوفرة في الموجّهات، لذلك صُمِّمت البداية البطيئة لإبعاد الرزم بحيث لا تحدث هذه الرشقة. إذًا، تكون البداية البطيئة "أبطأ" بكثير من إرسال بيانات بقيمة النافذة المُعلن عنها بالكامل دفعةً واحدةً على الرغم من أن نموها الأسي أسرع من النمو الخطي. هناك في الواقع حالتان مختلفتان تعمل فيهما آلية البداية البطيئة، أولهما في بداية الاتصال، حيث لا يعرف المصدر في ذلك الوقت عدد الرزم التي سيكون قادرًا على نقلها في وقتٍ معين، وهنا ضع في الحسبان أن بروتوكول TCP اليوم يعمل على كل شيء بدءًا من الروابط بسرعة 1 ميجابت في الثانية وحتى الروابط بسرعة 40 جيجابت في الثانية، لذلك لا توجد طريقة للمصدر لمعرفة سعة الشبكة. تستمر البداية البطيئة في هذه الحالة في مضاعفة نافذة الازدحام CongestionWindow كل فترة RTT حتى حدوث خسارة، وفي ذلك الوقت يؤدي حدوث المهلة إلى انخفاضٍ مضاعف حتى تقسيم نافذة الازدحام على 2. وتُستخدَم في الحالة الثانية البداية البطيئة بصورةٍ أدق قليلًا، حيث يحدث ذلك عند انقطاع الاتصال أثناء انتظار انتهاء المهلة. لنتذكر كيفية عمل خوارزمية النافذة المنزلقة sliding window في بروتوكول TCP وهي على النحو التالي: عند فقدان رزمة ما، فسيكون المصدر قد وصل في النهاية إلى نقطةٍ أرسل عندها أكبر قدرٍ من البيانات التي تسمح به النافذة المعلَن عنها، وبالتالي يتوقف أثناء انتظار الإشعار ACK الذي لن يصل. ستنتهي المهلة في النهاية، ولكن لن تكون هناك رزمٌ قيد النقل بحلول هذا الوقت، مما يعني أن المصدر لن يتلقى أي إشعاراتٍ "لتسجيل وقت" إرسال الرزم الجديدة، وسيحصل بدلًا من ذلك على إشعارٍ ACK واحدٍ تراكمي يُعيد فتح النافذة المعلن عنها بالكامل. سيستخدم المصدر بعد ذلك البداية البطيئة لإعادة تشغيل تدفق البيانات بدلًا من تفريغ بيانات النافذة بالكامل على الشبكة دفعةً واحدةً، كما هو موضح أعلاه. يستخدم المصدرُ البدايةَ البطيئة مرةً أخرى، إلا أنه يعرف الآن معلوماتٍ أكثر مما كان يعرف في بداية الاتصال، حيث يحتوي المصدر على القيمة الحالية والمفيدة من نافذة الازدحام CongestionWindow، وهذه هي القيمة التي كانت موجودةً قبل آخر خسارةٍ للرزمة، مقسومةً على 2 نتيجةً للخسارة، حيث يمكننا تشبيه ذلك بنافذة الازدحام المستهدفة target congestion window. تُستخدَم البداية البطيئة لزيادة معدل الإرسال بسرعةٍ إلى هذه القيمة، ثم تُستخدَم الزيادة الإضافية بعد هذه النقطة، وهنا لاحظ أنه لدينا مشكلةً صغيرةً يجب الاهتمام بها في ضبط التسجيل، حيث نريد أن نتذكر نافذة الازدحام المستهدفة الناتجة عن الانخفاض المضاعف، وكذلك نافذة الازدحام الفعلية التي تستخدمها البداية البطيئة. لمعالجة هذه المشكلة، يقدم بروتوكول TCP متغيرًا مؤقتًا لتخزين النافذة المستهدفة، يسمى عتبة الازدحام CongestionThreshold، والتي تُضبَط مساويةً لقيمة نافذة الازدحام CongestionWindow الناتجة عن الانخفاض المضاعَف، ويُعاد بعد ذلك ضبط نافذة الازدحام CongestionWindow إلى رزمةٍ واحدة، ثم تُزاد برزمةٍ واحدة لكل إشعار ACK مُستقبَل حتى يصل إلى قيمة عتبة الازدحام CongestionThreshold، وعندها تُزاد بقيمة رزمةٍ واحدة لكل فترة RTT. أي سيزيد بروتوكول TCP من نافذة الازدحام كما هو محدَّد في الشيفرة التالية: { u_int cw = state->CongestionWindow; u_int incr = state->maxseg; if (cw > state->CongestionThreshold) incr = incr * incr / cw; state->CongestionWindow = MIN(cw + incr, TCP_MAXWIN); } حيث يمثّل المتغير state حالة اتصال TCP معيّن، ويحدّد الحد الأعلى لمدى حجم نافذة الازدحام المسموح به للنمو. يتتبّع الشكل الآتي كيفية زيادة نافذة الازدحام CongestionWindow الخاصة ببروتوكول TCP ونقصانها بمرور الوقت ويقدّم توضيحًا للتفاعل بين البداية البطيئة والزيادة المضافة / النقص المضاعف. لقد أُخِذ هذا التتبع من اتصال TCP فِعلي، حيث يُظهِر الشكل قيمة نافذة الازدحام الحالية (الخط الملون) مع مرور الوقت، وتمثِّل الرموزُ النقطية المُصمتة أعلى الرسم البياني المهلات الزمنية؛ وتمثل العلامات المقطَّعة أعلى الرسم البياني الوقت الذي ترسَل فيه كل رزمة؛ بينما تمثّل الخطوط العمودية الوقت الذي أُرسَلت فيه الرزمة المعاد إرسالها في النهاية لأول مرة. هناك العديد من الأشياء الواجب ملاحظتها حول هذا التتبع، أولها هي الزيادة السريعة في نافذة الازدحام في بداية الاتصال، وهي تتوافق مع مرحلة البداية البطيئة الأولية، حيث تستمر مرحلة البداية البطيئة حتى يُفقد العديد من الرزم في حوالي 0.4 ثانية من الاتصال، وفي ذلك الوقت تُسوَّى نافذة الازدحام CongestionWindow عند حوالي 34 كيلوبايت، وسنناقش سبب فقد الكثير من الرزم أثناء البداية البطيئة أدناه. يعود السبب وراء تسوية نافذة الازدحام في عدم وصول إشعارات، وذلك نظرًا لحقيقة فقدان العديد من الرزم وعدم إرسال رزمٍ جديدة خلال هذا الوقت، وهذا مُشارٌ إليه من خلال عدم وجود علاماتٍ مُقطَّعة في الجزء العلوي من الرسم البياني. تحدث المهلة في النهاية في حوالي ثانيتين، وتُقسَم في ذلك الوقت نافذة الازدحام على 2 أي تُخفَّض من 34 كيلوبايت تقريبًا إلى حوالي 17 كيلوبايت، وتُضبَط عتبة الازدحام CongestionThreshold على هذه القيمة، وتؤدي البداية البطيئة بعد ذلك إلى إعادة ضبط نافذة الازدحام CongestionWindow إلى رزمةٍ واحدة وبدء الزيادة من هناك. لا توجد تفاصيلٌ كافية في التتبّع لمعرفة ما يحدث بالضبط عند فقدان رزمتين بعد ثانيتين فقط، لذلك ننتقل إلى الزيادة الخطية في نافذة الازدحام التي تحدث بين ثانيتين وأربع ثوانٍ، وهذا يتوافق مع الزيادة المضافة. تُسوَّى نافذة الازدحام CongestionWindow في حوالي 4 ثوانٍ مرةً أخرى بسبب فقدان الرزمة. ويحدث الآن في حوالي 5.5 ثانية ما يلي: تنتهي المهلة الزمنية، مما يؤدي إلى تقسيم نافذة الازدحام على 2، وتخفيضها من حوالي 22 كيلوبايت إلى 11 كيلوبايت، وتُضبَط عتبة الازدحام CongestionThreshold على هذا المقدار. يُعاد ضبط نافذة الازدحام CongestionWindow إلى رزمةٍ واحدة، حيث يدخل المرسل بدايةً بطيئة. تؤدي البداية البطيئة إلى نمو نافذة الازدحام CongestionWindow أسيًا حتى يصل إلى حد الازدحام. تنمو نافذة الازدحام CongestionWindow بعد ذلك خطيًا. يتكرر نفس النمط في حوالي 8 ثوانٍ عند حدوث مهلةٍ أخرى. نعود الآن إلى السؤال عن سبب فقد الكثير من الرزم خلال فترة البداية البطيئة الأولية، حيث يحاول بروتوكول TCP معرفة مقدار حيز النطاق التراسلي المتاح على الشبكة، وهذه مهمةٌ صعبة، فإذا لم يكن المصدر نشطًا في هذه المرحلة، أي إذا زاد فقط من نافذة الازدحام خطيًا على سبيل المثال، فسيستغرق وقتًا طويلًا حتى يكتشف مقدار حيز النطاق التراسلي المتاح، ويمكن أن يكون لهذا تأثير كبير على الإنتاجية المحققة لهذا الاتصال؛ بينما إذا كان المصدر نشطًا في هذه المرحلة، حيث يكون بروتوكول TCP ضمن مرحلة النمو الأسي؛ فإن المصدر يخاطر بأن تسقط الشبكةُ رزمًا بمقدار نصف النافذة. ضع في الحسبان الموقف الذي يكون فيه المصدر قادرًا على إرسال 16 رزمةً بنجاح عبر الشبكة لمعرفة ما يمكن أن يحدث أثناء النمو الأسي، وهذا ما يتسبب في مضاعفة نافذة الازدحام إلى 32. وبفرض أن الشبكة لديها ما يكفي من القدرة على دعم 16 رزمة من هذا المصدر، فستكون النتيجة المحتملة عندئذٍ هي إسقاط الشبكة 16 رزمة من 32 رزمة مرسَلة بموجب نافذة الازدحام الجديدة؛ وهذه هي النتيجة الأسوأ في الواقع، حيث ستُخزَّن بعض الرزم مؤقتًا في بعض الموجّهات. وستزداد حدّة هذه المشكلة مع زيادة ناتج جداء التأخير × حيز النطاق التراسلي للشبكات، حيث يعني جداء التأخير × حيز النطاق التراسلي ذو القيمة 500 كيلوبايت على سبيل المثال أن كل اتصالٍ لديه القدرة على فقدان ما يصل إلى 500 كيلوبايت من البيانات في بداية كل اتصال، وهذا على فرض أن كلًا من المصدر والوجهة ينفذان توسّع "النوافذ الكبيرة". لقد أوجِدت بدائل للبداية البطيئة، حيث يحاول المصدر تقدير حيز النطاق التراسلي المتاح بوسائل أكثر تطورًا، ويُطلق على أحد الأمثلة اسم البداية السريعة quick-start، حيث تتمحور الفكرة الأساسية حول امكانية مرسل بروتوكول TCP لطلب معدل إرسال أولي أكبر مما تسمح به البداية البطيئة، وذلك عن طريق وضع المعدل المطلوب في رزمة التزامن SYN الخاصة به بمثابة خيارٍ من خيارات بروتوكول IP. يمكن للموجهات على طول المسار فحص الخيار وتقييم مستوى الازدحام الحالي على الرابط الصادر لهذا التدفق وتحديد ما إذا كان هذا المعدل مقبولًا أم لا، أو إذا كان المعدل الأخفض مقبولًا، أم يجب استخدام البداية البطيئة القياسية. ستحتوي رزمة SYN بحلول الوقت الذي تصل فيه إلى جهاز الاستقبال إما على معدلٍ مقبول لجميع الموجهات على المسار، أو على إشارةٍ إلى أن موجّهًا أو أكثر من الموجّهات الموجودة على المسار لا يمكنه دعم طلب البداية السريعة. يستخدم مرسل TCP في الحالة الأولى هذا المعدل لبدء الإرسال؛ ويعود في الحالة الثانية إلى البداية البطيئة القياسية، وإذا سُمح لبروتوكول TCP بالبدء في الإرسال بمعدلٍ أعلى؛ فيمكن أن تصل الجلسة بسرعةٍ أكبر إلى نقطة ملء الأنبوب، بدلًا من أخذ العديد من أوقات الذهاب والإياب round-trip times لفعل بذلك. من الواضح أن أحد التحديات التي تواجه هذا النوع من التحسينات في بروتوكول TCP هو أنه يتطلب قدرًا أكبر من تعاون الموجّهات، أكثر مما يتطلبه بروتوكول TCP القياسي، فإذا كان موجهٌ واحد في المسار لا يدعم البداية السريعة، فسيعود النظام إلى البداية البطيئة القياسية، وبالتالي قد يمر وقتٌ طويل قبل أن تتمكن هذه الأنواع من التحسينات من الوصول إلى الإنترنت، ومن المُرجح أن تُستخدَم في بيئات الشبكات المُتحكَّم بها controlled network، مثل شبكات البحث research networks في الوقت الحالي. إعادة الإرسال السريع والاستعادة السريعة لقد كانت الآليات الموصوفة حتى الآن جزءًا من الاقتراح الأصلي لإضافة التحكم في الازدحام إلى بروتوكول TCP، ولكن سرعان ما اُكتشِف أن التطبيق الصلب coarse-grained لمُهلات بروتوكول TCP أدّى إلى فتراتٍ طويلة، توقف خلالها الاتصال أثناء انتظار انتهاء صلاحية المؤقت، ولذلك أُضيفت آليةٌ جديدة تسمى إعادة الإرسال السريع fast retransmit إلى بروتوكول TCP، وتُعَد إعادة الإرسال السريع عمليةً تجريبيةً تؤدي أحيانًا إلى إعادة إرسال الرزمة التي أُسقِطت في وقتٍ أقرب من آلية المهلة العادية، لكنها لا تحل محل المهلات العادية؛ فهي تحسّنها فقط. تُعَد فكرة إعادة الإرسال السريع واضحةً ومباشرة، حيث يستجيب المستقبل بإشعارٍ في كل مرةٍ تصل رزمة بيانات إلى جانب الاستقبال، حتى لو أُقِر فعليًا بهذا الرقم التسلسلي، وبالتالي إذا وصلت الرزمة مخالفةً للترتيب (أي عندما يتعذر على بروتوكول TCP التعرُّف على البيانات المُحتواة بالرزمة لأن البيانات السابقة لم تصل بعد)، فسيعيد بروتوكول TCP إرسال نفس الإشعار الذي أرسله في المرة الأخيرة، ويُطلق على هذا الإرسال الثاني لنفس الإشعار اسم إشعارٍ مكرَّر، فإذا رأى الجانب المُرسل إشعارًا مكررًا، فإنه سيعلم أن الجانب الآخر يجب أن يكون قد تلقى رزمةً مخالفةً للترتيب، مما يشير إلى احتمال فقد رزمة سابقة. وبما أنه من الممكن أيضًا أن تكون الرزمة السابقة قد تأخرت فقط بدلًا من فقدها، فإن المرسل ينتظر حتى يرى عددًا من الإشعارات المكررة ثم يعيد إرسال الرزمة المفقودة، حيث ينتظر بروتوكول TCP عمليًا حتى يرى ثلاثة إشعاراتٍ مكررة قبل إعادة إرسال الرزمة. يوضح الشكل السابق كيف يؤدي وجود إشعاراتٍ مكرّرة إلى إعادة إرسالٍ سريع، حيث تستقبل الوِجهة الرزم 1 و2 في هذا المثال، لكن تضيع الرزمة 3 في الشبكة، وبالتالي ستُرسل الوجهة إشعارًا مكررًا للرزمة 2 عند وصول الرزمة 4، ومرةً أخرى عند وصول الرزمة 5، وهكذا. سنبسّط هذا المثال من خلال التفكير فيما يتعلق بالرزم 1 و2 و3 وما إلى ذلك، بدلًا من القلق بشأن الأرقام التسلسلية لكل بايت، فإذا رأى المرسل الإشعار المكرّر الثالث للرزمة 2 والتي أُرسِلت بسبب حصول المستقبل على الرزمة 6، فسيعيد المرسل إرسال الرزمة 3، ويمكن ملاحظة أنه عند وصول النسخة المُعاد إرسالها من الرزمة 3 إلى الوجهة، فسيرسل المستقبل بعد ذلك إشعارًا تراكميًا بكل الرزم حتى الرزمة 6 مع إشعارٍ بالرزمة 6 أيضًا إلى المصدر. يوضح الشكل السابق سلوك إصدارٍ من بروتوكول TCP مع آلية إعادة الإرسال السريع. من الممتع موازنة هذا السلوك مع السلوك المُناقش سابقًا والذي لم يُطبّق إعادة الإرسال السريع، حيث يجرى هنا التخلص من الفترات الطويلة التي تظل خلالها نافذة الازدحام ثابتة دون إرسال أية رزم. يمثّل الخط الملون نافذة الازدحام CongestionWindow، أما النقطة المصمتة فتمثّل المهلةَ الزمنية؛ في حين تمثّل العلاماتُ المُقطَّعة الوقتَ الذي تُرسَل فيه كل رزمة والخطوط العمودية الوقتَ الذي أُرسَلت فيه الرزمة المُعاد إرسالها في النهاية لأول مرة. هذه التقنية قادرةٌ على القضاء على حوالي نصف المُهلات ذات التطبيق الصلب على اتصال TCP نموذجي، مما يؤدي إلى تحسُّنٍ بنسبة 20% تقريبًا في الإنتاجية مقابل ما كان يمكن تحقيقه بخلاف ذلك. لاحظ أن استراتيجية إعادة الإرسال السريع لا تلغي جميع المُهلات ذات التطبيق الصلب، لأنه لن تكون هناك رزمٌ كافيةٌ قيد النقل لإيصال ما يكفي من الإشعارات المكرّرة بالنسبة لحجم النافذة الصغيرة، وذلك بالنظر إلى ما يكفي من الرزم المفقودة -كما يحدث أثناء مرحلة البداية البطيئة الأولية على سبيل المثال-، حيث تُوقِف خوارزمية النافذة المنزلقة في النهاية المرسل حتى تحدث المهلة الزمنية. ويمكن عمليًا اكتشاف آلية إعادة الإرسال السريع لبروتوكول TCP ما يصل إلى ثلاث رزمٍ أُسقِطت في كل نافذة. هناك تحسينٌ أخيرٌ يمكن إجراؤه، وذلك من خلال استخدام الإشعارات التي لا تزال في الأنبوب لتسجيل وقت إرسال الرزم، وهو عندما تشير آلية إعادة الإرسال السريع إلى الازدحام بدلًا من إسقاط نافذة الازدحام طوال الطريق إلى رزمةٍ واحدةٍ وتشغيل البداية البطيئة. تزيل هذه الآلية المُسماة الاستعادة السريعة fast recovery وبفعالية مرحلة البداية البطيئة التي تحدث بين اكتشاف إعادة الإرسال السريع للرزمة المفقودة وبداية الزيادة المضافة، حيث تتجنب الاستعادة السريعة فترة البداية البطيئة بين 3.8 و4 ثوانٍ في الشكل السابق، وتخفّض بدلًا من ذلك نافذة الازدحام إلى النصف أي من 22 كيلوبايت إلى 11 كيلوبايت وتُستأنَف الزيادة المضافة، وبالتالي تُستخدَم البداية البطيئة فقط في بداية الاتصال، وكلما حدثت مهلةٌ ذات تطبيقٍ صلب، وتتبّع نافذةُ الازدحام نمط الزيادة المضافة / النقص المضاعف في جميع الأوقات الأخرى. خوارزمية TCP CUBIC تُعَد خوارزمية CUBIC أحد أشكال خوارزمية TCP القياسية التي وُصفت للتو، وهي خوارزمية التحكم في الازدحام الافتراضية الموزَّعة في نظام لينكس، ويكون الهدف الأساسي لخوارزمية CUBIC هو دعم الشبكات ذات جداء التأخير × حيز النطاق التراسلي الكبير، والتي تُسمى أحيانًا long-fat networks. تعاني هذه الشبكات من خوارزمية TCP الأصلية التي تتطلب الكثير من الأوقات ذهابًا وإيابًا للوصول إلى السعة المتاحة للمسار من طرفٍ إلى طرف، في حين تفعل خوارزمية CUBIC ذلك لكونها مبادِرةً أكثر في زيادة حجم النافذة، ولكن البراعة هي أن تكون أقوى وأكثر مبادرةً دون أن تؤثر سلبًا على التدفقات الأخرى. تتمثل إحدى الجوانب المهمة في نهج خوارزمية CUBIC في تعديل نافذة الازدحام على فتراتٍ منتظمة، بناءً على مقدار الوقت المنقضي منذ حدوث الازدحام الأخير، مثل وصول إشعار ACK مكرّر، وليس فقط عند وصول إشعار ACK أي الإشعار الأخير تابعًا لزمن RTT. يسمح ذلك لخوارزمية CUBIC بالتصرف بصورةٍ عادلةٍ عند التنافس مع تدفقات RTT القصيرة، والتي لديها إشعارات واصلةٌ بصورةٍ متكررة. الجانب الثاني المهم لخوارزمية CUBIC هو استخدامها دالةً تكعيبيةً cubic function لضبط نافذة الازدحام. يسهُل فهم الفكرة الأساسية من خلال النظر إلى الشكل العام للدالة التكعيبية، والتي تتكون من ثلاث مراحل هي إبطاء النمو slowing growth، وتسوية الارتفاع flatten plateau، وزيادة النمو increasing growth. يُظهر الشكل السابق مثالًا عامًا مُزودًا بجزءٍ إضافي من المعلومات ألا وهو الحد الأقصى المُستهدف لحجم نافذة الازدحام والذي يُحقَّق قبل حدوث الازدحام الأخير، ويُشار إليه باسم Wmax. تكمن الفكرة في أن تبدأ بسرعة مع إبطاء معدل النمو كلما اقتربت من الحد الأقصىWmax، وكن حذرًا، وليكن النمو قريبًا من الصفر عند الاقتراب من الحد الأقصى Wmax، ثم زِد معدل النمو كلما ابتعدت عن الحد الأقصى Wmax؛ أما المرحلة الأخيرة فهي البحث عن حدٍ أقصىWmax جديد قابلٍ للتحقيق. تحسب خوارزمية CUBIC نافذة الازدحام على أنها دالةً بالنسبة للزمن t منذ حدوث الازدحام الأخير كما يلي: حيث: حيث أن C هو ثابت توسُّع scaling constant، وβ هو عامل النقص المضاعف. تضبط خوارزمية CUBIC العامل β بالقيمة 0.7 بدلًا من 0.5 الذي يستخدمه بروتوكول TCP القياسي. وبالنظر إلى الشكل السابق، توصف خوارزمية CUBIC غالبًا على أنها انتقالٌ من دالةٍ مُقعرة concave إلى محدّبة convex، في حين أن دالة بروتوكول TCP القياسية الإضافية محدبةٌ فقط. ترجمة -وبتصرّف- للقسم TCP Congestion Control من فصل Congestion Control من كتاب Computer Networks: A Systems Approach اقرأ أيضًا المقال السابق: أنظمة الأرتال المستخدمة في التحكم بازدحام الشبكات الحاسوبية مشكلة تخصيص الموارد للتحكم في الازدحام في الشبكات الحاسوبية
  17. سنتعرف هنا في هذا المقال على كيفية إنشاء عدة نماذج Forms في برنامج سكريبوس. نماذج PDF صُمِّمت نماذج PDF لتُمكّن للمستخدم الذي يعرضها عبر الإنترنت أو محليًا على الحاسوب، من إضافة بيانات إلى هذا النموذج بعد أن يطبعها المستخدم أو يرسلها عبر البريد الإلكتروني. مكونات نموذج PDF يمكنك إضافة أي شيء تريده إلى ملف PDF مثل النصوص والصور والأشكال، وأي شيء يقدمه برنامج سكريبوس Scribus. وإذا أردت إنشاء نموذج PDF، فيجب أن تتعلم أيضًا كيفية استخدام أدوات PDF الخاصة، إذ توجد هذه الأدوات في شريط أدوات PDF من اليسار إلى اليمين كما يلي: زر ضغط PDF-Button: يُستخدَم الزر لبدء بعض الإجراءات، وسننشئ زرّين في مثالنا أحدهما لطباعة النموذج والآخر لإرساله ليكون بمثابة بريد إلكتروني، ويمكننا تحسين الزر بواجهة نسميها "أيقونة icon". قد يستخدم الزر الواحد ما يصل إلى ثلاثة أيقونات مختلفة، والتي تمكّننا من إظهار تأثير الضغط على الزر وتغيير الأيقونة التي تظهر عندما تتحرك الفأرة فوق الزر. حقل نص Text Field: يُعَد حقل النص مثل إطار نص، ولكن مع إمكانية استخدام الأعداد التي تُمثَّل مثل تاريخ أو التي تحتوي على عدد معين من الأعداد العشرية أو التي تظهر في صورة نسبة مئوية. مربع اختيار Check Box: مربع صغير يُظهِر العلامة [×] عند النقر عليه. سنستخدم في مثالنا هذا المربع للإشارة إلى أن المتقدّم للدورة هو ذكر أو أنثى. مربع تحرير وسرد Combo Box: مربع التحرير والسرد هو قائمة منسدلة فيها خيارات موضوعة ضمن نموذج مطوي، حيث يفتح المستخدم القائمة لتحديد الخيار. مربع قائمة List Box: يُستخدم مربع القائمة أيضًا لتقديم خيارات، ولكن تكون في هذه الحالة بعض العناصر من القائمة على الأقل مرئيةً دائمًا. يمكن للمستخدم التمرير في القائمة، ولكن لا يُعَد فتحها أولًا أمرًا ضروريًا. حاشية نص Text Annotation: هي حقل نص يحتوي ملاحظات تكون غير مرئية في نموذج pdf، حيث يمكنك استخدام الحاشية لإضافة نص إلى النموذج فقط، ولكن يمكنك أيضًا إضافة روابط إلى مواقع في مكان آخر في المستند أو إلى مواقع إلكترونية على الإنترنت. حاشية رابط Link Annotation: يُستخدم للروابط إلى مواقع في المستند، حيث يمكن في هذه الحالة استخدام الإحداثيات الدقيقة بواحدة النقطة Point، وذلك وفقًا لأنظمة القياس المستخدَمة في برنامج سكريبوس Scribus. يمكن أيضًا استخدام روابط لمواقع إلكترونية خارجية. كيفية البدء في إنشاء نموذج PDF يجب مراعاة الميزات التالية عند تصميم نموذج PDF: التخطيط Layout: حاول تصميم نموذجك مسبقًا، حيث يمكنك إضافة إطارات نص وجداول وصور وأشكال، أو أي شيء يمكن أن يقدمه برنامج سكريبوس. ستُستخدَم هذه العناصر لتمثيل النمط الأساسي الذي تستخدمه شركتك أو مؤسستك، وسيكون إظهار المعلومات المتوقَّعة من المستخدم ضمن النموذج أمرًا ضروريًا. حقول PDF: يجب استخدام الحقول المتاحة التي يقدمها سكريبوس، والتي لها أنواع متعددة. الإعداد Set up: يجب عليك التعرف على التعديلات المتعددة الممكنة على الحقول، ويمكنك إعداد الحقول في نوافذ متعددة. عمليات التحقّق Validations: يمكن ضبط حدود للمدخلات التي تُدخَل في الحقل، إذ يمكنك تقييد إدخال عدد بحدود معينة على سبيل المثال، وهذا ما سنطبّقه في مثالنا. العمليات الحسابية Calculations: يمكنك إعداد عملية حسابية معينة للحقل، حيث تكون الاحتمالات هي جمع محتويات حقلين أو أكثر أو ضربها وما إلى ذلك، كما يمكن أيضًا حساب القيمة العليا أو الدنيا، أو حساب متوسط القيم لعدد كبير من الحقول، ويمكن أيضًا إجراء حسابات أخرى أكثر تعقيدًا ولكنها تتطلب برمجة لذلك. البرمجة Programming: إذا أردت أن يكون نموذجك ذكيًا، فيجب تعلّم البرمجة باستخدام لغة JavaScript، وهي لغة برمجة لا تُستخدَم في نماذج PDF فقط، ولكن على مواقع الويب أيضًا. إن لم تتعرّف على البرمجة سابقًا، فتوقع أن تستغرق بضعة أشهر لتصبح ماهرًا فيها إلى حد ما. ستقدّم لك الفقرة التالية بعض التلميحات والنصائح عن مكان العثور على مزيد من المعلومات حول لغة JavaScript. لغة JavaScript Java: هي لغة برمجة سوّقت لها شركة Sun Microsystems في عام 1995، حيث أمضى المطورون المسؤولونن جيمس جوسلينج James Gosling ومايك شيريدان Mike Sheridan وباتريك نوتون Patrick Naughton، حوالي أربع سنوات لتطوير هذه اللغة. تقول القصة أن هؤلاء المطورين شربوا كثيرًا من القهوة، وهو شيء لا بد أن تفعله عندما تبدأ في البرمجة، حيث جاءت العلامة التجارية للقهوة التي شربوها من جزيرة Java، ومن هنا جاء اسم هذه اللغة وأيقونتها التي تعرض فنجان قهوة مُصمَّم. أخذت لغة JavaScript الاصطلاحات وتعريفات التسمية المتعددة من لغة Java ولكن لديها إعداد مختلف حتى الآن، وقد استُخدِمت هذه اللغة في الأصل من جانب العميل في المتصفحات، فإذا تصفحت الإنترنت وألقيت نظرةً خاطفةً على صفحة يقدمها لك الخادم، فأنت العميل. لقد طوَّر هذه اللغة براندون فينش Brendan Finch في عام 1995، والذي عمل في شركة نتسكيب Netscape التي صمَّمت متصفحًا مشهورًا نافس إنترنت إكسبلورر Internet Explorer منافسةً شديدةً لفترة طويلة. لغة JavaScript لبرامج Acrobat: وضعت شركة البرمجيات أدوبي Adobe معيار PDF، حيث يُحتمَل أن تجد برنامج Acrobat Reader على حاسوبك الخاص، لأنه قارئ لمستندات PDF، ويُستخدَم على نظاق واسع. تبذل هذه الشركة جهودًا كبيرة لشرح استخدام لغة JavaScript، لأنها الخيار الأفضل في نماذج PDF. برنامج سكريبوس ولغة Javascript: يصعُب إلى حد ما معرفة مدى "فهم" سكريبوس لمقدار تعلّق لغة JavaScript بالنماذج. نموذج PDF يُظهِر الشكل الآتي النموذج الذي سنبنيه خطوةً بخطوة كما يظهر في سكريبوس، وتُعَد الدوائر الحمراء مجرد علامات للإشارة إلى عناصر النموذج التالية: حقول النص Text fields. مربعات الاختيار Check Boxes. مربعات التحرير والسرد Combo Box. حقل الحاشية النصية Annotation field. الأزرار Buttons. كل شيء آخر -مثل الترويسة والخطوط- هي كائنات سكريبوس عادية. هناك أيضًا بعض الإطارات النصية البسيطة مثل الإطارات التي تحتوي على M وF، والتكلفة باليورو Cost (euro)‎، وعدد المتقدمين Nr attending، وكذا التكلفة الإجمالية باليورو Totals (euro)‎، وهي ببساطة تسميات لعناصر النموذج المجاورة لها. يوضّح الشكل التالي النموذج كما يظهر في برنامج Adobe Reader باستثناء الأزرار، إذ يُظهِر اللون الأزرق الفاتح المناطق التي يمكن إدخال بعض المدخلات فيها ضمن النموذج. تُعَد الكلمة Name مدخلةً افتراضيةً تشير أيضًا إلى نوع الدخل، لذلك يمكنك حذفها وإدخال اسمك لملء هذا النموذج. يجب أن تدرك أنه لا يمكن اختبار النموذج أثناء تصميمه ضمن سكريبوس، أي لا تعمل جميع عناصر النموذج في سكريبوس، لذلك يجب عليك اتخاذ الخطوات التالية في كل مرة تنفّذ فيها خطوةً في عملية التصميم وتريد التحقق منها: احفظ النموذج في سكريبوس مثل ملف sla. صدّر النموذج بتنسيق PDF. ابحث عن ملف PDF الناتج وافتحه باستخدام برنامج Adobe Reader. اختبر النموذج. إذا وجدت أي أخطاء أو أردت متابعة التصميم، فيجب أن تغلق Adobe Reader وتعود إلى بيئة سكريبوس. أجرِ التغييرات التي تريدها أو وسّع النموذج. احفظه مرةً أخرى في سكريبوس، وصدّر ملف PDF جديد واستبدل إصدار PDF السابق به. قد يبدو هذا أمرًا بديهيًا، ولكن في بعض الأحيان يمكن نسيانه، وهو ما يؤدي إلى إنشاء إصدارات مختلفة متعددة، وبالتالي ترتبِك أثناء محاولتك لمعرفة النسخة النهائية "الحقيقية". كرّر هذه الخطوات كلما كان ذلك ضروريًا إلى أن يعمل النموذج تمامًا كما تخيلته. ستعتاد على عناصر النموذج المختلفة مع مرور الوقت، ولن تجد أن إعادة فحص ملف PDF بعد كل تغيير أمرًا ضروريًا. التخطيط Layout سننشئ نموذج تسجيل وهمي لنوع معين من التدريب لمدرسي اللغة الإنجليزية كلغة ثانية EFL باستخدام منهجية معينة، وهنا اتبع الآتي: جهّز مستندًا جديدًا بحجم A4 أو رسالة Letter. تحتاج بعض إطارات النص. نضع اسم المعهد في الأعلى، ثم نطبّق الألوان لاحقًا، إذ سنأخذ اللون من لون واجهة الزر. يمكن تصميم أيقونة الأزرار باستخدام برنامج رسم بسيط مثل الرسام (إن استخدمت نظام تشغيل ويندوز). سنستخدم في الزاوية اليسرى السفلية إطارين نصيين صغيرين يحويان إما ذكر M(ale)‎ أو أنثى F(emale)‎. توجد على اليمين ثلاثة إطارات نصية التي تحتوي Cost (euros)‎ وNr attending وTotals (euro)‎، ويكون ارتفاع الإطارات 5.5 مم تقريبًا، والخط Arial وحجمه 12 نقطة. سنخفّض النص في الإطارات قليلًا، مما يُعطي مظهرًا أفضل. انقر على قسم الأعمدة وتباعد النص Columns & text distances في تبويب نص Text من نافذة خصائص Properties، أو من نافذة خصائص النص في الإصدار 1.5.7 من برنامج سكريبوس، وطبّق تباعدًا 1 مم من الأعلى. سنضيف خطين سميكين هنا، وستظهر لنا النتائج حتى الآن مثلما في الشكل الآتي. لا تُعَد مواضع الأدلة Guides مهمة جدًا، حيث يمكنك تقدير مواضعها وسيفي ذلك بالغرض. لاحظ أن الهدف الرئيسي من الأدلة هو المساعدة في محاذاة الكائنات المختلفة، وإنشاء بعض التوازن ضمن التخطيط. إضافة عناصر نموذج PDF الخطوة التالية هي إضافة عناصر نموذج PDF والتي هي: سبعة حقول نصية ومربعي اختيار ومربع تحرير وسرد وزرّين، ولكل من هذه العناصر طريقته الخاصة: حقل النص Text field: يمكن للشخص الذي يستخدم النموذج ملء المعلومات في حقل نصي، ولكن سنضيف في مثالنا نصًا افتراضيًا يوضّح للمستخدم المعلومات المتوقعة. سترى في الشكل الآتي حقلين نصيين مكتملين على اليسار وحقلًا آخر يجب ملؤه بنص مناسب، حيث يمكنك كتابة النص مباشرةً في حقول النص، مثل الكتابة في إطارات النص النمطية، وبعد ذلك حدّد حقلًا نصيًا واستخدم محرّر القصص Story editor في سكريبوس لتحرير محتويات الإطار. مربعات الاختيار Check boxes: يوجد حقلان يمكن ملؤهما بعلامة، إذ نستخدم هذين الحقلين للدلالة على جنس المتقدّم. لا يمكن أن يكون المتقدّم ذكرًا وأنثى في الوقت نفسه، لذلك يجب أن يسمح النموذج بوضع علامة واحدة فقط في أحد مربعات الاختيار. سنتأكد من أن وضع علامة في أحد المربعات يزيل العلامة من المربع الآخر باستخدام البرمجة. قد تكون لدينا قائمة بالخيارات غير الحصرية التي يمكن للمستخدم الاختيار من بينها في بعض الحالات، وبما أنه سيكون هناك أكثر من خيار واحد، فلن نحتاج إلى هذه البرمجة التي تقيّد الاختيار. مربع التحرير والسرد Combo box: سنملأ مربع التحرير والسرد بعدد من خيارات التدريب، حيث سيملأ برنامج صغير هذا المربع مؤقتًاعندما ينقر المستخدم عليه، وستُملَأ التكلفة في أحد حقول النص بمجرد أن يختار المتقدّم التسجيل في تدريب معين، ويتطلب ذلك أيضًا قليلًا من البرمجة. ستُدخَل النتيجة فقط عندما ينقر المستخدم في حقل آخر، إذ سنجبر المستخدم على ذلك عن طريق ملء خانة عدد المتقدمين بالقيمة صفر، ولهذا يجب على المستخدم تغيير ذلك، وبالتالي سينفّذ البرنامج، ويمكنك تطبيق ذلك بطرق أخرى أيضًا. الأزرار Buttons: يمكن البدء بإجراء من خلال النقر على زر. الزر الأشهر الذي نستخدمه يوميًا هو زر موافق أو OK، إذ يسمح لنا برنامج سكريبوس أيضًا بإضافة مثل هذا الزر إلى النموذج. نجد خلف زر طباعة النموذج "Print From" جزء البرنامج الذي ينفّذ هذا الإجراء. لا يحتاج زر إرسال النموذج أيَّ شيفرة برمجية لأنه يمكن ضبط هذا الإجراء في نافذة ضمن برنامج سكريبوس. الأحداث Events يُعَد النقر على زر أو النقر في حقل نصي حدثًا إذا ملأت حقلًا نصيًا، أو إذا اخترت من مربع قائمة أو مربع تحرير وسرد ثم نقرت في حقل آخر، فهذا يسمى أيضًا. يتصل الحدث بحقل نصي أو زر أو أي عنصر تحكم آخر في نموذج PDF، ويوفّر كل حدث يمكن اكتشافه إمكانية إضافة جزء من شيفرة برمجية إليه. سنضيف في نموذجنا زرًا لطباعة النموذج عندما ينقر المستخدم عليه. وسنستخدم حدث mouse down (أي النقر على زر الفأرة الأيسر عند وضع مؤشرها على الزر) لبرمجة الجزء الذي سينفّذ هذه المهمة، بحيث إذا نقر المستخدم على الزر عشر مرات فرضًا، فسيُطبَع النموذج عشر مرات. تسمَّى طريقة البرمجة هذه بالبرمجة المُقادة بالأحداث، فجميع أنظمة التشغيل المتوفرة حاليًا للحواسيب مثل Apple OS X وOS / 2 وLinux وWindows وغيرها مبنية على هذا المبدأ، ولا بد أنك على دراية بهذه الطريقة، وستتعرّف الآن على الجانب الخلفي من هذه التقنية وتبرمجها بنفسك. ارسم حقل pdf نصي على يسار النموذج. اضبطه على النحو التالي: نوع الخط Arial وحجمه 12 نقطة، تباعد من الأعلى 1 مم، العرض تقريبًا 60 مم والارتفاع 5.5 مم. انسخ هذا الحقل ثلاث مرات (باستخدام Ctrl + C ثم Ctrl + V من لوحة المفاتيح في نظام Windows)، ثم ضَع هذه النسخ أسفل بعضها البعض بدقة. لاحظ أنه يمكنك أيضًا استخدام قائمة عنصر Item ثم مضاعفة/تحويل ثم نُسخ مطابقة Multiple Duplicate لإنشاء هذه النسخ، إما عن طريق نسخ سلسلة منها مع تباعد رأسي معين، أو إنشاء عدد من الصفوف مع التباعد الذي ضبطته. انقر على حقل النص الأول بزر الفأرة الأيمن واختر من القائمة المنبثقة تحرير نص Edit text باستخدام محرّر القصص. ثم يفتح محرر القصص، حيث يمكنك كتابة النص. حرّر النص وأغلق نافذة محرّر القصص، ثم سيظهر النص في حقل النص. كرّر هذا الإجراء لإضافة النصوص إلى الحقول الأربعة التالية: الاسم Name والعنوان Address والرمز البريدي Postal code والمدينة City. ارسم مربعي الاختيار بجوار إطارات النص التي تقرأ M وF على التوالي. نحتاج إلى عناصر تحكم pdf التالية على الجانب الأيمن من النموذج: مربع التحرير والسرد في الأعلى. ثلاثة حقول نصية تحت مربع التحرير والسرد وعلى يمين الإطارات النصية الثلاثة الموجودة سابقًا. ثم زرين أسفل هذه المجموعة. يوضّح الشكل التالي النموذج كما يجب أن يبدو عليه حتى الآن. لاحظ أن الإطار االمحدّد باللون الأحمر غير مذكور، ولكنه إطار حاشية نصية Text Annotation. وضع أيقونة Icon على الزر يمكن تحسين الأزرار باستخدام صورة صغيرة عليها، إذ نسمّي هذه الصورة أيقونة، أو يمكنك بدلًا من ذلك إضافة نص قصير إلى واجهة الزر فقط. تُعَد إضافة نص إلى زر في سكريبوس مثل إضافة نص إلى حقل نصي. سنرسم هذه الأيقونة في مثالنا كما يلي: استخدم برنامج رسم مثل برنامج الرسام الخاص بنظام Windows. حدّد حجم لوحة الرسم الذي يجب أن يتناسب مع حجم الزر. يجب أن يكون القياس 200‎ x 100 بكسل أكثر من كافٍ. وستجد الحجم في أيّ برنامج ضمن الخيار خصائص من قائمة ملف. سيسمح لك برنامج الرسم بإضافة نص، واستخدام خط مثل Wingdings أو Symbol لإضافة إشارات خاصة مثل لوحة مفاتيح الحاسوب والسهم والمغلّف. أضف بعض ألوان للخلفية وبعض الخطوط السميكة مع تظليل أغمق قليلًا، فهذا يعطي إحساسًا بتأثير الظل. احفظ رسم الأيقونة وانتقل إلى سكريبوس. إعداد الحقول المهمة التالية هي إعداد جميع الحقول من خلال نافذة خصائص الحقل Field Properties. لنبدأ بأحد الأزرار: انقر نقرًا مزدوجًا على الزر الموجود على اليمين، لتفتح نافذة خصائص الحقل. أسنِد اسمًا لهذا الحقل. إذا تخطيت ذلك فإن جميع عناصر التحكم في النموذج ستأخذ اسمًا عامًا يتكون من نوع الحقل ورقم، حيث لن يكون هذا الاسم واضحًا جدًا. لذلك انتقل إلى تبويب المظهر Appearance وأسند اسمًا يوضّح الغرض من الحقل. اختر الخيار لا طباعة No Print في قسم الوضوح Visibility. وإذا قرر المستخدم طباعة النموذج بعد ذلك، فلن تكون طباعة الأزرار أمرًا ضروريًا. حدّد التبويب خيارات Options واختر نوع الزر عادي Normal. ثم تفتح نافذة فتح Open، وستحدّد واجهة الزر (الرمز أو الأيقونة) التي جهّزتها للتو. ضع في بالك أنه يمكنك استخدام ما يصل إلى ثلاثة أيقونات: عادي Normal (المرئي في معظم الأحيان)، وPressed الذي ظهر عند النقر على الزر، وتدفق Roll over الذي يظهر عندما يحوم مؤشر الفأرة فوق الزر. وقد استخدمنا في مثالنا أيقونةً واحدةً فقط. انقر على تبويب إجراء Action وحدّد النوع Type سلّم النموذج Submit form. اكتب رابط url في خانة تسليم للرابط Submit to url. يوضّح الشكل التالي كيفية استخدام عنوان البريد الإلكتروني، حيث سيحاول برنامج Adobe Acrobat Reader فتح عميل البريد على حاسوب المستخدم. وإذا فشل في ذلك فستظهر نافذة مع بعض الخيارات. اكتمل إعداد الزر الآن. يمكن تحسين الزر الأيسر الذي يعالج طباعة النموذج باستخدام أيقونة بنفس الطريقة السابقة. لكننا استخدمنا محرر القصص لإضافة نص إلى الزر. إذا استخدمت لون خلفية للزر الذي يرسل نتائج النموذج عبر البريد الإلكتروني تمامًا كما فعلنا، فيمكنك استخدام أداة سكريبوس قطارة العين Pipet لإضافة هذا اللون إلى ألوان المستند واستخدامه لتحسين عنوان النموذج والخطين اللذين أضفناهما سابقًا. اصطلاحات التسمية Naming Conventions تمكّننا الأسماء المُسنَدة للحقول في "الجزء الخلفي" من النموذج من أداء مهام معينة من خلال أجزاء الشيفرة البرمجية، حيث يجب ألّا يكون جانب المستخدم (الجزء الأمامي) وجانب المبرمج (الجزء الخلفي) من النموذج متماثلين. تُعَد الأسماء العامة مرهقةً عمليًا، لأنها تُستخدم أيضًا لتقديم نتائج النموذج عند إرسالها عن طريق البريد الإلكتروني، ولذلك يُفضَّل أن تحصل على نتيجة كما يلي: table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } اسم الحقل الدخل G. Bruijnes Name Langstraat 6 Address ‎1234 AA Postal code Stadje City ON Female وتكون النتيجة الأقل وضوحًا بأسماء عامة كما يلي: اسم الحقل الدخل G. Bruijnes Text22 Langstraat 6 Text37 ON Text42 يمكن أن تختلف لغة التسميات عن اللغة المستخدمة في النموذج، لأن النتائج قد يعالجها موظفون لا يتحدثون الإنجليزية، ولكن هذا ليس ضروريًا ويمكنك استخدام أي شيء تريده. يستخدم المبرمجون غالبًا نوعًا مختلفًا من التسميات يسمَّى الترميز المجري Hungarian Notation، حيث يُذكَر نوع الكائن في الاسم (نسمي الحقل كائنًا أو عنصر تحكم)، لذلك تكون اللغة الإنجليزية في هذه الحالة هي اللغة السائدة وتكون أسماء الحقول كما يلي: اسم الحقل chkFemale txtAcqAddress btnPrintForm توضّح البادئة chk أننا نتعامل مع مربع اختيار، وستشير txt إلى حقل نصي، وbtn إلى زر. إعداد الحقول الأخرى يمكنك إعداد الحقول بالنقر المزدوج عليها لتظهر نافذة خصائص الحقل. يوضح الجدول التالي جميع المعلومات الضرورية لأنواع الحقول الأخرى: عنصر التحكم التبويب في نافذة خصائص الحقل الإعداد Checkbox (M)‎ المظهر Appearance الاسم: M Checkbox (M)‎ خيارات Options الإعداد الافتراضي غير مُحدَّد Checkbox (F)‎ المظهر Appearance الاسم: F Checkbox (F)‎ خيارات Options الإعداد الافتراضي غير مُحدَّد (معظم المعلمين من الإناث) Combo box المظهر الاسم: Training الحقل الموجود بجوار التكلفة Cost المظهر الاسم: Cost الحقل الموجود بجوار التكلفة Cost نسّق Format الملف منسّق كـ: عدد Number، كسور عشرية: 0، استخدم رمز العملة Use Currency symbol: دون تحديد، التنسيق: 9,999.99 الحقل الموجود بجوار التكلفة Cost تحقّق Validate يجب أن تكون القيمة أكبر أو يساوي: 1 الحقل الموجود بجوار التكلفة Cost في محرّر القصص Story Editor: الدخل Input، والمحاذاة Alignment الدخل: 0، والمحاذاة: إلى اليمين الحقل الموجود بجوار التكلفة الإجمالية Totals المظهر الاسم: Totals الحقل الموجود بجوار التكلفة الإجمالية Totals نسّق Format الملف منسّق كـ: عدد Number، كسور عشرية: 0، استخدم رمز العملة Use Currency symbol: دون تحديد، التنسيق: 9,999.99 إذا أضفت حقل حاشية نصية النوع Type وصلة شبكية خارجية External weblink إذا أضفت حقل حاشية نصية الموقع Destination أي موقع إالكتروني www.yourwebsite.com مثلًا وبذلك يكتمل إعداد الحقول. إضافة البرمجة (أجزاء الشيفرة البرمجية) نستخدم لغة JavaScript لأتمتة أحداث معينة. ليست هناك حاجة لأن تكون لديك أي خبرة برمجية محددة لتتمكن من فهم أجزاء الشيفرة التي سنستخدمها. ;إذا أردت إنشاء المزيد من نماذج pdf بنفسك، فلن يكون هناك مفر، إذ يجب عليك تعلم لغة JavaScript. مربعات الاختيار check boxes معظم المدرسين من الإناث، ولذلك حدّدنا مربع الاختيار F افتراضيًا. انقر نقرًا مزدوجًا على مربع الاختيار M. حدد التبويب الإجراء Action في نافذة خصائص الحقل. اختر النوع Type: جافاسكربت JavaScript. اختر الحدث Event: الفأرة للأعلى Mouse up. انقر على زر تحرير Edit. انسخ جزء الشيفرة التالي: var v = this.getField("F"); v.value="Off"; يقع جزء الشيفرة في حدث الفأرة للأعلى Mouse up في مربع الاختيار M. إذا نقرت على مربع الاختيار M، فستوضَع علامة الاختيار في هذا المربع، وهذا يعني أنه يجب إزالة علامة الاختيار المعيارية في مربع الاختيار F. أشرنا أولًا إلى الحقل F في هذا الجزء من الشيفرة، ثم يمكننا عند تحقّق ذلك أن نحوّل قيمة الحقل F إلى "إيقاف Off". اختر قائمة ملف File ثم حفظ وإغلاق Save and Exit في قائمة المحرر عند الانتهاء. ثم سترى جزء الشيفرة في نافذة خصائص الحقل. انقر على الزر "موافق" في نافذة "خصائص الحقل Field Properties". انقر نقرًا مزدوجًا على مربع الاختيار F. حدد التبويب الإجراء وأضف الإعداد نفسه الذي أجريته مع مربع الاختيار M. جزء الشيفرة مختلف قليلًا. قد يرتكب المستخدم خطأً أو قد يغير رأيه، لذلك يجب أيضًا أن نكون قادرين على إزالة العلامة من مربع الاختيار M: var m = this.getField("M"); m.value="Off"; مصطلحات برمجية يعني الاختصار var متغيرًا variable، فالمتغير هو اسم عشوائي نستخدمه للإشارة إلى شيء ما. وتشير المتغيرات في أجزاء الشيفرة السابقة إلى الحقول ذات الأسماء M وF على التوالي، وهي الحقول التي وضعناها في النموذج بجوار حقلي النص M(ale)‎ وF(emale)‎؛ بينما Value هو خاصية الكائن، والكائن هو الحقل، حيث لكل كائن خصائص محددة تمامُا كما هو الحال في الحياة الواقعية، حيث تمتلك السيارة خاصية اللون Color وخاصية عدد الأبواب NumberOfDoors على سبيل المثال. يقع الحدث عندما يحدث شيء مثل النقر بالفأرة على زر أو تحريك الفأرة فوق كائن مثل حقل نص أو مربع اختيار. لاحظ أن المتغير v يوضح أن اسم المتغير في لغة JavaScript لا يجب أن يتطابق مع اسم الحقل. أجزاء الشيفرة لمربع التحرير والسرد يستخدم مربع التحرير والسرد جزأين برمجيين، حيث يكون الجزء الأول نشطًا عندما ينقر المستخدم على المربع ويزوّده بقائمة الدورات الممكنة، وبالتالي تقديم عدد من الخيارات. يجب أن ننفّذ ذلك في وقت تحميل النموذج في قارئ PDF، ولكن هذا خارج نطاق هذا المقال، لذلك سنستخدم الطريقة التالية: انقر نقرًا مزدوجًا على مربع التحرير والسرد. حدّد تبويب الإجراء Action. اختر النوع: جافاسكربت JavaScript. اختر الحدث: On focus. انقر على الزر تحرير وانسخ جزء الشيفرة التالي: var f = this.getField("Training"); f.editable = false; f.doNotSpellCheck = true; f.commitOnSelChange = true; f.setItems( ["Choose course!", "Basic", "Intermediate", "Advanced"]); يمكن منع حدوث تغيير في إعدادات الحقل باستخدام شيفرة برمجية، إذ يمكننا أن نحرم المستخدم من إمكانية ملء تدريب غير موجود من خلال f.editable = false;‎. وإذا سمحنا بالتعديل، فسيصبح الأمر برمته أكثر تعقيدًا، لأنه يجب أيضًا التحقق من معلومات المستخدم المتوفرة، وقد عطّلنا التدقيق الإملائي أيضًا لأننا سنضيف أسماء التدريبات الصحيحة بأنفسنا. سيُملَأ مربع التحرير والسرد بأربعة احتمالات، أولها اختيار الدورة، حيث يشير المستخدم إلى المعلومات المطلوبة. تمثّل المدخلات الثلاثة الأخرى الدورات التدريبية المتاحة. ويمكنك إضافة ما تريد، ولكن يجب بعد ذلك تعديل جزء الشيفرة الآتي: اختر حفظ وإغلاق في قائمة ملف ضمن المحرّر. حدّد الحدث On blur، حيث يشير هذا الحدث إلى النقر بالفأرة في المربع أو استخدام مفتاح Tab من لوحة المفاتيح لينتقل المؤشر إلى مربع التحرير والسرد، بعد ذلك انسخ جزء الشيفرة التالي: var t = this.getField("Training"); var c = this.getField("Cost"); switch (t.value){ case 'Basic': { c.value=250; } break; case 'Intermediate': { c.value=275; } break; case 'Advanced': { c.value=325; } break; default: { c.value=0; } } يشير المتغير c إلى حقل النص الذي اسمه Cost ويمثّل التكلفة. يُكتَب المبلغ في هذا الحقل اعتمادًا على الاختيار الذي أُجري في مربع التحرير والسرد، وهناك قيمة افتراضية هي 0، وهي صالحة طالما لم يُحدَّد أي خيار. العمليات الحسابية Calculations يجب أن نجري العملية الحسابية اللازمة لجداء عدد المتقدمين بتكلفة الدورة كما يلي: انقر على الحقل خلف إطار النص المكتوب عليه Totals. حدّد تبويب احسب Calculate. انقر فوق زر اختيار "القيمة هي Value is the" واختر "الناتج product" من القائمة. انقر على الزر "التقط Pick"، واحرص على أن تكون الحقول Cost وNrAt في قسم الحقول المحدَّدة كما في الشكل الآتي. أغلق جميع النوافذ بزر موافق. اختبار النموذج احفظ عملك في سكريبوس. صدّر الملف بصيغة pdf. احفظ الملف مرةً أخرى في سكريبوس، وذلك لحفظ التغييرات التي أجريتها على طريقة تصدير سكريبوس للملف بصيغة pdf. ابحث عن ملف pdf على القرص الصلب وافتحه باستخدام برنامج Acrobat Reader أو أي قارئ PDF آخر. تحقق مما إذا كان كل شيء يعمل بصورة صحيحة. إذا كانت التغييرات مطلوبة فأغلق ملف pdf، وأجرِ تغييرات في بيئة سكريبوس وكرّر الخطوات السابقة. لننفّذ هذه الخطوات معًا كما يلي: انتقل أولًا إلى سكريبوس، وافتح القائمة ملف File واختر حفظ Save. ارجع إلى القائمة ملف واختر تصدير Export، ثم اختر حفظ مثل PDF. ما عليك سوى إجراء تغييرات في بضع تبويبات فقط هي: التبويب التغيير الإعداد عام General إخراج للملف: Output to File: استخدم اسمًا وموقعًا يسهّلان عليك العثور على الملف بعد ذلك. عام General التوافق Compatibility الإصدار PDF 1.4 (Acrobat 5)‎ على الأقل خطوط Fonts الخطوط للتضمين Fonts to embed اضغط على ضمّن الكل Embed all لون Color الإخراج بهدف: Output Intended For: شاشة / ويب Screen / Web انقر الآن على زر حفظ Save. افتح مستكشف Windows أو أي مدير ملفات آخر مناسب لنظام التشغيل الذي تستخدمه مثل نوتيلوس Nautilus في نظام أوبونتو Ubuntu، أو فايندر Finder على آبل Apple. ابحث عن ملف pdf وافتحه، إذ يمكنك تشغيل برنامج Adobe Reader وفتح الملف منه. قد يعرض القارئ تحذيرًا، وهذا التحذير واضح، فالنموذج قادر على إرسال البيانات بالبريد الإلكتروني. تحقق مما إذا كان كل شيء صحيحًا، وانقر على مربع التحرير والسرد، بعدها حدّد دورةً تدريبية، واختبر أيضًا عمل زر طباعة النموذج. إذا ثُبِّت عميل بريد إلكتروني مثل أوتلوك Outlook لنظام التشغيل ويندوز، فستُعالَج نتائج النموذج مباشرة. بينما في حالة وجود خدمة بريد عبر الإنترنت مثل ياهو Yahoo أو جيميل Gmail، فيجب حفظ ملف pdf أولًا -ويمكن ذلك فقط مع الإصدار 9 من Adobe Reader أو الإصدارات الأحدث-، ثم يمكن إرسال النتائج عبر البريد الإلكتروني. يمكنك اختيار عدة أنواع من الملفات عند الحفظ مثل: النوع الوصف النوع ‎ .fdf تنسيق ملف نموذج Adobe، حيث تُحفَظ البيانات الموجودة في الحقول فقط. يجب في هذه الحالة أن يكون لدى المتلقي أيضًا نسخة من النموذج الأصلي، ثم تُضاف البيانات المرسَلة عبر البريد الإلكتروني تلقائيًا إلى النموذج. النوع ‎ .xfdf تنسيق ملف النموذج الموسَّع extended form file format القادر على إظهار مزيد من الخيارات. النوع ‎ .xml تنسيق ملف قادر على عرض البيانات في الحقول المناسبة على صفحة ويب. النوع ‎.txt تُحفَظ البيانات في هذه الحالة كملف نصي بسيط يمكن فتحه وقراءته باستخدام أي معالج أو محرّر نصوص متوفر على نظامك. النتائج تبدو النتائج كملف FDF كما يلي: نتائج النموذج تُطبَع عادةً جميع الحقول حقلًا تلو الآخر. وقد وضعنا كل حقل على سطر خاص به من أجل الوضوح في الشكل السابق، إذ يجب ترتيبها بنفس الترتيب الذي وُضِعت فيه ضمن النموذج، وإذا استخدمت ترتيبًا مختلفًا، فسينعكس ذلك على النتيجة. لا ينبغي أن يمثل ذلك مشكلةً كبيرةً جدًا بسبب إضافة أسماء الحقoول أيضًا إلى الملف، وهذا سبب وجيه لتسمية الحقول الخاصة بك بعناية وعدم استخدام الأسماء المعيارية. يمكن تغيير ترتيب الحقول في بيئة سكريبوس، وهنا استخدم تبويب X وY وZ في نافذة الخصائص لتغيير الترتيب باستخدام قسم مستوى Levels، كما في الشكل السابق. سترى رقم الحقل بالتناوب عند تحديد الحقل، ويمكن أيضًا العثور على اسم الحقل ضمن هذا التبويب في الجزء العلوي، إذ يمكنك تغيير الاسم من هنا أيضًا. ترجمة -وبتصرّف- للمقال A Brief Tutorial on Forms لصاحبه Gerrit Bruijnes. اقرأ أيضًا كيفية بدء استخدام برنامج سكريبوس Scribus كيفية إنشاء أشكال معقدة ذات زوايا دائرية في برنامج سكريبوس Scribus خط الشبكة الأساسي Baseline Grid في برنامج سكريبوس كيفية إنشاء رمز RSS Feed في برنامج سكريبوس Scribus كيفية إنشاء لافتة نيون Neon Sign في برنامج سكريبوس Scribus
  18. سنتحدث في هذا المقال عن كيفية تطبيق تأثيرات فنية على الصور في برنامج سكريبوس Scribus الذي يحتوي على تأثيرات متنوعة، مثل السطوع والتدرج الرمادي، وتأثير الأشعة السينية والأبيض والأسود، وغيرها الكثير، مما يعطي جاذبية للصور، كما سنتحدث عن كيفية إنشاء إطار صورة بحواف ضبابية في سكريبوس Scribus باستخدام تدرج لوني شعاعي Radial Gradient مع تغيير تعتيم Opacity وتظليل Shade التعبئة اللونية كيفية تطبيق تأثيرات فنية على الصور في سكريبوس يمكنك إنشاء تأثيرات صور رائعة في برنامج سكريبوس Scribus دون الحاجة إلى تعلم برنامج جيمب GIMP أو فوتوشوب Photoshop. لا يقدِّم هذا المقال دليلًا شاملًا لتأثيرات الصور في سكريبوس، وإنما يقدِّم بعض الأساسيات وبعض التأثيرات المحدَّدة التي يمكنك تطبيقها، حيث يفترَض أنك تعرف بالفعل كيفية وضع صورة في إطارها، والتعامل مع الإطار لتتناسب الصورة معه. الإعداد يجب أولًا أن تنزِّل الصورة التي سنعمل عليها، حيث يمكنك استخدام التأثيرات على أي صورة تريدها، ولكن هذه الصورة مناسبة لإظهار التأثيرات التي نريد تطبيقها. افتح سكريبوس وأنشئ مستندًا جديدًا (استخدم القياس الذي تريده). أنشئ إطار صورة له شكل الصورة نفسه (صورة باتجاه أفقي مثلًا). انقر بزر الفأرة الأيمن على الإطار واختر استيراد صورة Get Image من القائمة. اختر الصورة التي نزَّلتها للتو ثم اضغط موافق. اضبط الصورة والإطار لتحصل على الصورة بأكملها ضمن الإطار. أساسيات التأثيرات تأثيرات الصورة Image Effects هي تغييرات يمكنك تطبيقها على الصور في سكريبوس، إذ لن تغيِّر هذه التأثيرات الصورة الأصلية، بل ستطبِّق التغييرات داخل سكريبوس فقط، والتي ستراها على الشاشة وستنتقل إلى الخرج النهائي دون تغيير الصورة الأصلية. سنبدأ أولًا بتطبيق بعض التأثيرات الأساسية لترى كيفية عملها. انقر بزر الفأرة الأيمن على إطار الصورة، واختر مؤثرات الصورة Image Effects من القائمة، حيث ستُنقَل إلى نافذة مؤثرات الصورة كما هو موضح في الشكل التالي: توجد في هذه النافذة أربعة أقسام رئيسية هي: لوحة المعاينة Preview، حيث سترى نتيجة تطبيق التأثيرات على صورتك. لوحة الخيارات Options، حيث سترى الإعدادات المختلفة التي تغير كيفية تطبيق التأثيرات على الصورة. قائمة "المؤثرات المتوفرة Available Effects"، حيث يمكنك اختيار التأثيرات لتطبيقها على الصورة. أخيرًا، قائمة التأثيرات المُطبَّقة حاليًّا على الصورة والتي تُسمَّى "التأثيرات المتوفرة حاليًّا Effects in Use". يمكن إضافة تأثير إلى الصورة من خلال تحديده من قائمة المؤثرات المتوفرة، ثم الضغط على زر إضافة لإرساله إلى القائمة التالية. ويمكن إزالة تأثير من قائمة التأثيرات المطبَّقة من خلال تحديده من قائمة المؤثرات المتوفرة حاليًّا، ثم الضغط على زر إزالة. تُطبَّق التأثيرات الموجودة في القائمة على الصورة بترتيب تنازلي، إذ يُطبَّق التأثير في أعلى القائمة أولًا، ثم الذي بعده وهكذا. ويمكنك تغيير ترتيب تطبيق التأثيرات باستخدام أزرار الأسهم التي تشير للأعلى وللأسفل بجانب زر إزالة. إضافة التأثير الأول لنبدأ بتطبيق بعض التأثيرات: حدد تأثير "السطوع Brightness" من القائمة واضغط على زر إضافة، لكن لن يتغير شيء في لوحة المعاينة، لأن تأثير "السطوع" افتراضيًّا لا يطبِّق شيئًا في البداية إلى أن تخبره بخلاف ذلك باستخدام لوحة الخيارات. اسحب شريط التمرير إلى اليمين وإلى اليسار في لوحة الخيارات، حيث يمكنك أن ترى كيفية تطبيق التأثير على الصورة في لوحة المعاينة، بعدها حرِّك السطوع إلى اليسار -سطوع إيجابي- لجعل الصورة أفتح، وحرِّكه إلى اليمين -سطوع سلبي- لجعلها أغمق. حدِّد تأثير "السطوع" الذي أضفته للتو واضغط على زر إزالة، وبالتالي سيُزال هذا التأثير وسترى أن المعاينة قد تغيَّرت إلى الصورة الأصلية. حدِّد تأثير "تدرج رمادي Greyscale" من القائمة واضغط على زر إضافة، حيث يجب أن تعرض لوحة المعاينة الآن الصورة رماديةً وبدون ألوان، وستلاحظ أنه لا توجد خيارات في لوحة الخيارات، فبعض التأثيرات ليس لها خيارات، لأنها ببساطة تطبِّق شيئًا واحدًا ولا يمكنك تغييره. اضغط على موافق. ستلاحظ الآن تطبيق تأثير "التدرج الرمادي Greyscale" على صورتك، وهو تأثير جيد ولكنه ليس فنيًّا، حيث سنطبِّق بعد ذلك بعض التأثيرات بطرق أكثر تعقيدًا. تحسين تأثير التدرج الرمادي سننشئ الآن صورةً فنيةً بتدرج رمادي، فقد رأيتَ نسخة الصورة ذات التدرج الرمادي في وقت سابق، والتي تبدو "فنيةً" بعض الشيء كما تبدو معظم الصور بالأبيض والأسود، ولكن سكريبوس يمكنه تحسين ذلك. افتح نافذة مؤثرات الصورة Image Effects وأزِل أي تأثيرات متوفرة حاليًّا (حدِّدها ثم اضغط على زر إزالة). حدِّد تأثير "درجتين لونيتين Duotone" من التأثيرات المتوفرة واضغط على زر إضافة، حيث ستلاحظ أن صورتك تبدو ذات تدرج رمادي مرةً أخرى، ولكنها أغمق قليلًا من ذي قبل. اضغط على قائمة الألوان للون 2 في لوحة الخيارات، واختر اللون "الأبيض White". ستبدو صورتك الآن مشابهةً لتأثير التدرج الرمادي Greyscale السابق، وهو جيد ولكن يمكنك جعل الصورة تبدو أفضل. اضغط على الرمز الموجود تحت قائمة اختيار اللون 1، وهو مربع غريب بداخله خط قطريٌّ مثل الشكل التالي: يؤدي ذلك إلى فتح "محرِّر المنحنى Curve Editor" للون 1 كما في الشكل التالي الذي قد يبدو معقدًا، ولكن ما عليك سوى اتباع التعليمات، ثم تجربة بعض التعديلات عليه لتعرف ما يفعله: انقر باستمرار على نقطة من الخط القطري عند النقطة (1,1) على شبكة محرر المنحنى، واسحبها للأسفل إلى النقطة (1,0) على الشبكة كما في الشكل التالي، ولاحظ تغيُّر المعاينة واختفاء خلفية الصورة: انقر باستمرار على نقطة من الخط القطري، حيث تعبر الخط العمودي الثالث من شبكة محرِّر المنحنى، واسحبها للأسفل إلى النقطة (3,2) على الشبكة كما في الشكل التالي: انقر على رمز "محرِّر المنحنى Curve Editor" مرةً أخرى لإغلاقه، واضغط موافق. هنا يجب أن تظهر لك الصورة كما يلي: محاكاة صورة 1 بت Simulating 1-Bit إن أردت صورةً بالأبيض والأسود بدلًا من صورة ذات تدرج رمادي، فهذا أمر بسيط في سكريبوس الذي يطبِّق محاكاةً لما يسمى أحيانًا "صورة 1 بت". افتح نافذة مؤثرات الصورة مرةً أخرى وحدِّد تأثير "درجتين لونيتين Duotone" الذي أضفته للتو في قائمة "التأثيرات المتاحة حاليًّا". افتح محرِّر المنحنى Curve Editor للون 1 واسحب المنحنى، بحيث يبدو مثل الشكل التالي: انقر على رمز محرِّر المنحنى Curve Editor للون 1، ثم اضغط على موافق. يجب أن تكون لديك الآن صورة تشبه الشكل التالي، وأن تبدو جيدةً على الرغم من أنها ليست صورة 1 بت باللون الأبيض والأسود تمامًا: درجة اللون البني الداكن Sepia Tone إن أردت إنشاء صورة ذات لون بني داكن على الطراز القديم، فالأمر سهل مع سكريبوس، حيث يجب أولًا إنشاء لون جديد لاستخدامه مع التأثير كما يلي: اختر قائمة تحرير Edit، ثم الألوان والتعبئة Colors. اضغط على زر جديد أو إضافة. أدخِل "Sepia" مثل اسم للون الجديد. اضبط نمط الألوان على "RGB". اضبط قيم RGB على النحو التالي: R = 235 وB = 130 وB = 40. اضغط موافق ثم موافق مرةً أخرى. سننشئ بعد ذلك التأثير كما يلي: افتح نافذة مؤثرات الصورة وأزل أي تأثيرات متوفرة حاليًّا. حدِّد تأثير "درجتين لونيتين Duotone" من قائمة التأثيرات المتوفرة، واضغط على زر إضافة. اضبط اللون 2 ليكون "Sepia". اضغط على موافق. وهذا كل ما عليك فعله للحصول على تأثير كما في الشكل التالي: تأثير الأشعة السينية X-Ray إذا احتجت يومًا إلى صورة تشبه صورة الأشعة السينية، فيمكن لسكريبوس فعل ذلك. افتح نافذة مؤثرات الصورة وأزِل أي مؤثرات متوفرة حاليًّا. حدِّد تأثير "اعكس Invert" من المؤثرات المتاحة واضغط على زر إضافة. اضغط على موافق. ستبدو الصورة مثل صورة الأشعة السينية في الشكل التالي: لكن صور الأشعة السينية ليست ملونةً بهذا الشكل، ويمكن معالجة ذلك بطريقتين، هما استخدام تأثيرات متعددة، وقلب تأثير الدرجتين اللونيتين. تأثيرات متعددة Multiple Effects افتح نافذة مؤثرات الصورة، وحدِّد تأثير "تدرج رمادي Greyscale" من المؤثرات المتوفرة، بعدها اضغط على زر إضافة لإضافته إلى قائمة التأثيرات. اضغط على موافق. عندها ستظهر لديك صورة مثل الشكل التالي: قلب التأثير درجتين لونيتين Duotone افتح نافذة مؤثرات الصورة وأزِل أي تأثيرات متوفرة حاليًّا. حدِّد تأثير "درجتين لونيتين Duotone" من التأثيرات المتوفرة، واضغط على زر إضافة. حدِّد اللون "الأخضر Green" من قائمة "اللون 2" في لوحة الخيارات. اضغط على رمز محرِّر المنحنى Curve Editor للون 2، واضغط على رمز "اقلب المنحنى Invert" في الأعلى. اضغط على محرِّر المنحنى مرةً أخرى ليختفي. اضغط على رمز محرِّر المنحنى Curve Editor للون 1 واضغط على رمز "اقلب المنحنى Invert" في الأعلى. اضغط على محرر المنحنى مرةً أخرى ليختفي. اضغط على موافق. هنا سينتج الشكل الآتي وهو أفضل بكثير، حيث لن تكون صور الأشعة السينية خضراء، ولكنها أفضل بكثير من تأثير "الخيال العلمي". استخدام الصورة مثل خلفية قد ترغب أحيانًا في وضع صورة أسفل نصٍّ ما ليكون جذابًا، ولكن قد تعترض الصورة النص، مما يصعِّب قراءته، وهنا يمكنك إنشاء تأثير بسيط ومناسب لذلك، باستخدام مؤثرات الصور في سكريبوس. افتح نافذة مؤثرات الصورة وأزِل أي تأثيرات متوفرة حاليًّا. أضف تأثير "تدرج رمادي Greyscale". أضف تأثير "السطوع Brightness"، واضبط شريط تمرير خيار السطوع على القيمة 100 تقريبًا. أضف تأثير "الضبابية Blur"، واضبط خيار نصف القطر Radius على القيمة 5. اضغط على موافق. أضف حقل نص فوق الصورة وأدخِل نصًّا. سيكون لديك الآن شيء مشابه للشكل التالي، وهنا لا تتردد في تغيير خيارات التأثيرات للحصول عليها بالطريقة التي تريدها: تأثير Pop Art يمكنك دمج تأثيرات مختلفة لإنتاج شيء يشبه تأثير Pop Art (لا يشبه كثيرًا هذا التأثير ولكنه تأثير غير عادي وملوَّن وقد يكون مفيدًا أحيانًا)، وذلك باتباع الخطوات الآتية: افتح نافذة مؤثرات الصورة وأزِل أي تأثيرات متوفرة حاليًّا. أضف تأثير "الضبابية Blur" واضبط خيار نصف القطر Radius على القيمة 1. أضف تأثير "المنحنيات Curves" واسحب المنحنى في لوحة الخيارات ليكون مشابهًا للشكل التالي: أضف تأثير "تقليل الألوان Posterise"، واضبط خيار قلِّل الألوان Posterise على القيمة 4. أضف تأثير "حدّ Sharpen"، واضبط خياري نصف القطر Radius، والقيمة Value على القيمة 4. اضغط على موافق. يجب أن يكون لديك الآن شيء مشابه للشكل التالي: قد لا تستخدم أبدًا شيئًا مثل الصورة السابقة، ولكن يمكنك أن ترى كيفية إضافة التأثيرات لبعضها البعض لإنتاج تأثيرات مختلفة، كما يمكنك استخدام التأثيرات نفسها على صورة مختلفة لإعطاء تأثير عام مختلف مثل الشكل التالي: كيفية إنشاء إطار صورة بحواف ضبابية في سكريبوس التقنيات المحدَّدة المستخدَمة في هذا الدرس هي: إنشاء لون جديد. إضافة صورة وتغيير حجمها وتعديلها. تغيير حجم شكل. إنشاء تدرج لوني شعاعي Radial Gradient. تغيير تعتيم Opacity وتظليل Shade التعبئة اللونية. الإعداد افتح مستند سكريبوس Scribus جديدًا. ستحتاج أولًا إلى صورة مهما كانت، ولكننا نوصي بأن يكون عنصر أو عناصر الصورة الرئيسية موجودًا بالقرب من مركزها للحصول على أفضل النتائج. ويُفضَّل أن تكون الخلفية ذات لون فاتح، أو أن تكون بيضاء اللون. ويمكنك تنزيل الصورة المستخدمة في هذا المقال (ستكون أصغر دقة مناسبة). ستحتاج بعد ذلك إلى لون للإطار، حيث سيَفِي أي لون بالغرض طالما أنه يتناسب مع الصورة، ولكننا سننشئ لونًا جديدًا، وسنسمِّيه "Shocking Pink". اختر قائمة تحرير Edit ثم الألوان والتعبئة Colors. اضغط على زر جديد أو إضافة. غيِّر الاسم إلى "Shocking Pink" (بدون علامات الاقتباس). حدد نمط الألوان "CMYK" من القائمة. غيِّر باستخدام أشرطة التمرير أو حقول الإدخال قيم "C" إلى 2% و"M" إلى 90% و"Y" إلى 20% و"K" إلى 2%. انقر على موافق في نافذة "تحرير الألوان Edit Color". اضغط موافق في نافذة الألوان والتعبئة. ستحتاج اللون "الأبيض"، ولكن يُحتمَل أن يكون لديك فعليًا من أي لوحة ألوان افتراضية. الصورة أنشئ إطار صورة يكون تقريبًا بنفس شكل صورة في وسط مستندك. الحجم ليس مهمًّا هنا، ولكن اجعل عرضه يقارب نصف عرض الصفحة لتتمكَّن من رؤية التأثير. وإذا اخترت صورة أفقية، فاجعل إطار الصورة أفقيًّا. انقر بزر الفأرة الأيمن على إطار الصورة واختر استيراد صورة Get Image من القائمة. حدِّد صورتك ثم اضغط موافق. انقر بزر الفأرة الأيمن على إطار الصورة، واختر اضبط الصورة إلى الإطار Adjust Image to Frame من القائمة. انقر بزر الفأرة الأيمن على إطار الصورة، واختر اضبط الإطار إلى الصورة Adjust Frame to Image من القائمة. يجب أن يكون لديك الآن شيء مثل الشكل الآتي، ولكن يجب قص أقسام الصورة التي لا تريدها. انتقل إلى تبويب صورة Image في نافذة خصائص Properties، أو انتقل إلى نافذة خصائص الصورة في الإصدار 1.5.7 من سكريبوس التي يمكن الوصول إليها من قائمة نوافذ ثم خصائص المحتوى. انقر على الخيار "تحجيم حر Free Scaling". اسحب الجزء السفلي من إطار الصورة لأعلى، بحيث يختفي جزء من المزهرية كما في الشكل التالي: قد يكفي هذا لتحرير الصورة حاليًّا، ولكن يمكنك دائمًا العودة وإجراء تعديلات على الصورة لاحقًا إن لم تكن راضيًا. الإطار حدِّد إطار الصورة واختر قائمة عنصر Item، ثم مضاعفة/تحويل، ثم نُسخ مطابقة Multiple Duplicate. اقبل الإعدادات الافتراضية، ثم اضغط على موافق. حدِّد الصورة المكرَّرة (اختر الصورة العلوية). اختر قائمة عنصر ثم تحويل لـ Convert To، ثم مضلع Polygon. انقر نقرًا مزدوجًا على المضلع لفتح نافذة محرِّر العقد Nodes Editor. أدخِل القيمة 60 نقطة في حقل الإدخال الثالث من الأسفل من شبكة الرموز لتمديد أو تقليص المضلع، حيث سيعتمد الحجم الدقيق على حجم إطار الصورة الأصلي، ولكن قد تحتاج إلى تجربتها أولًا. اضغط على مفتاح Tab من لوحة المفاتيح للتأكد من إدخال القيمة. اضغط على أيقونة "مدِّد حجم المسار بالقيمة المعروضة Enlarge the Size" على حقل النص الذي أدخلت القيمة فيه. اضغط على زر إنهاء التحرير أو موافق للخروج من محرِّر العقد. يجب أن يكون لديك الآن شيء مثل الشكل التالي: التعبئة حدِّد المضلع الأكبر، ثم انتقل إلى تبويب ألوان في نافذة خصائص. حدِّد تبويب لون التعبئة Fill. حدِّد لون التعبئة الذي أنشأته مسبقًا وهو اللون "Shocking Pink". بهذا تكون الصورة قد اختفت الآن خلف المضلع، ولكن لا بأس بذلك. اختر نمط التعبئة "متدرج شعاعي Radial Gradient" من القائمة. اسحب نقطة توقف التدرج الأيسر -المثلث الصغير- إلى الموضع 50%. حدِّد اللون "الأبيض" من قائمة الألوان. يجب أن تكون لديك الآن دائرة بيضاء في منتصف المضلع مثل الشكل التالي: تأثير الضبابية Fuzz اضبط التعتيم أو العتمة Opacity على القيمة 0% في تبويب ألوان ضمن نافذة خصائص، لتظهر صورتك مرةً أخرى. وهنا يجب إجراء مزيد من التعديلات على التعبئة المتدرجة الشعاعية، لهذا: انقر على شريط التعبئة المتدرجة لإنشاء نقطة توقف جديدة لهذا التدرج اللوني، واسحبها إلى الموضع 60%. تأكد من ضبط اللون على اللون "الأبيض". اضبط التعتيم على القيمة 30%. أنشئ نقطة توقف متدرجة أخرى في الموضع 70%. اضبطها على اللون "Shocking Pink". اضبط التعتيم على القيمة 50%. اضبط الظل Shade على القيمة 50%. اسحب نقطة توقف التدرج اليمنى إلى الموضع 80%. يجب أن يكون لديك الآن شريط متدرج مشابه للشكل التالي: إذا تخطى "الحد الضبابي" حافةَ إطار الصورة، فقد ترغب في تغيير نقاط توقف التدرج قليلًا من خلال سحبها جميعًا إلى اليسار بحوالي 10 أو 15% مثلًا، مع الاحتفاظ بالمسافة نفسها بين هذه النقاط. يمكنك بعد ذلك تحريك الإطار بالكامل لتوسيط عناصر الصورة بصورة صحيحة إن لزم الأمر. يجب أن يظهر لديك الآن شيء مثل الشكل التالي: الخلاصة الهدف الأساسي من هذا المقال هو توضيح أن سكريبوس لديه الكثير من تأثيرات الصور التي يمكن استخدامها بعدة طرق لإنشاء تأثيرات غير عادية ورائعة. فقد تكون النتيجة أحيانًا عديمة الجدوى ولن تستخدمها أبدًا، ولكنك لن تعرف أبدًا ما يمكن فعله إن لم تجرِّب. وإذا أردت أن يكون الانتقال بين اللون الأبيض ولون التعبئة أكثر سلاسةً، فستحتاج إلى إضافة مزيدٍ من نقاط توقف التدرج بين النقاط الموجودة سابقًا، مع تغيير إعدادات التعتيم والتظليل لتتلاءم مع هذا التعديل. وقد أنشأنا المثال التالي بهذه التقنية، ثم أضفنا نصًّا ومستطيلًا منحرفًا في الخلف: ترجمة -وبتصرُّف- للمقالين How to be artistic with image effects و How to create a fuzzy-edged picture frame اقرأ أيضًا كيفية التعامل مع إطارات الصور في برنامج سكريبوس Scribus كيفية وضع نص على مسار باستخدام برنامج سكريبوس Scribus كيفية إنشاء رسوم من النمط Pop Art Explosion في برنامج سكريبوس Scribus
  19. يجب على كل موجّهٍ وبغض النظر عن مدى بساطة أو تعقيد بقية آلية تخصيص الموارد، أن يطبِّق بعض أنظمة الأرتال التي تحكم كيفية تخزين الرزم مؤقتًا أثناء انتظار الإرسال. ويمكن عدُّ خوارزمية الرتل على أنها تخصيص لكلٍّ من حيز النطاق التراسلي لإرسال الرزم، ومساحة التخزين المؤقت لتجاهل الرزم، كما أنها تؤثر مباشرةً على زمن الانتقال الذي تتعرض له الرزمة من خلال تحديد المدة التي تنتظرها الرزمة حتى تُرسل. يقدِّم هذا القسم خوارزميتي أرتال شائعتين هما "الداخل أولًا، يخرج أولًا first-in, first-out"، أو اختصارًا FIFO والرتل العادل fair queuing أو اختصارًا FQ، ويحدّد هذا القسم العديد من الاختلافات المُقترحة. رتل الداخل أولا يخرج أولا FIFO ويُطلق عليه أيضًا رتل من يأتي أولًا يُخدَّم أولًا first-come, first-served أو اختصارًا FCFS. تُعَد فكرة رتل FIFO بسيطةٌ وهي على نحو أن الرزمة الأولى الواردة إلى موجّه هي الرزمة الأولى المُرسلة، وهذا موضحٌ في القسم (أ) من الشكل الآتي، والذي يُظهر أولًا رتل FIFO مع "فتحات" لاستيعاب ما يصل إلى ثمانية رزم. بما أن مقدار مساحة المخزن المؤقت في كل موجهٍ محدودة، فإذا وصلت رزمة وكان الرتل (مساحة المخزن المؤقت) ممتلئًا، فسيتجاهل الموجّه هذه الرزمة كما هو موضحٌ في القسم (ب) من الشكل الآتي، ويجري ذلك بغض النظر عن التدفق الذي تنتمي إليه الرزمة أو مدى أهمية الرزمة، ويسمى هذا أحيانًا "إسقاط الذيل tail drop"، حيث تُسقَط الرزم التي تصل إلى نهاية رتل FIFO. من المُلاحظ أن إسقاط الذيل ونظام FIFO هما فكرتان منفصلتان، فنظام FIFO هو نظام جدولةٍ يحدد الترتيب الذي تُرسَل الرزم به؛ أما إسقاط الذيل فهو سياسة إسقاط تحدّد الرزم التي تُسقَط. بما أن نظام FIFO وإسقاط الذيل هما أبسط أمثلةٍ لنظام جدولة وسياسة إسقاط على التوالي، فسيُنظر إليهما أحيانًا على أنهما حزمة bundle تُسمى تطبيق رتل الفانيلا vanilla queuing implementation، حيث يُشار إلى هذه الحزمة غالبًا ببساطة على أنها رتل FIFO، بينما يجب أن تُسمى بصورةٍ أدق FIFO مع إسقاط الذيل. يقدّم القسم اللاحق مثالًا لسياسة إسقاطٍ أخرى تستخدم خوارزمية أعقد من "هل يوجد مخزنٌ مؤقتٌ متاح؟"، وذلك لتحديد موعد إسقاط الرزم. يمكن استخدام سياسة الإسقاط هذه مع نظام FIFO، أو مع أنظمة جدولةٍ أعقد. يُعَد نظام FIFO مع إسقاط الذيل أبسط خوارزميات الأرتال وأكثرها استخدامًا في موجّهات الإنترنت حتى وقت كتابة هذا الكتاب. حيث يدفع هذا النهج البسيط للرتل بكامل مسؤولية التحكم في الازدحام وتخصيص الموارد إلى أطراف الشبكة، وبالتالي فإن الشكل السائد للتحكم في الازدحام في الإنترنت لا يفترض حاليًا أي مساعدة من الموجّهات، حيث يتحمل بروتوكول TCP مسؤولية اكتشاف الازدحام والاستجابة له. يختلف الرتل ذو الأولوية priority اختلافًا بسيطًا عن رتل FIFO الأساسي، حيث تتمحور فكرته حول تمييز كل رزمةٍ بأولوية ويمكن حمل العلامة mark في عنوان IP على سبيل المثال، وهذا ما سنناقشه في قسمٍ لاحق. تطبّق الموجّهات بعد ذلك عدّة أرتال FIFO، ويكون لكل رتل صنف أولوية، حيث يرسل الموجّه دائمًا الرزم من الرتل ذي الأولوية العليا إذا كان هذا الرتل غير فارغٍ قبل الانتقال إلى الرتل ذي الأولوية التالية، وتبقى الرزم مُدارةً بطريقة FIFO ضمن كل أولوية. تخرج هذه الفكرة قليلًا عن نموذج تقديم أفضل جهد، لكنها لا تذهب إلى حد تقديم ضماناتٍ لأي صنف أولوية معينة، فهي تسمح فقط للرزم ذات الأولوية العالية بالتقدم إلى الأمام. مشكلة الرتل ذي الأولوية هي أنه يمكن أن يُبقي جميع الأرتال الأخرى منتظرةً إلى أجلٍ غير مُسمّى؛ وهذا يعني أنه طالما أن هناك رزمةً واحدةً على الأقل ذات أولوية عالية في رتلٍ ذي أولوية عالية، فلن يجري تقديم الأرتال ذات الأولوية المنخفضة، وحتى يكون هذا قابلًا للتطبيق، فيجب أن تكون هناك قيودٌ صارمة على مقدار حركة المرور ذات الأولوية العالية المُدخلة إلى الرتل، كما يجب أن يكون واضحًا مباشرةً أنه لا يمكننا السماح للمستخدمين بضبط الرزم الخاصة بهم على أولوية عالية بطريقةٍ لا يمكن التحكم فيها؛ ولهذا يجب علينا إما منعهم تمامًا أو تأمين أحد أنواع "الصد pushback" للمستخدمين. إحدى الطرق الواضحة لفعل ذلك هي استخدام الاقتصاد، حيث يمكن للشبكة أن تتقاضى رسومًا أكبر لتقديم رزم ذات أولوية عالية أكثر من الرزم ذات الأولوية المنخفضة، ولكن هناك تحديات كبيرة أمام تطبيق مثل هذا المخطط في بيئةٍ لامركزية مثل الإنترنت. تتمثل إحدى المواقف التي يُستخدَم فيها الرتل ذو الأولوية في الإنترنت؛ في حماية الرزم الأعلى أهميةً، مثل تحديثات التوجيه الضرورية لتثبيت جداول التوجيه بعد تغيير مخطط الشبكة topology، حيث يوجد غالبًا رتلُ خاصٌ لمثل هذه الرزم الممكن تحديدها من خلال قيمة محرف الخدمات المميزة Differentiated Services Code Point والمعروفة سابقًا باسم حقل TOS في ترويسة IP، وهذه في الواقع حالةٌ بسيطة لفكرة "الخدمات المميزة". الرتل العادل تكمن المشكلة الرئيسية لرتل FIFO بعدم تمييزه بين مصادر حركة المرور المختلفة، أو عدم فصله للرزم وفقًا للتدفق الذي تنتمي إليه، وهذه مشكلة على مستويين مختلفين، فليس واضحًا في المستوى الأول أن تكون أية خوارزمية للتحكم في الازدحام ومُطبَّقةٌ بالكامل في المصدر قادرةً على التحكم في الازدحام بصورةٍ مناسبة وبمساعدةٍ قليلة جدًا من الموجّهات؛ أما على مستوىً آخر، فبما أن آلية التحكم في الازدحام مُطبَّقةٌ بأكملها في المصادر ولا يوفر رتل FIFO وسيلةً لمراقبة مدى التزام المصادر بهذه الآلية، فمن الممكن لمصدرٍ (تدفقٍ) سيء التصرف التقاط جزءٍ كبيرٍ من سعة الشبكة عشوائيًا. من الممكن بالتأكيد لتطبيقٍ معين عدم استخدام بروتوكول TCP في الإنترنت، وبالتالي تجاوز آلية التحكم في الازدحام من طرفٍ إلى طرف (تطبيقاتٌ مثل الاتصال الهاتفي عبر الإنترنت تفعل ذلك اليوم)، فمثل هذا التطبيق قادرٌ على إغراق موجّهات الإنترنت برزمها الخاصة، مما يتسبب في التخلص من رزم التطبيقات الأخرى. يمثّل الرتل العادل FQ خوارزميةً مصمَّمةً لمعالجة هذه المشكلة، حيث تتمحور فكرته في الاحتفاظ برتلٍ منفصلٍ لكل تدفقٍ يعالجه الموجّه حاليًا، ويخدّم الموجه بعد ذلك هذه الأرتال في نوعٍ من جولة روبن round-robin وهو تجوُّل دَوري موضحٌ في الشكل الآتي، حيث إذا أرسل التدفق الرزم بسرعةٍ كبيرة فسيمتلئ الرتل الخاص به، وعندما يصل رتلٌ إلى طولٍ معين، فستُهمَل الرزم الإضافية المُنتمية إلى رتل هذا التدفق، وبذلك لا يمكن لمصدرٍ معين زيادة حصته عشوائيًا من سعة الشبكة على حساب التدفقات الأخرى. لاحظ أن رتل FQ لا يتضمن إخبار الموجّه لمصادر حركة المرور بأي شيء عن حالة الموجّه أو عن الطريقة المتّبَعة لحدّ سرعة إرسال مصدرٍ معين للرزم، لكن لا يزال رتل FQ مصممًا لاستخدامه جنبًا إلى جنب مع آلية التحكم في الازدحام من طرفٍ إلى طرف، وهو يفصل ببساطة حركة المرور، بحيث لا تتداخل مصادر حركة المرور ذات السلوك السيئ مع أولئك الذين يطبقون بأمانة الخوارزمية من طرفٍ إلى طرف. يفرض رتل FQ أيضًا العدل بين مجموعة التدفقات التي تديرها خوارزميةٌ جيدة السلوك للتحكم في الازدحام. لا يزال هناك عددٌ متواضعٌ من التفاصيل التي يتعين عليك الحصول عليها بصورةٍ صحيحة. التعقيد الرئيسي هو أنه ليست الرزم التي تُعالَج على موجهٍ بالضرورة بنفس الطول، فمن الضروري مراعاة طول الرزمة لتخصيص حيز النطاق التراسلي للرابط الصادر بطريقةٍ عادلة؛ فإذا أدار الموجّه تدفقتين على سبيل المثال، أحدهما يحتوي على رزم بطول 1000 بايت والآخر رزم بطول 500 بايت (ربما بسبب التجزئة fragmentation الصاعدة من هذا الموجّه)، فإن تطبيق جولة روبن بسيطة للرزم من رتل كل تدفقٍ ستعطي التدفق الأول ثلثي حيز النطاق التراسلي للرابط، بينما يأخذ التدفق الثاني ثلث حيز النطاق التراسلي الخاص به فقط. ما نريده فعليًأ هو تطبيق جولة روبن على بتٍ تلو الآخر bit-by-bit round-robin، بحيث يرسل الموجّه بتًا من التدفق 1، ثم بتًا من التدفق 2، وهكذا. من الواضح أنه من غير المجدي تداخل البتات من رزمٍ مختلفة، لذلك تحاكي آلية رتل FQ هذا السلوك من خلال تحديد وقت انتهاء إرسال رزمةٍ معينة إذا أُرسِلت باستخدام آلية "جولة روبن على بتٍ تلو الآخر" ثم استخدام وقت الانتهاء هذا لتتابع رزم الإرسال. من أجل فهم خوارزمية تقريب "جولة روبن على بتٍ تلو الآخر"، افترِض سلوك تدفقٍ واحدٍ وتخيل ساعةً تدق مرةً واحدةً في كل مرةٍ يُرسَل فيها بتٌ واحد من جميع التدفقات النشطة (يكون التدفق نشطًا عندما يكون لديه بياناتٌ في الرتل)، وافترض أن يشير Pi إلى طول الرزمة i لهذا التدفق النشط، وSi إلى الوقت الذي يبدأ فيه الموجّه في إرسال الرزمة i، وFi إلى الوقت الذي ينتهي فيه الموجّه من إرسال الرزمة i، فإذا جرى الإعلان عن Pi من حيث عدد دقات الساعة اللازمة لإرسال الرزمة i (مع الأخذ بالحسبان أن الوقت يتقدم دقةً واحدةً في كل مرةٍ يحصل فيها هذا التدفق على قيمة 1 بت من الخدمة)، فمن السهل رؤية أن: Fi=Si+Pi ولكن لمعرفة متى نبدأ في إرسال الرزمة i، فلابد من التمييز بين ما إذا كان وصول الرزمة قد حصل قبل أو بعد انتهاء الموجه من إرسال الرزمة i-1 من هذا التدفق، فإذا وصلت قبلها، فمن المنطقي أن يُرسَل البت الأول من الرزمة i مباشرةً بعد آخر بت من الرزمة i-1؛ ومن ناحيةٍ أخرى، من المحتمل انتهاء الموجّه من إرسال الرزمة i-1 قبل وصول الرزمة i بوقتٍ طويل، مما يعني وجود فترةٍ من الوقت كان خلالها رتل هذا التدفق فارغًا، وبالتالي لم تتمكن آلية round-robin من إرسال أي رزمةٍ من هذا التدفق. وعلى افتراض أن Ai يشير إلى وقت وصول الرزمة إلى الموجّه، فعندئذٍ ستكون Si=max(Fi-1,Ai)، وبالتالي يمكننا حساب: Fi=max(Fi-1,Ai)+Pi ننتقل الآن إلى الحالة التي يوجد فيها أكثر من تدفقٍ واحد، ونجد أن هناك مشكلةً في تحديد Ai، حيث لا يمكننا قراءة ساعة الحائط فقط عند وصول الرزمة. وكما هو مذكور أعلاه؛ نريد وقتًا للتقدم بدَقةٍ واحدة في كل مرةٍ تحصل فيها جميع التدفقات النشطة على بتٍ واحد من الخدمة في إطار آلية "جولة روبن على بتٍ تلو الآخر"، لذلك سنحتاج إلى ساعةٍ تتقدم ببطء أكثر عندما يكون هناك المزيد من التدفقات، إذ يجب أن تتقدم الساعة بدَقةٍ واحدة عند إرسال n بت إذا كان هناك n من التدفقات النشطة، وستُستخدَم هذه الساعة لحساب Ai. نحسب الآن ومن أجل كل تدفقٍ Fi لكل رزمةٍ تصل باستخدام الصيغة أعلاه، ثم نتعامل مع كل Fi على أنه علامة زمنية timestamp، والرزمة التالية للإرسال هي دائمًا الرزمة التي تحتوي على أقل علامةٍ زمنية، أي الرزمة التي يجب أن تنتهي من الإرسال قبل جميع الرزم الأخرى. لاحظ أن هذا يعني أن الرزمة يمكن أن تصل إلى تدفقٍ، ويمكن حشرها في الرتل أمام رزمةٍ أطول منها لأنها أقصر من رزمة من تدفقٍ آخر موجود بالفعل في الرتل في انتظار الإرسال، ولكن هذا لا يعني أن الرزمة الواصلة حديثًا يمكنها منع الرزمة التي يجري إرسالها حاليًا. إن هذا النقص في إجراءات المنع، هو الذي يحفظ تطبيق رتل FQ الموصوف للتو من محاكاة مخطط آلية "جولة روبن على بتٍ تلو الآخر" الذي نحاول تقريبه. افترض المثال الوارد في الشكل السابق لمعرفة كيفية عمل هذا التطبيق للرتل العادل بصورةٍ أفضل، حيث يوضح القسم (أ) من الشكل السابق أرتالًا لتدفقين؛ وتختار الخوارزمية كلا الرزمتين من التدفق 1 لإرسالهما قبل الرزمة في رتل التدفق 2، بسبب أوقات الانتهاء المبكرة لهما؛ أما في القسم (ب) من الشكل السابق، فقد بدأ الموجّه في إرسال رزمةٍ من التدفق 2 عند وصول رزمةٍ من التدفق 1. لا يمنع التطبيق رزمة التدفق 2، على الرغم من أن الرزمة التي تصل على التدفق 1 كانت ستنتهي قبل التدفق 2 إذا كنا نستخدم رتلًا عادلًا مثاليًا على بتٍ تلو الآخر bit-by-bit fair queuing. هناك شيئان يجب ملاحظتهما حول الرتل العادل، أولها عدم ترك الرابط خاملًا أبدًا طالما أن هناك رزمةٌ واحدةً على الأقل في الرتل، ويُقال عن أي مخطط أرتال بهذه الخاصية أنه مُحافظ على العمل work conserving. أحد آثار الحفاظ على العمل هو أنه إذا شاركتَ رابطًا مع الكثير من التدفقات التي لا ترسل أي بياناتٍ بعد ذلك؛ فيمكنك استخدام سعة الرابط الكاملة للتدفق الخاص بك، وبمجرد أن تبدأ التدفقات الأخرى في الإرسال، فستبدأ في استخدام حصتها وستنخفض السعة المتاحة للتدفق الخاص بك. الشيء الثاني الواجب ملاحظته هو أنه إذا حُمِّل الرابط بالكامل مع وجود n تدفقٍ ترسل بيانات، فلا يمكنك استخدام أكثر من ‎1/n th من حيز النطاق التراسلي للرابط، وإذا حاولت إرسال أكثر من ذلك، فستُسنَد علاماتٌ زمنية كبيرة بصورةٍ متزايدة إلى رزمك، مما يتسبب في بقائها في الرتل لفترةٍ أطول في انتظار الإرسال. سيحدث طفحان للرتل في النهاية على الرغم من أن قرار إسقاط الرزم الخاصة بك أو بشخصٍ آخر لا تحدده حقيقة أننا نستخدم الرتل العادل، بينما يُحدَّد ذلك من خلال سياسة الإسقاط حيث أن FQ هي خوارزمية جدولة، وهي مثل FIFO يمكن دمجها مع سياسات إسقاط متنوعة. بما أن FQ يحافظ على العمل، فإن أي حيز نطاق تراسلي لا يستخدمه تدفقٌ هو حيز نطاقٍ تراسلي متاحٌ تلقائيًا للتدفقات الأخرى؛ وإذا كان لدينا أربعة تدفقات تمر عبر موجّه على سبيل المثال وكلهم يرسلون رزمًا، فسيستقبل كل تدفقٍ ربع حيز النطاق التراسلي، ولكن إذا كان تدفقٌ من هذه التدفقات خاملًا لفترةٍ طويلة بما يكفي لاستنزاف جميع رزمه من رتل الموجّه، فستتشارك التدفقات الثلاثة المتبقية حيز النطاق التراسلي المتاح، حيث سيتلقى كلٌ منها الآن ثلث حيز النطاق التراسلي. يمكننا التفكير في FQ على أنه يوفر حصةً دنيا مضمونةً من حيز النطاق التراسلي لكل تدفق، مع إمكانية الحصول على أكثر من ذلك إذا كانت التدفقات الأخرى لا تستخدم حصصها من حيز النطاق التراسلي. يمكن تطبيق شكلٍ مختلف من رتل FQ، يُسمى "الرتل العادل الموزون weighted fair queuing" أو اختصارًا WFQ، والذي يسمح بإسناد وزنٍ لكل تدفق (رتل). يحدِّد هذا الوزن منطقيًا عدد البتات الواجب إرسالها في كل مرةٍ تُرسَل فيها خدمات الموجّه في الرتل، ويتحكم هذا الوزن بفعالية في النسبة المئوية لحيز لنطاق التراسلي للرابط الذي سيحصل عليه التدفق، كما يمنح FQ البسيط كل رتلٍ وزنًا قدره 1، مما يعني أنه منطقيًا يُرسَل بتًا واحدًا فقط من كل رتلٍ في كل مرة، وينتج عن ذلك حصول كل تدفق على 1 / nth من حيز النطاق التراسلي عند وجود n تدفق، ولكن قد يكون لرتلٍ واحدٍ وزن 2 مع رتل WFQ، ولرتلٍ آخر وزن 1، ولرتلٍ ثالث وزن 3. وبفرض احتواء كل رتلٍ دائمًا على رزمةٍ تنتظر إرسالها، فسيحصل أول تدفقٍ على ثلث حيز النطاق التراسلي المتاح، والتدفق الثاني على سدس حيز النطاق التراسلي المتاح، وسيحصل التدفق الثالث على نصف حيز النطاق التراسلي المتاح. وصفنا آلية عمل WFQ من حيث التدفقات، ولكن يمكن تطبيقه على أصناف حركة المرور، حيث تُعرَّف هذه الأصناف بطريقةٍ أخرى مختلفةٍ عن التدفقات البسيطة، ويمكننا استخدام بعض البتات في ترويسة IP لتحديد الأصناف وتخصيص رتلٍ ووزنٍ لكل صنفٍ على سبيل المثال، وهذا هو بالضبط ما اُقترِح مثل جزءٍ من معمارية الخدمات المميزة التي ستُشرح لاحقًا. نلاحظ أنه يتوجب على الموجّه الذي يطبّق رتل WFQ تعلُّم الأوزان الواجب إسنادها لكل رتلٍ من مكانٍ ما، إما عن طريق الضبط اليدوي، أو عن طريق نوعٍ من إصدار الإشارات من المصادر، حيث سنتجه نحو نموذجٍ قائم على الحجز في الحالة الثانية، ويوفّر إسناد وزنٍ لرتلٍ شكلًا ضعيفًا من الحجز لأن هذه الأوزان مرتبطة بصورة غير مباشرة فقط بحيز النطاق التراسلي الذي يستقبله التدفق، كما يعتمد حيز النطاق التراسلي المتاح للتدفق أيضًا على عدد التدفقات الأخرى التي تتشارك بالرابط على سبيل المثال. سنبحث في قسمٍ لاحق كيفية استخدام رتل WFQ على أنه أحد مكونات آلية تخصيص الموارد القائمة على الحجز. أخيرًا، نلاحظ أن هذه المناقشة الكاملة لإدارة الأرتال توضح مبدأ تصميم نظام مهم يُعرف باسم فصل السياسة عن الآلية، حيث تتمثل الفكرة في عرض كل آليةٍ على أنها صندوقٌ أسود يوفر خدمةً متعددة الأوجه يمكن التحكم فيها بواسطة مجموعة من المقابض knobs، وتحدد السياسة إعدادًا معينًا لتلك المقابض ولكنها لا تعرِف أو تهتم بكيفية تنفيذ هذا الصندوق الأسود، كما تكون الآلية المعنية في هذه الحالة هي نظام الأرتال؛ أما السياسة فهي إعدادٌ معين لأي تدفقٍ يحصل على مستوى الخدمة مثل الأولوية أو الوزن. سنناقش بعض السياسات الممكن استخدامها مع رتل WFQ لاحقًا. ترجمة -وبتصرّف- للقسم Queuing Disciplines من فصل Congestion Control من كتاب Computer Networks: A Systems Approach. اقرأ أيضًا المقال السابق: مشكلة تخصيص الموارد للتحكم في الازدحام في الشبكات الحاسوبية تقنية تبديل التسمية متعددة البروتوكولات MPLS في الشبكات الحاسوبية تطبيق مبدلات وموجهات الشبكات الحاسوبية برمجيا وعتاديا
  20. ربما استخدمت سابقًا أداة منحنى بيزيه Bezier Curve في برنامج سكريبوس Scribus لإنشاء بعض المنحنيات الجميلة، ولكن يُرجَّح أنك كنت مرتبكًا تمامًا ولم تتمكن من إنشاء أي شيء بخلاف بعض المنحنيات العشوائية. يُظهِر الشكل التالي محاولةً أولى في إنشاء دائرة باستخدام أداة منحنى بيزيه دون فهمها أولًا. إذا كانت محاولاتك لاستخدام هذه الأداة مشابهةً للشكل السابق، فهذا المقال يناسبك. الإعداد افتح برنامج سكريبوس وأنشئ مستندًا جديدًا (سيفي القياس A4 أو رسالة Letter بالاتجاه الرأسي بالغرض). يجب أولًا أن تُظهِر الشبكة وتفعّل خاصية اتباع الشبكة Grid Snapping -وهذا مهم لأنه سيسمح لك بإنشاء الأشكال بسهولة أكبر-، باتباع الآتي: اختر قائمة ملف File ثم إعداد المستند Document Setup. حدد قسم "الأدلة Guides" من القائمة. حدّد الخيار شبكة الصفحة Page Grid لإظهارها من تبويب الوضوح. اضبط تباعد الشبكة الرئيسية Major Grid Spacing على القيمة 100 نقطة. اضبط تباعد الشبكة الثانوية Minor Grid Spacing على القيمة 20 نقطة. اضغط على موافق. اختر قائمة صفحة Page ثم اتبع الشبكة Snap to Grid. إذا كان الخيار "اتبع الشبكة" محدَّدًا مسبقًا، فلا تحدده مرةً أخرى. يجب أن يبدو مستندك كالشكل التالي: إنشاء المنحنى الأول من الأشياء المهمة التي يجب معرفتها حول استخدام منحنيات بيزيه، أنه لا يمكنك إنشاء جميع الأشكال الممكنة دفعةً واحدة، إذ تتبع أداة منحنى بيزيه قواعدًا معينةً عند الرسم بها، لذلك يجب عدم تجربة إنشاء أشكال خيالية أو معقدة للغاية. سنتبع في هذا المقال بعض الاصطلاحات التي تسهّل توضيح ما عليك تطبيقه باستخدام الرسوم البيانية كما في الشكل التالي: تشير إشارة X الحمراء إلى النقطة التي تحتاج فيها إلى النقر بزر الفأرة الأيسر ثم تحريره (نقرة عادية فقط). يشير السهم الأزرق إلى أنه يجب عليك الضغط بزر الفأرة الأيسر على نهاية السهم عند النقطة، والاستمرار في الضغط على زر الفأرة، ثم سحب المؤشر حتى تصل إلى النهاية عند رأس السهم حيث يجب تحرير زر الفأرة بعد ذلك. يشير المربع الأصفر إلى أنه يجب النقر بزر الفأرة الأيمن لإنهاء رسم المنحنى، ولا يهم مكان مؤشر الفأرة عند النقر بزرها الأيمن. تمثل الأرقام الموجودة بجانب الأشكال الترتيب الذي يجب أن تطبّق به هذه الإجراءات. يمكنك إنشاء المنحنى الأول باستخدام الخطوات التالية الموضّحة في الشكل السابق: الإجراء الأول هو النقر على الزاوية اليسرى السفلية من المربع. ثم اسحب من أعلى اليمين إلى أعلى اليسار. ثم انقر بزر الفأرة الأيمن للانتهاء. يمكنك الآن تجربة الخطوات السابقة كما يلي: اختر قائمة إدراج Insert ثم منحنى بيزيه، أو يمكنك تحديد أداة منحنى بيزيه من شريط الأدوات. اتبع الإجراءات الموضّحة في الشكل السابق. يجب أن يكون لديك الآن قوس بسيط أو ربع دائرة مثل الشكل التالي: الشيء الذي طبّقته حتى الآن هو إخبار سكريبوس بمكان بدء رسم المنحنى (النقطة 1)، وبالمكان الذي سيمر المنحنى من خلاله (النقطة 2)، وتشير النقطة 3 إلى الطريقة التي تريد رسم المنحنى بها. يستخدم سكريبوس أثناء رسم المنحنيات أشياءً تسمى نقاط التحكم Control Points تخبره بكيفية تشكيل المنحنى، فنقطة التحكم الوحيدة في هذا المثال هي الموضع 3 (نهاية السحب). إنشاء منحنى كامل سترسم الآن منحنيًا كاملًا وستبدأ الأمور في أن تصبح أوضح قليلًا، وهنا اتبع الآتي: اختر قائمة إدراج ثم منحنى بيزيه، أو يمكنك تحديد أداة منحنى بيزيه من شريط الأدوات. اتبع الإجراءات الموضحة في الشكل التالي: يجب أن تنشأ لديك نصف دائرة مثل الشكل التالي: ربما لاحظت تحرّك "النهاية الحرة" للمنحنى مع مؤشر الفأرة مثل الخط المنقّط في الشكل الآتي، لأن سكريبوس يحاول باستمرار حساب المكان الذي يجب رسم الجزء الأخير من المنحنى فيه، كما أن المنحنى يتبع دائمًا بعض الاتجاهات المختارة مسبقًا بغض النظر عن المكان الذي حرّكتَ مؤشر الفأرة فيه، وسبب ذلك هو نقاط التحكم. انقر نقرًا مزدوجًا على نصف الدائرة الذي أنشأته للتو لتفتح نافذة محرر العقد Node Editor. يوضَح الشكل الآتي كيفية إنشاء منحنى نصف الدائرة، حيث يمكنك أن ترى في أسفل اليسار المكان الذي نقرت عليه لبدء المنحنى (مكان تواجد النقطة الزرقاء) والذي يُسمى عقدة Node، فالعقدة هي ببساطة نقطة يرسم سكريبوس منحنى من خلالها. يمكنك أيضًا أن ترى في الجزء العلوي مكان السحب من موضع إلى آخر، حيث أنشأت بداية السحب العقدة الثانية، كما أنشأت نهاية السحب نقطةً وردية اللون (النقطة A)، والتي تُسمَّى نقطة تحكم. تخبر نقاط التحكم سكريبوس بكيفية رسم المنحنى من خلال النقاط (العقد) الأخرى التي اخترتها. يمكنك رؤية العقدة الأخيرة في أسفل اليمين، ولكن هناك أيضًا نقطة تحكم وردية أخرى لم تنشئها (النقطة B)، وإنما أنشأها سكريبوس، وهي النقطة المضاعفة والمقابلة لنقطة التحكم الأولى. لقد أخبرتَ سكريبوس بمكان إنشاء نقطة التحكم الأولى عندما سحبت من النقطة 2 إلى النقطة 3، ولكنك أيضًا منحته -من خلال اتجاه السحب- اتجاهًا يعكس فيه نقطة التحكم الأولى عبر العقدة الثانية لإنشاء نقطة التحكم الثانية، وقد حدث هذا الانعكاس بزاوية قائمة على "الخط" الذي رسمته بالسحب من النقطة 2 إلى النقطة 3. لاحظ الخط المنقّط الأرجواني في الشكل التالي: يستغرق هذا المفهوم بعض الوقت للتعود عليه وأفضل طريقة لفهمه هي التدرب على رسم بعض المنحنيات مع السحب من النقطة 2 إلى النقطة 3 بزوايا مختلفة. حاول إنشاء مزيد من المنحنيات مع تغيير زاوية السحب، ثم افتح محرّر العقد لمعرفة مكان إنشاء نقاط التحكم، حيث يمكنك بعد ذلك تجربة بعض المنحنيات الأكثر تعقيدًا. أغلق نافذة محرّر العقد بالضغط على إنهاء التحرير أو على موافق عند الانتهاء. إنشاء دائرة كاملة اختر قائمة إدراج ثم منحنى بيزيه، أو حدد أداة منحنى بيزيه من شريط الأدوات. اتبع الإجراءات الموضّحة في الشكل التالي: يجب أن تحصل الآن على دائرة مشابهة للشكل التالي: لاحظ تغيير اتجاه المنحنى الثاني من خلال السحب في اتجاه مختلف في المرة الثانية، إذ يمكنك الذهاب في أي اتجاه تريده بمجرد الانتهاء من منحنى كامل. إنشاء موجة سنرسم هذه المرة خطًا متموجًا، وذلك باتباع الخطوات الآتية: اختر قائمة إدراج ثم منحنى بيزيه، أو حدّد أداة منحنى بيزيه من شريط الأدوات. اتبع الإجراءات الموضَّحة في الشكل التالي: يجب أن تحصل الآن على شكل يشبه الشكل التالي: لاحظ كيف يمكنك تغيير اتجاه المنحنى. إنشاء شكل الشبح اختر قائمة إدراج ثم منحنى بيزيه، أو حدّد أداة منحنى بيزيه من شريط الأدوات. اتبع الإجراءات الموضّحة في الشكل الآتي، أينما حذفنا الأرقام من أسفل الرسم البياني لمنع حدوث فوضى، ولكن يجب أن تكون قادرًا على تحديد الطريق الذي يجب أن تسلكه. يمكنك بعد ذلك إعطاء الشبح لون تعبئة، ورسم بعض العيون باستخدام الدوائر، وستحصل على شكل شبيه بالشكل الآتي (بؤبؤ العين عبارة عن نسخٍ أصغر من بياض العين). لا تقلق إن لم تتمكن من رسم الشبح بالكامل، فهذا ليس مهمًا حاليًا، لأن المهم هو معرفة كيفية رسم المنحنيات. يمكنك استخدام هذه التقنيات البسيطة جدًا التي تعلمتّها لصنع الأشكال بسهولة. إنشاء أشكال مفيدة يمكنك باستخدام منحنى بيزيه رسم دوائر، ولكن سكريبوس لديه أداة لرسم الدوائر فعليًا بحيث يمكنك رسم شبح بها، ولكن قد تتساءل عن فائدة رسم مثل هذه الأشكال عمليًا، فالأشكال التي رسمتها حتى الآن لا تُعَد مفيدةً جدًا، لكنها تُظهِر لك كيفية عملية الرسم. إذًا لنرسم الآن بعض الأشياء المفيدة. إنشاء مستطيلات ذات زوايا منحنية تُعَد المستطيلات ذات الزوايا المنحنية مفيدةً للغاية، ويمكنك إنشاؤها عن طريق رسم شكل مستطيل عادي واستخدام خاصية التدوير في سكريبوس (من تبويب شكل Shape في نافذة الخصائص Properties)، ولكن يمكنك أيضًا رسم منحنياتك الخاصة باستخدام منحنيات بيزيه. اختر قائمة إدراج Insert ثم منحنى بيزيه، أو حدد أداة منحنى بيزيه من شريط الأدوات. اتبع الإجراءات الموضّحة في الشكل التالي: يجب أن تحصل الآن على شكل يشبه الشكل التالي: لننشئ الآن أشكالًا أكثر تعقيدًا. إنشاء أشكال ذات زوايا منحنية يمكنك رسم أي شكل له زوايا منحنية تقريبًا باستخدام منحنيات بيزيه، وذلك باتباع الآتي: اختر قائمة إدراج ثم منحنى بيزيه، أو حدد أداة منحنى بيزيه من شريط الأدوات. اتبع الإجراءات الموضَّحة في الشكل الآتي، وابدأ من النقطة S (البداية)، ثم تحرّك باتجاه عقارب الساعة إلى النقطة E (النهاية) كما يلي: ثم يجب أن تحصل على الشكل التالي: تمرين حاول إنشاء الأشكال الموضَّحة في الشكل الآتي للمتعة فقط، إذ يمكنك إنشاء أي شكل تريده باستخدام منحنى بيزيه واحد والتقنيات الموضحة سابقًا. ترجمة -وبتصرّف- للمقال Bezier Curve Basics - Part 1 - Simple Geometric Shapes. اقرأ أيضًا خط الشبكة الأساسي Baseline Grid في برنامج سكريبوس كيف تعزل صورة وتنشئ مسار قطع Clipping Path لتدفق النص في سكريبوس كيفية إنشاء رمز RSS Feed في برنامج سكريبوس Scribus كيفية إنشاء التأثير Distressing Mask في برنامج سكريبوس لإنتاج تأثيرات تعبئة جذابة كيفية إنشاء الظلال في برنامج سكريبوس Scribus
  21. يُعَد تكرار العناصر الدقيق على الصفحة ميزةً مهمةً لكل تطبيق تخطيط أو رسم، حيث يمكن منه خلاله استخدام عملية نسخ ولصق بسيطة لتكرار كائن بصورة مستمرة، ولكن السماح للحاسوب بحساب موضع التكرارات يمكن أن يسهِّل الأمور ويوفِّر كثيرًا من الوقت. يقدِّم برنامج سكريبوس Scribus أداتين قويتين ومتعددتي الاستخدامات لإنشاء العناصر المنسوخة وتحديد موضعها، هما التكرار المتعدد Multiple Duplicate، والتحويل Transform، حيث تتشابه هاتان الميزتان تمامًا في بعض النواحي، ولكن تسمح كلٌّ منهما بطرق مختلفة قليلًا لإنشاء نسخ متعددة لبعض العناصر على صفحتك. التكرار المتعدد Multiple Duplicate يحتوي سكريبوس على عملية بسيطة هي عملية النسخ المطابق Duplicate، والتي يمكن الوصول إليها من قائمة عنصر Item ثم مضاعفة / تحويل، ثم نسخ مطابق Duplicate (أو الاختصارCtrl + D من لوحة المفاتيح)، حيث تعمل هذه العملية على إنشاء نسخة من الكائن المحدد، مع إزاحة مقدارها 10 نقاط في كل من الاتجاهين X وY، وإذا أردت تحديد شكل آخر من أشكال التموضع تلقائيًّا، فعليك استخدام عملية التكرار المتعدد Multiple Duplicate وإنشاء نسخة واحدة فقط. لقد كانت عملية التكرار المتعدد -التي يمكن الوصول إليها من قائمة عنصر ثم مضاعفة / تحويل، ثم نُسخ مطابقة Multiple Duplicate- قبل الإصدار 1.3.5 من سكريبوس؛ عمليةً بسيطةً لإنشاء نسخة واحدة أو أكثر من عنصر، مع وجود إزاحات X وY متتالية بين نسخة ونسخة أخرى. ولا يزال بإمكان هذه العملية العمل بهذه الطريقة، ولكننا سنلقي أولًا نظرةً على طريقة مفيدة أكثر، وهي عملية إنشاء صفوف وأعمدة، حيث لا تنشئ هذه العملية جدولًا، بل تنشئ مصفوفةً مكرَّرةً وبسيطةً من الكائن المحدد. يوضِّح الشكل التالي التبويب "بعدد الصفوف والأعمدة By Rows and Columns" في نافذة التكرار المتعدد: ستؤدي الإعدادات السابقة إلى النسخ المكررة في الشكل الآتي. ومن بين إحدى الميزات التي يجب علينا ملاحظتها؛ هي ميزة "الفجوة الأفقية Horizontal Gap" التي تشير إلى المسافات الرأسية بين الأعمدة. يوضِّح الشكل التالي التبويب الآخر من نافذة التكرار المتعدد، وهو تبويب "بعدد النسخ By Number of Copies": يعمل هذا الخيار بطريقة مشابهة جدًا لعملية التكرار المتعدد Multiple Duplicate في الإصدارات السابقة، ولكن نجد هنا خيارًا لإنشاء فجوة بين النسخ بدلًا من الإزاحة بمقدار معين -والذي لا يزال خيارًا متاحًا-، حيث ستنتج هذه الإعدادات أحد الصفوف التي تراها في المثال أعلاه. لاحظ أن 3 نسخ بالإضافة إلى النسخ الأصلية ستنُتِج لنا 4 أعمدة. يوجد أيضًا الخيار تدوير Rotation في الشكل السابق، وبالتالي يمكنك أيضًا إضافة بعض التدوير لكل نسخة من هذه النسخ المتكررة. يوضِّح الشكل التالي إنشاء 3 نسخ مع فجوة بمقدار 8 نقاط وتدوير بمقدار 10 درجات بين كل نسخة وأخرى: يُعَد الخط المنقط الموجود في الشكل السابق دليلًا أفقيًا يوضَع لإظهار أن محور الدوران هو حول النقطة الأساسية، وهي عندئذٍ زاوية الإطار اليسرى العليوية. لاحظ كيفية تدوير المحتوى مع الإطار. التحويل Transform أبسط استخدام لخيار التحويل، هو الذي يمكن الوصول إليه من قائمة عنصر ثم "مضاعفة / تحويل"، يليها تحويل Transform، وهو عملية تعديل كائن من خلال استخدام إحدى الطرق التالية: التحجيم Scaling. الترجمة Translation. التدوير Rotation. الانحراف Skewing. تشير "الترجمة Translation" إلى تحريك كائن يمينًا أو يسارًا، ولأعلى أو لأسفل في المستند. وتتوفَّر كل من هذه العمليات السابقة في مكان آخر في سكريبوس، لذلك لا يُعَد استخدام إحدى هذه العمليات فعَّالًا لتغيير كائن ما، وتكمن قيمة ميزة التحويل في أنه يمكنك إجراء هذه العمليات تسلسليًّا، كما يمكنك استخدامها لإنشاء نسخ متسلسلة من الكائن، وإجراء التعديلات في كل مرة بصورة تسلسلية أيضًا. يوضِّح الشكل التالي الخيارات المتعددة عند تحديد هذه العمليات: إن المجموعات المحتملة لهذه العمليات لا حصر لها، لذلك فإن التجربة ضرورية للتعرف على التأثيرات المختلفة لهذه المجموعات من العمليات. لنُلقي نظرةً على مثال بسيط، حيث نترجم فيه صورةً ثم ندوِّر كل نسخة بمقدار 10 درجات، إذ يشبه هذا المثال تجربة التكرار المتعدد أعلاه، ولكن النتيجة مختلفة تمامًا كما يلي: لقد بدأت العملية بالترجمة ثم التدوير، ولكن هنا كانت عملية الترجمة التالية على طول المحور الأفقي بعد التدوير للإطار رقم 2، ثم تكررت العملية مرةً أخرى. لاحظ أن الصورة لا تُدوَّر، حيث تحدث ظاهرة مماثلة مع إطار النص، إذ تبقى سطور النص محاذيةً للصفحة أفقيًّا، ولا تُدوَّر مع الإطار. ستجد أيضًا أن النتائج مختلفةً إذا أجريت التدوير أولًا ثم ترجمة الإطار، لذلك يُعَد ترتيب العمليات المختلفة مهمًّا. لقد طبَّقنا على المثال التالي إعدادات ترجمة بمقدار 140 نقطة، ثم تحجيم بمقدار 60%. لاحظ تصغير مقدار الترجمة مع كل نسخة بنسبة 60%، بغض النظر عن التحجيم التسلسلي المتوقع. لقد دمجنا في المثال البسيط التالي الذي يوضِّح تأثيرات الانحراف ترجمةً بمقدار 130 نقطة، مع انحراف أفقي بمقدار 5 درجات، وإذا طبَّقنا انحرافًا رأسيًّا أيضًا؛ فستنحرف معها الإطارات تسلسليًّا في اتجاه رأسي، وذلك على غرار ما رأيناه في عملية التدوير أعلاه. لقد بدأت جميع الأمثلة السابقة بصورةٍ ضمن إطار، وذلك مع تغيُّر حجمها ليناسب هذا الإطار، ولكن سيحدث شيء مختلف تمامًا إذا استخدمنا التحجيم الحر Free Scaling، حيث لا تُزاح الصورة، بل تكون نسخة الإطار الجديدة بمثابة تكملة للصورة، كما لو أن هذا الجزء منها موضوع هناك في الأصل، وبالتالي يجب ضبط تحجيم الصورة لتكون في كل نسخة جديدة. لذلك تعمل هذه العملية مثل لصق الصورة نفسها في عدة إطارات، وقد طبَّقنا في هذا المثال ترجمةً بمقدار 130 نقطة، ثم انحرافًا أفقيًّا ورأسيًّا بمقدار 5 درجات لكل منهما: يمكننا تجنُّب حسابات المحتوى هذه إذا استخدمنا عملية التحويل على شكل أو مضلع، حيث يتمثل أحد قيود التحويل في أنه لا توجد طريقة لتجربة الإعدادات مثل المعاينة، كما لا توجد طريقة لحفظ مجموعة من العمليات لاستخدامها لاحقًا، لذلك سينتهي الأمر بالمحاولة والخطأ، وهنا يجب إما تذكر الإعدادات أو تدوين ملاحظات بها لتجربة إعدادات مختلفة. يوضِّح الشكل التالي مثالًا عن سهم متحوِّل عرضه حوالي 41 نقطة، ومدوَّر بمقدار 30 درجة، ثم مُترجَم بمقدار 46 نقطة على 11 نسخة: إذ يضيف تدوير 11 نسخة بمقدار 30 نقطة ما يصل إلى 330 درجة، لذلك من المتوقع أن تملأ هذه النسخ دائرةً مثل الشكل السابق، كما قد تحتاج إلى التلاعب بالترجمة أو بالنقطة الأساسية بهدف الحصول على التأثير المطلوب. ترجمة -وبتصرُّف- للمقال Help:Manual Multiduplicatetransform. اقرأ أيضًا دليل موجز عن إنشاء النماذج Forms في سكريبوس Scribus كيفية وضع نص على مسار باستخدام برنامج سكريبوس Scribus أساسيات منحنى بيزيه Bezier Curve في سكريبوس خط الشبكة الأساسي Baseline Grid في برنامج سكريبوس
  22. قد نكون لديك في بعض الأحيان صورة تريد أن يتدفق النص حولها دون ظهور خلفية الصورة، ويمكنك تطبيق ذلك عن طريق عزل الصورة وإنشاء مسار قطع ليتدفق النص حولها في برنامج سكريبوس Scribus. يتكون هذا المقال من جزأين: يُطبَّق الجزء الأول في برنامج جيمب GIMP، ويطبَّق الجزء الثاني في برنامج سكريبوس سكريبوس. الجزء الأول على برنامج جيمب GIMP ستحتاج أولًا إلى صورة للعمل عليها، ويمكنك استخدام أي صورة تريدها تقريبًا، ولكن إذا أردت متابعة الخطوات معنا، فستحتاج إلى تنزيل الصورة الموضّحة في الشكل التالي (ستكون نسخة الصورة ذات القياس 1280x850 رائعة ولكن الخيار متروك لك): يجب أن يكون للصورة التي تختارها "تركيز" رئيسي واحد وأن تكون الخلفية "دون تفاصيل" نسبيًا، فكلما كانت الخلفية دون تفاصيل كثيرة، كلما كان عزل الصورة أسهل، كما يُعَدّ وجود الشعر والفراء في الصورة كابوسًا للعزل الصحيح الذي سيحتاج كثيرًا من الوقت. الخطوة أ: التحديد Selection حمّل الصورة في برنامج جيمب. ستطبّق الكثير من العمل الدقيق، لذلك يُفضَّل التكبير بمقدار 200% مثلًا. حدد "أداة التحديد الحر Free Select Tool" من لوحة الأدوات Toolbox (وهي تلك الأداة التي تشبه حبل رعاة البقر). تأكّد من وضع علامة على "التنعيم Antialiasing". تأكّد من تحديد "نعّم الحواف Feather edges" أيضًا واضبط "نصف القطر Radius" على القيمة 2. سيكون إعداد تحسين الحواف وتنعيمها السابق جيدًا مع معظم الصور، ولكن يمكنك تجربة استخدام إعدادات مختلفة. نريد عزل السيارة في الصورة السابقة من خلال تحديد السيارة دون تضمين الخلفية، من خلال رسم خط حول ما تريد عزله، وهنا عليك باتباع الخطوات الآتية: انقر في المكان الذي تريد أن تبدأ منه ثم استمر في النقر حول الشكل الذي تريد عزله عن الصورة كما في الشكل التالي: لا تحتاج في هذه المرحلة إلى أن تكون دقيقًا جدًا، إذ يمكنك الرجوع إلى الوراء وتغيير أي أخطاء طفيفة، حيث يؤدي الضغط على مفتاح Backspace من لوحة المفاتيح إلى التراجع عن آخر نقطة نقرت عليها، ولكن كلما استغرقت وقتًا أطول في التحديد الصحيح، كانت النتيجة أفضل. استخدم مسافات صغيرة بين النقرات عند المنحنيات، ولكن استخدم مسافات طويلة للحواف المستقيمة مثل الجانب السفلي من السيارة وأسفل الإطارات. هدفك الأساسي هو رسم خط باستخدام أداة التحديد حول الكائن الذي تريد عزله مع وجود قليل من الخلفية داخل التحديد كما في الشكل التالي: إن لم متأكدًا من مكان رسم خط التحديد، فارسم قليلًا داخل جزء الصورة الذي تحاول عزله بدلًا من الرسم خارجه. يمكنك جعل التحديد بسيطًا كما تريد، ولكنك سترى التأثير بصورة أفضل إذا أخذت الوقت الكافي لتحديد الكائن تحديدًا صحيحًا. الخطوة ب: العزل Isolation اختر قائمة تحديد Select ثم اعكس Invert بمجرد أن تحدّد صورتك وتكون راضٍ عنه. يؤدي ذلك إلى عكس التحديد، أي تصبح الخلفية هي المحدَّدة. حدد "أداة الملء بالدلو Bucket Fill Tool" من لوحة الأدوات (تشبه هذه الأداة الدلو). انتقل إلى عينات الألوان الموجودة أسفل الأدوات مباشرةً، وتأكّد من أن اللون الأبيض هو لون المقدمة كما في الشكل التالي (سنستخدم اللون الأبيض هنا لأن الصفحة التي ستضع الصورة عليها بيضاء): تأكد من وضع علامة على "لون ملء صدر الصورة FG color fill" (أسفل عينات الألوان). تأكد أيضًا من وضع علامة على "ملء التحديد الكامل Fill whole selection". حرّك المؤشر إلى خلفية الصورة ثم انقر عليها. وستُمحَى بذلك الخلفية كما في الشكل التالي: إن لم تكن راضيًا عمّا محوته، فتراجع عن ذلك وغيّر التحديد باستخدام أيٍّ من أدوات التحديد، وهنا اتبع الآتي: اختر قائمة تحديد Select ثم اعكس Invert لإعادة التحديد إلى الصورة بدلًا من الخلفية. اختر قائمة تحديد مرةً أخرى ثم مدّد التحديد Grow. أدخِل الحجم الذي تريد تمديد التحديد به (استخدم القيمة 32 بكسلًا، لأنك لا تريد أن يلمس النص الصورة ولكن يمكنك استخدام القيمة التي تريدها). يجب أن ترى الآن أن التحديد قد زاد وأن هناك "فراغًا" حول الصورة كما في الشكل التالي: الخطوة ج: التعديلات Adjustments ضع في بالك أن برنامج سكريبوس سيبذل قصارى جهده لملاءمة النص حول الصورة بأكثر الطرق فعاليةً، أي أنه سيحاول وضع النص حيثما استطاع بما في ذلك المناطق "المقّعرة" مثل المنطقة الموجودة أسفل السيارة. لذلك يجب إزالة هذه المناطق من خلال إضافة المزيد إلى التحديد. حدّد "أداة التحديد الحر Free Select Tool" من لوحة الأدوات مرةً أخرى. حدّد النمط "أضِف إلى التحديد الحالي Add to the current selection" في خيارات "التحديد الحر" تحت الأدوات. ارسم تحديدًا جديدًا ينتقل من أسفل إطار السيارة الخلفي إلى أسفل الإطار الأمامي، ثم إلى داخل التحديد الأصلي أسفل قوس العجلة الأمامية، ثم أسفل قوس العجلة الخلفية، ثم ارجع إلى نقطة البداية. ثم استخدم نفس الأسلوب لإزالة الفراغ من أسفل مقدمة السيارة مثل الشكل التالي: يجب الآن إنشاء مسار قطع للصورة حتى يتدفق النص حولها. يمكنك أيضًا في معظم الحالات التقليص من الحجم الكلي للصورة لإزالة كل المساحة البيضاء غير المطلوبة خارج التحديد، ولكنك لست بحاجة ذلك هنا. الخطوة د: مسار القطع Clipping Path اختر قائمة تحديد ثم إلى المسار To Path. سينشئ برنامج جيمب الآن مسار القطع وفقًا للتحديد، وقد يستغرق هذا بعض الوقت على الحواسيب البطيئة مع استخدام صورة ذات حجم كبير، كما سيظهر شريط الحالة في أسفل نافذة جيمب الرئيسية تقدّمه. ثم اختر قائمة ملف File ثم تصدير كـ Export As. اضبط نوع الملف على النوع TIFF، وأعطِ الملف اسمًا مناسبًا إذا أردت ذلك، ثم اضغط على الزر تصدير Export. اضبط أي خيارات ضغط تريدها أو اقبل الخيار الافتراضي، واضغط على زر تصدير Export مرةً أخرى، ويهذا تكون قد أصبحت لديك الآن صورة لها مسار. الجزء الثاني: على برنامج سكريبوس Scribus ضع الصورة في مستند مع بعض النص حولها. الخطوة أ: الصورة الأساسية انتقل إلى برنامج سكريبوس وافتح مستندًا جديدًا أو افتح مستندًا تريد وضع صورتك فيه. أنشئ إطار الصورة واجعله كبيرًا جدًا لتتمكّن من الحصول على الصورة بأكملها. انقر بزر الفأرة الأيمن على إطار الصورة واختر استيراد صورة Get Image. اختر صورة TIFF واضغط على زر موافق. قد تحتاج إلى تغيير حجم صورتك للحصول عليها بالطريقة التي تريدها داخل الإطار (نفّذ ذلك قبل المتابعة). الخطوة ب: النص أنشئ إطار نص فوق إطار الصورة، بحيث أن مكان وضعه متروك لك اعتمادًا على التأثير الذي تريد رؤيته، لكننا سنجعل إطار النص أكبر قليلًا من إطار الصورة لنتمكّن من رؤية التأثير. انقر بزر الفأرة الأيمن على إطار النص واختر نص نموذجي Sample text. يمكنك تحميل النص الخاص بك أو كتابته باستخدام المحرّر مثل المعتاد، ولكننا استخدمنا نصًا نموذجيًا لأغراض التوضيح. اضغط على زر موافق لإنشاء نص نموذجي. اذهب إلى تبويب نص Text في نافذة خصائص Properties (أو نافذة خصائص النص من قائمة نوافذ ثم خصائص المحتوى في الإصدار 1.5.7 من برنامج سكريبوس)، واجعل عدد الأعمدة 2 واجعل الفراغ Gap بينهما 20 نقطة من تبويب "الأعمدة وتباعد النص Columns and Text Distances". يجب كتابة النص على جميع أنحاء الصورة كما في الشكل التالي، ولكن هذا جيد حاليًا. انقر بزر الفأرة الأيمن على إطار النص واختر المستوى Level ثم أرسله للأسفل Lower to Bottom. يجب أن تكون الصورة فوق النص، ولكن هناك الكثير من المساحة البيضاء. الخطوة ج: استخدام مسار القطع يجب أن تخبر سكريبوس الآن باستخدام مسار القطع الذي أنشأته مسبقًا. انقر بزر الفأرة الأيمن على الصورة واختر خصائص الصورة الموسَّعة Extended Image Properties. اختر "التحديد Selection"، حيث يمكنك رؤية شكل المسار، ثم اضغط على الزر "موافق". يوجد الآن "حد Boundary" وهو الفراغ الذي أنشأته عن طريق "تمديد Growing" التحديد مسبقًا حول الصورة، ولكن النص لا يتدفق حولها. حدّد الخيار "التفاف النص حول مسار قصاصة الصورة Use Image Clip Path" في التبويب شكل Shape من نافذة خصائص Properties. وبهذا يكون قد تدفّقَ النص الآن حول الصورة كما هو الحال في الشكل التالي: الخلاصة هناك العديد من الطرق المختلفة التي يمكنك من خلالها إنشاء تحديد في برنامج جيمب قبل إنشاء مسار القطع وجميعها لها عيوبها ومزاياها اعتمادًا على التأثير الذي تحاول تحقيقه. جرّب "أداة التحديد الضبابي Fuzzy Select Tool" مع الصور التي تكون الخلفية فيها غالبًا لونًا واحدًا على سبيل المثال، لتعرف ما إذا كان بإمكانك إنشاء عكس التحديد - مثل التحديد الذي تحصل عليه في بداية الخطوة ب: التحديد - بنقرة واحدة فقط. ترجمة -وبتصرّف- للمقال How to Isolate an image and create a clipping path for text flow. اقرأ أيضًا كيفية رسم صندوق منظوري الشكل في برنامج سكريبوس Scribus كيفية إنشاء تأثير نص مخيف في برنامج سكريبوس Scribus كيفية إنشاء رمز RSS Feed في برنامج سكريبوس Scribus كيفية إنشاء رسوم من النمط Pop Art Explosion في برنامج سكريبوس Scribus كيفية التعامل مع محرر القصص Story Editor في برنامج سكريبوس Scribus
  23. لقد رأينا طبقاتٍ كافية من تسلسل بروتوكول الشبكة الهرمي لفهم كيفية نقل البيانات بين العمليات عبر الشبكات غير المتجانسة، وسننتقل الآن إلى مشكلةٍ تمتد على كامل مكدّس البروتوكولات، وهي كيفية تخصيص الموارد بفعاليةٍ وعدالةٍ بين مجموعةٍ من المستخدمين المتنافسين، حيث تشمل الموارد المشاركة حيّز نطاق الروابط التراسلي والمخازن المؤقتة على الموجّهات أو المبدّلات، إذ تُوضَع الرزم في رتلٍ في انتظار الإرسال. وتتنافس الرزم على موجّهٍ لاستخدام رابطٍ، حيث تُوضع كل رزمةٍ متنافسة في رتلٍ انتظارًا لدورها وإرسالها عبر الرابط. عند تنافس عدد كبير جدًا من الرزم على نفس الرابط يمتلئ الرتل ويحدث شيئان غير مرغوبٍ فيهما هما: تعرُّض الرزم لتأخير طرفٍ إلى طرف، وفي أسوأ الحالات يحدث طفحانًا للأرتال وإسقاطًا drop للرزم، ويُقال هنا أن الشبكة مزدحمة عندما يستمر حدوث الأرتال الطويلة ويصبح إسقاط الرزم أمرًا شائعًا، لذلك توفِّر معظم الشبكات آليةً للتحكم في الازدحام للتعامل مع مثل هذا الموقف. يُعَد التحكم في الازدحام وتخصيص الموارد وجهان لعملة واحدة، أي من الممكن تجنب الازدحام إذا لعبت الشبكة دورًا نشطًا في تخصيص الموارد مثل جدولة أي دارةٍ افتراضية يمكنها استخدام رابط فيزيائي معيّن خلال فترةٍ زمنيةٍ معينة، وهذا ما يجعل التحكم في الازدحام أمرًا غير ضروري. من الصعب تخصيص موارد الشبكة بدقة لأن الموارد المعنية موزعةٌ في جميع أنحاء الشبكة؛ وبالتالي يجب جدولة الروابط المتعددة التي تربط سلسلةً من الموجّهات. من جهةٍ أخرى، يمكن السماح دائمًا لمصادر الرزم بإرسال أكبر قدرٍ تريده من البيانات ثم التعافي من الازدحام في حالة حدوثه، وهذا هو النهج الأسهل رغم أنه قد يكون معطِّلًا، وذلك لأن الشبكة قد تتجاهل العديد من الرزم قبل أن يحدث التحكم في الازدحام. يكون الشعور بالحاجة إلى تخصيص الموارد بين المستخدمين المتنافسين شديدًا في الأوقات التي تكون فيها الشبكة مزدحمة، أي عندما تصبح الموارد قليلةً مقابل الطلب. هناك أيضًا حلول في الوسط، حيث تُتخَذ قرارات تخصيصٍ غير دقيقة، ولكن لا يزال من الممكن حدوث الازدحام، وبالتالي لا تزال هناك حاجة إلى آلية للتعافي منه، ولا يهم حقًا فيما إذا سُميت مثل تلك الحلول بحلول التحكم في الازدحام المختلطة أو تخصيص الموارد أو كليهما. يتضمن التحكم في الازدحام وتخصيص الموارد كلًا من المضيفين وعناصر الشبكة مثل الموجهات، ويمكن استخدام أنظمة أرتال مختلفة في عناصر الشبكة للتحكم بترتيب إرسال الرزم والتحكم في الرزم المُهمَلة dropped، وكذلك فصل حركة المرور لمنع رزم أحد المستخدمين من التأثير غير المناسب على رزم مستخدمٍ آخر؛ حيث تحدِّد آلية التحكم في الازدحام في المضيفين النهائيين مدى السرعة المسموح بها للمصادر بإرسال الرزم في محاولةٍ لمنع حدوث الازدحام في المقام الأول، وللمساعدة في القضاء على الازدحام في حالة حدوثه. سنبدأ بنظرة عامة على التحكم في الازدحام وتخصيص الموارد، ونناقش بعد ذلك مختلف أنظمة الأرتال الممكن تنفيذها على الموجّهات داخل الشبكة متبوعةً بوصف خوارزمية التحكم في الازدحام التي يوفرها بروتوكول TCP على المضيفين، بعدها سنكتشف العديد من التقنيات التي تتضمن كلًا من الموجهات والمضيفين، والتي تهدف إلى تجنب الازدحام قبل أن يصبح مشكلة، وفي الأخير سندرس المجال الواسع لجودة الخدمة. يجب الأخذ في الحسبان احتياجات التطبيقات لتلقي مستويات مختلفة من تخصيص الموارد في الشبكة مع وصف عددٍ من الطرق الممكن لتلك التطبيقات طلب هذه الموارد من خلالها وإمكانية تلبية الشبكة لها. مشاكل تخصيص الموارد يُعد تخصيص الموارد والتحكم في الازدحام من القضايا المعقدة التي كانت موضوع الكثير من الدراسات منذ تصميم الشبكة الأولى، ولا تزال ضمن مجالات بحث نشطة. أحد العوامل التي تجعل هذه القضايا معقدةً هو أنها ليست معزولةً بمستوى واحد من تسلسل البروتوكول الهرمي. يُطبَّق تخصيص الموارد جزئيًا في الموجّهات والمبدلات والروابط داخل الشبكة والجزء الآخر في بروتوكول النقل الذي يعمل على المضيفين النهائيين، وقد تستخدم الأنظمة الطرفية بروتوكولات إصدار الإشارات signalling لنقل متطلباتها من الموارد إلى عقد الشبكة التي تستجيب بمعلوماتٍ حول توفُّر الموارد. يتمثل أحد الأهداف الرئيسية لهذا الفصل في تحديد إطارٍ يمكن من خلاله فهم هذه الآليات، إلى جانب تقديم التفاصيل ذات الصلة حول عينة تمثيلية من الآليات. يجب توضيح مصطلحاتنا قبل المُضي قدمًا، حيث نعني بعملية تخصيص الموارد؛ العمليةَ التي تحاول من خلالها عناصر الشبكة تلبية المتطلبات المتنافسة التي تمتلكها التطبيقات لموارد الشبكة، مثل مساحة المخزن المؤقت وحيّز نطاق الرابط التراسلي في الموجّهات أو المبدلات. من الممكن عدم تلبية جميع المتطلبات في كثير من الأحيان، مما يعني أن بعض المستخدِمين أو التطبيقات قد تتلقى موارد شبكة أقل مما تريد، ويتمثل جزء من مشكلة تخصيص الموارد في تحديد متى يجب أن تقول لا ولمن. نستخدم مصطلح التحكم في الازدحام لوصف الجهود التي تبذلها عقد الشبكة لمنع حالات الحِمل الزائد أو الاستجابة لها. وبما أن الازدحام سيئٌ عمومًا للجميع، فلابُد من تخفيف الازدحام أو منعه في المقام الأول، ويمكن تحقيق ذلك ببساطة عن طريق إقناع عددٍ قليل من المضيفين بالتوقف عن الإرسال وبالتالي تحسين الوضع لأي شخصٍ آخر، ولكن من الشائع أكثر أن يكون لآليات التحكم في الازدحام بعض جوانب الإنصاف، حيث أنها تحاول مشاركة الألم بين جميع المستخدمين بدلًا من التسبب في ألم شديد لعدد قليل، وهكذا نرى أن العديد من آليات التحكم في الازدحام تحتوي على نوعٍ من تخصيص الموارد مضمَّنٌ فيها. من المهم أيضًا فهم الفرق بين التحكم في التدفق flow control والتحكم في الازدحام congestion control؛ حيث يتضمن التحكم في التدفق منع المرسل السريع من تجاوز مستقبِلٍ بطيء؛ بينما يهدف التحكم في الازدحام إلى منع مجموعةٍ من المرسلين من إرسال الكثير من البيانات إلى الشبكة بسبب نقص الموارد في مرحلةٍ ما، ويُخلَط غالبًا بين هذين المفهومين حيث يتشاركان أيضًا في بعض الآليات. نموذج الشبكة نبدأ بتحديد ثلاث سماتٍ بارزةٍ لمعمارية الشبكة، ولكن الجزء الأكبر من هذا القسم هو ملخصٌ للأفكار المقدَّمة في الفصول السابقة ذات الصلة بمشكلة تخصيص الموارد. شبكة تبديل الرزم سنفترض تخصيص الموارد في شبكة تبديل الرزم Packet-Switched Network (أو الإنترنت)، والتي تتكون من روابط ومبدلاتٍ (أو موجّهات) متعددة، كما سنستخدم مصطلح الموجّه طوال مناقشتنا نظرًا لأن معظم الآليات الموضحة في هذا الفصل مصمَّمة للاستخدام على شبكة الإنترنت، وبالتالي عُرِّفت في الأصل باستخدام الموجهات بدلًا من المبدلات، ولكن المشكلة هي نفسها سواءٌ كانت على شبكةٍ أو عبر شبكةٍ متشابكة internetwork مثل شبكة الإنترنت. قد يكون لمصدرٍ معين في مثل هذه البيئة سعةً كافيةً على الرابط الصادر المباشر لإرسال رزمة، ولكن تواجه الرزم رابطًا تستخدمه مصادرُ حركة مرور مختلفة في مكانٍ ما في منتصف الشبكة. يوضح الشكل الآتي هذا الموقف، فهناك رابطان عاليا السرعة يغذّيان رابطًا منخفض السرعة؛ وهذا على عكس شبكات الوصول المشترك مثل شبكة إيثرنت والشبكات اللاسلكية، حيث يمكن للمصدر مراقبة حركة المرور مباشرةً على الشبكة واتخاذ قرارٍ بإرسال رزمةٍ أم لا. لقد رأينا فعليًا الخوارزميات المستخدمة لتخصيص حيز النطاق التراسلي على شبكات الوصول المشترك مثل شبكات Ethernet وWi-Fi، حيث تُعَد خوارزميات التحكم في الوصول هذه مماثلة إلى حدٍ ما لخوارزميات التحكم في الازدحام في شبكة التبديل. لاحظ أن مشكلة التحكم في الازدحام مختلفة عن التوجيه، حيث يمكن أن يُسنَد للرابط المزدحم وزن حافةٍ كبير من خلال بروتوكول التوجيه، لذلك فإن الموجّهات ستسير حوله، ولكن لن يحل "التوجيه حول routing around" الرابط المزدحم مشكلة الازدحام. لا نحتاج إلى النظر لأبعد من الشبكة البسيطة الموضحة في الشكل الآتي لرؤية هذا، حيث يجب أن تتدفق كل حركة المرور عبر نفس الموجّه للوصول إلى الوجهة. قد يكون هذا مثالًا متطرفًا، إلا أنه من الشائع أن يكون لديك موجّهٌ معين لا يمكن التوجيه حوله، فربما يصبح هذا الموجه مزدحمًا، ولا يوجد شيءٌ يمكن أن تفعله آلية التوجيه حيال ذلك. يسمى هذا الموجه المزدحم أحيانًا "موجّه عنق الزجاجة bottleneck router". التدفقات عديمة الاتصال نفترض أن الشبكة عديمة الاتصال Connectionless بصورةٍ أساسية بالنسبة للكثير من مناقشتنا، ومع أية خدمة موجَّهةٍ بالاتصال، ومطبَّقةٍ في بروتوكول النقل الذي يعمل على المضيفين النهائيين. هذا هو بالضبط نموذج الإنترنت، حيث يوفِّر بروتوكول IP خدمة توصيل مخطط بيانات عديمة الاتصال ويطبّق بروتوكول TCP تجريد اتصال من طرفٍ إلى طرف مع الملاحظة أن هذا الافتراض لا ينطبق على شبكات الدارات الافتراضية مثل ATM وX.25، حيث تعبر في مثل هذه الشبكات رسالةُ إعداد الاتصال الشبكةَ عند إنشاء دارة، وتحتفظ رسالة الإعداد هذه بمجموعة من المخازن المؤقتة للاتصال في كل موجّه، مما يوفر شكلًا من أشكال التحكم في الازدحام، حيث يُنشَأ اتصالٌ فقط إذا كان من الممكن تخصيص مخازن مؤقتة كافية له في كل موجه، لكن يتمثل العيب الرئيسي في هذا النهج في أنه يؤدي إلى نقص استخدام الموارد، حيث لا تتوفر المخازن المؤقتة المحجوزة لدارة معينة للاستخدام من قِبل حركة المرور الأخرى، حتى لو لم تكن تستخدمها تلك الدارة حاليًا. ينصب التركيز في هذا الفصل على مناهج تخصيص الموارد التي تنطبق في شبكةٍ متشابكة، وبالتالي فإننا نركز بصورةٍ أساسية على الشبكات عديمة الاتصال. نحتاج إلى تعديل مصطلح "عديمة الاتصال" لأن تصنيفنا للشبكات على أنها إما عديمة الاتصال أو موجَّهة بالاتصال مقيدٌ للغاية؛ فهناك منطقةٌ رمادية بينهما. يُعَد الافتراض القائل بأن جميع مخططات البيانات مستقلة تمامًا في شبكةٍ عديمة الاتصال افتراضًا قويًا للغاية، حيث تُبدَّل بالتأكيد مخططات البيانات بصورةٍ مستقلة، ولكن عادةً ما يكون هناك تدفقٌ من مخططات البيانات بين زوجٍ معينٍ من المضيفين عبر مجموعة معينة من الموجّهات، كما أن فكرة عدِّ التدفق سلسلةً من الرزم المرسلة بين زوج المصدر / الوجهة، واتباع نفس المسار عبر الشبكة فكرةٌ مجردةٌ ومهمةٌ في سياق تخصيص الموارد وهي ماسنستخدمه في هذا الفصل. تتمثل إحدى قوى تجريد التدفق في إمكانية تحديد التدفقات بدرجاتٍ مختلفة، حيث يمكن مثلًا أن يكون التدفق من مضيفٍ إلى مضيف، أي لهما نفس عناوين مضيف المصدر / الوجهة، أو عمليةٍ إلى عملية أي لهما نفس أزواج المصدر / الوجهة المضيف / المنفذ. إن مصطلح التدفق في الحالة الثانية هو في الأساس نفس مصطلح القناة كما كنا نستخدمه في هذا الكتاب، وسبب تقديمنا لمصطلحٍ جديد هو أن التدفق مرئي للموجّهات داخل الشبكة، في حين أن القناة هي تجريد من طرفٍ إلى طرف. يوضح الشكل التالي عدة تدفقات تمر عبر سلسلةٍ من الموجّهات: بما أن العديد من الرزم ذات الصلة تتدفق عبر كل موجّه، فمن المنطقي في بعض الأحيان الاحتفاظ ببعض معلومات الحالة لكل تدفق، وهي المعلومات الممكن استخدامها لاتخاذ قرارات تخصيص الموارد حول الرزم التي تنتمي إلى التدفق، وتسمى هذه الحالة أحيانًا الحالة اللينة soft state، ويتمثل الاختلاف الرئيسي بين الحالة اللينة والحالة القاسية أو الصلبة hard state؛ في عدم الإلتزام دائمًا بإنشاء الحالة اللينة وإزالتها بصورةٍ صريحة عن طريق إصدار الإشارات، كما تمثّل الحالة اللينة أرضيةً وسطية بين شبكةٍ عديمة الاتصال بحتة لا تحتفظ بأية حالةٍ في الموجّهات والشبكة الموجَّهة بالاتصال البحت، والتي تحافظ على الحالة الصلبة في الموجّهات. لا تعتمد الإدارة الصحيحة للشبكة على وجود الحالة اللينة وتُوجَّه كل رزمة بصورةٍ صحيحة بغض النظر عن هذه الحالة، وسيكون الموجّه أكثر قدرةً على التعامل مع الرزمة عندما تنتمي هذه الرزمة إلى تدفقٍ يحتفظ فيه الموجّه حاليًا بالحالة اللينة. لاحظ أنه يمكن تحديد التدفق ضمنيًا أو بصورةٍ واضحة، حيث يراقب كل موجّهٍ في الحالة الأولى الرزمَ المنتقلة بين نفس زوج المصدر / الوجهة، عن طريق فحص العناوين الموجودة في الترويسة، ويتعامل مع هذه الرزم على أنها تنتمي إلى نفس التدفق بغرض التحكم في الازدحام، بينما يرسل المصدر في الحالة الثانية رسالة إعداد التدفق عبر الشبكة معلنًا أن تدفق الرزم على وشك البدء. يمكن القول أن التدفقات الصريحة explicit flows لا تختلف عن الاتصال عبر شبكةٍ موجهةٍ بالاتصال، ولكن لا بد من لفت الانتباه إلى هذه الحالة نظرًا لعدم تضمُّن التدفق أية دلالات من طرفٍ إلى طرف حتى عند تأسيسه بصورةٍ صريحة وعدم شموله للتسليم الموثوق والمرتّب لدارةٍ افتراضية، فهو موجودٌ ببساطة لغرض تخصيص الموارد. سنرى أمثلةً على التدفقات الضمنية والصريحة في هذا الفصل. نموذج الخدمة سنركز في القسم الأول من هذا الفصل على الآليات التي تفترض نموذج خدمة الإنترنت بأفضل جهد، والذي تُعامَل فيه جميع الرزم معاملةً متساويةً مع عدم إعطاء المضيف النهائي أية فرصة لمطالبة الشبكة بمنح بعض الرزم أو التدفقات ضماناتٍ معينة أو خدمة تفضيلية. وسيكون موضوع القسم اللاحق هو تحديد نموذج خدمة يدعم نوعًا من الخدمة أو الضمان المفضل، مثل ضمان حيز النطاق التراسلي المطلوب لبث الفيديو، ويقال أن نموذج الخدمة هذا يوفر جودة خدمةٍ QoS متعددة. هناك في الواقع مجموعةٌ من الاحتمالات تتراوح من نموذج خدمة أفضل جهد بحت إلى نموذجٍ تتلقى فيه التدفقات الفردية ضماناتٍ كميّة بجودة الخدمة، ويتمثل أحد أكبر التحديات في تحديد نموذج خدمةٍ يلبي احتياجات مجموعةٍ واسعة من التطبيقات حتى تلك التطبيقات التي ستُخترع في المستقبل. تصنيف آليات تخصيص الموارد هناك طرقٌ لا حصر لها تختلف فيها آليات تخصيص الموارد، لذا فإن إنشاء تصنيفٍ شامل هو اقتراحٌ صعب. نفسّر حاليًا ثلاثة أبعاد يمكن من خلالها وصف آليات تخصيص الموارد. التصنيف المتمحور حول الموجه مقابل التصنيف المتمحور حول المضيف يمكن تصنيف آليات تخصيص الموارد إلى مجموعتين كبيرتين: تلك التي تعالج المشكلة من داخل الشبكة أي في الموجهات أو المبدلات على سبيل المثال، وتلك التي تعالج المشكلة من حواف الشبكة، أي في المضيفين وربما داخل بروتوكول النقل، وذلك نظرًا لتشارُك الموجّهات داخل الشبكة والمضيفين على حواف الشبكة في تخصيص الموارد، فإن المشكلة الحقيقية تكمن في المكان الذي يقع فيه معظم العبء. في التصميم المتمحور حول الموجّه Router-Centric سيتحمل كل موجهٍ مسؤولية تحديد وقت إعادة توجيه الرزم واختيار الرزم التي ستُهمَل، وكذلك إعلام المضيفين الذين ينشئون حركة مرور الشبكة بعدد الرزم المسموح لهم بإرسالها؛ أما في التصميم المتمحور حول المضيف Host-Centric، فسيراقب المضيفون النهائيون ظروف الشبكة (عدد الرزم التي يحصلون عليها بنجاح عبر الشبكة على سبيل المثال) ويعدّلون سلوكهم وفقًا لذلك. نلاحظ أن هاتين المجموعتين ليستا متعارضتين، فعلى سبيل المثال لا تزال تتوقع الشبكة التي تضع العبء الأساسي في إدارة الازدحام على الموجّهات التزام المضيفون النهائيون بأية رسائل استشارية ترسلها الموجّهات، بينما لا تزال هناك سياسةٌ معينة مهما كانت بسيطة للموجهات في الشبكات التي تستخدم التحكم في الازدحام من طرفٍ إلى طرف لتحديد الرزم التي ستُهمَل عند طفحان الأرتال الخاصة بها. التصنيف القائم على الحجز مقابل التصنيف القائم على الاستجابة الراجعة الطريقة الثانية التي تُصنَّف بها آليات تخصيص الموارد في بعض الأحيان؛ هي وفقًا لاستخدامها الحجز Reservation أو الاستجابة الراجعة Feedback. وفي نظامٍ قائمٍ على الحجز، ستطلب بعض الكيانات مثل المضيف النهائي من الشبكة قدرًا معينًا من السعة لتخصيصها للتدفق، ثم يخصّص كل موجّهٍ بعد ذلك مواردًا كافية، أي مخازن مؤقتة و/ أو نسبةً من حيز نطاق الرابط التراسلي لتلبية هذا الطلب، وعند تعذُّر تلبية الطلب في موجهٍ ما لأن ذلك سيؤدي إلى الإفراط في الالتزام بموارده، فسيرفض هذا الموجّه الحجز، وهذا مشابه للحصول على إشارة مشغول عند محاولة إجراء مكالمة هاتفية؛ أما في النهج القائم على الاستجابة الراجعة، فيبدأ المضيفون النهائيون في إرسال البيانات دون حجز أي سعة أولًا، ثم يضبطون معدل الإرسال وفقًا للاستجابات الراجعة التي يتلقونها. قد تكون هذه الاستجابات الراجعة إما صريحةً مثل إرسال الموجّه المزدحم رسالة "الرجاء الإبطاء" إلى المضيف، أو ضمنيةً مثل ضبط المضيف النهائي معدل الإرسال وفقًا للسلوك الذي يمكن ملاحظته خارجيًا للشبكة مثل فقد رزمة. من المُلاحظ شمول النظام القائم على الحجز على آلية تخصيص مواردٍ تتمحور حول الموجّه دائمًا، وذلك لأن كل موجّهٍ مسؤول عن تتبُّع مقدار سعته المتاحة حاليًا، وتحديد ما إذا كان يمكنه قبول حجوزاتٍ جديدة. قد تضطر الموجهات أيضًا إلى التأكد من أن كل مضيفٍ مستقر داخل الحجز الذي أجراه، وإذا أرسل مضيفٌ البيانات بصورةٍ أسرع مما ادّعى عند إجراء الحجز؛ فستكون رزم هذا المضيف مرشحةً بصورةٍ أكبر للإهمال في حالة ازدحام الموجّه. قد يتضمن النظامُ القائم على الاستجابة الراجعة آليةً متمحورةً حول الموجّه أو حول المضيف، فإذا كانت الاستجابات صريحة، فيسشارك الموجّه إلى حدٍ ما على الأقل في مخطط تخصيص الموارد؛ أما إذا كانت الاستجابات ضمنيةً، فسيقع كل العبء تقريبًا على عاتق المضيف النهائي، حيث تُسقِط الموجّهات الرزم بصمتٍ عندما تصبح مزدحمة. لا يجب أن يجري المضيفون النهائيون الحجز، حيث يمكن لمسؤول الشبكة تخصيص موارد للتدفقات أو لمجموعاتٍ أكبر من حركة المرور كما سنرى لاحقًا. التصنيف القائم على أساس النافذة مقابل التصنيف القائم على المعدل الطريقة الثالثة لتوصيف آليات تخصيص الموارد هي وفقًا لاعتمادها على النافذة Window أو على المعدّل Rate. ويُعَد هذا التصنيف هو أحد المجالات المذكورة أعلاه، حيث تُستخدَم آليات ومصطلحات مماثلة للتحكم في التدفق والتحكم في الازدحام، وتحتاج كل من آليات التحكم في التدفق وتخصيص الموارد إلى وسيلةٍ للتعبير للمرسل عن مقدار البيانات المسموح له بإرسالها، وهناك طريقتان عامتان للتعبير عن ذلك من خلال نافذة أو معدل. لقد رأينا بروتوكولات نقل قائمةٍ على النوافذ مثل بروتوكول TCP، حيث يعلن المستقبِل عن نافذةٍ للمرسل، وتتوافق هذه النافذة مع مقدار مساحة المخزَن المؤقت التي يمتلكها المستقبِل، وتحدّ من مقدار البيانات التي يمكن للمرسل إرسالها؛ وهذا يعني أنه يدعم التحكم في التدفق يمكن استخدام آليةٍ مماثلة لإعلان النافذة داخل الشبكة لحجز مساحة المخزن المؤقت، وبالتالي دعم تخصيص الموارد، حيث تعتمد آليات التحكم في الازدحام في بروتوكول TCP على النافذة. من الممكن أيضًا التحكم في سلوك المرسل باستخدام المعدّل، أي عدد البتات في الثانية الممكن للمستقبل أو الشبكة استيعابها، إذ يُعَد التحكم المستند إلى المعدّل منطقيًا للعديد من تطبيقات الوسائط المتعددة التي تميل إلى إنشاء بياناتٍ بمعدّلٍ متوسط معين، والتي تحتاج على الأقل إلى حدٍ أدنى من الإنتاجية لتكون مفيدة، فقد يُنشِئ برنامج ترميز الفيديو على سبيل المثال فيديو بمعدلٍ متوسط يبلغ 1 ميجابت في الثانية، وبمعدّل ذروة يبلغ 2 ميجابت في الثانية؛ كما يُعَد توصيف التدفقات على أساس المعدل خيارًا منطقيًا في نظامٍ قائمٍ على الحجز ويدعم جودة خدمة مختلفة، حيث يحجز المرسل العديد من البتات في الثانية ويحدّد كل موجهٍ على طول المسار فيما إذا كان يمكنه دعم هذا المعدل من خلال النظر إلى التدفقات الأخرى التي تعهدَ بها. ملخص تصنيف تخصيص الموارد يوحي تصنيف طرق تخصيص الموارد في نقطتين مختلفتين على طول كلٍ من الأبعاد الثلاثة كما فعلنا للتو إلى مايصل لثماني استراتيجياتٍ فريدة. في حين أن هناك ثماني مقاربات مختلفة ممكنة بالتأكيد، إذ نلاحظ أنه من الناحية العملية أنه يبدو أن استراتيجيتين عامتين هما الأكثر انتشارًا، كما ترتبط هاتان الاستراتيجيتان بنموذج الخدمة الأساسي للشبكة. يفترض نموذج الخدمة عادةً أفضل جهد استخدام للاستجابات الراجعة ضمنيًا، وذلك نظرًا لعدم سماح هذا النموذج للمستخدمين بحجز سعة الشبكة، وهذا بدوره يعني أن معظم مسؤولية التحكم في الازدحام تقع على عاتق المضيفين النهائيين، ربما مع بعض المساعدة من الموجّهات. تستخدم هذه الشبكات عمليًا المعلوماتِ المستندة إلى النافذة، وهذه هي الإستراتيجية العامة المعتمدة في الإنترنت. من ناحيةٍ أخرى، قد يتضمن نموذج الخدمة القائم على جودة الخدمة شكلًا من أشكال الحجز، ومن المحتمل أن يتطلب دعم هذه الحجوزات مشاركةً كبيرة للموجّه، مثل وضع الرزم ضمن رتلٍ بطريقةٍ مختلفة اعتمادًا على مستوى الموارد المحجوزة التي تتطلبها، ويمكن التعبير عن هذه الحجوزات من حيث المعدل نظرًا لأن النوافذ مرتبطة بصورةٍ غير مباشرة فقط بكمية حيز النطاق التراسلي التي يحتاجها المستخدم من الشبكة. معايير تقييم آليات تخصيص الموارد المسألة الأخيرة هي معرفة ما إذا كانت آلية تخصيص الموارد جيدةً أم لا. بالعودة إلى بيان المشكلة المذكور في بداية هذا الفصل، فقد طُرح سؤال عن كيفية تخصيص الشبكة لمواردها بصورةٍ فعالة وعادلة، ويشير هذا السؤال إلى مقياسين واضحين على الأقل يمكن من خلالهما تقييم مخطط تخصيص الموارد. تخصيص الموارد الفعال تتمثل نقطة البداية لتقييم فعالية مخطط تخصيص الموارد بافتراض مقياسين رئيسيين للشبكات هما الإنتاجية، والتأخير، فمن الواضح أننا نريد أكبر قدرٍ ممكن من الإنتاجية وأقل تأخيرٍ ممكن، ولكن غالبًا ما تكون هذه الأهداف متعارضةً إلى حدٍ ما مع بعضها بعضًا. ومع ذلك فمن بين إحدى الطرق المؤكدة لزيادة إنتاجية خوارزمية تخصيص الموارد؛ السماح بأكبر عددٍ ممكن من الرزم في الشبكة، وذلك من أجل استخدام جميع الروابط حتى نسبة 100%، حيث نفعل هذا لتجنب احتمال أن يصبح الرابط خاملًا، وهذا يُضِّر بالإنتاجية، وتكمن مشكلة هذه الإستراتيجية في أن زيادة عدد الرزم في الشبكة يزيد أيضًا من طول الأرتال في كل موجّه، وتؤدي الأرتال الأطول بدورها إلى تأخير الرزم لفترةٍ أطول في الشبكة. اقترح بعضُ مصممي الشبكات استخدام نسبة الإنتاجية إلى التأخير مثل مقياس لتقييم فعالية مخطط تخصيص الموارد، ويشار إلى هذه النسبة أحيانًا باسم طاقة الشبكة: Power = Throughput / Delay نلاحظ أنه من غير الواضح بأن الطاقة هي المقياس الصحيح للحكم على فعالية تخصيص الموارد، وذلك لاستناد النظرية الكامنة وراء الطاقة إلى رتل شبكةٍ من النوع M / M / 1 الذي يفترض أرتالًا لا نهائية، حيث أن الشبكات الحقيقية لها مخازنٌ مؤقتة محدودة، وقد تضطر أحيانًا إلى إسقاط الرزم، وبما أن هذا الكتاب ليس كتابًا يشرح نظريات الأرتال، فسنقدّم فقط هذا الوصف الموجز لرتل M / M / 1، حيث 1 يعني أنه يحتوي على خادمٍ واحد، ويشير حرفا M إلى أن توزيع كلٍ من أوقات وصول الرزم والخدمة هو توزيعٌ أسي Markovian. ومن ناحيةٍ أخرى، تُعرَّف الطاقة عادةً بالنسبة إلى اتصالٍ واحد (تدفق) وليس واضحًا كيف تمتد إلى اتصالاتٍ متعددة متنافسة. على الرغم من هذه القيود الشديدة إلى حدٍ ما لكن لم تحظَ أي بدائل أخرى بقبولٍ واسعٍ، وبالتالي يستمر استخدام الطاقة. يُعَد الهدف هنا هو زيادة هذه النسبة إلى الحد الأقصى، وهي دالةٌ لمقدار الحِمل الذي تضعه على الشبكة، ويُضبَط الحِمل بواسطة آلية تخصيص الموارد، حيث يعطي الشكل الآتي منحنىً تمثيليًا للطاقة، إذ تعمل آلية تخصيص الموارد بصورةٍ مثالية في ذروة هذا المنحنى، وتكون الآلية معتدلةً ومستقرةً للغاية على يسار القمة؛ أي أنه لا يُسمَح بإرسال رزمٍ كافيةٍ لإبقاء الروابط مشغولة، ويُسمح بدخول العديد من الرزم إلى الشبكة إلى يمين القمة ويزداد التأخير بسبب الانتظار في الرتل الذي يبدأ بالاستحواذ على أي مكاسبٍ صغيرة في الإنتاجية. ومن المثير للاهتمام أن منحنى الطاقة هذا يشبه إلى حدٍ كبير منحنى إنتاجية النظام في نظام مشاركة الوقت في الحاسوب، حيث يتحسن معدل نقل النظام مع قبول المزيد من الوظائف في النظام حتى يصل إلى نقطةٍ يكون فيها الكثير من المهام قيد التشغيل، ويبدأ النظام بالتأزُّم thrash، حيث يقضي كل وقته في تبديل صفحات الذاكرة ويبدأ معدل النقل في الانخفاض. إن العديد من أنظمة التحكم في الازدحام قادرةٌ على التحكم في الحِمل بطرقٍ بدائية للغاية؛ أي أنه من غير الممكن ببساطة تشغيل "المقبض knob" قليلًا والسماح فقط بعددٍ صغيرٍ من الرزم الإضافية في الشبكة، لذلك يحتاج مصممو الشبكات إلى القلق بشأن ما يحدث حتى عندما يعمل النظام تحت عبءٍ ثقيلٍ للغاية أي في أقصى الطرف الأيمن من المنحنى في الشكل السابق. نود من الناحية المثالية تجنُّب الموقف الذي يذهب فيه معدّل نقل النظام إلى الصفر لأن النظام يتأزّم، ولكننا نريد باستخدام مصطلحات الشبكات نظامًا مستقرًا stable تستمر فيه الرزم بالمرور عبر الشبكة، حتى عندما تعمل الشبكة تحت عبءٍ ثقيل، وإذا كانت الآلية غير مستقرة؛ فقد تتعرض الشبكة إلىانهيار الازدحام congestion collapse. تخصيص الموارد العادل لا يُعَد الاستخدام الفعال لموارد الشبكة المعيار الوحيد للحكم على مخطط تخصيص الموارد، إذ يجب علينا أيضًا أن ننظر في مسألة العدل، ومع ذلك فإننا ندخل بسرعةٍ في وضعٍ غير مفهوم عندما نحاول تحديد ما يشكّل بالضبط تخصيصًا عادلًا للموارد، حيث يوفر مخطط تخصيص الموارد القائم على الحجز على سبيل المثال طريقةً واضحةً لخلق ظلمٍ خاضعٍ للسيطرة، وقد تُستخدم في مثل هذا المخطط حجوزاتٌ لتمكين تدفق فيديو من أخذ 1 ميجابت في الثانية عبر رابطٍ ما، بينما يأخذ نقل ملف 10 كيلو بت في الثانية فقط عبر نفس الرابط. في حال عدم وجود معلوماتٍ صريحة، فسنود أن يتلقى كل تدفقٍ حصةً متساويةً من حيز النطاق التراسلي عندما تتشارك عدة تدفقاتٍ رابطًا معينًا. يفترض هذا التعريف أن الحصة العادلة من حيز النطاق التراسلي تعني حصةً متساوية، ولكن قد لا تساوي الحصصُ المتساوية الحصصَ العادلة، حتى في حالة عدم وجود حجوزات. إذًا هل يجب أن ننظر أيضًا إلى طول المسارات التي يجري موازنتها؟ وما هو العدل على سبيل المثال عندما يتنافس تدفقٌ واحد مؤلف من أربع قفزات مع ثلاثة تدفقات ذات قفزةٍ واحدة كما هو موضح في الشكل التالي؟ بافتراض أن هذا العدل يعني المساواة وأن جميع المسارات متساوية الطول، فقد اقترح الباحث في مجال الشبكات "راج جاين" مقياسًا يمكن استخدامه لتحديد مدى عدالة آلية التحكم في الازدحام، حيث يُعرَّف مؤشر العدل لجاين على نحو أنه بافتراض مجموعةٍ من إنتاجيات التدفق التالية (x1, x2, …, xn) المُقاسة بوحدات ملائمة مثل بتات / ثانية؛ فستُسنِد الدالة التالية مؤشر العدل للتدفقات: ينتج عن مؤشر العدل دائمًا رقمٌ بين 0 و1، حيث يمثل 1 أكبر قدرٍ من العدل، ومن أجل فهم الحدس الكامن وراء هذا المقياس سنتأمل الحالة التي تتلقى فيها جميع التدفقات n إنتاجيةً قدرها 1 وحدة من البيانات في الثانية، ويكون مؤشر العدل في هذه الحالة هو: لنفترض الآن أن تدفقًا واحدًا يتلقى إنتاجيةً بقيمة 1 + Δ، فيكون مؤشر العدل هو: لاحظ أن المقام يزيد البسط بمقدار (n−1)Δ2، وبالتالي فإن مؤشر العدل قد انخفض الآن إلى ما دون 1 سواءً كان التدفق الفردي يزداد أو ينقص عن جميع التدفقات الأخرى (Δ موجبة أو سالبة). هناك حالةٌ بسيطة أخرى يجب مراعاتها حيث يتلقى عدد k فقط من n تدفق إنتاجيةً متساوية، ويتلقى n-k مستخدمًا متبقيًا إنتاجيةً صفرية، وفي هذه الحالة ينخفض مؤشر العدل إلى k / n. ترجمة -وبتصرّف- للقسم Issues in Resource Allocation من فصل Congestion Control من كتاب Computer Networks: A Systems Approach. اقرأ أيضًا المقال السابق: النقل في الوقت الحقيقي باستخدام بروتوكول RTP في الشبكات الحاسوبية تأسيس الشبكات الحاسوبية والتعرف على تطبيقاتها كشف الأخطاء على مستوى البت في الشبكات الحاسوبية
  24. سنوضّح في هذا المقال فوائد استخدام خط شبكة سكريبوس الأساسي الذي يُستخدَم للتأكد من صحة محاذاة سطور النص في الصفحة بين إطارات النصوص، وإذا أردت إنشاء مستندات ذات مظهر احترافي، فستحتاج إلى معرفة كيفية استخدام خط الشبكة الأساسي، فهو جزء أساسي ومهم جدًا من سكريبوس، لذلك يستحق التعلّم. سنوضّح أيضًا كيفية استخدام بعض العمليات المفيدة الأخرى، لذلك إن كنت جديدًا على سكريبوس، فهذا المقال جيد لك لأننا سنشرح كل شيء ببطء شديد وبعناية. الإعداد افتح برنامج سكريبوس، وأنشئ صفحةً جديدةً موجَّهةً رأسيًا (سيكون القياس A4 أو Leaflet جيدًا)، حيث يُفضَّل عرض المستند من منظور بعيد حاليًا لتتمكّن من رؤيته كاملًا من قائمة عرض View ثم تقريب ثم 50%. يجب الآن إضافة بعض الإطارات، لهذا ارسم هذه الإطارات داخل الهوامش مع ترك مسافة صغيرة بينها. لا تقلق بشأن جعل هذه الإطارات مصطفةً بصورة صحيحة، فهذا قد يساعدك أكثر إذا تعمّدت جعل الإطارات سيئة المحاذاة، لترى ما يحدث بعد إصلاح كل شيء. بعد هذا اتبع الخطوات الآتية: اختر قائمة إدراج Insert ثم إطار نص Text Frame. ارسم الإطار بالقرب من أعلى يسار الصفحة إلى الأسفل بالقرب من منتصف الجزء السفلي من الصفحة. اختر قائمة إدراج ثم إطار صورة Image Frame. ارسم الإطار من الجانب العلوي الأيمن على يمين إطار النص الأول إلى الأسفل في منتصف الجانب الأيمن من الصفحة. اختر قائمة إدراج ثم إطار نص مرةً أخرى. ارسم الإطار في المساحة المتبقية من الإطارين السابقين. يجب أن يكون لديك الآن شيء يشبه الشكل التالي: النص الأولي حدّد إطار النص الأيسر. انقر بزر الفأرة الأيمن واختر "نص نموذجي Sample Text" من القائمة لفتح نافذة Lorem Ipsum. مرّر إلى أسفل قائمة اللغات وحدّد "لوريم إيبسوم قياسي Standard Lorem Ipsum". ثم اضغط على موافق، وهنا يجب أن يُملأ الآن إطار النص الأول بنص لاتيني لا معنى له. حدّد إطار النص الأول، واختر القائمة عنصر Item ثم "صِل إطارات النص"، بعد ذلك "ربط إطارات النصوص Link Text Frames. حدّد إطار النص الآخر، وبالتالي سيستمر النص في إطار النص الثاني. الصورة الأولية يمكنك استخدام أي صورة تريدها، فالصورة موضوعة فقط مثل شيء يعترض طريق النص حتى تتمكن من رؤية كيفية عمل خط الشبكة الأساسي. يمكنك تنزيل الصورة التي سنستخدمها، بعدها اتبع الآتي: حدّد إطار الصورة. انقر بزر الفأرة الأيمن واختر استيراد صورة Get Image من القائمة. حدد موقع الصورة التي تريد استخدامها ثم اضغط موافق. انقر بزر الفأرة الأيمن واختر اضبط الصورة إلى الإطار Adjust Image to Frame من القائمة. يجب أن تبدو صفحتك الآن مثل الشكل الآتي. لا تقلق من عدم محاذاة الأشياء بصورة صحيحة، أو إن لم تملأ الصورة إطارها، فهذا ليس مهمًا الآن. اختبر عملك اختر قائمة عرض ثم تقريب، ثم 200% لتقريب الصفحة. مرّر الصفحة حسب الحاجة لتنظر إلى وسطها. إذا نظرت إلى سطور النص في الإطار الأيسر ووازنتها مع سطور النص في إطار النص الآخر، فستلاحظ أن أسفل الأحرف متوضّعة على ارتفاعات مختلفة من الصفحة كما في الشكل الآتي، حيث لا تصطف الأحرف الموجودة على اليسار -على الخط الأزرق المنقط- مع الأحرف الموجودة على اليمين على الخط الأرجواني. وكما يظهر بالصورة؛ سيبدو هذا فوضويًا، (جرب مستويات تكبير مختلفة من قائمة عرض، لإلقاء نظرة على النص بتكبيرات مختلفة)، ولكن يمكنك إصلاحه متبعًا الآتي: حدّد إطار النص السفلي الأيمن واستخدم مفاتيح لوحة المفاتيح للأعلى وللأسفل لتحريك الإطار. حاول أن تجعل الأجزاء السفلية من سطور النص تحاذي نفس الارتفاع على الصفحة بين إطاري النص. تستغرق هذه العملية وقتًا طويلًا للغاية، وإذا كان عليك أن تنفّذ الشيء نفسه على صفحات متعددة مع عدة إطارات نصية في كل منها، فستشعر بالإحباط الشديد، لكن لا تخف من ذلك، فالحل متمثّل باستخدام خط الشبكة الأساسي. اختر قائمة عرض ثم تقريب ثم 50% للتبعيد. ترتيب كل شيء يجب عليك إنشاء بعض الأنماط Styles قبل أن تبدأ بخط الشبكة الأساسي. يُعَد إعداد الأنماط أمرًا سهلًا، وتتيح لك الأنماط الآتية إجراء التغييرات لاحقًا بسهولة أكبر. نمط الحروف Character Style اختر قائمة تحرير Edit ثم أنماط Styles لفتح نافذة مدير الأنماط Style Manager. اسحب النافذة إلى يسار الشاشة، وإن لم تكن موجودةً هناك بالفعل فسيسهل هذا عليك استخدامها لأنها تكبر عند استخدامها اعتمادًا على ما تفعله. اضغط على زر جديد New واختر نمط الحروف Character Style من القائمة. قد تبدو النافذة الآن معقدةً بعض الشيء -خاصةً إن لم تستخدمها سابقًا-، ولكنها ستصبح أسهل عند استخدامك المتكرر لها . أدخِل النص "Body" (بدون علامات الاقتباس) ليكون اسمًا لنمط الحروف في الجزء العلوي من النافذة. اضغط على زر تطبيق Apply. يمكنك الآن رؤية نمط الحروف الجديد في القائمة ضمن أنماط الحروف. نهتم في هذا المقال فقط بشبكة الخط الأساسي، لذلك اقبل في هذه الحالة الخيارات الافتراضية دون تغيير، لكنك قد تحتاج إلى تغيير مزيد من الأشياء عند إنشاء أنماطك الخاصة. نمط الفقرة Paragraph Style اضغط على الزر جديد New مرةً أخرى واختر نمط الفقرة Paragraph Style من القائمة. أدخِل النص "Body" (بدون علامات الاقتباس) مثل اسم لنمط الفقرة. انقر على تبويب "نمط الحروف Character Style" أسفل حقل الاسم، حيث سنربط نمط الحروف الذي أنشأناه مسبقًا بنمط الفقرة. اضغط على زر القائمة "بناءً على Based On" واختر "Body" من القائمة، بذلك تكون قد أخبرت نمط الفقرة "Body" باستخدام نمط الحروف "Body"، وستطبَّق أي تغييرات على نمط الحروف "Body" تلقائيًا على أي نص باستخدام نمط الفقرة "Body". انقر على تبويب "خصائص Properties" أسفل حقل الاسم. اضغط على القائمة التي قد يكون اسمها حاليًا "تباعد أسطر ثابت Fixed Linespacing" تحت العنوان "المحاذاة والمسافات Distances and Alignment". اختر حاذِ لخط الشبكة الأساسي Align to Baseline Grid من القائمة. اضغط على زر "تطبيق Apply" في الجزء السفلي من النافذة. يمكنك الآن رؤية نمط الفقرة الجديد في القائمة ضمن أنماط الفقرة، وهنا اضغط إما على الزر اكتمل Done لتصغير النافذة، أو أغلقها تمامًا -فالأمر متروك لك هنا-، ثم يجب تطبيق الأنماط الجديدة على النص. التطبيق حدّد إطار النص الأيسر. افتح التبويب "إعدادات النمط Style Settings" في تبويب نص Text من نافذة خصائص، أو من نافذة خصائص النص في الإصدار 1.5.7 من برنامج سكريبوس. حدّد النمط "Body" بدلًا من بلا نمط No Style أو نمط فقرة افتراضي من قائمة نمط الفقرة Paragraph Style. لاحظ كيف تحرَّك النص قليلًا، لأنه يستخدم حاليًا خط الشبكة الأساسي كما هو محدّد في نمط الفقرة "Body". لا يمكنك رؤية خط الشبكة الأساسي حاليًا، ولكن لا تقلق، فليس جعله مرئيًا أمرًا صعبًا. اختر قائمة ملف File ثم إعداد المستند Document Setup. حدد "الأدلة Guides" من القائمة. انتقل إلى تبويب الوضوح ثم حدّد مربع اختيار إظهار خط الشبكة الأساسي. اضغط موافق. يجب أن تبدو صفحتك الآن مثل الشكل التالي، حيث تمثّل هذه الخطوط الرمادية خط الشبكة الأساسي. اختر قائمة عرض ثم تقريب ثم 200% لتقريب الصفحة مرةً أخرى. مرّر الصفحة حسب الحاجة حتى تصل إلى وسطها. يمكنك الآن أن ترى أن سطور النص في إطار النص الأيسر موجودة في المواضع الرأسية نفسها لسطور النص في إطار النص الآخر كما في الشكل الآتي، ويتواجد الجزء السفلي من الحروف على خطوط الشبكة الأساسية، أي يستند أساس الحروف على هذه الخطوط، لذلك سًمِّي بخط الشبكة الأساسي. بهذا إذًا تكون قد جرت محاذاة النص، ولنجرّب الآن ما يلي: حدّد إطار النص السفلي الأيمن. استخدم مفتاح المؤشر للأعلى من لوحة المفاتيح لتحريك موضع إطار النص. استمر في الضغط حتى ترى النص يتحرك لأعلى. لاحظ بقاء النص في مكانه أثناء تحريك إطار النص للأعلى إلى أن وصلت إلى نقطة معينة عندما تحرّك النص إلى الخط الأساسي الذي فوقه، والسبب في ذلك هو محاولة برنامج سكريبوس -عند استخدام خط الشبكة الأساسي- رسم النص على طول الخط الأساسي الأول الموجود خلف إطار النص، وإن لم تكن هناك مساحة كافية لرسم هذا السطر من النص (إذا كانت الأحرف عالية جدًا مثلًا)، فسينتقل سكريبوس إلى الخط الأساسي التالي ويبدأ في رسم النص هناك. يطبّق سكريبوس كل العمل للتأكد من محاذاة النص عبر إطارات النص دون الحاجة إلى إجراء أي تعديلات يدوية، عندما تستخدم خط الشبكة الأساسي، حيث يجب عليك -عند عدم استخدام خط الشبكة الأساسي- تحريك إطارات النص لأعلى ولأسفل حتى تصطف مع بعضها البعض كما فعلت سابقًا، وهذا أمر صعب جدًا. تغيير حجم الخط لنجرّب الآن أن نصغّر حجم النص، وذلك باتباع الخطوات الآتية: اختر قائمة عرض View ثم تقريب ثم 100% لتتمكّن من رؤية قدر مناسب من النص. اختر قائمة تحرير Edit ثم أنماط Styles لإعادة فتح نافذة "مدير الأنماط" مرةً أخرى. حدد نمط الحروف "Body". اضغط على زر تحرير Edit لتحرير النمط. غيّر حجم الخط ليكون أصغر قليلًا (غيّره من 12 نقطة إلى 10 نقاط مثلًا). اضغط على زر تطبيق Apply ثم على زر اكتمل Done. سترى الآن أن النص أصغر ولكنه لا يزال محاذيًا لخط الشبكة الأساسي. لذلك إذا أجريت تغييرًا كبيرًا على تنسيق النص، فإن خط الشبكة الأساسي يحافظ على محاذاة كل شيء بصورة جيدة. لكن إذا اعتقدت أن المسافة بين السطور كبيرة جدًا الآن، فيمكنك إصلاح ذلك بسهولة باتباع الآتي: اختر قائمة ملف ثم إعداد المستند. حدّد قسم "الأدلة" من القائمة. اضبط حجم الشبكة أو تباعد خط الشبكة الأساسي ليكون أصغر (غيّره من 14 نقطة إلى 12 نقطة مثلًا) من تبويب الموضع. اضغط على الزر تطبيق ثم موافق. بهذا تكون قد أصبحت المسافة بين السطور أصغر مع بقاء محاذاة سطور النص، وبما أنك تستخدم خط الشبكة الأساسي والأنماط؛ فكل ما عليك فعله لتقليل حجم النص هو إجراء تغيير طفيف مرةً واحدةً في النمط، ثم تغيير حجم الشبكة فقط. يمكنك أيضًا تكبير النص من خلال تطبيق الخطوات السابقة نفسها ولكن زِد القيم بدلًا من أن تنقصها. إزاحة الخط الأساسي أحيانًا، لا يكون موضع خط الشبكة الأساسي مناسبًا تمامًا لما تريده بسبب تخطيط أو تصميم صفحتك، فقد تبدأ سطور النص مرتفعةً أو منخفضةً جدًا في الصفحة. لهذا فإذا واجهتك هذه المشكلة، فجرّب الخطوات التالية: اختر قائمة ملف ثم إعداد المستند. حدد قسم "الأدلة" من القائمة. غيّر قيمة إزاحة خط الشبكة الأساسي Offset من تبويب الموضع، وهذه هي المسافة من أعلى الصفحة التي سيبدأ سكريبوس خط الشبكة الأساسي منها. اضغط على زر تطبيق ثم موافق لرؤية التغيير المطبَّق. لاحظ أن هناك فراغًا في أعلى الصفحة قبل أن يبدأ خط الشبكة الأساسي. الخلاصة قد يتطلب ذلك كثيرًا من العمل، ولكن خط الشبكة الأساسي جزء مهم جدًا من تصميم الصفحة الجيد، لهذا يجب أن تأخذ الوقت الكافي للتعرف عليه والتعود على استخدامه، إذ ستوفر كثيرًا من الوقت لاحقًا وستكون منشوراتك أفضل بكثير بسببه. ترجمة -وبتصرّف- للمقال Baseline Grid Explained. اقرأ أيضًا كيفية إنشاء رمز RSS Feed في برنامج سكريبوس Scribus كيفية إنشاء التأثير Distressing Mask في برنامج سكريبوس لإنتاج تأثيرات تعبئة جذابة كيفية إنشاء الظلال في برنامج سكريبوس Scribus كيفية التعامل مع محرر القصص Story Editor في برنامج سكريبوس Scribus الطريقة الأساسية لترقيم العناصر تسلسليا في برنامج سكريبوس Scribus
  25. سنوضح في هذا المقال كيفية إنشاء صندوق بسيط منظوريّ الشكل بخطوات سهلة توضّح لك كيفية البدء. التقنيات المحددة المستخدمة إنشاء وعرض الشبكة Grid. إنشاء أشكال بسيطة. إنشاء خطوط بيزيه Bezier. تحويل خطوط بيزيه إلى مضلعات. قص المضلعات باستخدام خطوط بيزية. تحرير بسيط للعقد. استخدام عملية المسار Path Operation لإنشاء شكل جديد. تغيير تنسيق الشكل. هذا المقال مناسب للمبتدئين، لذلك إن كان بإمكانك التنقّل بين نوافذ سكريبوس الأساسية، فستستطيع اتباع الخطوات السابقة جميعها. الإعداد افتح برنامج سكريبوس وأنشئ مستندًا جديدًا (سيكون القياس A4 أو الرسالة Letter في أي اتجاه جيدًا ولكن الاتجاه الأفقي سيمنحك مساحة أكبر). الشبكة Grid يجب أولًا إنشاء شبكة، لأنها ستسهّل عليك رسم الصندوق، بعد ذلك اتبع الآتي: اختر قائمة ملف File ثم إعداد المستند Document Setup. انتقل إلى قسم "الأدلة Guides" ثم انتقل إلى تبويب الوضوح. فعّل الخيار عرض شبكة الصفحة Display Grid. انتقل إلى تبويب الموضع، ثم اضبط تباعد "الشبكة الرئيسية Major Grid" على 64 نقطة، وتباعد "الشبكة الثانوية Minor Grid" على 8 نقاط (سيفي أي تباعد في الشبكة بالغرض، ولكن يمنحك هذا الإعداد قدرًا جيدًا من التفاصيل). اضغط على تطبيق ثم موافق. اختر قائمة صفحة Page ثم اتبع الشبكة Snap to Grid. نقاط التلاشي Vanishing Points يجب الآن رسم ثلاث نقاط تلاشٍ vanishing points أو اختصارًا VPs، حيث يجب أن تكون أول نقطتي تلاشٍ على "الخط الأفقي"، وستمتد فيه خطوط المنظور الخاصة بك إذا كان الصندوق بحجم لانهائي، كما يجب أن تكون نقطة التلاشي الثالثة أسفل مجال رؤيتك. لا تقلق إذا كان كل هذا يبدو معقدًا، فسيصبح الأمر أوضح عند بدء الرسم. بعد كل هذا اتبع الخطوات الآتية: اختر نقطةً على الشبكة بالقرب من أعلى يسار الصفحة، حيث يُفضَّل استخدام نقطة تتقاطع فيها خطوط تباعد الشبكة الرئيسية، ثم استخدم قائمة إدراج Insert، ثم شكل Insert Shape، ثم أشكال افتراضية Default Shapes، ثم دائرة Circle لرسم دائرة صغيرة حول تلك النقطة. كرّر الشيء نفسه في أعلى يمين صفحتك في الموضع الرأسي نفسه للدائرة الأولى، وبذلك أنشأنا نقطتي تلاشٍ على الخط الأفقي. اختر نقطةً جديدةً أسفل الخط الأفقي وعلى مسافة متساوية بين أول نقطي تلاشٍ، وارسم دائرةً أخرى حولها (ضع هذه النقطة الثالثة على بُعد ثلاثة أو أربعة تباعدات شبكية رئيسية تحت النقطتين السابقتين). يجب أن تكون لديك الآن ثلاث نقاط تلاشٍ كما في الشكل التالي: وجه الصندوق الأيسر يجب التأكد من أنك تستخدم أداة منحنى بيزيه Bezier Curve وليس أداة الخط Line، حيث يؤدي رسم الخطوط باستخدام أداة منحنى بيزيه إلى إنشاء خطوط يعاملها برنامج سكريبوس بطريقة مختلفة قليلًا عن الخطوط التي تنشئها أداة الخط، على النحو الآتي: اختر القائمة إدراج Insert ثم منحنى بيزيه Insert Bezier Curve. انقر في مكان ما عموديًا فوق نقطة التلاشي السفلية (بحوالي 5 أو 6 تباعدات شبكية ثانوية). انقر في مكان ما عموديًا فوق المكان السابق (بحوالي 5 أو 6 تباعدات شبكية ثانوية أسفل "الخط الأفقي"). انقر على نقطة التلاشي الأولى التي رسمت دائرة حولها. انقر بزر الفأرة الأيمن لإيقاف رسم خط بيزية. اختر قائمة عنصر Item ثم تحويل لـ Convert To ثم مضلّع Polygon. وهنا يكون قد أغلقَ برنامج سكريبوس تلقائيًا الخط الذي رسمته للتو ضمن مضلّع مثلث كما في الشكل التالي المرسوم باللون الأحمر: اختر قائمة إدراج ثم منحنى بيزيه مرةً أخرى. انقر في مكان ما فوق وعلى يمين نقطة التلاشي اليسرى (على بُعد تباعد شبكة رئيسي واحد على اليمين). انقر في أي مكان تحت النقرة السابقة، بحيث ترسم خطًا عموديًا لأسفل يتقاطع مع كلا الخطين العلوي والسفلي للمثلث كما في الشكل التالي المرسوم باللون الأحمر: حدّد الخط الذي رسمته للتو ثم حدّد المثلث مع الضغط على مفتاح Shift . اختر قائمة عنصر ثم أدوات المسار Path Tools ثم قص المضلّع Cut Polygon. حدّد المثلث الأيسر - المرسوم باللون الأحمر في الشكل السابق - وانقر بزر الفأرة الأيمن، ثم اختر حذف Delete، فتشكّل بذلك بداية الصندوق وهو الوجه الأيسر. وجه الصندوق الأيمن كرّر الخطوات نفسها التي أجريتها على الوجه الأيسر ولكن اعكسها حول الخط العمودي في منتصف الرسم، بعد ذلك جرّب وضع خط "السكين" على يمين أو يسار الخط الذي يقابل خط "السكين" الأول لإظهار صندوق مختلف الجانبين مثل الخط الأحمر في الشكل التالي: يجب أن يكون لديك الآن وجه أيمن ووجه أيسر على الشكل التالي: وجه الصندوق العلوي النسخ المتكرر انسخ الأشكال الأصلية لتسهيل إنشاء الوجه العلوي على النحو الآتي: حدّد أحد الأوجه واضغط Shift مع تحديد الوجه الآخر، فتحدّد بذلك كلا الوجهين. اختر قائمة عنصر Item ثم مضاعفة/تحويل، ثم نُسخ مطابقة Multiple Duplicate. اضغط على موافق بدون إجراء أي تغييرات، لإنشاء نسخ مكرّرة من الشكلين الأصليين فوق النسخ الأصلية. تحرير العقد Node Editing حدّد الشكل الأيسر وانقر نقرًا مزدوجًا لإظهار نافذة محرّر العُقد Node Editor (حدّدت هنا في الواقع هنا نسخة الشكل الأيسر). اضغط على أيقونة "أضف عُقدًا Add Nodes"، وانقر بالقرب من منتصف خط الشكل العلوي (ليس عليك أن تكون دقيقًا كثيرًا في وضع العقدة). يجب أن تظهر عقدة جديدة في منتصف الخط مثل الشكل التالي: اضغط على أيقونة "حرّك عقدًا Move Nodes"، واسحب العقدة الجديدة إلى النقطة المحاطة بدائرة نقطة التلاشي اليمنى كما في الشكل التالي: اضغط على موافق أو إنهاء التحرير End Editing لإغلاق نافذة محرّر العقد. كرّر الآن الخطوات نفسها التي أجريتها في نافذة "تحرير العقد" ولكن على الشكل الأيمن، ثم أنشئ عقدةً جديدةً بالقرب من منتصف الخط العلوي مع سحب العقدة إلى وسط دائرة نقطة التلاشي اليسرى، حيث يوضّح الشكل التالي الشكل الجديد باللون الأزرق: اضغط على إنهاء التحرير End Editing لإغلاق محرّر العقد. حدّد الشكل الذي حرّرته للتو واضغط Shift مع تحديد الشكل الذي حرّرته سابقًا. اختر قائمة عنصر، ثم أدوات المسار، ثم عمليات المسار Path Operations. اضغط على أيقونة "تقاطع الأشكال Intersection" - الأيقونة الوسطى ضمن "العمليات"- ثم اضغط موافق. يجب أن يكون لديك الآن صندوق منظوريّ الشكل كما في الشكل التالي، ولكننا لم ننتهِ بعد. ترتيب الأشكال إذا كبّرت الجانب الأيسر من الصندوق الخاص بك، فقد ترى أن هناك شيئًا ما يبدو خاطئًا في الزاوية العلوية اليسرى كما في الشكل التالي، ويُحتمَل وجود الأمر نفسه في الزاوية العلوية اليمنى. يحدث ذلك بسبب الطريقة التي يطبّق بها سكريبوس عمليات المسار، ولكن يمكنك إصلاحها بسهولة، باتباع الخطوات الآتية: حدّد وجه العلبة العلوي. اذهب إلى نافذة خصائص Properties ثم إلى التبويب خط Line. اضغط على مفتاح Shift وحدّد الوجه الأيسر، ثم اضغط Shift وحدّد الوجه الأيمن. غيّر إعداد "الحواف Edges" إلى "وصلة مستديرة Round Join" في تبويب خط من نافذة خصائص. يجب أن تكون الآن زوايا الصندوق بالكامل على ما يرام لمعظم الأغراض (بخلاف الطباعة عالية الجودة)، لكن لا تزال الزاوية السفلية من الصندوق غير مثالية إذا كبّرتها، ولكن يمكنك زيادة عرض الخطوط لجميع الأشكال لإخفاء هذه المشكلة كما في الشكل التالي (ليس هذا إصلاحًا للمشكلة ولكنه يتحايل عليها ببساطة): يمكنك الآن حذف دوائر نقاط التلاشي، إذ لم تَعُد هناك حاجة إليها بعد الآن. اللمسات الأخيرة يعود الأمر إليك الآن فيما تريد فعله بصندوقك منظوريّ الشكل. يوضح الشكل التالي وجوه الصندوق المليئة بتظليلات مختلفة من اللون الأسود لإعطاء تأثير إضاءة بسيط: بينما يوضح الشكل التالي تحويل كل وجه إلى إطار صورة وإعطائها تأثير قماش أرجواني مع تطبيق التأثير "سطوع Brightness" لكل صورة ليكون أحد الوجوه أغمق من الوجوه الأخرى: ويوضّح الشكل التالي صندوقًا مصنوعًا من الماء، إذا أردت استخدام تأثيرات مختلفة وغريبة: تُظهِر الصورة التالية - إذا كنت مهتمًا - شيئًا يمكنك تنفيذه إن كان لديك وقت فراغ، إذ ستحتاج إلى وضع بعض أجزاء الرسم ضمن طبقة Layer حتى لا تعترض أشكال طريق أشكال الأخرى. ترجمة -وبتصرّف- للمقال How to draw a perspective box. اقرأ أيضًا كيفية بدء استخدام برنامج سكريبوس Scribus كيف تنشئ ألوانك الخاصة في برنامج سكريبوس Scribus كيفية إنشاء أشكال معقدة ذات زوايا دائرية في برنامج سكريبوس Scribus كيفية إنشاء الظلال في برنامج سكريبوس Scribus كيفية إنشاء تأثير نص مخيف في برنامج سكريبوس Scribus
×
×
  • أضف...