المحتوى عن 'نصوص'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • الإدارة والقيادة
  • مقالات ريادة أعمال عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML
    • HTML5
  • CSS
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • Sass
    • إطار عمل Bootstrap
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات برمجة عامة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات DevOps عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • التسويق بالرسائل النصية القصيرة
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عمل حر عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 8 نتائج

  1. في المقال السابق تعرفنا على حزمة أدوات المكتب الحر LibreOffice، والفروقات بينها وبين حزمة مكروسوفت Office. سنتعرف في هذا الدرس على محرر النصوص في LibreOffice وهو Writer. كيف تحصل على طقم LibreOffice يُصدر فريق المكتب الحرّ نُسختين من طقم LibreOffice في كلّ مرة: النُسخة "الطازجة" Fresh والنُسخة "الساكنة" Still، تشمل الأولى أحدث الميزات التي عمل مبرمجو LibreOffice على إضافتها لشيفرة البرنامج المصدريّة، أما الثانية فهي تُقدّم نُسخة Fresh الصادرة منذ 6-9 أشهر بحيث تكون قد أخذت وقتًا كافيًا في مُعالجة جميع العلل والمشاكل وأصبحت أكثر استقرارًا. على سبيل المثال ولحظة إعداد هذا الدرس كان لدينا أرقام الحزم التالية: LibreOffice Fresh 5.0.1 LibreOffice Still 4.4.5 وبينما تُصبح النسخة "الطازجة" ساكنة عند الإصدار القادم، تُطلق نسخة طازجة جديدة. اختر النُسخة المناسبة لعملك؛ غالبًا ما تُعتبر "الطازجة" نسخة قياسية أكثر اعتمادًا من قبل الأفراد وتوزيعات لينكس، بينما تُفضّل الشركات والمؤسسات البقاء مع النُسخة "الساكنة" لتجنّب أيّة أخطاء مُحتملة. للحصول على نسخة من طقم المكتب الحرّ فيما إذا كُنت مُستخدمًا لنظام Windows أو Mac OS X توجّه إلى الرابط المناسب أعلاه، واضغط على الزر الأخضر "DOWNLOAD VERSION". مُستخدمو توزيعات غنو لينكس غالبًا ما يحصلون على نُسخة مُثبّتة بشكلٍ مُسبق من المكتب الحرّ مع توزيعاتهم. مُلاحظة: تذكّر أنّه يُمكنك دومًا تثبيت طقم أدوات المكتب الحرّ إلى جانب حزمة MS Office أو Apple iWork. دعم اللغة العربية سنعتمد في سلسلة دروسنا هذه على الواجهة العربية لتطبيق LibreOffice Writer. فإذا كنتَ تستخدم نظام تشغيل Windows أو Mac OS X فينبغي عليك اختيار مُثبّت طقم المكتب الحرّ من صفحة اللغة العربية على موقع الويب. أما إذا كنتَ مُستخدمًا لإحدى توزيعات غنو لينكس فيمكنك تركيب حزمة اللغة العربية من مدير الحزم لديك. في دبيان و Ubuntu نفّذ الأمر التالي ضمن الطرفية: sudo apt-get install libreoffice-l10n-ar يُدعم التدقيق الإملائي للغة العربيّة في ليبر أوفيس عن طريق تثبيت قاموس "آية سبل". مُستخدمو توزيعات غنو/لينكس يُمكنهم البحث في مستودعات توزيعاتهم عن الحزمة "hunspell-ar” وتثبيتها، ومن ثم إعادة تشغيل البرنامج. إذا لم يعمل التدقيق تأكّد من خيار لغة النصّ من خلال: أدوات > اللغة > لكل النصّ > العربية مُستخدمو Windows و OS X ينبغي عليهم تحميل الإصدارة الأخيرة للقاموس من هنا، ثم من القائمة: أدوات > إدارة الامتداد > إضافة اختر الملف السابق ثم أعد تشغيل ليبر أوفيس. إذا لم تظهر لديك خيارات اتجاه النصّ في شريط الأدوات فتأكّد مما يلي: من القائمة: أدوات > خيارات > إعدادات اللغة > اللغات فعّل الخيار (Complex text layout (CTL. انقر نقرة يمينية على شريط أدوات التنسيق واختر من القائمة المُنبثقة خيار الأزرار المرئية ثم فعّل أزرار اتجاه النصّ. نظرة أولى تُظهر الصورة أعلاه جانبًا من تطبيق LibreOffice Writer الإصدارة رقم 5 كما يبدو عند فتحه للمرّة الأولى. يُدعى الشريط العلوي (ذو الرقم 1 على الصورة) بشريط العنوان والذي يضم إضافةً إلى أزرار التحكّم (إغلاق، تكبير، تصغير) اسم البرنامج متبوعًا باسم الملف والذي يحمل في الحالة الابتدائية القيمة "غير معنون X” حيث X رغم تسلسلي يبدأ من الواحد. الشريط التالي هو شريط القوائم (ذو الرقم 2) ويحتوي على تسعة قوائم تبدأ بالقائمة ملف وتنتهي بالقائمة مساعدة، من هنا يُمكن الوصول إلى كافة خيارات وإمكانيات البرنامج. الشريطان اللذان يحملان الرقمين 3 و 4 يُعرفان بأشرطة الأدوات، أولهما الشريط القياسي ويضم اختصارات لأوامر مثل "جديد"، "فتح"، "حفظ" إلخ. وثانيهما هو شريط التنسيق الذي يحتوى اختصارات نوع وحجم ولون الخطّ، المحاذاة والاتجاه، الترقيم والتنقيط وغيرها. يُمكننا التحكّم بأشرطة الأدوات الظاهرة من خلال قائمة عرض > أشرطة الأدوات. إذ يمكننا إلغاء تفعيل شريط التنسيق مثلًا أو إظهار شريط الرسم. الشريط التالي (ذو الرقم 5) يُدعى بالمسطرة (لإخفاءه: عرض > المسطرة)، ويُظهر أبعاد الصفحة، وموضع المسافات البادئة، العناوين، الحدود، الجداول إلخ. يُمكن التحكّم بالشريط من خلال الفأرة مُباشرةً. أما المساحة البيضاء والتي تحمل الرقم 6 في الصورة فهي الورقة المُخصصة للكتابة. لاحظ تغيُّر رمز مؤشّر الفأرة إلى الحرف I (اختصار Insert) عند انتقالها من منطقة القوائم إلى مساحة الكتابة. الشريط الأخير الذي يلي المساحة البيضاء (غير موجود في الصورة) فهو شريط الحالة، وهو يعرض معلومات عامة عن المُستند، مثل عدد الصفحات، عدد الكلمات والمحارف، النمط الفعّال، اللغة، مُستوى التقريب Zoom إلخ. انتبه: إلى أننا نستخدم في هذه السلسلة من الدروس الخط العريض لتمييز أسماء القوائم والخيارات الرسميّة ضمن برنامج رايتر. شريط الأدوات القياسي ينقسم شريط الأدوات القياسي إلى عشرة مجموعات: تضم الأولى أزرار التحكّم بالمستند ككل وهي على الترتيب: إنشاء مُستند جديد، فتح مستند، حفظ المستند الحالي، حفظ المستند الحالي باسم آخر. الزر الأول في المجموعة الثانية يُصدّر المُستند إلى ملف pdf مباشرة، ويوفّر الزران الثالث والرابع إمكانية الطباعة والمعاينة ما قبل الطباعة. المجموعة الثالثة تضم الأوامر القياسية التالية القصّ، النسخ، اللصق، على الترتيب. أما الزرّ الرابع والذي يأخذ شكل فرشاة مُلطّخة بالأحمر يُسمى "استنساخ التنسيق". فإذا كان لديك فقرتين أو جُملتين أو كلمتين إحداهما مُنسّقة كما تريد والثانية ليست كذلك، فحينها يُمكنك استخدام هذه الأداة لنقل كامل تفاصيل التنسيق من الفقرة الأولى للثانية، وذلك كما يلي: اضغط على أداة استنساخ التنسيق وحدّد النصّ المُنسّق بالأسلوب المرغوب، ثم اضغط على الأداة مرّة ثانية وحدّد النصّ المراد تنسيقه. الأزرار التالية في الشريط القياسي مُخصّصة للتراجع خطوة إلى الوراء، و إعادة الخطوة مُجددًا. انتبه إلى أنه يُمكنك النقر على السهم الصغير بجانب هذين الرمزين للرجوع أو العودة مجموعة من الخطوات دفعةً واحدة، يدعم البرنامج بشكل افتراضي 100 خطوة في ذاكرته. لتعديل الرقم توجّه إلى: أدوات > خيارات > LibreOffice > الذاكرة ثم غيّر الرقم أمام خانة Number of steps إلى ما تريد. المجموعة الخامسة تضمّ الأدوات التالية على الترتيب: البحث والاستبدال، تشغيل مُعالج التدقيق الإملائي والنحوي، وإظهار الأحرف التي لا يُمكن طباعتها؛ كنهايات الفقرات والأسطر، علامات الجدولة والمسافات بين الكلمات. المجموعات المتبقية تعمل على إدراج مختلف العناصر ضمن المستند. الزرّ الأوّل أعلاه يُدرج جدولًا، والثاني صورةً، والثالث رسمًا بيانيًا والرابع حقلًا نصيًا. الزرّ الأوّل في المجوعة السابقة يُدرج فاصلًا للصفحات، هذا ينقلك إلى صفحة جديدة. الخيار الثاني يُدرج حقلًا؛ كرقم الصفحة، الوقت والتاريخ، وغيرها من المعلومات. الخيار الثالث يُظهر صندوق إدراج الرموز الخاصة. تتابع هذه المجموعة عرض خيارات الإدراج التالية بالترتيب: إدراج رابط تشعبي. إدراج ملاحظة سُفليّة ضمن تذييل الصفحة. إدراج إشارة مرجعيّة. هنا لدينا الخياران: إدراج تعليق جانبي خارج متن المُستند. تسجيل التغييرات. تُفيد هذه الميزة عندما يعمل أكثر من مُحرّر على نفس النصّ، حيث تُحفظ جميع التغييرات المُدخلة موسومة باسم صاحبها وتأريخ تعديلها، بما يُمكّن عرض جميع التغييرات المُختلفة ومن ثم تقرير أيها يستحق التثبيت ورفض الباقي. تُستخدم هذه الخيارات لإدراج خط مستقيم، ومختلف الأشكال الرئيسية، ويُمكّن الزر الأخير من إظهار/إخفاء شريط الرسم. شريط التنسيق شريط التنسيق يبدو مألوفًا أكثر للمُستخدم، وباستثناء قائمة الأنماط المُنسدلة –والتي سنتناولها لاحقًا بالتفصيل– فإن خيارات نوع وحجم ونمط الخط تبدو مألوفة تمامًا. الخيارات الأخرى هنا هي لمحاذاة النصّ (إلى اليمين، إلى اليسار، توسيط، وضبط)، تباعد الأسطر، الترقيم والتنقيط للتعدادات، وأخيرًا الانزياح (زيادةً ونقصانًا). حفظ المستند يدعم ليبر أوفيس حفظ المُستندات ضمن طيف واسع من الامتدادات. من القائمة: ملف > حفظ باسم… يُمكنك من القائمة المُنسدلة أسفل مربع الحوار اختيار الصيغة المناسبة للمستند. من أشهر اللواحق الامتدادات المدعومة: odt, doc, docx, rtf, txt.
  2. تطرقنا في الدرس السابق البدء مع محرر نصوص LibreOffice Writer إلى كيفية تثبيت حزمة أدوات المكتب LibreOffice واختيار اللغة العربية للواجهة، كما ألقينا نظرة على شريط أدوات محرر النصوص LibreOffice Writer. في هذا الدرس سنرى كيفية إعداد صفحة العمل في محرر النصوص. الاتجاه الطولي والعرضي للصفحة يُمكننا كتابة المُستندات في محرر النصوص LibreOffice Writer باتجاه طولي وآخر عرضي، الوضع الافتراضي للصفحة فور بدء البرنامج هو الاتجاه بالطول، وهو النمط الأكثر استخدامًا في أوراق البحث، الخطابات الرسميّة، الكتب، الحلقات الأكاديميّة وغيرها، بينما يُستخدم الاتجاه العرضي للصفحة بكتابة الإعلانات والمنشورات بشكلٍ أساسي. لتحديد اتجاه صفحات المُستند بالكامل نتّجه إلى القائمة: Format > Page ثم من علامة التبويب الصفحة Page انظر إلى الخانة الاتجاه Orientation. بشكلٍ افتراضي ستجد الخيار بالطول Portrait مُفعّلًا. اضغط على بالعرض Landscape لقلب جميع صفحات المُستند إلى الاتجاه العرضي. أما إذا كنتَ ترغب بقلب اتجاه صفحةٍ واحدة إلى العرض ضمن مُستندٍ طولي، ولنقل أنه لديك مُستند من أربع صفحات طوليّة الاتجاه، إلا أنّه يلزمك قلب الصفحة الثانية فقط إلى الاتجاه العرضي، لفعل ذلك اتّبع الأسلوب التالي: ضع مؤشّر الكتابة في نهاية الصفحة الأولى (آخر كلمة من السطر الأخير)، ثم من قائمة: Insert < Manual break ومن مربع الحوار الظاهر وتحت بند النوع Type اختر فاصل صفحات Page break، من القائمة المُنسدلة النمط Style اختر بالعرض Landscape. الآن ستجد بأنّ الصفحة الثانية باتت عرضيّة الاتجاه، لكن التأثير طُبّق أيضًا على الصفحات الثالثة والرابعة وهو ما لا نريده، لذا اتّجه مُجددًا إلى نهاية الصفحة الثانية وضع مؤشّر الفأرة هناك، ثم من قائمة: Insert > Manual break اختر فاصل صفحات Page break ومن قائمة النمط Style اختر النمط الافتراضي Default style. هكذا ستعود الصفحتان الثالثة والرابعة إلى الاتجاه الطولي، بينما تبقى الصفحة الثانية عرضيّة وهو ما نريده تمامًا. حجم الصفحة وهوامشها يأتي محرر النصوص Writer من ليبر أوفيس بإعداد افتراضي لحجم صفحة الكتابة يُسمى خطاب أو Letter وهو النمط الأكثر شيوعًا في الولايات المُتحدّة الأمريكيّة، إلا أنّ هذا قد يُسبّب لك مشاكل عند طباعة مُستنداتك في المكتبات العامّة أو حتى في المنزل، فغالبًا ما نستخدم ورق من مقاس A4 (الأوروبي) للطباعة في منطقتنا العربيّة، ومع اختلاف حجم الصفحة بين القالبين لن تحصل على نتيجة طباعة مثالية. لتغيير الإعداد الافتراضي للبرنامج نحتاج إلى العودة مُجددًا إلى صندوق تنسيق الصفحة Page من القائمة تنسيق Format، ومن علامة التبويب الصفحة Page اضبط القائمة المُنسدلة التنسيق Format إلى الخيار A4 ثم اضغط على تطبيق Apply. من ذات النافذة يُمكننا ضبط الهوامش الأربعة للصفحة بهدف الحصول على المزيد من المساحة البيضاء القابلة للكتابة أو العكس، لكن يجب الانتباه إلى أن عملية الطباعة تفرض قيودًا ماديّة على أصغر هوامش يُمكننا استخدامها، وفي حال تجاوز هذه القيود فسنحصل على رسالة خطأ قبيل إتمام عملية الطباعة تُفيد بضيق الهوامش وتُخيّرنا بين الطباعة على أيّة حال (ما يؤدّي إلى ضياع جزء من النصّ) أو تعديل الهوامش. في العموم يُمكن اعتبار هوامش "0.25 فأكثر؛ آمنة لمُعظم الطابعات. ملاحظة؛ يُمكننا تغيير واحدة قياس أبعاد الصفحة والهوامش من البوصة إلى أي واحدة أخرى من قائمة: Options > Tools ثم من القائمة الجانبية نختار LibreOffice Writer، بعد ذلك من قسم إعدادات General ومن أمام القائمة المُنسدلة Measurement Unit يُمكنك اختيار السنتيمتر centimeter أو ما شابه. تخطيط الصفحة ضمن صندوق حوار تنسيق الصفحة Page format السابق لدينا خيار آخر مُهم يتعلّق بأسلوب تخطيط الصفحات لا سيّما عندما يكون المُستند مُعدًّا لغرض الطباعة، فمن القائمة المُنسدلة تخطيط الصفحة Page layout سنجد لدينا أربعة خيارات: يمين ويسار Right and left، يُستخدم هذا الخيار عادةً مع الحلقات الأكاديميّة، الأبحاث، المُلخّصات إلخ عندما يُطبع على وجهي الورقة، بحيث تجمع أوراق المُستند بواسطة سلك معدني يسمح بطوي المادة. منعكس Mirrored، يُستخدم هذا التخطيط مع الكتب، عندما يُطبع على وجهي الورقة بينما تُجمع أوراق المُستند بالغراء أو الخياطة، بحيث نحصل على صفحتين مُتقابلتين دومًا في هذه الحالة يُمكننا تخصيص هوامش أوسع من الناحية الداخلية لأجل عملية التحرير المطبعي. يمين فقط Only right أو يسار فقط Only left يُستخدم مع المُستندات التي تُطبع فيها المواد على وجه واحد من وجهي الورقة، ويُحدد الخيار المناسب تبعًا للغة المُستند المُستخدمة إن كانت تُكتب من اليمين إلى اليسار (كالعربية)، أو من اليسار إلى اليمين (كالإنكليزيّة). الترويسة والتذييل رغم أن هوامش الصفحات هي اضطرار طباعي بالمقام الأوّل، إلا أنها تُعطي جمالية للصفحة علاوةً على إمكانية الاستفادة من هذه المساحات لإنشاء الترويسات والتذييل. الترويسة هي أي نصّ أو صورة يوضع ضمن الهامش العلوي للصفحة، بحيث يتكرّر في مجمل صفحات المُستند، ويقابله التذييل ضمن الهامش السفلي. يُمكن أن يُوضع ضمن الترويسة أو التذييل رقم الصفحة، اسم الكتاب أو الكاتب، شعار الموقع إلخ. لإدراج ترويسة للمُستند اتّبع ما يلي؛ من القائمة: Insert > Header > Default style سينتقل مؤشّر الإدخال مُباشرةً إلى رأس الصفحة الحاليّة. لنُدرج مثلًا رقم الصفحة كترويسة للصفحات، اكتب في منطقة الترويسة "الصفحة" ثم أضف مسافة فارغة، الآن من قائمة: Insert > Fields > Page number أدخل مسافة فارغة جديدة ثم اكتب "من"، وتوجّه مُجددًا إلى: Insert > Fields > Page count هكذا سنكون حصلنا على ترقيم شامل لجميع صفحات المُستند لدينا. بنفس الطريقة يُمكننا إدراج تذييل ما، أي من القائمة: Insert > Footer > Default style لنضع في التذييل مسار الملف كمثال، من القائمة: Insert > Fields > More fields الآن من النوع Type اختر اسم الملف File name ومن التنسيق Format اختر المسار/اسم الملف Path/File name. وهكذا سيظهر مسار الملف الذي نعمل عليه حاليًا في أسفل كل صفحة. الحدود والأعمدة من المزايا التحريريّة ضمن محرر ليبر أوفيس إمكانيّة إضافة حدود لنصوص الصفحات من ذات صندوق الحوار السابق تنسيق الصفحة Page format عبر علامة التبويب الحدود Borders. أسفل الخيار Line Arrangement يُمكنك انتقاء نمط الحدود المناسب؛ بلا حدود، وضع الحدود الأربعة، وضع الحدّين العلوي والسفلي، وضع الحدّين الجانبيين، وضع الحدّ الأيسر فقط. بالإضافة إلى إمكانية اختيار نمط الحدّ، لونه، حجمه، هوامشه عن النصّ، وأخيرًا إضافة ظلّ للحدّ عبر الخاصيّة Shadow Style. تُتيح لنا علامة التبويب التالية الأعمدة Columns تقسيم النصّ ضمن المُستند إلى عدّة أعمدة، يكثر استخدام هذا النمط في الجرائد والمجلات والدوريات الأخرى لا سيما عند استخدام حجم ورق أكبر من A4، من هذا اللسان يُمكنك اختيار عدد الأعمدة بالإضافة إلى عرض كل عمود وتباعده عن باقي الأعمدة. العلامة المائية واحدة من أكثر الميزات التحريريّة استخدامًا في المكتبات؛ وضع علامة مائية كخلفيّة لكل صفحة من المستند تُشير إلى المكتبة التي تحمل حقوق الطبع والبيع، أو تُبرز اسم الكاتب ورقم هاتفه إلخ. بكلّ الأحوال لفعل ذلك هناك أكثر من طريقة إحداها عن طريق مربع حوار تنسيق الصفحة Page format من علامة التبويب مساحة Area. لهذا الغرض يتوجّب علينا في البداية تحضير صورة مناسبة لاستخدامها كعلامة مائيّة، يُمكننا الاستعانة بأي برنامج تصميمي مثل Gimp، في حالتي هذه استخدمت تطبيق Draw الذي يأتي مع حزمة ليبر أوفيس. بكلّ الأحوال لا نحتاج إلى الكثير؛ فقط إنشاء مستند رسومي جديد مُطابق لقياس الصفحة (وهو في مثالنا هنا A4) ثم كتابة النصّ المطلوب بلون رمادي فاتح، يُمكننا تدويره قليلًا ووضعه بوسط الصفحة، ثم حفظ المُستند إلى لاحقة png. الآن من مربح الحوار السابق سنختار من القائمة المُنسدلة: Fill > Bitmap ومن الزر Import Graphic نختار الصورة السابقة ثم نضغط تطبيق، ليتم لصقها كخلفية لجميع الصفحات.
  3. تعرّفنا في الدرس السابق على دفتر الملاحظات الافتراضي OneNote وتطرّقنا إلى الأدوات والخصائص التي يوفّرها لتدوين الملاحظات، تنظيمها ومشاركتها. كما قمنا بشرح كيفية إنشاء دفاتر الملاحظات، المقاطع، الصفحات، والصفحات الفرعية لغرض استخدامها لتنظيم المحتوى. بعد إنشاء الصفحات على OneNote يحين وقت إضافة وحفظ الملاحظات. وبتنوّع خيارات الإدراج على OneNote تُتاح لك مرونة كبيرة في إضافة وحفظ أنواع كثيرة من المعلومات، من النصوص، إلى الصور، إلى الملاحظات الصوتية/المرئية، إلى قوائم المهام. وهذا ما سنغطّيه في هذا الدرس. إضافة ملاحظات نصيّة يمكنك إضافة الملاحظات النصيّة على صفحات OneNote بسرعة وسهولة، في الموضع المرغوب، وحسب الترتيب والتنسيق المرغوب. كل ما عليك فعله هو النقر على مكان فارغ في الصفحة والبدء بإدخال النص: ستلاحظ عندما تبدأ الكتابة ظهور مربّع لاحتواء النص الذي تدخله. في الحافة العليا من المربّع توجد 4 نقاط، عند النقر عليها سيظهر شريط أدوات التنسيق السريع الذي يمكنك استخدامه لتغيير حجم الخط، لونه، إضافة وسم للملاحظة، إلخ: ملاحظة: للوصول إلى أدوات التنسيق كاملة اذهب إلى تبويب Home. كما يمكنك تغيير موضع الملاحظة بالنقر على هذه النقاط الأربعة وسحب المربع ثم إفلاته في المكان المرغوب: أمّا إذا رغبت في تعديل عرض مربع النص لاحتواء نص كبير الحجم، انقر فوق السهمين المتعاكسين في حافة مربّع النص ثم اسحب إلى جهة اليسار (أو اليمين إذا كان اتجاه الصفحة من اليسار إلى اليمين): إدراج جدول الجداول هي من الأدوات المفيدة لترتيب الملاحظات بشكل صفوف وأعمدة، وكما هو الحال مع الملاحظات النصية، يمكن إدراج الجداول وتعبئتها بالبيانات في الموضع المرغوب وحسب عدد الصفوف والأعمدة المرغوب. لإدراج جدول، ضع مؤشر الكتابة في الأماكن الفارغة على الصفحة ثم اذهب إلى تبويب Insert> Table> مرّر مؤشر الفأرة فوق شبكة الخلايا لتحديد حجم الجدول ثم انقر نقرة واحدة لإدراجه: إذا رغبت في إدراج جدول بحجم كبير يتجاوز حجم شبكة الخلايا في قائمة Table، انقر على الخيار Insert Table ثم حدّد عدد الصفوف والأعمدة: بعد ذلك انقر داخل إحدى الخلايا وابدأ بإدخال المعلومات: على غرار الملاحظة النصية، يمكنك تغيير موضع الجدول داخل الصفحة بالنقر على النقاط الأربعة في حافّة المربع المحيط بالجدول ثم سحبه وإفلاته في المكان المرغوب. بالإضافة إلى ذلك ستتوفّر لك بعض الخيارات الإضافية لتعديل تخطيط الجدول أو تنسيقه في تبويب Layout السياقي الذي يظهر عند تحديد الجدول: إدراج ملفات من الخصائص الرائعة التي يوفّرها OneNote هي إمكانية إدراج مختلف أنواع الملفات وحفظها على صفحات الملاحظات. وبذلك يمكنك تخزين الملفات المهمة، مزامنتها، والوصول إليها من مختلف الأجهزة. توجد بعض أنواع الملفات قابلة للإدراج بطريقتين؛ إمّا بشكل لقطة شاشة لمحتوى الملف، أو بشكل ملف مرفق يمكن فتحه من OneNote مباشرة (أيقونة اختصار للملف يمكن النقر عليها بشكل مزدوج لفتح الملف). مثل الأمثلة على هذه الملفات، مستندات وورد، مصنفات اكسل، ملفات PDF، مخططات Vision، وغيرها. لإدراج لقطة شاشة لمحتوى الملف اذهب إلى تبويب Insert> File Printout> حدّد الملف المرغوب: في المثال أدناه، قمنا بإدراج لقطة شاشة لمصنف اكسل، وكما نلاحظ تم إدراج محتويات المصنّف، مع أيقونة الملف واسمه. ونستطيع معرفة المزيد من المعلومات حول الملف، مثل امتداد مجلد الحفظ أو الحجم، بتمرير مؤشر الفأرة فوق أيقونة الملف: أمّا لإدراج الملف بشكل ملف مرفق، اذهب إلى تبويب Insert> File Attachment> حدّد الملف المرغوب: بعد ذلك حدّد فيما إذا كنت ترغب في إدراجه كمرفق أو كلقطة شاشة (أي مثل الخيار السابق). انقر على الخيار Attach File لإدراجه كمرفق: إدراج صور يمكن إدراج الصور كملاحظات على OneNote بعدّة طرق: Screen Clipping: عمل لقطة شاشة. Pictures: إدراج الصور من على جهازك. Online Pictures: البحث على الإنترنت عن الصور وإدراجها. Scanned Image: مسح الصور باستخدام الماسح الضوئي أو الكاميرا وإدراجها. يمكنك استخدام هذه الخيارات لحفظ حجوزاتك، فواتيرك، إيصالاتك، وغيرها من الصور كملاحظات والوصول إليها من أي مكان. لإدراج لقطة شاشة مثلًا، انقر على أمر Screen Clipping، وسيتم فتح آخر نافذة كانت مفتوحة قبل النقر على الأمر، بالإضافة إلى تحوّل مؤشر الفأرة إلى شكل + وتغيّر ألوان النافذة إلى ألوان باهتة. انقر بزر الفأرة الأيسر ثم اسحب لتحديد المنطقة التي تريد التقاطها: بإمكانك تغيير موضع الصورة بالنقر على النقاط الأربعة وسحبها كما ذكرنا سابقًا، كما يمكن تحجيمها باستخدام المقابض التي تظهر عند تحديد الصورة: تسجيل ملاحظة صوتية أو مرئية من مجموعة Recording في تبويب Insert يمكن تسجيل ملف صوتي Record Audio أو ملف فيديو Record Video كملاحظة. وسيبدأ التسجيل بمجرّد النقر على أحد هذه الأزرار، وعند إيقاف التسجيل يتم إدراج الملف الصوتي أو المرئي مع تاريخ ووقت بدء التسجيل. لتسجيل ملاحظة صوتية مثلًا، انقر على زر Record Audio لبدء التسجيل. ستلاحظ ظهور تبويب Recording السياقي الذي يتضمّن المزيد من خيارات التسجيل: عندما تنتهي من تسجيل الملاحظة انقر على زر Stop في مجموعة Playback. ستُدرج الملاحظة الصوتية باسم صفحة الملاحظات الحالية، وبإمكانك تغيير اسمها بالنقر عليها بزر الفأرة الأيمن واختيار Rename: أمّا إذا رغبت في الاستماع إلى الملاحظة، انقر عليها ثم مثلث التشغيل الأخضر: إدراج قائمة مهام OneNote ليس أداة لإنشاء الملاحظات وحفظها فحسب، وإنّما يمكن استخدامه لإنشاء قوائم مهامك اليومية لتنظيمها وإدارتها. لإنشاء قائمة مهام، ضع مؤشر الكتابة في المكان الذي تريده ثم انقر على To Do Tag من تبويب Home، علمًا أنّه بإمكانك إدراج قائمة المهام داخل مربّع نص: ابدأ بإدخال عنصر القائمة الأول، ثم اضغط على مفتاح Enter لإدخال الثاني...وهكذا. إدراج مسافة تستخدم المسافات لإضافة المزيد من المساحات الفارغة/البيضاء بين ملاحظات الصفحة لجعلها أكثر ترتيبًا. ويمكن إدراج المسافة بوضع مؤشر الكتابة في المكان المرغوب ثم النقر على Insert Space من تبويب Insert: سيتغيّر شكل المؤشر إلى شكل سهم أسود اللون، انقر بزر الفأرة الأيسر ثم اسحب بالقدر المرغوب لإضافة المسافة: إضافة الملاحظات باستخدام أداة Send to OneNote Send to OneNote هي أداة اختصار لبعض طرق إضافة الملاحظات على OneNote، ويمكنك استخدامها لإنشاء الملاحظات بشكل سريع دون الحاجة إلى فتح برنامج OneNote. من الأمثلة على الملاحظات التي يمكن إضافتها باستخدام هذه الأداة هي لقطات الشاشة، الملاحظات النصيّة السريعة، ولقطات لمحتوى الملفات. عادة ما تُفتح هذه الأداة تلقائيًا عند فتح OneNote، وستلاحظ وجودها على شريط المهام لسطح المكتب: إذا لم تُفتح الأداة مع البرنامج، انقر بزر الفأرة الأيمن على أيقونة البرنامج في شريط المهام واختر Sent to OneNote Tool لفتحها (أو اضغط على مفتاحي الاختصار Windows + N): الخيارات المتوفّرة في هذه الأداة هي: Screen Clipping: لعمل لقطة شاشة للجزء المرغوب من النافذة. Sent to OneNote: لعمل لقطة شاشة لمحتوى ملف، مثل وورد، اكسل، وغيرها. New Quick Note: لكتابة ملاحظة نصيّة سريعة وحفظها على OneNote. لعمل لقطة شاشة، افتح النافذة التي تريد عمل لقطة شاشة لها ثم افتح أداة Send to OneNote وانقر على زر Screen Clipping. بعد ذلك انقر ثم اسحب لتحديد الجزء المرغوب: بعد إفلات الفأرة سيظهر لك مربّع حوار لاختيار الإجراء الذي تريد تطبيقه على لقطة الشاشة. فإذا رغبت في حفظها على إحدى صفحات OneNote، حدّد دفتر الملاحظات، المقطع، ثم الصفحة المرغوبة وانقر على زر Send to Selected Location: بإمكانك أيضًا استخدام حقل البحث للوصول السريع إلى الصفحة التي تريد الحفظ عليها. أمّا إذا رغبت في نسخ لقطة الشاشة إلى ذاكرة الحافظة clipboard ومن ثم لصقها في مكان آخر، انقر على زر Copy to Clipboard. لعمل لقطة شاشة لمحتوى ملف ما، وليكن مصنّف اكسل مثلا، افتح الملف ثم افتح أداة Send to OneNote وانقر على Send to OneNote: سيُفتح نفس مربّع الحوار للخيار السابق، حدّد دفتر الملاحظات، المقطع، ثم الصفحة التي تريد الحفظ عليها وانقر على زر OK: الخيار الأخير هو كتابة ملاحظة سريعة، وتتم بالنقر على New Quick Note من أداة Send to OneNote. في هذه الحالة ستُفتح صفحة ملاحظات مصغّرة ويمكنك البدء بإدخال ملاحظتك عليها وإغلاق الصفحة عند الانتهاء: تُحفظ هذه الملاحظات السريعة في مقطع مستقل اسمه Quick Notes والذي يمكنك الوصول إليه بالنقر على قائمة دفاتر الملاحظات> Quick Notes: وبإمكانك نقل/نسخ هذه الملاحظات إلى مقطع/دفتر ملاحظات آخر بالنقر على اسم المقطع بزر الفأرة الأيمن واختيار Move or Copy: بعد ذلك حدّد دفتر الملاحظات الذي تريد نقل المقطع إليه أو المقطع الذي تريد نقل المقطع الحالي بعده ثم انقر على زر Move للنقل أو Copy للنسخ: خاتمة تعرّفنا في هذا الدرس على أنواع المحتوى الذي يمكن إضافته وحفظه على OneNote وتعلّمنا كيفية استخدام أداة Send to OneNote لاختصار الوقت وإضافة الملاحظات بشكل سريع. في الدرس القادم سنتعلّم كيفية التحكّم في طريقة عرض صفحات الملاحظات.
  4. في هذا الدرس سنستعرض بعض دوال النصوص المضمّنة في مكتبة دوال اكسل ونوضّح من خلال الأمثلة كيفية استخدامها لتطبيق إجراءات مختلفة على القيم النصيّة مثل، البحث عن النصوص واستبدالها، تنسيق حالة الأحرف للنصوص الإنجليزية، وغيرها. TRIM تعمل هذه الدالة على إزالة المسافات الزائدة بين الكلمات، أو في بداية ونهاية السلسلة النصية. والصيغة العامة لها هي: =TRIM(text) text: النص الذي نريد إزالة المسافات الزائدة منه. مثال: تحتوي الخلية B4 الموضّحة أدناه على مسافات غير منتظمة بين الكلمات، ولحذف المسافات غير المرغوبة نكتب الصيغة التالية في خلية النتيجة: بإمكاننا تحديد الخلية التي تحتوي على النص مباشرة، أو لصق النص يدويًا بين علامتي اقتباس (" "). نضغط على ENTER لإظهار النتيجة: كما نلاحظ في خلية النتيجة، تمت إزالة كل المسافات الزائدة باستثناء المسافات الفردية بين الكلمات. يمكننا استخدام هذه الدالة عند استيراد النصوص إلى اكسل ويكون تباعد الكلمات فيها غير منتظم. إذ ستكون عملية إزالة المسافات الزائدة أسهل وأسرع بكثير من القيام بها يدويًا. PROPER تعمل هذه الدالة على تحويل الحرف الأول من كل كلمة في السلسة النصية إلى حرف كبير وتبقي بقية الحروف صغيرة. ويمكننا الاستفادة منها عند استيراد نصوص معيّنة إلى اكسل وكانت حالة الأحرف للكلمات غير مرتّبة، إذ ستجعل هذه الدالة عملية تنسيق حالة الأحرف أسرع وأسهل بكثير من القيام بها يدويًا. الصيغة العامة لهذه الدالة: =PROPER(text) text: النص الذي نريد تطبيق الدالة عليه. مثال: تحتوي الخلية B5 الموضحة أدناه على نص باللغة الإنجليزية، وحالة الأحرف للكلمات غير منتظمة، لتعديل النص وجعل كل كلمة تبدأ بحرف كبير وبقية الحروف صغيرة، نكتب الصيغة التالية في خلية النتيجة: يمكننا تحديد الخلية التي تحتوي على النص، أو لصق النص غير المرتب بين علامتي اقتباس في الصيغة. نضغط على مفتاح ENTER لإظهار النتيجة: من خصائص دالة PROPER هو أنّه حتّى إذا كانت بداية الكلمة أرقام أو رموز (مثل 09test)، فأنّها تتجاوز الأرقام وتحوّل الحرف الأول إلى حرف كبير (أي تصبح الكلمة المذكورة 09Test). FIND تُستخدم هذه الدالة لتحديد موقع كلمة/عبارة معيّنة ضمن سلسلة نصيّة. فتقوم بإرجاع ترتيب الحرف الأول للكلمة التي نبحث عنها نسبة إلى عدد حروف السلسلة. وتكون هذه الدالة حساسة لتشكيل الكلمة في اللغة العربية ولحالة الأحرف (كبيرة أو صغيرة) في اللغة الإنجليزية. الصيغة العامة للدالة: =FIND(find_text; within_text; [start_num]) find_text: النص الذي نبحث عنه، وهو مطلوب في الصيغة. within_text: النص الذي نريد البحث فيه، وهو أيضًا مطلوب في الصيغة. start_num: مرتبة الحرف الذي نريد بدء البحث منه، ووجوده اختياري في الصيغة (معطيات الصيغة التي توضع بين قوسين مربعين [ ] تكون اختيارية). مثال: لمعرفة موقع كلمة "Functions" في نص الخلية G3 نكتب الصيغة التالية: نراعي وضع الكلمة التي نريد البحث عنها بين علامتي اقتباس في الصيغة ونتأكّد من مطابقة حالة الأحرف، ثم نضغط على مفتاح ENTER لإظهار النتيجة: تم إرجاع النتيجة "6" وهو بالفعل تسلسل أول حرف في كلمة "Functions". فكلمة "Text" تحتل 4 مراتب، والمسافة بين "Functions" و"Text" تأخذ مرتبة واحد ليصبح المجموع 5، وحرف "F" هو السادس. في هذا المثال لم نحدد قيمة start_num، وفي هذه الحالة سيتم افتراض هذه القيمة 1، أي يبدأ البحث من أول حرف في النص. لنغيّر الصيغة ونحدد قيمة المتغيّر start_num 17 مثلا: بالنتيجة تم إرجاع الخطأ #VALUE! لأنّه لم يتم العثور على كلمة "Functions" بعد المرتبة 17. فكلمتي "Text" و"Functions" مع المسافة بينهما تحتل 14 مرتبة، بمعنى أنّ كلمة "Functions" تقع قبل المرتبة 17: لنغيّر الصيغة ونبحث عن موقع كلمة "حسوب" في الخلية G2، وكالتالي: عند الضغط على مفتاح ENTER تم إرجاع الخطأ #VALUE! وذلك لأننا قمنا بإضافة ضمّة فوق حرف السين عند كتابة الصيغة، وكما أسلفنا الذكر، تكون دالة FIND حسّاسة لتشكيل الحروف في اللغة العربية. SEARCH تماثل دالة FIND من حيث الوظيفة، لكنّها غير حسّاسة لتشكل الحروف في اللغة العربية وحالتها في اللغة الإنجليزية. الصيغة العامة للدالة: =FIND(find_text; within_text; [start_num]) find_text: النص الذي نبحث عنه، وهو مطلوب في الصيغة. within_text: النص الذي نريد البحث فيه، وهو أيضًا مطلوب في الصيغة. start_num: ترتيب الحرف الذي نريد بدء البحث منه، ووجوده اختياري في الصيغة. مثال: سنطبّق هذه الدالة لتحديد موقع الكلمة "Functions" كما في المثال السابق: سنلاحظ أنّه سيتم إرجاع نفس النتيجة، "6"، بالرغم من أننا كتبنا بداية كلمة "functions" بحرف صغير: REPLACE تستخدم هذه الدالة لاستبدال نص معيّن في سلسلة نصيّة بنص آخر حسب عدد الحروف الذي نحدّده. ووظيفتها مشابهة لوظيفة أداة استبدال النصوص Replace. الصيغة العامة للدالة: =REPLACE( old_text; start_num; num_chars; new_text ) old_text: السلسلة النصية التي نريد استبدال جزء منها. start_num: مرتبة الحرف الأول للنص الذي نريد استبداله. num_chars: عدد حروف النص القديم الذي نريد استبداله. new_text: النص الجديد الذي نريد الاستبدال به. ملاحظة: كل المتغيرات أعلاه مطلوبة في الصيغة. مثال: لاستبدال كلمة "النصوص" في الخلية G2 بالكلمة "نصية"، نكتب الصيغة كالتالي: قمنا بإدخال الخلية G2 في الصيغة لأنّها تحتوي على النص الأصلي الذي نريد استبدال جزء منه، يليه الرقم "6" لأنّ مرتبة أول حرف من كلمة "النصوص هي السادسة (كلمة "دوال" مع المسافة بعدها تحتل 5 مراتب، وكلمة "النصوص" تبدأ عند المرتبة 6)، يليه الرقم "6" لأنّ كلمة "النصوص" تتكوّن من ستّة حروف، وأخيرًا كلمة "نصيّة" التي نريد الاستبدال بها بين علامتي اقتباس. والنتيجة: UPPER تقوم هذه الدالة بجعل كل أحرف السلسلة النصيّة كبيرة. والصيغة العامة لها هي: =UPPER(text) text: النص الذي نريد تطبيق الدالة عليه. مثال: لتحويل كل النصوص في الخلية B5 إلى أحرف كبيرة نكتب الصيغة التالية: والنتيجة: LOWER عملها معاكس للدالة السابقة، إذ تجعل كل أحرف السلسلة النصية صغيرة. الصيغة العامة لهذه الدالة هي: =LOWER(text) مثال: لتحويل نفس النص في الخلية B5 إلى أحرف صغيرة نكتب الصيغة التالية: والنتيجة: خاتمة لقد تعلّمنا كيفية إزالة المسافات الزائدة بين النصوص، كيفية البحث عن نصوص معيّنة واستبدالها، وكيفية تغيير حالة الأحرف باستخدام بعض الدوال النصيّة. في الدرس القادم سنغطّي المزيد من هذه الدوال ونتعلّم كيفية تجميع النص وكيفية استخلاص جزء منه.
  5. يُعتبر التعامل مع النصوص من المواضيع المهمّة التي يحتاجها أيّ مبرمج. توفّر سي شارب أساليب متقدّمة للتعامل مع النصوص، سنتحدّث في هذا الدرس عن بعض هذه الأساليب. حيث سنتعلّم كيفيّة البحث عن نص محدّد ضمن نص آخر، واستبدال نص بآخر، واستخلاص جزء محدّد من نص، وضمّ النصوص. النص في سي شارب هو سلسلة من المحارف char الواقعة بين علامتي الاقتباس المزدوج " ". لقد تعاملنا في العديد من المرّات مع النصوص في الدروس السابقة، وتعلّمنا كيف أنّ النوع string هو الذي يمثّل أي نص في سي شارب. البحث والاستبدال ضمن نص البحث ضمن نص للمحارف في أيّ نص ترتيب رقمي يبدأ من الصفر ويسمى الدليل index. إذا أردنا أن نبحث عن نص محدّد ضمن نص آخر فيمكن ذلك باستخدام التابع IndexOf الذي نستدعيه من النص المراد البحث ضمنه، ونمرّر إليه النص المراد البحث عنه، فيُرجع دليل أوّل محرف للنص المطابق في حال وجوده وإلّا فيرجع 1-. كمثال على ذلك انظر الشيفرة التالية: string text = "My friend Mohammad is a developer, Mohammad likes C#."; int pos = text.IndexOf("Mohammad"); بعد تنفيذ الشيفرة السابقة سيحمل المتغيّر pos القيمة 10 والتي تمثّل دليل الحرف M ضمن النص text. ربما تكون قد لاحظت أنّ النص Mohammad موجود في النص text مرّتين، فأيّ دليل أعاد التابع IndexOf؟ تجري عملية البحث باستخدام التابع IndexOf حسب ترتيب إدخال المحارف في النص text، لذلك فأوّل كلمة Mohammad مطابقة يصادفها تُنهي عمليّة البحث. ففي مثالنا السابق حدثت المطابقة عند كلمة Mohammad الموجودة بعد "My friend". أمّا إذا استخدمنا كلمة غير موجودة فسنحصل على القيمة 1- كما أسلفنا. انظر الشيفرة التالية: string text = "My friend Mohammad is a developer, Mohammad likes C#."; int pos = text.IndexOf("Amjad"); سيحمل المتغيّر pos القيمة 1- لأنّ النص الذي نبحث عنه غير موجود في النص text. يخضع التابع IndexOf في الواقع لزيادة التحميل، حيث أنّ هناك 9 أشكال مختلفة له. تؤمّن هذه الأشكال المزيد من مزايا البحث، حيث يمكننا مثلًا البحث عن نص ضمن جزء محدّد من النص الموجود في text، أو ابتداءً من دليل محدّد حتى آخر النص، وهكذا. هناك تابع آخر يسمح لنا بأن نبحث بشكل معكوس، وهو التابع LastIndexOf لفهم عمله بشكل جيّد سأعيد كتابة الشيفرة السابقة ولكن باستخدام التابع LastIndexOf: string text = "My friend Mohammad is a developer, Mohammad likes C#."; int pos = text.LastIndexOf("Mohammad"); بعد التنفيذ سيحمل المتغيّر pos القيمة 35، وذلك لأنّ المطابقة حدثت هذه المرّة مع كلمة Mohammad الثانية (تأتي قبل كلمة likes). حيث تمثّل القيمة 35 دليل الحرف M لهذه الكلمة بالنسبة للنص text. ملاحظة يمكنك أن تستخدم التابع ToUpper من أي متغيّر نصي والذي يعيد حالة الأحرف الطباعية الكبيرة للنص الموجود ضمن المتغيّر النصي دون أن يؤثّر ذلك على محتوى النص الأساسي ضمن المتغيّر. ونفس الأمر ينطبق على التابع ToLower والذي يعيد الحالة الطباعية الصغيرة. يفيد كل من التابعين السابقين أحيانًا في البحث إذا أردنا عدم التمييز بين الأحرف الطباعية الكبيرة والصغيرة عند عملية المطابقة بين الكلمات. انظر لكيفيّة استخدام هذين التابعين: string text = "Hello!"; string upper = text.ToUpper(); //upper will contains "HELLO!" string lower = text.ToLower(); //lower will contains "hello!" مع الانتباه إلى أنّ قيمة المتغيّر text تبقى كما هي. الاستبدال ضمن نص بالنسبة للاستبدال فالأمر يسير أيضًا، حيث يمكن استخدام التابع Replace لهذا الغرض. يُستدعى هذا التابع من النص الذي نريد إجراء عمليّة الاستبدال ضمنه، حيث يتطلّب هذا التابع وسيطين: الأوّل oldValue والذي يمثّل القيمة النصيّة المراد استبدالها، والوسيط الثاني newValue الذي يمثّل القيمة النصيّة الجديدة. يُرجع هذا التابع قيمة نصيّة تمثّل النص الجديد بعد إجراء عمليّة الاستبدال ضمنه، أي أنّ النص الأساسي يبقى دون تغيير. انظر الشيفرة التالية: string text = "My friend Mohammad is a developer, Mohammad likes C#."; string newText = text.Replace("Mohammad", "Amjad"); بعد التنفيذ سيحمل المتغيّر newText القيمة النصيّة التالية: "My friend Amjad is a developer, Amjad likes C#." وسيبقى النص الأصلي text على حاله دون تغيير. استخلاص النصوص وضمها استخلاص النصوص يمكننا استخلاص جزء من نص باستخدام التابع SubString والذي يعني نصًّا فرعيًّا أو جزئيًّا. لهذا التابع شكلان. يسمح الشكل الأوّل باستخلاص نص جزئي ابتداءً من دليل محدّد حتى آخر النص. أمّا الشكل الثاني فيسمح أيضًا باستخلاص نص جزئي ابتداءً من دليل محدّد ولكن بطول محدّد أيضًا. للتمييز بين هاتين الحالتين لنكتب بعض الشيفرة: string text = "My friend Mohammad is a developer, Mohammad likes C#."; string text1 = text.Substring(24); بعد التنفيذ سيحتوي المتغيّر text1 على النص: ".#developer, Mohammad likes C". أمّا إذا استخدمنا الشيفرة التالية: string text = "My friend Mohammad is a developer, Mohammad likes C#."; string text1 = text.Substring(24, 9); فسيحتوي المتغيّر text1 على النص: "developer" فقط. والسبب في ذلك أنّنا بدأنا عمليّة الاستخلاص من الدليل 24 (دليل الحرف d) وبطول 9 محارف فقط مما يعني استخلاص الكلمة developer فحسب. ضم النصوص يمكن ضمّ النصوص اعتبارًا من نصوص أصغر باستخدام عامل الضم + حيث أنّ استخدامه بسيط. انظر الشيفرة البسيطة التالية: string text = "My name is " + "Husam"; بعد تنفيذ هذه العبارة سيحتوي المتغيّر text على النص: "My name is Husam" هناك أمرٌ بسيط لكنّه مهم جرى وراء الكواليس! لقد أنشأ مترجم سي شارب كائنًا نصيًّا جديدًا ليستوعب النص الجديد، ثم وضع مرجعًا لهذا الكائن ضمن المتغيّر text. قد لا يبدو الأمر مقلقًا في حالة مثالنا البسيط هذا، ولكن تخيّل معي ماذا سيحدث في برنامج يتطلّب ضمّ مئات من النصوص مع بعضها (وهذا أمر وارد جدًّا)؟ ستحدث بالتأكيد مشاكل في الأداة، وستغص الذاكرة بمئات الكائنات النصيّة التي لا لزوم لها، والتي تنتظر دورها في التنظيف من قبل جامع النفايات GC الذي يعمل على تحرير ذاكرة تطبيقات دون نت من الكائنات غير المستخدمة في البرنامج. الحل الأمثل في هذه الحالة هو تجنّب استخدام عامل الضم (+)، واستخدام الصنف StringBuilder الموجود ضمن نطاق الاسم System.Text الذي يحل هذه المشكلة بكفاءة عالية. لنستعرض البرنامج Lesson11_01 لهذا الغرض: 1 using System; 2 using System.Text; 3 4 namespace Lesson11_01 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 StringBuilder sb = new StringBuilder(); 11 string[] arrText = { 12 "C# is a powerful language.", 13 "It contains advanced features.", 14 "It makes programming tasks more easier.", 15 "C# is the main programming language in .NET world." 16 }; 17 18 foreach(string text in arrText) 19 { 20 sb.Append(text); 21 } 22 23 Console.WriteLine(sb.ToString()); 24 } 25 } 26 } أنشأنا المتغيّر sb من النوع StringBuilder وأسندنا إليه كائنًا من هذا النوع في السطر 10. بعد ذلك أنشأنا المصفوفة arrText بطريقة مختصرة في السطر 11. ثمّ استخدمنا حلقة foreach للمرور على جميع عناصر المصفوفة arrText وإضافتها واحدًا تلو الآخر إلى المتغيّر sb من خلال التابع Append الذي يتطلّب وسيطًا نصيًّا واحدًا (السطر 20). أخيرًا يعمل التابع WriteLine في السطر 23 على طباعة المحتوى النصيّ الناتج من ضمّ جميع النصوص التي أضفناها باستخدام التابع Append وذلك من خلال استدعاء التابع ToString من المتغيّر sb، ستلاحظ بعد تنفيذ البرنامج أنّ النص المعروض سيكون مضمومًا كما لو استخدمنا عامل الضم (+) على الشكل التالي: C# is a powerful language.It contains advanced features.It makes programming tasks more easier.C# is the main programming language in .NET world. كان من الممكن استخدام تابع آخر من المتغيّر sb في السطر 20 وهو التابع AppendLine. يشبه هذا التابع Append تمامًا باستثناء أنّه يضيف محرف سطر جديد n\ تلقائيًّا إلى كلّ نص جديد تتم إضافته. ملاحظة استخدمنا في السطر 11 أسلوبًا مختصرًا في إنشاء المصفوفات. يمكن استخدام هذا الأسلوب عندما تكون عناصر المصفوفة معروفة ومحدّدة. للأسلوب المختصر الشكل التالي بالنسبة للمصفوفات النصيّة: string[] arrText = {"Text_1", "Text_2", "Text_3", … , "Text_n"}; ويمكن بالطبع استخدام هذا الأسلوب المختصر مع أيّ نوع مصفوفة آخر. تمارين داعمة تمرين 1 ليكن لدينا النص التالي: "black cat and white dog are friends. black cat always brings food to dog, and white dog thanks it." المطلوب كتابة برنامج يحسب عدد الكلمات black وعدد الكلمات dog الموجودة في النص. ثمّ يستبدل كل كلمة white في النص بكلمة brown ويعرض النص المعدّل على الشاشة. تمرين 2 هذا التمرين هو تحدٍّ من نوع آخر! اكتب برنامجًا يطلب من المستخدم نص كيفيّ. ثم أعدّ تقريرًا يتضمّن إحصائيّات حول عدد كل كلمة أدخلها المستخدم، واعرض هذا التقرير على الشاشة. (تلميح: ربما تحتاج إلى شكل مختلف للتابع IndexOf يتطلّب وسيطين: الأوّل هو النص المراد البحث عنه، والثاني هو دليل المحرف الذي سيبدأ البحث اعتبارًا منه. في أمثلتنا السابقة كنّا نبحث افتراضيًّا من المحرف ذو الدليل 0). الخلاصة تعرّفنا في هذا الدرس على الخطوات الأساسيّة في التعامل مع النصوص. حيث تعلّمنا كيف نبحث عن نص محدّد ضمن نص آخر وذلك بأسلوبين مختلفين، بالإضافة إلى إجراء عمليّات استبدال داخل نص. كما تعلّمنا كيف نستخلص جزءًا محدّدًا من نص، وكيف نضمّ النصوص باستخدام الصنف StringBuilder. يُعتبر العمل مع النصوص أساسيًّا ومهمًّا لكلّ مبرمج وخصوصًا في مثل هذه الأيّام، فالبيانات التي يتمّ تبادلها بين التطبيقات المختلفة عبر شبكة الإنترنت تكون على شكل نصوص. سنتناول في الدرس القادم كيفيّة التعامل مع الملفات النصيّة من خلال القراءة والكتابة منها وإليها.
  6. سنتعرف في هذا الدّرس على الأنماط Patterns، الظلال Shadows وقواعد الملء في Canvas بالإضافة لرسم النصوص وتطبيق التنسيقات عليها مثل أنواع الخطوط Fonts وخصائصها. كما سنتعرف على واحدة من السمات الأكثر إثارة في canvas وهي القدرة على استخدام الصور لعمل تركيبات صور ديناميكية، خلفيات أو حتى شخصيات الألعاب. الأنماط Patterns تتيح لك canvas إنشاء أنماط باستخدام الصور وتحديد أنواعها باستخدام الدالة ()createPattern. تأخذ الدالة ()createPtterns معاملين هما الصورة المراد استخدامها لتطبيق النمط والتي يمكن أن تكون عنصر HTML أو وسم <video> أو حتى عنصر canvas آخر. المعامل الآخر هو النوع Type وهو عبارة عن نص string يحدد كيفيّة استخدام الصورة لتطبيق النمط. createPattern(image, type) يأخذ المعامل type أحد القيم التالية والتي تحدد كيفية استخدام الصورة لإنشاء النمط Pattern: Repeat: تكرر الصورة في الاتجاهين الأفقي Horizontal والعمودي Vertical repeat-x: تكرر الصورة في الاتجاه الأفقي Horizontal repeat-y: تكرر الصورة في الاتجاه العمودي Vertical no-repeat: تظهر الصورة مرة واحد كما هي. تشبه الدالة ()createPattern دوال التدرج اللّوني gradient التي شرحتها في الدرس السّابق. عند إنشاء نمط يمكننا إسناده إلى الخاصية fillStyle أو strokeStyle كما في المثال التالي: var img = new Image(); img.src = 'someimage.png'; var ptrn = ctx.createPattern(img,'repeat'); ملاحظة: تأكّد من أنك قمت بإنشاء صورة وإعطائها المسار الصحيح قبل استدعاء الدالة ()createPattern. في هذا المثال سنقوم بإنشاء نمط وإسناده للخاصية fillStyle حيث سننشئ النمط ضمن الدالة onload للصورة وذلك للتأكد من تحميل الصورة قبل إسنادها للنمط. function draw() { var ctx = document.getElementById('canvas').getContext('2d'); var img = new Image(); img.src = 'https://mdn.mozillademos.org/files/222/Canvas_createpattern.png'; img.onload = function(){ var ptrn = ctx.createPattern(img,'repeat'); ctx.fillStyle = ptrn; ctx.fillRect(0,0,150,150); } } النتيجة: الظلال Shadows باستخدام الظلال في canvas يمكنك عمل تظليل للنصوص والصور. استخدام الظلال في canvas يتضمن 4 خصائص: shadowOffsetX = float تشير إلى أن الظل يمتد من الكائن بمسافة أفقية. لا تتأثر هذه القيمة بمصفوفة التحويل Transformation matrix وقيمتها الافتراضية هي 0. shadowOffsetY = float تشير إلى أن الظل يمتد من الكائن بمسافة عمودية. لا تتأثر هذه القيمة بمصفوفة التحويل Transformation matrix وقيمتها الافتراضية هي 0. shadowBlur = float تحدد حجم تأثير الضبابية blurring. لا تتعلق هذه القيمة بعدد الـ pixels ولا تتأثر بمصفوفة التحويل Transformation matrix وقيمتها الافتراضية هي 0. shadowColor = color هي قيمة ألوان CSS قياسية وتحدد لون الظل وقيمتها الافتراضية هي لون أسود بشفافية كاملة. الخاصيتان shadowOffsetX و shadowOffsetY تشيران إلى أي مدى ينبغي أن يمتد الظل من الكائن في الاتجاه X والاتجاه Y. تأخذ الخاصيتين قيمًا سالبة وذلك لتحديد اتجاه الظل إما لليسار X- أو للأعلى Y-. الخاصية shadowBlur تحدد حجم الضبابية للظل ولا تتعلق بعدد الـ pixels ولا تتأثر بمصفوفة التحويل Transformation matrix وقيمتها الافتراضية هي 0. المثال التالي يرسم نصًا بتأثيرات ظلال مختلفة باستخدام القيم أعلاه: function draw() { var ctx = document.getElementById('canvas').getContext('2d'); ctx.shadowOffsetX = 2; ctx.shadowOffsetY = 2; ctx.shadowBlur = 2; ctx.shadowColor = "rgba(0, 0, 0, 0.5)"; ctx.font = "20px Times New Roman"; ctx.fillStyle = "Black"; ctx.fillText("أهلًا بك في أكاديمية حسوب", 5, 30); } قواعد الملء Fill Rules عند استخدام الخاصية ()fill يمكنك تحديد خوارزمية الملء التي تريد تطبيقها ويمكن من خلالها تحديد فيما إذا كانت النقطة داخل أو خارج المسار وبالتالي تحديد هل سيتم ملئها أم لا. ويوجد لها قيمتان: nonzero وهي القيمة الافتراضية. evenodd مثال: function draw() { var ctx = document.getElementById('canvas').getContext('2d'); ctx.beginPath(); ctx.arc(50, 50, 30, 0, Math.PI*2, true); ctx.arc(50, 50, 15, 0, Math.PI*2, true); ctx.fill("evenodd"); } رسم النصوص كأي شكل من الأشكال التي يمكن رسمها على canvas يمكن أيضًا رسم النصوص وتطبيق خصائص مختلفة عليها. يوفّر سياق التصيير rendering context في canvas طريقتين لتصيير النصوص: 1- باستخدام الدالة fillText fillText(text, x, y [, maxWidth]) تملأ نصًا مُعيّنًا عند موضع x,y معين، المعامل maxWidth معامل اختياري يحدد أقصى عرض للرسم. 2- باستخدام الدالة strokeText strokeText(text, x, y [, maxWidth]) تملأ حواف نص معين عند موضع x,y معين، المعامل maxWidth معامل اختياري يحدد أقصى عرض للرسم. مثال: ملء نص باستخدام fillStyle function draw() { var ctx = document.getElementById('canvas').getContext('2d'); ctx.font = "48px serif"; ctx.fillText("Hello world", 10, 50); } مثال: ملء حواف نص باستخدام strokeStyle function draw() { var ctx = document.getElementById('canvas').getContext('2d'); ctx.font = "48px serif"; ctx.strokeText("Hello world", 10, 50); } تصميم وتنسيق النصوص يوفر سياق التصيير Rendering Context مجموعة من الخصائص تمكّنك من تحديد المظهر الذي تريد إظهار النص به على Canvas. ستبدو هذه الخصائص مألوفة لك إن كنت قد عملت على CSS من قبل. font = value تحدد نمط النص الحالي (نوع الخط) الذي سيظهر به النص، تستخدم هذه الخاصية نفس قواعد استخدام الخاصية CSS font. القيمة الافتراضية للخط هي 10px sans-serif. textAlign = value تُحدّد إعدادات محاذاة النص. القيم التي تأخذها هذه الخاصية هي start ،end ،left ،right أو center. القيمة الافتراضية لها هي center. textBaseline = value تُحدّد إعدادات خط الأساس .Baseline القيم التي تأخذها الخاصية text Baseline هي top ،hanging ،middle ،alphabetic ،ideographic أو bottom. القيمة الافتراضية لها هي alphabetic. direction = value تُحدّد الاتجاهية. القيم التي تأخذها الخاصية textAlign هي ltr ،rtl ،inherit. القيمة الافتراضية لها هي inherit. يوضّح الرّسم البياني التالي المأخوذ من WHATWG مختلف خطوط الأساس Baseline التي تدعمها الخاصية textBaseline. مثال: ctx.font = "48px serif"; ctx.textBaseline = "hanging"; ctx.strokeText("Hello world", 0, 100); قياسات النصوص المتقدمة في حال كنت بحاجة لتطبيق المزيد من التفاصيل على النصوص فإن الدالة ()measureText توفر لك إمكانية لقياس النصوص حيث تُرجع الدالة ()measureText كائن من نوع TextMetrics يحتوي على عرض النص الحالي بالبكسل. يظهر المثال التالي كيف يمكنك قياس الخط والحصول على عرضه: function draw() { var ctx = document.getElementById('canvas').getContext('2d'); var text = ctx.measureText("foo"); object text.width; } الصور يعتمد استيراد الصور في Canvas على خطوتين أساسيتين: الحصول على مرجع reference لكائن HTMLImage أو لعنصر Canvas آخر لاستخدامه كمصدر. يمكن استخدام الصور أيضًا عن طريق توفير رابط URL. رسم الصورة على canvas باستخدام DrawImage. يستخدم Canvas API أي من أنواع البيانات التالية باعتبارها مصدر صورة للحصول على الصور ورسمها: HTMLImageElement: يتم إنشاء الصور باستخدام المنشئ constructor كأي عنصر <img> في HTML. HTMLVideoElement: استخدام عنصر <video> كمصدر للصورة أي استخدام الاطار الحالي للفيديو كصورة. HTMLCanvasElement: يمكن استخدام عنصر <canvas> آخر كمصدر صورة. استخدام الصور في Canvas يوجد عدة طرق لاستخدام الصور في Canvas: استخدام صور من نفس الصفحة يمكننا الحصول على مرجع للصور reference من نفس الصفحة باستخدام أحد الطرق التالية: document.images collection استخدام الدالة ()document.getElementsByTagName استخدام الدالة ()document.getElementById عن طريق معرّف ID الخاص بالصورة استخدام صور من مجالات أخرى ويتم ذلك باستخدام الخاصية crossorigin للعنصر <img> يمكنك طلب إذن لتحميل الصورة من مجال Domain آخر لاستخدامها في استدعائك للدالة ()drawImage. إذا سمح مجال الاستضافة وصول cross-domain للصورة فسيتم استخدام الصورة في Canvas دون التأثير عليها أما في حال لم يتم السماح بالوصول للصورة فسيحدث تشويه للعنصر canvas. استخدام عناصر Canvas أخرى كما هو الحال مع الصور العادية يمكن الوصول لعناصر canvas أخرى باستخدام الدالة ()document.getElementsByTagName أو ()document.getElementById. يجب التأكد قبل استخدام عنصر Canvas آخر من أن العنصر الأساسي يحوي على رسم أو مسار. واحدة من أهم استخدامات هذا الأسلوب هو استخدام عنصر canvas كمعرض صور مصغرات لعنصر Canvas أكبر منه. إنشاء صورة من الصفر خيار آخر لإنشاء HTMLImageElement هي باستخدام المنشئ() Image: var img = new Image(); img.src = 'myImage.png'; في حال استدعائك للدالة ()drawImage قبل الانتهاء من تحميل الصورة قد يظهر خطأ في المتصفحات القديمة لذا عليك التأكد من استخدام الحدث load بعد الانتهاء من تحميل الصورة: var img = new Image(); img.addEventListener("load", function() { // execute drawImage statements here }, false); img.src = 'myImage.png'; استخدام إطارات الفيديو يمكنك أيضًا استخدام إطارات الفيديو <video> لإظهاره في الـ canvas. مثال: function getMyVideo() { var canvas = document.getElementById('canvas'); if (canvas.getContext) { var ctx = canvas.getContext('2d'); return document.getElementById('myvideo'); } } سنكمل في الدّرس القادم التعامل مع الصور في canvas والتعرّف على خصائصها بالإضافة لإنشاء معرض فني. المصادر
  7. تتّبع الأدوات المساعدة في لينِكس فلسفة Unix من ناحية تصميمها عادةً، حيث يُوصى بأن تكون الأدوات صغيرة، أن تستخدم ملفّات نص مُجرَّد plain text للدخل input والخَرْج output، وأن تعمل بالأسلوب التركيبي modular manner، ونمتلك بسبب هذا الإرث legacy وظيفة رائعة لمعالجة النّصوص مع أدوات مثل sed وawk. سنناقش في هذا الدّرس awk، والتي هي لغة برمجة ومُعالِج نصوص على حدٍّ سواء يُمكن استخدامها للتعامل مع بيانات النّصوص بطرق مفيدة جدًّا، سنناقش هذا على Ubuntu 12.04 VPS ولكن ينبغي أن يعمل بنفس الطريقة على أي نظام لينِكس حديث. الصياغة الأساسية Basic Syntaxيتم تضمين الأمر awk افتراضيًّا في جميع أنظمة لينِكس الحديثة، لذا لن نحتاج إلى تثبيته لكي نبدأ باستخدامه. يكون awk مفيدًا أكثر عند التعامل مع ملفات نصيّة مُنسَّقة بطريقة متوقعة، فعلى سبيل المثال يكون ممتازًا في تحليل parsing والتعامل مع البيانات المجدولة، فهو يعمل على الأسطر سطرًا تلو الآخر وبالتكرار عبر كامل الملف. يستخدم awk افتراضيًّا الفواصل whitespaces (المسافات spaces، tabs، إلخ) للفصل بين الحقول، ولحسن الحظ تستخدم معظم ملفّات الإعدادات على نظام لينِكس هذه الصّيغة. الصيغة الأساسيّة لأمر awk هي: awk '/search_pattern/ { action_to_take_on_matches; another_action; }' file_to_parseنستطيع إمّا إزالة قسم البحث search أو قسم الإجراء action من أي أمر awk، إنّ الإجراء الافتراضي الذي يتم اتخاذه إن لم نقم بكتابة القسم “action” هو الطباعة “print”، والذي يقوم ببساطة بطباعة كافّة الأسطر الموافقة. إن لم نقم بكتابة القسم “search” يُنفِّذ awk الإجراء المُدرَج في كل سطر. أمّا إن قمنا بكتابتهما معًا فيستخدم awk قسم البحث search ليقرّر إذا ما كان السّطر الحالي يعكس النمط pattern المطلوب، ومن ثمّ يُنفِّذ الإجراءات على الأمور المُوافِقة له. استخدامات بسيطةنستطيع استخدام awk في أبسط أشكاله مثل cat ليطبع ببساطة جميع أسطر ملف نصّي على الشّاشة. فلنطبع ملف fstab لخادومنا، والذي يعرض أنظمة الملفّات filesystems التي يعرفها: awk '{print}' /etc/fstab# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # proc /proc proc nodev,noexec,nosuid 0 0 # / was on /dev/vda1 during installation UUID=b96601ba-7d51-4c5f-bfe2-63815708aabd / ext4 noatime,errors=remount-ro 0 1لا يفيدنا هذا كثيرًا، فلنجرّب قدرات awk في ترشيح filtering البحث: awk '/UUID/' /etc/fstab# device; this may be used with UUID= as a more robust way to name devices UUID=b96601ba-7d51-4c5f-bfe2-63815708aabd / ext4 noatime,errors=remount-ro 0 1وكما نرى يطبع awk الآن الأسطر التي تحتوي "UUID" فقط، بإمكاننا التخلّص من سطر التعليق comment غير المهم عن طريق تحديد أنّ "UUID" يجب أن تتواجد في بداية السّطر: awk '/^UUID/' /etc/fstabUUID=b96601ba-7d51-4c5f-bfe2-63815708aabd / ext4 noatime,errors=remount-ro 0 1نستطيع بشكل مشابه استخدام قسم الإجراء action لتحديد أي قطع من المعلومات نريد طباعتها، على سبيل المثال لطباعة العمود الأول فقط نستطيع كتابة: awk '/^UUID/ {print $1;}' /etc/fstabUUID=b96601ba-7d51-4c5f-bfe2-63815708aabdيمكننا الرجوع لكل عمود (لأنّها مفصولة بفراغ بينها) عن طريق متغيرات variables مرتبطة برقم عمودها، على سبيل المثال نستطيع الرجوع للعمود الأول بواسطة المتغير 1$، والرجوع لكامل السّطر بواسطة المتغير 0$. متغيرات awk الداخلية والتنسيق الموسع Expanded Formatيستخدم awk بعض المتغيّرات الدّاخليّة internal variables لتعيين قطع معيّنة من المعلومات بينما يقوم بمعالجة الملف. إنّ المتغيّرات الدّاخليّة التي يستخدمها awk هي: FILENAME: يُرجِع ملف الدّخل input الحالي.FNR: يُرجِع عدد التسجيلات record الحاليّة نسبة لملف الدّخل الحالي، على سبيل المثال إن كُنّا نملك ملفّين للدخل فسيخبرنا هذا المتغيّر بعدد التسجيلات لكل ملف بدلًا من أن يخبرنا بالمجموع الكلّي.FS: فاصل الحقل الحالي المُستخدَم للدلالة على كل حقل في التسجيل، يتم تعيينه افتراضيًّا إلى مسافة whitespace.NF: عدد الحقول في التسجيلات الحاليّة.NR: عدد التسجيلات الحاليّة.OFS: فاصل الحقل للبيانات المُخرَجة، يتم تعيينه افتراضيًّا إلى مسافة whitespace.ORS: فاصل التّسجيلات للبيانات المُخرَجة، وهو بشكل افتراضي سطر جديد.RS: فاصل التّسجيلات المُستخدَم لتمييز التّسجيلات المنفصلة في ملف الدّخل، وهو بشكل افتراضي سطر جديد.نستطيع تغيير قيم هذه المتغيّرات بحسب رغبتنا لتوافِق احتياجات ملفّاتنا، نقوم بذلك عادةً خلال طور التهيئة لمعالجة awk. يقودنا هذا إلى مفهوم هام آخر، إنّ صياغة awk مُعقَّدة أكثر بقليل ممّا شاهدناه في البداية، حيث توجد أيضًا كُتَل blocks اختياريّة BEGIN وEND والتي يُمكن أن تحتوي على أوامر ليتم تنفيذها قبل وبعد معالجة الملف على التوالي. يجعل هذا من صيغتنا المُوسَّعة تبدو مشابهة لما يلي: awk 'BEGIN { action; } /search/ { action; } END { action; }' input_fileإنّ الكلمات المفتاحيّة BEGIN وEND هي في الواقع مجرّد مجموعات مُحدّدة من الشّروط conditions تمامًا مثل مُعامِلات parameters البحث، فهي تتوافق مع الشّروط: قبل معالجة المستند وبعد معالجته. ويعني هذا أنّه بإمكاننا تغيير بعض المتغيّرات الداخليّة في القسم BEGIN، فعلى سبيل المثال الملف etc/passwd/ مفصول بواسطة نقطتين (:) بدلًا من مسافة، وإن أردنا طباعة العمود الأول من هذا الملف نستطيع كتابة ما يلي: sudo awk 'BEGIN { FS=":"; } { print $1; }' /etc/passwdroot daemon bin sys sync games man . . .نستطيع استخدام الكُتَل BEGIN وEND لطباعة معلومات بسيطة حول الحقول التي نطبعها: sudo awk 'BEGIN { FS=":"; print "User\t\tUID\t\tGID\t\tHome\t\tShell\n--------------"; } {print $1,"\t\t",$3,"\t\t",$4,"\t\t",$6,"\t\t",$7;} END { print "---------\nFile Complete" }' /etc/passwdUser UID GID Home Shell -------------- root 0 0 /root /bin/bash daemon 1 1 /usr/sbin /bin/sh bin 2 2 /bin /bin/sh sys 3 3 /dev /bin/sh sync 4 65534 /bin /bin/sync . . . --------- File Completeبإمكاننا كما نرى تنسيق الأشياء بشكل أنيق من خلال الاستفادة من بعض ميّزات awk. جميع الأقسام المُوسّعة اختياريّة، وفي الواقع القسم action الرئيسي بذاته اختياري إن تمّ تعريف قسم آخر، نستطيع أن نفعل أشياء من هذا القبيل كما يلي: awk 'BEGIN { print "We can use awk like the echo command"; }'We can use awk like the echo commandالبحث في الحقول والتعابير المركبة في awkقُمنا في أحد الأمثلة السّابقة بطباعة السّطر الذي يبدأ بـ "UUID" من الملف etc/fstab/، وكان هذا سهلًا لأنّنا كُنّا نبحث عن بداية السّطر بأكمله. ولكن ماذا لو أردنا معرفة إذا ما كان نمط البحث قد وافق بداية الحقل field بدلًا من ذلك؟ نستطيع إنشاء الملف favorite_food.txt الذي يضم قائمة تحوي رقم العناصر والأطعمة المفضّلة لمجموعة من الأصدقاء: echo "1 carrot sandy 2 wasabi luke 3 sandwich brian 4 salad ryan 5 spaghetti jessica" > favorite_food.txtإن كُنّا نريد إيجاد جميع الأطعمة التي تبدأ بـ “sa” من هذا الملف فبإمكاننا البدء بتجربة شيء مشابه لما يلي: awk '/sa/' favorite_food.txt1 carrot sandy 2 wasabi luke 3 sandwich brian 4 salad ryanقمنا هنا بالمطابقة مع أي مثال عن “sa” في الكلمة، وهذا لا يستثني كلمات مثل " wasabi" والتي تحوي هذا النمط في منتصفها، أو "sandy" غير الموجودة في العمود الذي نريده، فنحن مهتمون فقط بالكلمات التي تبدأ بـ “sa” والموجودة في العمود الثاني. بإمكاننا إخبار awk أن يُطابِق بداية العمود الثاني باستخدام هذا الأمر: awk '$2 ~ /^sa/' favorite_food.txt3 sandwich brian 4 salad ryanيسمح لنا هذا كما نرى بالبحث فقط في بداية العمود الثاني عن مُطابِق. يُخبِر الحرف "^" بأن يُحدِّد awk بحثه في بداية الحقل، ويُحدِّد الجزء "~field_num" بأنّه يجب فقط النّظر إلى العمود الثاني. يُمكننا بسهولة البحث عن الأشياء غير المُطابِقة بتضمين الحرف "!" قبل المَدّة tilde (~). سيعيد هذا الأمر جميع الأسطر التي لا تملك طعامًا يبدأ بـ “sa”: awk '$2 !~ /^sa/' favorite_food.txt1 carrot sandy 2 wasabi luke 5 spaghetti jessicaإن قرّرنا لاحقًا أنّنا فقط مهتمّون بالأسطر التي يكون فيها ما سبق صحيحًا ورقم العنصر أقل من 5، فنستطيع استخدام تعبير مُركَّب مثل هذا: awk '$2 !~ /^sa/ && $1 < 5' favorite_food.txtيُقدِّم لنا هذا بعض الأشياء الجديدة، أوّلها هو القدرة على إضافة مُتطلّبات إضافيّة للسطر الذي نريد مُطابقته باستخدام العامل operator &&، نستطيع باستخدام هذا جمع عدد كيفي من الشّروط للسطر الذي نريد مُطابقته. نستخدم هذا العامل لإضافة التحقّق من أنّ قيمة العمود الأوّل أقل من 5. الخاتمةيجب أن يكون لدينا الآن فكرة أساسيّة حول كيفيّة قيام awk بالتعامل مع تنسيق، وطباعة الملفّات النّصيّة بانتقائيّة، رغم ذلك فإنّ awk موضوع أكبر من هذا بكثير، وهو في الواقع لغة برمجة كاملة تحتوي على إسناد للمتغيّرات، بُنى التّحكّم control structures، دوال مُضمَّنة built-in functions، والمزيد من ذلك، ويُمكن استخدامه في scripts لتنسيق النصوص بطريقة مقروءة بسهولة. ولتعلّم المزيد حول كيفيّة العمل مع awk تحقّق من الموارد الكبيرة له على الإنترنت، واقرأ عن gawk وهو إصدار GNU من awk الموجود على توزيعات لينِكس الحديثة. ترجمة -وبتصرّف- لـ How To Use the AWK language to Manipulate Text in Linux لصاحبه Justin Ellingwood.
  8. التسلسل (أو التتابع Hierarchy) هو مفهوم واسع ومُهمّ لكنّه سهل التّنفيذ في مجال الخطوط Typography، وسنقوم في هذا المقال بإرشادك إلى طريقة تسخير هذا المفهوم لتحسين مشاريعك التصميمية. قد يبدو لكَ هذا المصطلح غير مألوفٍ أو غير واضح، ولكنّك على الأرجح تكون قد صادفته مرّاتٍ عديدة. تصَوّر مثلًا الصحف، فهي تحتوي على العناوين الرئيسية، العناوين الفرعية، والمحتوى. يعتبر هذا مثالًا تقليديًّا لمستويات التسلسل في تنسيق النصوص، لكن هذه الطريقة ما زالت مستخدمة إلى اليوم، في كِلا المجالين: الطباعة وعبر الإنترنت. إنّ الصحف، منذ أوائل القرن العشرين وحتى منتصفه، توفّر، وعلى نحو استثنائي، أمثلةً مبالغًا فيها، كما نلاحظ في الصورة أدناه: لا يُشترط بالعناوين في هذه الأيام أن تكون بطول ستّ بوصات لكي تجذب انتباه القرّاء، لكنّ المثال أعلاه يُعتبر مثالّا رائعًا وواضحًا إلى ماهيّة التسلسل في تنسيق النصوص؛ والذي يعني تنظيم وتنسيق خيارات النصوص بطريقة تجعل القراء يرون بوضوح الشيء الأكثر أهمّية، والذي يمكّنهم من التصفّح بسهولة والبحث بسرعة للعثور على المعلومات التي يريدونها. إنّ من الفوائد المهمّة لتنسيق النصوص بتسلسل واضح هو تعزيز سهولة القراءة وسهولة الاستخدام. فمثلًا؛ لو كانت الصفحة الأمامية للصحيفة أعلاه بدون تسلسل في تنسيق النصوص، أو كان هذا التسلسل محدودًا، كما نرى في المثالين الأوّلين أدناه (من جهة اليسار)، فلن يكون بالإمكان إيصال الرسالة المهمّة بسهولة وخلال لمحة واحدة. وسيكون من الصعب على القرّاء أن يميّزوا بداية ونهاية الفقرات، مما يجعله تصميمًا أقلّ وقْعًا وأصعب للقراءة. إذًا، كيف يكون باستطاعتك تنسيق النصوص بتسلسلٍ مؤثّر في تصميمك؟ سيكون من الجيّد والكافي للكثير من التصاميم أن تبدأ بإضافة ثلاثة مستويات منفصلة عند تنسيق النصوص. المستوى الأوّل: يحتوي هذا المستوى، بصورة عامّة، على المحتوى أو المعلومات الأكثر أهمية؛ ويجب أن يكون هذا هو العنصر النصّي الأكثر وضوحًا والذي تتم ملاحظته بشكل مباشر في التصميم.المستوى الثاني: تساعد عناصر المستوى الثاني عادةً في تنظيم التصميم إلى أجزاء أو مجموعات تربط المعلومات سويّةً. لا يجب أن تكون هذه العناصر بارزةً بقدر عناصر المستوى الأول، لكنّها يجب أن توجّه المشاهدين بوضوح إلى الأجزاء المختلفة للتصميم وأن تساعدهم على سهولة التنقّل بين تلك الأجزاء.المستوى الثالث: يُعتبر المستوى الثالث هو جوهر التصميم إذا كان مخطط التصميم غنيًّا بالنصوص، وفيه يكمن الموضوع، ويتمّ من خلاله إيصال رسالة التصميم. قد يكون الموضوع طويلًا أو قصيرًا، مقالًا متكاملًا أو ملاحظةً صغيرة، أو قد يكون وصفًا مختصرًا؛ النقطة الأساسية التي يجب أخذها بعين الاعتبار في هذا المستوى هي أن يكون سهل القراءة، كون حجم الخط سيكون صغيرًا نوعًا ما، وهو المفضّل.فعلى سبيل المثال؛ تصميم الصفحة الخاصّة بهذا المنتج بسيط، ولكنّه مع ذلك يحتوي على ثلاث مستويات على الأقل من التسلسل في تنسيق النصوص. بإمكاننا القول إنّ اسم المنتج " Major Black headphones" هو المستوى الأول، السعر هو المستوى الثاني، ووصف المنتج هو المستوى الثالث. لاحظ كيف أن فقرة الوصف منسّقة بخط رقيق سهل القراءة وبمسافات كبيرة بين الأسطر (يعرف أيضًا بالتباعد الرأسي للأسطر Leading). توجد العديد من الطرق التي يمكن الاختيار من بينها لغرض تنظيم محتوى التصميم بصريًّا. قد يبدو العديد منها كتفاصيل صغيرة، ولكن على حد تعبير المصمم والمعماريّ الأمريكي المشهور؛ تشارلز إيميز Charles Eames: " التفاصيل ليست بالتفاصيل. التفاصيل هي التي تصنع التصميم" ( “The details are not the details. They make the design.”) دعونا نلقي نظرة على الخيارات التي تمكّن المصمّم من تحقيق التسلسل في تنسيق النصوص بحيث تعطي وقْعًا قويًّا ومؤثّرًا. كيفية إنشاء نصوص ذات نسق متسلسل وتنظيم التصميم بصريا.1. نسّق أحجام الخطوطإنّ الحجم هو الطريقة الأبسط لخلق التباين بين العناصر النصّية المختلفة في التصميم، خصوصًا إذا كنتَ تعمل مع خطوط من عائلة خطوط typeface واحدة فقط (يُطلق أيضًا اسم Font Family على عائلات الخطوط). عند العمل بالمستويات الثلاثة لتنسيق النصوص سيكون الحجم الأكبر عادةً في الأعلى (المستوى الأول؛ المعلومات الأكثر أهميّة)، ثمّ يتناقص الحجم كلمّا نزلنا نحو أسفل الصفحة (في النهاية يكون حجم نصّ المحتوى هو الأصغر؛ أي المستوى الثالث). إن التسلسل المتجه من الأعلى إلى الأسفل هو الأكثر طبيعية بالنسبة للقرّاء عند التصفّح، لأننا نقرأ عادةً من اليمين إلى اليسار (أو العكس)، ومن الأعلى إلى الأسفل. وهذا النمط شائعٌ جدّا في التخطيط لكل الأشياء المقروءة، كالكتب، المجلّات، أو المقالات على شبكة الأنترنت. تذكّر؛ وظيفة التسلسل هي مساعدتك على إبراز المعلومات الأكثر أهمّية بصريّا، سواءً كانت تلك المعلومات اسم (قد يكون اسمك على بطاقة عملك، أو الضيف المتحدّث على الملصق الخاص بحدث معيّن)، عنوان المقال أو المدونة، أو خصم خاص أو ترويج في إعلانٍ ما. فإذا جعلت حجم هذا النصّ أكبر من بقية النصوص في المخطط ستضمن جذب الانتباه. في الصورة أدناه، يبرز سعر العرض الخاص بسبب حجمه الكبير مقارنةً مع بقيّة النصوص على الجانب الأيمن من الصورة. كما إنّ استخدام اللون الأحمر البرّاق لتمييز الترويج أكثر هو اختيارٌ ذكيّ (لمعرفة المزيد حول استخدام الألوان في التسلسل تابع النقطة الرابعة). 2. اختر العديد من عائلات الخطوط المتباينةفكّر مرّة أخرى بالعنوان الرئيسي "On The Moon" في الصفحة التي شاهدناها في بداية المقال. ألا يتميّز الخط السميك من عائلة sans-serif بصورة واضحة عن الخط المائل والنصوص المكتوبة بخطوط عائلة serif في بقية الصفحة؟ لا يُشترط دائمًا أن يكون الجمع بين عائلات الخطوط Typefaces ملحوظًا كهذا، ولكنّ التباين عنصرٌ أساسيٌّ في أيّ تركيبة خطوط. إنّ الجمع بين عائلتي الخطوط sans-serif وserif كان شائعًا بين الخطاطين والمصمّمين لفترة طويلة. وهذه الطريقة تعتبر مبدءًا عامًّا وتقليديًّا والذي يخدم كنقطة بداية جيّدة لأي تصميم. وحتّى لو استخدمنا خطًّا مختلفًا للنص في المستوى الأول فقط، يمكن لذلك أن يصنع وقعًا بصريًّا قويًّا. لتضع في حسابك أنّ اختيار العديد من أنواع الخطوط غير محبّذ، وسيجعل ذلك تصميمك مُبعثرًا ومُزدحِمًا؛ نوعان أو ثلاثة كافيان في أغلب التصاميم. كما يجب أن تتأكد من أنّ اختياراتك ملائمةٌ لنمط وسياق تصميمك. على سبيل المثال، لن ترغب بأن تكون المعلومات المهمّة كوقت وتاريخ حدث معيّن خاص بالشركة بنوع خط غير نموذجي، طريف وصعب القراءة. أو أن تختار نوع الخط للفقرات الطويلة بحيث يصعب على العين قراءتها. كما إن بعض أنواع الخطوط يصعب رؤيتها عند تقليل الحجم إلى أحجام صغيرة. هذه الأمور وطريقة تأثيرها على سهولة القراءة والشكل العام للتصميم مهمّة، ويجب أخذها بنظر الاعتبار في أي مشروع. 3. جرب أنماط وأسماك خطوط مختلفةتأتي العديد من الخطوط مع خيارات متعددة للنمط والسُمْك -أرجو ألّا يكون قد تبادر السَّمَك إلى أذهانكم عند قراءتكم لكلمة أسماك-الأنماط المختلفة يمكن أن تتضمن الإمالة Italic، تحويل الأحرف الصغيرة إلى كبيرة Small Caps، أو الإصدارات المتقاربة أو المتباعدة من الخطوط. أمّا السُمْك فهو يشير إلى رِقّة أو غِلط الخطوط. إذا كان الخط الذي تستخدمه بخيارات رقيق، متوسط، سميك، وسميك جدّا فتلك هي الأسماك المختلفة. إنّ هذه الخصائص تعطيك الكثير من الخيارات عندما يتعلّق الأمر بتوزيع الأدوار المختلفة (أو إعطاء مظهر مختلف ولكن متكامل) بين العناصر النصيّة المتنوعة في تصميمك. لنأخذ الصورة أدناه كمثال (وهي إشهار لرسالة إخبارية). جميع النصوص من عائلة sans-serif هي بنفس الخط ولكن بأسماك مختلفة. الحروف السميكة لعنوان الرسالة الإخبارية تجعلها أكثر وضوحًا؛ أي إنّ السُمْك البصريّ يشير إلى أنها الجزء الأهمّ في تسلسل التصميم هذا. لاحظ أيضًا هذه الملصقات في الصورة أدناه، فقد صُمّمت باستخدام أسماك متنوّعة؛ ما بين الاعتيادي والسميك، بالإضافة إلى النمط المائل والحروف الكبيرة، وجميعها تنتمي لنفس العائلة من الخطوط. 4. قم بإضافة بعض الألوانالألوان حالها حال أنماط وأسماك الخطوط؛ فهي طريقة أخرى لجعل أجزاء معيّنة من التصميم تبرز بشكل أفضل قليلًا. يجب عليك كمصمّم أن تختار الألوان التي تناسب طِراز، غرض، وأسلوب تصميمك، لأن الألوان عادًة لها معاني وارتباطات معيّنة. كمثال على ذلك الصورة أدناه، وهي دعوة لحدث تقيمه شركة قهوة عريقة، فقد تمّ تنسيق النصوص بألوان طبيعية ترابية والتي تدعم خصائص العلامة التجارية وموضوع الحدث. وبالمثل؛ بطاقة العمل أدناه، نُسّقت النصوص فيها بمزيج مميز من اللونين الأزرق والأصفر مما جعلها لافتة للنظر. تعطي الألوان شعورًا منعشًا وجذّابًا، لذلك، وعلى الرغم من عدم وجود اللونين التقليديين الأسود أو الأزرق البحري، مازال التصميم مناسبًا لممارسة تقويم الأسنان، وهو الغرض الذي صممت من أجله البطاقة. 5. أعط المسافات حقها من الاهتمامإن المسافات بين العناصر النصّية في أي تصميم، سواءً كانت المسافات بين الحروف أو بين الأسطر، هي التي تصنع كل الفرق بين تصميم متوازن وسهل القراءة، وآخر مبعثر ومُربِك. لنعد إلى المثالين السابقين (عديم التسلسل، وذي التسلسل المحدود)، كلاهما لا يحتويان على مسافات بين أجزاء المقال، ممّا جعل التصميم أقل تأثيرًا وأصعب للقراءة. لا يقتصر تأثير المسافات (أو المساحات البيضاء) على الفصل بين الأجزاء المختلفة للتصميم بصريًّا، وإنّما تساعد القارئ على فهم وتصوّر كيفية عمل الأجزاء المختلفة معًا. على سبيل المثال الصورة أدناه؛ جعلت المسافات الكافية (بالإضافة إلى التعامل المُبتكر مع النصوص وخطوط التقسيم الموضوعة بشكل جيّد) نَسْق النصوص متوازنًا، حتّى وإن كان المنتج صغير المساحة كعلامة الملابس هذه. عندما تُطالع تصميمًا ذا مساحاتٍ موزّعة بصورة جيّدة، سيتضّح لك على الفور كيف تبدأ القراءة وتحصل على المعلومات من التصميم. وعلى النقيض من ذلك؛ عندما تُطالع تصميمًا ربّما لم يجد المصمّم فيه المساحات الكافية للعمل عليها، وقام بحشر جميع المحتوى فيه بدون أخذ المسافات بنظر الاعتبار، ستجد نفسك تُضيّق عينيك محاولًا قراءة النصوص الصغيرة جدّا، أو أن تجد صعوبةً في العثور بسرعة على معلومات معيّنة تبحث عنها كعنوان أو رقم هاتف. أو حتّى لا تكلّف نفسك عناء النظر إلى التصميم لأنه عبارة عن فوضى! يتّم تجنّب هذه المشكلة في شرائح العروض التقديمية باستخدام مسافاتٍ كافية بين الأسطر، والكثير من المساحات البيضاء حول النصوص والعناصر النصّية الأخرى. تساعد أيضًا مجموعات من الألوان والأشكال الهندسية في تنظيم وفصل العناصر المختلفة في التصميم. بالطبع لا تريد من القرّاء والمستخدمين أن يشعروا بالإحباط تجاه تصميمك. لذلك يستحق الأمر أن يأخذ من وقتك وأن تبذل المزيد من الجهد لتحصل على تصميم متوازن بمساحات بيضاء وافرة. 6. أعط المسافات حقها من الاهتمام: التقاربلا يقتصر عمل المسافات على فصل العناصر النصّية فقط، وإنما تُعنى بالتقارب أيضًا، أو تقريب العناصر المرتبطة ببعضها. إنّ تقليل المسافات قليلًا بين الأجزاء المرتبطة ببعضها (لتوضيح أنها مرتبطة ببعضها) هو أداة بصريّة أخرى تساعد المشاهد على مُعاينة التصميم بسهولة أكبر. يعتبر التقارب المفتاح لعمل تصاميم متوازنة وذات مظهر منطقي بصريًّا، لاسيما في التصاميم ذات المحتوى الغنيّ بالنصوص كالإنفوجرافيك Infographic. 7. تلاعب باتجاه النصقد تكون النصوص المستقيمة غير مُرضية في بعض الأحيان عندما ترغب بإضافة عبارة إلى تصميمك. في هذه الحالة يمكن إضافة القليل من الميلان، التقوّس أو الالتواء إلى النصّ، وهذا يساعد في جعل تصميمك مميّزًا وجاذبًا للمزيد من الانتباه. من المحبّذ استخدام كلّ أو جزء من هذه الطرق لإنشاء تسلسل في تنسيق النصّ في التصميم؛ كما تمّ في بطاقة الدعوة أدناه. حيث تمّ توظيف كل من حجم الخط، التباين، أنواع الخطوط، المسافات والتقارب، والاتجاه لكي تضيف تأثيرًا جيّدًا للتصميم. إن تطبيق هذه التقنيات بصورة صحيحة لا يجعل تصميمك جذّابًا فحسب، وإنما يجعله "صديقًا للمستخدم"، وكذلك من الجيّد أن يجمع التصميم بين الشكل والغرض الذي يؤديه. لذلك، عندما تعمل على تصميم يحتوي على نصوص في المرّات القادمة، جرّب تطبيق بعض هذه التقنيات. تصميم ممتع! ترجمة -وبتصرّف- للمقال: Why Every Design Needs Three Levels Of Typographic Hierarchy لصاحبته: Janie Kliever.