المحتوى عن 'نشر'.



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

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

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

نوع المُحتوى


التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

التصنيفات

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

أسئلة وأجوبة

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

التصنيفات

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

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

  1. Ajenti هي لوحة تحكّم عبر الويب حرّة ومفتوحة المصدر يمكن استخدامها لتنفيذ مجموعة كبيرة ومتنوعة من مهام إدارة الخوادم، علاوةً على إمكانية تغطيتها لمجموعة أخرى من المهام عبر تركيب إضافات add-ons كإضافة Ajenti V والتي تسمح بإدارة عدّة مواقع من خلال لوحة تحكم واحدة. في هذا الدرس سوف نشرح تركيب مدوّنة ووردبريس WordPress على لوحة التحكم Ajenti مع الإضافة Ajenti V، حيث أفترض أنك قمت بتركيبهما في وقتٍ سابق. المتطلباتفي هذا الدرس ستحتاج إلى: عنوان نطاق domain مُسجّل ومربوط مع خادوم مُثبّت عليه لوحة التحكم Ajenti مع الإضافة Ajenti V (خلال الدرس سأستخدم النطاق example.com للتوضيح). لوحة التحكم Ajenti مُثبتة ومضبوطة بشكل صحيح مع الإضافة Ajenti V، يمكنك قراءة هذا الدرس لتثبيت Ajenti خطوة بخطوة.الخطوة الأولى: ضبط ووردبريسمن خلال متصفح الويب لديك انتقل إلى عنوان لوحة تحكم Ajenti الخاصة بك مثل https://panel.example.com وسجّل دخولك باستخدام حساب المدير admin الذي أنشأته أثناء تركيب Ajenti و Ajenti V. من الشريط الجانبي وتحت القسم Web اختر Websites. في المرة الأولى قد تُعطى إشعارًا بأنّ الخاصيّة غير مُفعّلة بعد، فقط اضغط على الزر Enable ودع Ajenti V يقوم ببعض عمليات الضبط الضروريّة. الآن سيظهر لنا قسمٌ يُسمى New Website وأسفله حقل نصيّ بعنوان Name. اكتب اسمًا معرّفًا لموقعك في هذا الحقل ثم اضغط على الزر Create، حيث ستلاحظ إدراج الموقع أسفل القسم Websites. اختر Manage لإدارته. أسفل قسم Website Files غيّر المسار srv/new-website/ إلى أي مجلد آخر مثل srv/example.com/. اضغط على الزر Set ثم Create Directory. تذكّر المجلد الذي اخترته، حيث سترفع إليه الملفات بعد قليل. أسفل القسم General أزل تفعيل الخيار Maintenance mode. ثم انقر على Apply changes أسفل الصفحة. الآن من أعلى الصفحة اختر علامة التبويب Domains، اضغط على الزر Add واكتب عنوان نطاقك مثل example.com ضمن المربع النصي الظاهر، ثم انقر على Apply Changes. انتقل إلى علامة التبويب Advanced، وأدخل النصّ التالي ضمن مربع Custom configuration:# This order might seem weird - this is attempted to match last if rules below fail. location / { try_files uriuri/ /index.php?$args; } # Add trailing slash to */wp-admin requests. rewrite /wp-adminscheme://hosturi/ permanent; # Directives to send expires headers and turn off 404 error logging. location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) location ~ /\. { deny all; } # Deny access to any files with a .php extension in the uploads directory # Works in sub-directory installs and also in multisite network # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) location ~* /(?:uploads|files)/.*\.php$ { deny all; }انقر Apply changes. لننتقل الآن إلى لسان التبويب Content ومن القائمة المنسدلة اختر PHP FastCGI واضغط Create. انقر على القائمة Advanced أسفل new PHP entry، وأدخل المحتوى التالي ضمن Custom configuration. انتبه إلى أنه غير متطابق مع محتوى Custom configuration في الخطوة السابقة. try_files uri=404;fastcgisplitpathinfo(.+\.php)(/.+);انقر Apply Changes. انتقل إلى علامة التبويب MySQL أسفل قسم Databases، أدخل اسمًا لقاعدة البيانات، لهذا الدرس سأختار الاسم database_name وانقر على Create. الآن ومن أسفل قسم Users انقر على Create يمكنك الإبقاء على اسم المستخدم وكلمة المرور المولّدة تلقائيًا أو تغييرها إن شئتْ، ولهذا الدرس سأستخدم db_user و db_password على التوالي، عندما يكون كل شيء جاهزًا انقر على Apply Changes. احتفظ بالمعلومات التي أدخلتها جانبًا؛ اسم قاعدة البيانات، اسم المستخدم، وكلمة المرور، حيث ستحتاجها بعد قليل لإكمال إعداد ووردبريس. الخطوة الثانية: رفع الملفاتقبل أن تتمكّن من فك ضغط ملفات نظام ووردبريس أنت تحتاج لأداة فك الضغط zip أولًا. من الشريط الجانبي وأسفل قسم Tools اختر Terminal واضغط على New، انقر على الصندوق الأسود الذي سيظهر أمامك واطبع بداخله الأمر التالي: apt-get install zip unzip بعد انتهاء العملية انقر على X بجوار Terminal 0 أعلى الصفحة. عُد الآن مجددًا إلى قسم Websites واضغط على Manage بجوار موقعك، ثم اذهب إلى لسان التبويب General ضمن موقعك وأسفل القسم Automatic Downloader أدخل http://wordpress.org/latest.zip واضغط على Download and Unpack، حيث ستظهر نافذة طرفية وتتولى عملية تنزيل وفك ضغط حزمة ووردبريس، يمكنك الضغط على الزر X بجوار Terminal 0 في أعلى الصفحة بعد الانتهاء. عُد إلى القسم Tools في الشريط الجانبي وانقر على File Manager ثم توجّه إلى الدليل الذي أنشأته مسبقًا داخل المجلد /srv/ بالنقر على اسم المجلد، هناك يجب أن تُشاهد مجلد باسم wordpress والذي يتمّ إنشائه أثناء تنزيل وفك الضغط التلقائي للحزمة ووردبريس، ادخل إليه وحدد جميع الملفات والمجلدات التي بداخله كما يلي: الآن اختر العملية Cut من شريط الأدوات أعلى الشاشة: عُد إلى مجلدك داخل الدليل /srv/ مثل srv/example.com/ وألصق جميع الملفات والمجلدات بداخله مباشرةً. سيأخذ ذلك بضعة دقائق للانتهاء يمكنك بعدها حذف المجلد الفارغ wordpress. الآن جميع ملفات ووردبريس بداخل المجلد الجذر root لموقعك. الخطوة الثالثة: تركيب ووردبريسفي متصفح الإنترنت لديك انتقل إلى عنوان موقعك مثل http://example.com وستظهر أمامك صفحة ترحيبية من مُثبّت برنامج ووردبريس، اختر اللغة التي ترغب باستخدامها مع البرنامج واضغط على Continue ثم .. !Let’s go. في حقل اسم قاعدة البيانات غيّر القيمة الافتراضية wordpress إلى الاسم الذي اخترته سابقًا (database_name مثلًا هي القيمة التي اخترناها لهذا الدرس)، كذلك أدخل اسم المستخدم وكلمة المرور التي قمتَ بتحديدها. أبقِ قيمة Database host كما هي localhost. كما يمكنك ترك قيمة الخانة Table Prefix على حالها wp_ إلا أنه يُنصح بتغييرها لدواعٍ أمنيّة، مثلا يمكنك كتابة blog_ أو شيء من هذا القبيل، المهم أن لا يتجاوز طول الاسم خمسة محارف وأن ينتهي بالرمز _. الآن يمكنك النقر على زر Run the install لإكمال عملية التثبيت، وبعدها سيتبقى عليك تزويد البرنامج ببعض المعلومات عن موقعك (كالاسم، ومعلومات تسجيل الدخول). الخلاصةفي نهاية هذا الدرس يُفترض أن تكون قد تمكّنت من تثبيت برنامج ووردبريس بنجاح على لوحة تحكم Ajenti الخاصة بك. ترجمة -وبتصرف- للمقال Installing WordPress on Ajenti V لصاحبه Jonah Aragon.
  2. لقد تعرّفنا في الجزء الأول من هذا الدرس على Microsoft Publisher وعلى الوظائف التي يقوم بها والخصائص التي يوفرها. وتعلّمنا بعض أساسيات الاستخدام كإنشاء المنشورات الجديدة، تحريرها وحفظها. سنكمل الشرح في هذا الجزء وسنتعرف على كيفيّة تنظيم العمل على المنشور وتخصيص هوامشه ومن ثم تهيئته للطباعة. كيف تسهل عملك باستخدام منطقة التسويد Scratch Area وأوامر الترتيب Arrange لقد تطرقنا بلمحة بسيطة إلى منطقة التسويد في الجزء السابق، وذكرنا أنّها المنطقة الرمادية المحيطة بالصفحة والتي يمكن استخدامها لتحضير وخزن مختلف العناصر (الصور، الأشكال، النصوص) التي ننوي استخدامها لاحقا في المنشور. وهذي المنطقة هي نفسها لجميع الصفحات (أي لا تتغير محتوياتها بتغيّر الصفحة). لإدراج الصور من الجهاز داخل منطقة التسويد، قم بتحديد الصور في المجلد ثم اسحبها إلى هذه المنطقة. يمكنك إضافة عناصر أخرى، تعديلها، وتنسيقها وهي في هذه المنطقة. وعندما يحين وقت استخدامها قم بسحبها إلى الصفحة. كما يمكنك تبديل الصور بين منطقة التسويد والصفحة. حدد الصورة التي تريد إدراجها (بدلا من صورة أخرى موجودة في الصفحة) ثم انقر على المربع الأبيض الذي سيظهر في وسط الصورة واسحبها فوق الصورة الأخرى. عندما يظهر إطار ورديّ اللون قم بإفلات زر الفأرة: سيتم تغيير حجم الصورة الثانية ليناسب حجم الصورة الأصلية تلقائيًا، وستُنقل الصورة الأصلية إلى منطقة التسويد (كما تلاحظ في الصورة أعلاه). يمكنك تطبيق نفس العملية بالعكس (أي تبديل الصور من الورقة إلى منطقة التسويد). من الأدوات الأخرى المفيدة عند العمل على المنشورات هي التجميع Grouping. تسهل هذه الأداة العمل لأنّ المنشور يمكن أن يتكون من العديد من العناصر، وأحيانًا من الأفضل جمع عنصرين أو أكثر معًا لاختصار خطوات تنسيقها ونقلها من موضع إلى آخر. على سبيل المثال، سيكون من السهل تحريك الصورة الموضّحة أدناه مع تسميتها التوضيحية أو تحجيمها عندما تتعامل معها كعنصر واحد. انقر على الصورة لتحديدها، اضغط على مفتاح CTRL، ثم انقر على مربع النص لتحديده وبذلك سيتحدد العنصران معا. سيظهر تبويب تنسيق Format السياقي الخاص بأدوات الرسم Drawing Tools. من هذا التبويب انقر على تجميع Group: سيتحول مربعا التحديد إلى مربع واحد، وبذلك أصبح بإمكانك التعامل مع الصورة ومربع النص كعنصر واحد. وإذا قمت بتطبيق أي تنسيق، سيُطبّق على العنصرين معا. إذا رغبت لاحقا في تنسيق الصورة بشكل مستقل، يمكنك فك التجميع وتنسيقها، ثم إعادة التجميع. لفك التجميع حدد العنصر المجمّع، وانقر على أمر Ungoup من نفس التبويب: أمر آخر سيفيدك عند ترتيب العناصر المتراكبة هو الإحضار إلى الأمام Bring Forward أو الإرسال إلى الخلف Send Backward. على سبيل المثال، إذا رغبت في أن تكون الصورة الأخيرة المحددة أدناه هي الصورة الأمامية انقر على أمر إحضار إلى الأمام Bring Forward: لكن هذا الأمر سينقل الصورة مستوى واحد إلى الأمام (أي سيكون ترتيبها وسطي وليس أمامي في هذا المثال): لإحضارها في مقدمة جميع العناصر استخدم أمر إحضار إلى المقدمة Bring to Front بدلا من أمر Bring Forward: الشيء نفسه ينطبق على أمري الإرسال إلى الخلف Send Backward وإرسال إلى الخلفية Send to Back. الأول يقوم بتحريك العنصر مستوى واحد إلى الخلف، والثاني يقوم بتحريك العنصر إلى خلف جميع العناصر الموجودة خلفه. إعداد هوامش المنشور وخطوط الإرشاد تحتوي المنشورات بصورة عامة على هوامش Margins، وعند إعداد هذه الهوامش بصورة صحيحة ستتجنّب المشاكل التي قد تحصل عند طباعة المنشور. إذ تتطلب بعض أنواع الطابعات هوامش بأبعاد محددة لكي يُطبع المنشور بشكل صحيح. الهوامش هي المساحة الفارغة حول الورقة، ويمكن تغيير الهوامش بالذهاب إلى تبويب: تصميم الصفحة Page Design > هوامش Margins هناك ثلاثة أنواع من الهوامش القياسية، العريض Wide، المتوسط Moderate، والضيق Narrow. يمكنك اختيار أحد هذه الأنواع الثلاثة أو تعيين هوامش بأبعاد مخصصة Custom Margins: في مربع الحوار Layout Guides قم بإدخال أبعاد الهوامش المرغوبة في حقولها المخصصة، ويمكنك الاستدلال بمربع المعاينة لمعرفة كيف ستبدو الهوامش قبل أن تغلق مربع الحوار. بالرغم من أنّ الكثير من الطابعات التجارية تتيح إمكانية طباعة كافة محتويات الصفحة من الحافة إلى الحافة، إلّا أنّ هناك بعض الطابعات، وخصوصا المكتبية، لا توفر هذه الخاصية. لذلك من الأفضل إعداد هوامش الصفحة لكي تضمن طباعة المنشور بصورة صحيحة وعدم اقتطاع شيء من محتوياته مهما كان نوع الطابعة التي ستستخدمها. ولتتأكد من عدم خروج محتويات الصفحة عن الهوامش، استفد من خطوط إرشاد الهامش Guides وقم بمحاذاة العناصر داخله. لاحظ أنّه عندما تقوم بتحريك أي عنصر بالقرب من خط الهامش سيتغير لونه إلى أزرق غامق، وهو بذلك يخبرك أنّك قد وصلت إلى حد الهامش وأن أي حركة إضافية ستُخرج العنصر خارج الحد: بإمكانك إضافة خطوط إرشاد قياسية وبتخطيطات مختلفة من قائمة Guides في تبويب تصميم الصفحة Page Design: كما يمكنك إضافة خطوط إرشاد أفقية أو عمودية يدويا بتمرير المؤشر فوق حافة المسطرة إلى أن يتحول شكله إلى سهمين صغيرين، ثم السحب باتجاه الورقة إلى الموضع الذي تريد وضع خط الإرشاد فيه (استخدم المسطرة لضبط الأبعاد): هاتان الأداتان (المسطرة وخطوط الإرشاد) مفيدتان جدا في محاذاة العناصر وضبطها بصورة قياسية. إن لم تكن المسطرة وخطوط الإرشاد ظاهرة، اذهب إلى تبويب عرض View وتأكد من تأشير الخيارين Rulers و Guides: استخدام الصفحات الرئيسية Master Pages تشابه الصفحات الرئيسية القوالب، إلّا أنّ محتوياتها تكون غير قابلة للحذف أو التعديل. ومهما كان نوع وعدد العناصر المضافة إلى الصفحة الرئيسية، ستتكرر هذه العناصر عن إنشاء صفحة جديدة تندرج تحت تلك الصفحة الرئيسية. يُستفاد من الصفحات الرئيسية في توفير الوقت، إذ أنّك لن تضطر إلى إعادة إنشاء بعض العناصر التي تحتاج إلى تكرارها في كل صفحة، كالهوامش، أو أرقام الصفحات. كما أنّها وسيلة للحفاظ على تناسق مظهر المستند ككل كلما قمت بإضافة صفحات جديدة. يمكن أن يحتوي المنشور على صفحة رئيسية واحدة أو أكثر، وحسب الحاجة، وليتوضح لك المقصود من ذلك افتح قالبا فارغا واذهب إلى تبويب عرض View ثم انقر على الصفحة الرئيسية Master Page: ستلاحظ وجود صفحة رئيسية واحدة (A) بتخطيط بسيط جدا ولا تحتوي على أي عنصر (وذلك لأنّك قمت بفتح القالب الفارغ): قم بإغلاق القالب الفارغ وافتح قالبا آخر، وليكن Baby Photo Album مثلا: ستلاحظ أنّ هذا القالب يحتوي على عناصر مختلفة، مثل الأشكال، الإطارات، إلخ. لكن عندما تحاول تحديد أي من هذه العناصر (ما عدا العناصر النائبة للصور)، لتغيير حجمها أو تعديلها مثلا، لن تتمكن من ذلك. والسبب هو أنّها مضافة على الصفحة الرئيسية وليس على الصفحات العادية. بنفس الطريقة اذهب إلى تبويب: عرض View > الصفحة الرئيسية Master Page ستجد أنّ هذا القالب مكوّن من 6 صفحات رئيسية، ومن طريقة العرض هذه ستتمكن من تحديد العناصر وتعديلها: من الصفحة الرئيسية يمكنك إدراج مختلف العناصر وإجراء العديد من التنسيقات. وكما ذكرنا، كلّ ما يتم إضافته إليها لا يمكن التعديل عليه لاحقا من الصفحات العادية. لنفترض أنّك تريد إضافة شعار، أو علامة مائية، وتريد تكرارها على جميع الصفحات التي ستقوم بإضافتها لاحقا. اذهب إلى طريقة العرض الصفحة الرئيسية Master Page وقم بإدراج الصورة من تبويب إدراج ونسّقها حسب الرغبة. ثم أغلق الصفحة الرئيسية بالنقر على Close Master Page: بعد ذلك، عندما تقوم بإدراج صفحات جديدة لاحقا، سيتكرر كل ما قمت بإضافته في الصفحة الرئيسية: لإضافة صفحة رئيسية ثانية، اذهب إلى طريقة العرض Master Page وانقر على إضافة صفحة رئيسية Add Master Page: يمكنك مثلا إضافة رأس Heard كرقم الصفحة، التاريخ، أو عنوان مخصص: لإنشاء صفحة اعتيادية جديدة بنفس نمط الصفحة الرئيسية الجديدة (B في هذا المثال)، اذهب إلى تبويب: إدراج Insert > صفحة Page > إدراج صفحة Insert Page في مربع الحوار Insert Page، حدد عدد الصفحات التي تريد إدراجها وفيما إذا كانت قبل أو بعد الصفحة المحددة حاليا، ثم حدد الصفحة الرئيسية B (وهي الصفحة الرئيسية الثانية التي قمنا بإنشائها): استخدام مدقق التصميم Design Checker كما هو واضح من الاسم، مدقق التصميم هو أداة تُستخدم للبحث عن أية مشاكل محتملة في تصميم المنشور قبل أن تقوم بطباعته أو مشاركته مع الآخرين. لتشغيل مدقق التصميم اذهب إلى تبويب File ثم انقر على Run Design Checker: سيتم فحص المستند وتدقيق التصميم بشكل عام (وهو الخيار الافتراضي)، وستُعرض العناصر التي تحتوي على مشاكل إن وجدت: إذا كان منشورك موجهًا للطباعة، وهو الغالب، قم بتأشير خيار Run Final Publishing Checks. انقر على السهم بجانب كل عنصر يحتوي على مشكلة واختر أحد خيارات القائمة. يمكنك الانتقال إلى ذلك العنصر Go to this Item، تصحيحه Fix (إن وجد تصحيح تلقائي)، عدم تشغيل عملية التحقق هذه مجددا Never Run this Check Again، أو الحصول على تفسير لهذه المشكلة Explain (هذا الخيار سينقلك إلى نافذة المساعدة): يمكنك التحكم أكثر بخيارات المدقق بالنقر على Design Checker Options. يمكنك مثلا التحكم في الصفحات التي سيتم تدقيقها (كافة الصفحات All أو الصفحة الحالية فقط Current Page) من تبويب General: ومن تبويب Checks يمكنك تحديد عمليات التدقيق التي يجريها البرنامج، والتي يتم تنبيهك بها إن وجدت مشكلة (كافة عمليات التدقيق محددة بشكل افتراضي). إذا كانت هناك عملية تدقيق ترى أنّها غير ضرورية يمكنك إلغاء تأشيرها: بعد تصحيح جميع المشاكل يمكنك إغلاق المدقق بالنقر على Close Design Checker، وبذلك يُعتبر منشورك جاهزا للطباعة أو المشاركة. تهيئة المنشورات للطباعة بواسطة الطابعات التجارية في بعض الأحيان تحتاج إلى استخدام الطابعات التجارية لطباعة منشورك. قد يكون السبب هو أنّ طابعتك المكتبية لا تطبع المنشور بالحجم الذي تريده، أو أنّ كفاءتها في طباعة منشورات بجودة وكمية محددة غير جيّدة. في هذه الحالة يجب أن تقوم بتصدير منشورك بصيغة ملائمة قبل الذهاب إلى مكتب الطباعة. بعض المكاتب تفضّل طباعة المنشورات بصيغة PDF، والبعض الآخر تفضل صيغ الصور (مثل JPEG أو TIFF). لتهيئة المنشور للطباعة اذهب إلى تبويب: File > Export > Save for Commercial Printer يمكنك تصدير المنشور بصيغة PDF مباشرة كما وضّحنا في الجزء السابق من هذا الدرس، لكنّ خيار الحفظ لطابعة تجارية يتيح لك التحكم في خيارات إضافية. حيث يمكنك تحديد جودة الطباعة (الخيار Commercial Press هو الخيار الافتراضي، وهو الأعلى جودة). بالإضافة إلى ذلك يمكنك تصدير ملفي PDF وPub معا، ملف PDF فقط، أو ملف Pub فقط: بعد تحديد الخيارات المرغوبة انقر على زر Pack and Go Wizard، حدّد مجلد الحفظ ثم Next، وسيقوم البرنامج بتصدير الملف إلى المجلد المحدد (عند الانتهاء يمكنك طباعة تدقيق مركب Print Composite Proof أو عدم طباعته). يعتبر هذا الخيار (Save for Commercial Printer) ملائما إذا كان المنشور يحتوي على نصوص بالدرجة الأكبر. أما إذا كانت العناصر الجرافيكية هي الغالبة في تصميم المنشور فالخيار الملائم هو حفظ لطباعة الصور Save for Photo Printing. حدّد صيغة الصور، ثم انقر على Save Image Set: إن اخترت الخيار الأول ستجد في مجلد الحفظ مجلد مضغوط يحتوي على ملف Pub وآخر PDF (في حالة الخيار الافتراضي): وإن اخترت الخيار الثاني، ستجد في مجلد الحفظ عدد من الصور (حسب صفحات المنشور): وبهذا يكون درسنا حول أساسيات Publisher قد انتهى. تعليقاتكم واستفساراتكم مرحب بها.
  3. Microsoft Publisher هو أحد تطبيقات حزمة Office المكتبية. وكما هو واضح من اسم البرنامج، لقد وُجِد لمساعدتك على إنشاء جميع أنواع العناصر القابلة للطباعة والنشر، كالمنشورات الدعائية، الملصقات، بطاقات العمل، بطاقات الدعوة، الكتيبات، المطويات، وغيرها الكثير من المنشورات. ستبدو لك واجهة البرنامج مألوفة جدا حتى وإن لم تستخدم البرامج من قبل. إذ أنّه يحتوي على العديد من الخصائص المشابهة لبرامج ميكروسوفت أوفيس الأخرى، وخصوصا ميكروسوفت وورد. يمكنك إنشاء منشورات بسيطة، أو احترافية مخصصة باستخدام مجموعة من الأدوات البسيطة، أو بإمكانك استخدام القوالب الجاهزة والتعديل عليها. قد تتساءل، لماذا استخدم هذا البرنامج إذا كان بإمكاني استخدام الأدوات أو القوالب المشابهة في وورد؟ السبب هو أنّ برنامج Publisher يوفر مساحة عمل أكثر مرونة لإنشاء مستندات بأحجام وتخطيطات متنوعة. وكذلك يوفر مجموعة كبيرة من الأدوات للتحكم في تصميم الصور ومحاذاتها. أي أنّه يركز على تخطيط وتصميم الصفحة أكثر من تنسيق النصوص والفقرات. وكما ذكرنا، بإمكاننا إنشاء المنشورات وطباعتها بأجهزة الطباعة الاعتيادية. وكذلك بالإمكان تحويل المنشورات إلى ملفات بصيغ أخرى، كصيغة PDF أو بصيغة صور. أو استخدام HTML لأغراض النشر على صفحات الويب. سنتعلّم في هذا الجزء بعض أساسيات العمل على البرنامج، كإنشاء منشورات جديدة، تعديلها، التعامل مع الصور والأشكال، بالإضافة إلى حفظ المنشورات. إنشاء منشور Publication جديد عندما تقوم بفتح البرنامج ستجد قائمة من القوالب المميزة للاختيار من بينها. يمكنك اختيار القالب الفارغ Blank وبالاتجاه الأفقي أو العمودي لتصميم المنشور من الصفر. أو اختيار أحد القوالب من معرض القوالب، وبذلك توفر الكثير من الوقت. كما ستجد على الجانب المنشورات التي تم العمل عليها مؤخرا Recent. لديك خيار تثبيت أي منشور من قائمة Recent بالنقر على أيقونة الدبوس، وهذا الخيار مفيد إذا كان المنشور يتطلب التعديل والتحديث بصورة مستمرة كالتقاويم أو النشرات الإخبارية: كما يمكنك اختيار أحد القوالب من معرض القوالب المضمّنة Built-in. انقر على Built in واختر أحد التصنيفات المتوفرة: عند اختيار التصنيف ستُعرض مجموعة القوالب التي تندرج تحت هذا التصنيف. انقر على أحد المصغرات لعرض خصائصه على جانب النافذة، يمكنك من خلالها تخصيص مجموعة الألوان أو الخطوط. انقر على إنشاء Create لفتح القالب: بإمكانك أيضا البحث عن القوالب على الإنترنت. اكتب في حقل البحث نوع المنشورات التي تريد إنشاءها: انقر على مصغرات القوالب لمعاينتها بصورة أكبر، واستخدم الأسهم على الجوانب لتصفح بقية القوالب. عند اختيار القالب المناسب انقر على إنشاء Create لتنزيله وفتحه: تحرير المنشور على غرار برامج حزمة أوفيس الأخرى، تتكون واجهة البرنامج من عدد من التبويبات، وكل تبويب ينقسم إلى مجموعات. تحتوي المجموعة الواحدة على الأدوات والأوامر ذات الصلة. وإذا كنت قد عملت على وورد أو بوربوينت من قبل، ستجد معظم هذه الأوامر مألوفة. يحتوي تبويب الصفحة الرئيسية Home على الأوامر الخاصة بتنسيق النصوص المعتادة، كالحجم، اللون، نوع الخط، ...إلخ. كما يحتوي على أوامر أخرى خاصة بإدراج بعض العناصر ومحاذاتها: أما تبويب إدراج Insert فيحتوي على المزيد من العناصر التي يمكنك إدراجها والتي تساعدك على تصميم منشورك بسرعة وسهولة. يمكنك، مثلا، إدراج أجزاء جاهزة ومنسقة مسبقا كالعناوين، أو الاقتباسات من أمر أجزاء الصفحة Page Parts: أو تحسين منشورك بإضافة إطار مخصص حول الصور أو الأشكال من أمر الحدود والتشكيلات Borders & Accents: تتوفر لك المزيد من خيارات الإدراج الأخرى كإدراج تقويمات Calendars، إعلانات Advertisements، معلومات مهنية Business Information، ...إلخ. لنفترض، مثلا، أنّك قمت باختيار أحد القوالب الجاهزة كنقطة بداية، وتريد تخصيصه وتحريره حسب ما يناسبك. ستلاحظ أنّ أي قالب يتكون من مجموعة من العناصر، كالصور، الأشكال، مربعات النصوص، وغيرها. قد تكون هذه العناصر مستقلة أو مرتبطة ببعضها. عند تمرير الفأرة فوق محتويات القالب سيظهر إطار متقطع يدلّك على وجود عنصر، سواء كان صورة أو مربع نص أو غيره: اضغط على مفتاحي CTRL+A لتحديد كافة محتويات الصفحة، وبذلك تستدل إلى كافة العناصر الموجودة فيها: من الخصائص الشائعة والمفيدة هي الربط بين مربعات النصوص. بهذه الطريقة يمكنك إنشاء مربع نص في صفحة، وإكمال مربع النص في صفحة ثانية إذا كانت الصفحة الأولى لا تحتوي على مساحة كافية. على سبيل المثال، إذا رغبت في إضافة نصوص إضافية إلى مربع النص الموضح في الصورة أدناه، وكانت مساحة المربع الحالي لا تكفي لاحتواء كافة النصوص: يمكنك إكمال مربع النص أسفل الصورة بالنقر بزر الفأرة الأيمن على المربع واختيار إنشاء ارتباط مربع نص Create Text Box Link: سيتحول شكل المؤشر إلى شكل سطل، انقر فوق المنطقة التي تريد إكمال مربع النص فيها: بعد إدراج مربع النص الإضافي، قم بتغيير حجمه وموضعه، واستفد من خطوط الإرشاد guides لمحاذاته بشكل صحيح. ستلاحظ ظهور سهم أسود اللون على جانب المربع، استخدم هذا السهم للانتقال إلى مربع النص الآخر المرتبط به. عندما تقوم بإضافة نصوص أخرى إلى المربع الأول سيتم إدراج تكملتها في المربع الثاني الذي قمت بربطه: من العمليات الشائعة الأخرى عند تحرير القوالب هي تغيير صور القالب الافتراضية واختيار صور مخصصة. يمكنك استخدام منطقة المسودة (أو التسويد) Scratch Area (وهي المنطقة الرمادية المحيطة بالصفحة) لتحضير الصور التي تنوي استخدامها في المنشور فيها. حدد مجموعة الصور من المجلد المرغوب ثم اسحبها إلى منطقة المسودة: يمكنك تخزين مختلف العناصر في هذه المنطقة، كالأشكال أو مربعات النصوص ومن ثم سحبها وإدراجها في الصفحة لاحقا عند الحاجة. يمكنك تغيير الصور أيضا بالنقر بزر الفأرة الأيمن، تمرير المؤشر فوق تغيير الصورة Change Picture، ثم اختيار تغيير الصورة Change Picture: سيُفتح مربع يمكنك من خلاله اختيار صورة من ملف مخزون على جهازك أو تنزيل صورة من الإنترنت: عند تحديد أي صورة سيظهر تبويب تنسيق Format الذي يحتوي على العديد من الخيارات لتنسيق الصورة. كإعادة التلوين Recolor: أو تغيير نمط الصورة باختيار أحد النماذج من معرض أنماط الصورة Picture Styles: تلاعب بالخيارات الأخرى واستكشفها بنفسك حتى تصل إلى النتيجة المرغوبة. إدراج العناصر الجرافيكية في أغلب الأحيان، لا تخلو المنشورات من العناصر الجرافيكية، كالصور والأشكال، بالإضافة إلى النصوص. وكما ذكرنا سابقا يمكنك إدراج مختلف العناصر من تبويب إدراج Insert. بإمكانك إدراج صورة محفوظة على جهازك بالنقر على أمر الصور Pictures، واختيار الصورة المرغوبة من مجلد الحفظ: وكذلك تستطيع البحث عن صورة محددة على الإنترنت وإدراجها بالنقر على امر صور عبر الإنترنت Online Pictures: بإمكانك البحث على الإنترنت عن الصورة المرغوبة، أو على حسابك على OneDrive.وكذلك لديك خيار إدراج الصور من حساباتك على فيس بوك أو Flickr بعد ربط البرنامج بهذه الحسابات. من الأمور التي يجب أن تأخذها في الاعتبار عند تنزيل الصور من الإنترنت هي حقوق الصورة. إذ أنّ بعض الصور لها حقوق استخدام وليست لديك حرية استخدامها مجانا. من الأمور الأخرى الواجب مراعاتها هي الدقة. فالمنشور الذي تعمل عليه سيُوجّه على الأغلب للطباعة، وفي هذه الحالة يفضل جدا أن يكون بدقة عالية. تكون الصور بصورة عامة ذات دقة عالية إذا كان رقم DPI مساو لـ 96 فما فوق. لكن قد تتطلب طابعتك دقة 150-300 DPI. اكتب الكلمة المفتاحية للبحث في حقل البحث واضغط مفتاح Enter. حدد الصورة المرغوبة وانقر على إدراج Insert: بعد إدراج الصورة، أصبح بإمكانك تغيير حجمها وموضعها ضمن الصفحة. ويمكنك تغيير التفاف النص حول الصور أو خلالها من أمر Wrap Text في تبويب الصفحة الرئيسية Home (أو في تبويب Format السياقي). مرر الفأرة فوق طريقة الالتفاف لعرض معاينة مباشرة وانقر عليه بزر الفأرة الأيسر لتطبيقه: من الخيارات الأخرى المفيدة إدراج عنصر نائب للصورة Picture Placeholder والذي هو بمثابة حجز مكان للصورة التي ترغب في إدراجها لاحقا: من نفس التبويب ونفس المجموعة (Illustrations) تستطيع إدراج شكل من قائمة الأشكال القياسية، أو رسم شكل مخصص باستخدام أداة FreeForm: خيارات حفظ المنشورات إنّ حفظ العمل هو خطوة مهمة جدا في كل البرامج التي تعمل عليها. ومن حسن الحظ يوفر Microsoft Publisher إمكانية حفظ العمل تلقائيا بعد مرور فترة محددة من الزمن. لتخصيص هذا الخيار اذهب إلى تبويب: ملف File > خيارات Options من قسم حفظ Save، تأكد من تأشير خيار حفظ معلومات الاسترداد التلقائي كل... Save AutoRecover information every: الخيار الافتراضي هو حفظ المنشور كل 10 دقائق. لكن يمكنك تقليص هذه المدّة لتصبح دقيقة واحدة. وهذا الخيار مفيد جدا في حال حصل أي خلل وانطفأ جهازك، عندئذ يمكنك إكمال عملك من آخر معلومات تم حفظها. إذا كنت تعمل على المنشور لأول مرة ولم تقم بحفظه بعد، انقر على أيقونة الحفظ من شريط الوصول السريع: أو اذهب إلى تبويب: ملف File > حفظ Save ثم قم بتسمية الملف وحدد مجلد الحفظ: سيتم حفظ الملف بصيغة Pub. أما إن لم تكن هذه المرة الأولى لحفظ الملف فسيتم حفظ التغييرات التي أجريتها بعد آخر عملية حفظ عند النقر على أيقونة الحفظ. لحفظ المنشور بصيغ أخرى اذهب إلى تبويب: ملف File > تصدير Export من هذه النافذة يمكنك حفظ المنشور بصيغة Pub أقدم من الإصدار الحالي لتتوافق مع الإصدارات القديمة من البرنامج: أو حفظ المنشور بصيغة صورة PNG، JPEG، إلخ: إذا كنت ترغب في حفظ نسخة إلكترونية من المنشور (وليس لغرض الطباعة)، يمكنك حفظ بصيغة PDF أو XPS. انقر على Create PDF/XPS Document: من نافذة الحفظ يمكنك تسمية المستند، وتحديد نوعه (PDF أو XPS). وكذلك يمكنك الوصول إلى خيارات إضافية بالنقر على زر Options: من مربّع الحوار Publish Options يمكنك التحكم في جودة المنشور (الخيار الافتراضي هو الطباعة عالية الجودة High quality printing). فعند النقر على خيارات الجودة المتوفرة سيظهر تلميح يخبرك بالحالات التي تناسب هذه الجودة. مثلا عند اختيار الطباعة القياسية Standard سيتم إنشاء ملف بحجم مضغوط وملائم للنشر على الإنترنت. أما عند تحديد خيار High quality printing فسيتم إنشاء ملف بحجم كبير وملائم للطباعة المكتبة. وبالطبع كلما كانت الجودة عالية يزداد حجم الملف، والعكس بالعكس. وستتغير قيم DPI تبعا لتغيير خيار جودة المنشور. يمكنك أيضا تشفير الملف بواسطة كلمة سرية بتحديد الخيار Encrypt the document with a password. لإنشاء إصدار HTML من المنشور انقر على Publish HTML: في هذه الحالة لديك خياران، أما إنشاء صفحة ويب HTML وهذا يعني إنشاء ملف HTML يتضمن عناصر ذات مواضع ثابتة على الصفحة. أو إنشاء صفحة ويب أحادية الملف (Single File Web Page (MHTML وهذا يعني أنّ جميع الصور، الخطوط، والوسائط سيتم تضمينها في الصفحة وسينتج عنه ملف واحد في النهاية. حدد أحد الخيارين ثم انقر على Publish HTML.
  4. تمّ تصميم أنظمة إدارة الإعدادات لتجعل التحكّم بعدد كبير من الخواديم أمرًا سهلًا لمديري الأنظمة وفرق العمليّات، فهي تسمح لنا بالتحكّم بالعديد من الأنظمة المختلفة بطريقة مؤتمتة من موقع مركزي واحد. وبينما تتوافر العديد من أنظمة إدارة الإعدادات الشائعة من أجل أنظمة Linux، مثل Chef وPuppet، فهي غالبًا معقدة أكثر من حاجة الناس، تُشكّل Ansible بديلًا رائعًا لهذه الخيارات لأنّها تحتوي على عقبات أقل بكثير عند البدء معها. سنناقش في هذا الدّرس كيفيّة تثبيت Ansible على خادوم Ubuntu وسنمر على بعض الأساسيات حول كيفيّة استخدام هذه البرمجيّة. كيف تعمل Ansible؟تعمل Ansible عن طريق إعداد أجهزة العملاء من خلال حاسوب يمتلك مكوّنات Ansible مثبّتة ومُعدّة عليه. تتواصل عبر قنوات SSH الاعتياديّة من أجل استعادة المعلومات من الأجهزة عن بُعد remote، إصدار الأوامر، ونسخ الملفّات، ولهذا السبب لا يتطلّب نظام Ansible تثبيت أي برمجيّات إضافيّة على حواسيب العملاء. هذه هي إحدى الطرق التي تُبسِّط فيها Ansible إدارة الخواديم، فيُمكِن إحضار أي خادوم يمتلك منفذ SSH مُعرَّض تحت مظلّة إعدادات Ansible بغض النظر عن الطور الذي يتواجد فيه ضمن دورة حياته. أي حاسوب نستطيع إدارته عبر SSH نستطيع أيضًا إدارته عبر Ansible. تتخذ Ansible نهج الوحدات modules ممّا يجعل من السهل تمديدها كي تستخدم وظائف من النظام الأساسي للتعامل مع حالات محدّدة، يُمكِن كتابة الوحدات باستخدام أيّة لغة وهي تتخاطب بواسطة JSON المعياريّة. إنّ ملفّات الإعدادات مكتوبة بشكل رئيسي بصيغة تسلسل البيانات YAML نظرًا لطبيعتها التعبيرية وتشابهها مع لغات الرقم markup الشائعة، تتمكن Ansible من التفاعل مع العملاء إمّا من خلال أداة سطر الأوامر أو عبر scripts للإعدادات تُدعى Playbooks. تثبيت Ansible على Ubuntuللبدء باستكشاف Ansible كوسيلة لإدارة خواديمنا المختلفة نحتاج إلى تثبيت برمجيّة Ansible على جهاز واحد على الأقل، سنستخدم خادوم Ubuntu من أجل هذا القسم. إنّ أفضل طريقة للحصول على Ansible في Ubuntu هي إضافة PPA المشروع (أرشيف الحِزَم الشخصية personal package archive) إلى نظامنا. للقيام بذلك على نحو فعال نحتاج لتثبيت الحزمة python-software-properties والتي ستعطينا القدرة على العمل مع PPA بسهولة: sudo apt-get update sudo apt-get install python-software-propertiesبعد أن يتم تثبيت الحزمة نستطيع إضافة Ansible PPA بكتابة الأمر التالي: sudo add-apt-repository ppa:rquillo/ansible نضغط ENTER لقبول إضافة الـ PPA. نحتاج بعدها لتحديث دليل حِزَم نظامنا بحيث يكون على دراية بالحِزَم المتوفرة في PPA، نستطيع بعدها تثبيت برمجيّة Ansible: sudo apt-get update sudo apt-get install ansible نمتلك الآن كافّة البرمجيّات المطلوبة لإدارة خواديمنا من خلال Ansible. إعداد مفاتيح SSHتتخاطب Ansible بالدرجة الأولى كما أشرنا سابقًا مع حواسيب العملاء عبر SSH، وعلى الرغم من أنّها تمتلك القدرة على التعامل مع استيثاق SSH authentication مُعتمِد على كلمة السر فتساعد مفاتيح SSH على إبقاء الأمور أبسط. بإمكاننا إعداد مفاتيح SSH بطريقتين مختلفتين اعتمادًا على إذا ما كنّا نمتلك مسبقًا المفتاح الذي نريد استخدامه. 1- إنشاء زوج مفاتيح SSH جديدإن لم تكن تمتلك مسبقًا زوج مفاتيح SSH ترغب في استخدامه من أجل إدارة Ansible فبإمكانك إنشاء واحد الآن على خادوم Ansible. سنقوم بإنشاء زوج مفاتيح SSH على خادوم Ansible من أجل استيثاقه مع المضيفين الذين يديرهم. نقوم بإنشاء زوج مفاتيح RSA key-pair بكتابة ما يلي عن طريق المستخدم الذي نتحكّم بـ Ansible من خلاله: ssh-keygen سيتم سؤالنا عن تحديد موقع الملف لزوج المفاتيح التي تم إنشاؤها، عبارة سر passphrase، وتأكيد عبارة السّر، نضغط Enter في جميع هذه المراحل لقبول القيم الافتراضيّة. ستكون المفاتيح الجديدة متاحة في دليل ~/.ssh الخاص بالمستخدم، يُدعى المفتاح العام (والذي يمكننا مشاركته) بـ id_rsa.pub، يُدعى المفتاح الخاص (والذي نبقيه بأمان) بـ id_rsa. نستطيع إضافتها إلى لوحة تحكّم DigitalOcean على سبيل المثال (إن كنت على Digital Ocean) للسماح لنا بتضمين مفتاح SSH الخاص بنا في الخواديم الجديدة التي أنشأناها، سيسمح هذا لخادوم Ansible بالدخول إلى الخواديم الجديدة عبر SSH فورًا بدون الحاجة لأي استيثاق آخر. لفعل هذا نضغط على الرابط “SSH Keys” الموجود في قائمة التصفح على اليسار، نضغط في الشاشة الجديدة على زر “Add SSH Key” الموجود في الزاوية العلوية اليمنى: ندخل الاسم الذي نريد ربطه مع هذا المفتاح في الحقل العلوي، ونكتب على خادوم Ansible ما يلي للحصول على محتويات مفتاحنا العام: cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0 السلسلة النصية التي تعود لنا هي التي نحتاج لصقها في الحقل الثاني في لوحة تحكّم DigitalOcean: نضغط على “Create SSH Key” لإضافة مفتاحنا إلى لوحة التحكم، نستطيع الآن تضمين مفتاح SSH العام إلى الخواديم الجديدة التي نضيفها مما يسمح لنا بالتواصل مع خادوم Ansible، نحتاج فقط إلى اختيار المفتاح في القسم “Add optional SSH Keys” من عملية إنشاء خادوم جديد: 2- نقل زوج مفاتيح SSH موجود إلى Ansibleإن كنت تمتلك مسبقًا زوج مفاتيح SSH تريد استخدامه من أجل الاستيثاق مع خواديمك فبإمكانك نقل الإعتمادات credentials إلى خادوم Ansible الجديد بدلًا من إنشاء زوج جديد، يمتلك هذا ميّزة بأن يجعلها تعمل تلقائيًّا مع أي خواديم قمت بإعدادها مسبقًا لتستخدم هذا المفتاح. وعلى الحاسوب الآخر حيث قمنا بإعداد استيثاق مفتاح SSH من أجل الخواديم نحصل على المفتاح العام بكتابة ما يلي: cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0نحتاج على خادوم Ansible إلى إنشاء دليل مخفي لتخزين المفاتيح، نقوم بتسميته .ssh كي يعلم برنامج SSH أين يجده: mkdir ~/.ssh نقوم بقفل النفاذ إلى هذا الدليل لكي نتمكن نحن فقط من دخوله أو الكتابة إليه: chmod 700 ~/.ssh ننتقل الآن إلى الدليل ونفتح ملفًّا يُدعى id_rsa.pub باستخدام محرّر النصوص: cd ~/.ssh nano id_rsa.pubنلصق خَرْج مفتاحنا العام من حاسوبنا الرئيسي إلى هذا الملف: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0 نقوم بحفظ وإغلاق الملف، ونتحقّق من امتلاكه للأذونات الصحيحة بكتابة: chmod 644 id_rsa.pub الآن وبالعودة إلى حاسوبنا المحلّي المضبوط من أجل نفاذ مفاتيح SSH نكتب: cat ~/.ssh/id_rsa -----BEGIN RSA PRIVATE KEY----- MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq . . . . . . cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7 1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo -----END RSA PRIVATE KEY----- سيكون الخَرْج طويلًا جدًّا. نعود الآن إلى خادوم Ansible، نحتاج إلى إنشاء ملف جديد في الدليل ~/.ssh: nano id_rsa نقوم بداخله بلصق نتائج الأمر السابق على حاسوبنا المحلّي: -----BEGIN RSA PRIVATE KEY----- MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq . . . . . . cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7 1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo -----END RSA PRIVATE KEY----- نتأكّد من تضمين أسطر التحديد الموجودة في البداية والنهاية، فهي مطلوبة لكي يكون ملف المفتاح صالحًا، نحفظ الملف ونغلقه. نحتاج لتغيير الأذونات لإبقاء هذا الملف بأمان: chmod 600 id_rsa ستكون Ansible عند هذه النقطة قادرة على استخدام مفاتيح SSH هذه من أجل التواصل مع أي خادوم يمتلك المفتاح مُضمَّنًا عليه. إعداد مضيفي Ansibleتقوم Ansible بتتبّع جميع الخواديم التي يعلم عنها عن طريق ملف المضيفين “hosts”، نحتاج إلى إعداد هذا الملف أوّلًا قبل أن نتمكّن من بدء التواصل مع حواسيبنا الأخرى. نفتح الملف مع صلاحيّات جذريّة root كما يلي: sudo nano /etc/ansible/hosts سنرى ملفًّا يمتلك الكثير من أمثلة الإعدادات، وسيعمل أيّ منها لدينا فعليًّا، لذلك من أجل البدء نقوم بتعليق كافّة أسطر هذا الملف بإضافة “#” قبل كل سطر. سنبقي هذه الأمثلة في هذا الملف لتساعدنا في الإعداد إن أردنا تنفيذ حالات أكثر تعقيدًا في المستقبل. بعد أن يتم تعليق كافّة الأسطر نستطيع البدء بإضافة المضيفين الفعليين لدينا. يكون ملف المضيفين مرنًا إلى حدٍّ ما ويمكن إعداده بعدّة طرق مختلفة، تبدو الصياغة التي سنستخدمها كما يلي: [group_name] alias ansible_ssh_host=server_ip_address إنّ group_name هو وسم تنظيمي يسمح لنا بالإشارة لأي من الخواديم المدرجة بكلمة واحدة، الكنية هي مجرّد اسم للإشارة إلى ذلك الخادوم. لذا نتخيل في حالتنا أننا نمتلك ثلاثة خواديم نريد إعدادها مع Ansible، تكون هذه الخواديم قابلة للوصول من خلال خادوم Ansible بكتابة: ssh root@server_ip_address لن يتم سؤالنا عن كلمة سر إن أعددنا هذا بشكل صحيح، سنفترض أنّ عناوين IP لخواديمنا هي 192.0.2.1، 192.0.2.2، و192.0.2.3، سنقوم بإعداد هذا بحيث نستطيع الإشارة إليها بشكل مفرد كـ host1، host2، وhost3، أو كمجموعة باسم servers. هذه هي الكتلة التي ينبغي إضافتها إلى ملف المضيفين من أجل تحقيق هذا: [servers] host1 ansible_ssh_host=192.0.2.1 host2 ansible_ssh_host=192.0.2.2 host3 ansible_ssh_host=192.0.2.3 يمكن للمضيفين أن يكونوا ضمن مجموعات متعدّدة، وتستطيع المجموعات إعداد مُعامِلات parameters من أجل كل أعضائها، فلنجرّب هذا الآن. إن حاولنا مع إعداداتنا الحاليّة الاتصال بأي من المضيفين عن طريق Ansible فسيفشل الأمر (بافتراض أنّك لا تعمل عن طريق المستخدم الجذري root)، يحدث هذا لأنّه تم تضمين مفاتيح SSH من أجل المستخدم الجذري على الأنظمة البعيدة وستحاول Ansible الاتصال بشكل افتراضي بواسطة المستخدم الحالي، ستعطينا محاولة الاتصال هذا الخطأ: host1 | FAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue نستخدم على خادوم Ansible مستخدمًا يُدعى demo، ستحاول Ansible الاتصال إلى كل مضيف باستخدام ssh demo@server، لن يعمل هذا إن كان المستخدم demo غير موجود على النظام البعيد. نستطيع إنشاء ملف يُخبِر جميع الخواديم في المجموعة servers بالاتصال عن طريق المستخدم الجذري root. لفعل هذا نقوم بإنشاء دليل في بنية إعدادات Ansible يُدعى group_vars، ونستطيع ضمن هذا المجلّد إنشاء ملفّات مُنسّقة عن طريق YAML لكل مجموعة نريد إعدادها: sudo mkdir /etc/ansible/group_vars sudo nano /etc/ansible/group_vars/serversبإمكاننا وضع إعداداتنا هنا، تبدأ ملفّات YAML بـ “—” لذا تأكّد ألّا تنسى ذلك الجزء: --- ansible_ssh_user: rootنحفظ الملف ونغلقه عند الانتهاء. إن أردنا تحديد تفاصيل الإعدادات لكل خادوم بغض النظر عن مجموعته المرتبط بها فبإمكاننا وضع هذه التفاصيل في ملف في المسار /etc/ansible/group_vars/all، يمكن إعداد المضيفين بشكل مفرد بواسطة إنشاء ملفّات في دليل في المسار /etc/ansible/host_vars. استخدام أوامر Ansible بسيطةالآن بعد أن قمنا بإعداد المضيفين وضبطنا تفاصيل الإعدادات بشكلٍ كافٍ للسماح لنا بالاتصال بنجاح إلى مضيفينا، فبإمكاننا تجربة الأمر الأول لنا. نقوم بعمل ping لكل الخواديم التي أعددناها عن طريق كتابة: ansible -m ping allhost1 | success >> { "changed": false, "ping": "pong" } host3 | success >> { "changed": false, "ping": "pong" } host2 | success >> { "changed": false, "ping": "pong" } وهو اختبار بسيط للتأكّد من امتلاك Ansible لاتصال مع كافّة مضيفيه. تعني “all” كافّة المضيفين، وكان بإمكاننا بسهولة تحديد مجموعة كما يلي: ansible -m ping serversنستطيع أيضًا تحديد مضيف بشكل فردي: ansible -m ping host1بإمكاننا تحديد عدّة مضيفين بفصلهم بواسطة نقطتين: ansible -m ping host1:host2المقطع -m ping من الأمر هو تعليمة لـ Ansible كي تستخدم الوحدة “ping”، وهي بشكل مبسّط عبارة عن أوامر نستطيع تنفيذها على مضيفينا عن بُعد، تعمل الوحدة “ping” بعدّة طرق مثل أداة ping العاديّة في Linux، ولكن تقوم بدلًا من ذلك بالتحقّق من أجل اتصال Ansible. لا تأخذ الوحدة ping فعليًّا أيّة مُعطيات arguments، ولكن بإمكاننا تجربة أمر آخر لنرى كيفيّة عمل ذلك، نقوم بتمرير المعطيات إلى script بكتابة –a. تسمح لنا وحدة الصدفة “shell” بإرسال أمر طرفيّة terminal إلى المضيف البعيد واستعادة النتائج، على سبيل المثال لإيجاد استخدام الذاكرة على جهاز مضيفنا host1 نستطيع استخدام: ansible -m shell -a 'free -m' host1 host1 | success | rc=0 >> total used free shared buffers cached Mem: 3954 227 3726 0 14 93 -/+ buffers/cache: 119 3834 Swap: 0 0 0 الخاتمةينبغي أن تمتلك الآن خادوم Ansible مضبوطًا للتواصل مع الخواديم التي ترغب بالتحكم بها، تحقّقنا قدرة Ansible على التواصل مع كل مضيف واستخدمنا الأمر ansible لتنفيذ مهام بسيطة عن بُعد. وعلى الرغم من أنّ هذا مفيد لنا، لم نقم بتغطية أقوى ميّزة في Ansible في هذا الدّرس وهي الـ Playbooks، لقد قمنا بإعداد أساس رائع من أجل العمل مع خواديمنا من خلال Ansible، ولكن الجزء الأكبر سيتم الحديث عنه في درس لاحق عند تغطية كيفيّة استخدام الـ Playbooks لأتمتة الإعدادات لحواسيبنا عن بُعد. ترجمة -وبتصرّف- لـ How to Install and Configure Ansible on an Ubuntu 12.04 VPS لصاحبه Justin Ellingwood.
  5. من الصعب العمل على وسائل التواصل الاجتماعي وخصوصا فيما يتعلّق ببناء قاعدة من الجماهير. لكنّ الصعب ليس مستحيلا، وبالتأكيد لا يعني أنّك لا تستطيع الاستمتاع بعملك (أو تحاول على الأقل) وتجعل هذه العملية سهلة قدر الإمكان. هنا يأتي دور تقويم النشر على الشبكات الاجتماعية (social media calendar). ربما لم تتوقّع أن يكون للتقويم ذلك التأثير الكبير، وبالفعل هو لا يحلّ كل شيء، لكنه بدون شك سيساعدك على معالجة الأمور المتعلّقة بالنشر والمشاركة بشكل أفضل ويخفف عنك بعض الإجهاد. سنقوم في هذا المقال بالتركيز على إنشاء تقويم وسائل التواصل الاجتماعي. وفيما يتعلّق بوسائل التواصل الاجتماعي يمكن أن يساعدك التقويم على عرض جميع المنشورات التي تخطط لنشرها في الأسابيع أو الأشهر المقبلة بشكل مرئي. وفوق كل ذلك، سيساعدك على صياغة منشوراتك مسبقا لكي تضمن دائما وجود منشورات جاهزة للمشاركة. إذا، كيف يمكنك أن تحقق كل ذلك؟ إعداد تقويم التواصل الاجتماعيالخطوة 1: التصنيفاتإن لم تكن قد قمت بذلك بالفعل عند إنشاء جدول المشاركة، من المفيد أن تُنشئ قائمة تشتمل على جميع أنواع المنشورات التي ترغب في مشاركتها بشكل منتظم، خصوصا إذا كنت تشارك العديد من الأنواع المختلفة من التحديثات. يمكن أن تتضمن المنشورات التي تشاركها الأنواع التالية مثلا: المنشورات النقاشيةمنشورات المدونةإعادة مشاركة المحتوى الممتعالاقتباساتالنصائحالصور/الفيديوهات؛ محتوى الوسائط المتعددةالمنشورات الترويجيةالإعلاناتالأحداثيمكنك أن تتوسع أو تحد من هذه الأنواع حسب نوع المحتوى الذي ترغب في نشره. الصورة أدناه توضح التصنيفات التي تعتمدها حسابات Hubspot في تقويم وسائل التواصل الاجتماعي الخاص بهم. الخطوة 2: نشر التصنيفاتبعد أن قمت بتحديد التصنيفات، حان الوقت لتقرر أيّ الأيام/الأوقات التي ترغب في نشرها فيها. على سبيل المثال، يمكن نشر مقالات المدونة في يومي الإثنين والأربعاء، والنصائح كل يوم جمعة. الخطوة 3: تجهيز التحديثاتهنا يكمن الجزء الأكثر متعة والأكثر فائدة لتقويم وسائل التواصل الاجتماعي. جهّز جميع المحتوى الذي ستنشره في الأسابيع/الأشهر المقبلة. أنصحك بكتابة أقصى قدر ممكن من التحديثات المستقبلية ولجميع التصنيفات. كما أنصحك أيضا بتجهيزها إما لكل يوم أو لكل الفئة، أيهما أكثر فعالية أو إلهاما بالنسبة لك. المثال التالي يوضّح ما يبدو عليه أحد التحديثات لحساب Buffer على تويتر: الخطوة 4: الأحداث/المناسبات الخاصةبالإضافة إلى المنشورات العادية، يمتلئ العام بالعديد من الأحداث أو المناسبات الخاصة، وسيكون من الرائع التخطيط لها مسبقا لكي تتأكّد من عدم تفويت هذه المناسبات وخلق الكثير من الإثارة والفرص المتعلّقة بها. أنصحك بكتابة المنشورات الخاصة بهذه المناسبات في أبكر وقت ممكن لكي تتمكن من تقليل احتمالية نسيانها أو تفويتها. من المناسبات التي قدر ترغب في تغطيتها هي: الأعياد، وخصوصا تلك المتعلّقة بمجال عملكإطلاق المنتجاتالإعلاناتاللقاءاتهناك بعض المواقع التي تعتبر من المصادر الرائعة التي يمكنك استخدامها للتحضير لأحداث ممتعة والاحتفال بها، مثل قسم Today in History لموقع History.net، وموقع Days of the Year. أنواع التقاويمهناك العديد من الطرق المختلفة يمكنك أن تنظم بها تقويمك للنشر على وسائل التواصل الاجتماعي اعتمادا على احتياجاتك وتفضيلاتك. طريقة العرض الشهريإنّ استخدام التقويم بطريقة العرض الشهري من الوسائل الرائعة لتتمكن من عرض المحتوى المجدول لنشره في الأسابيع القليلة المقبلة بشكل مرئي، بالإضافة إلى تسليط الضوء على بعض الأحداث الكبيرة القادمة والتي قد تحتاج إلى التركيز عليها. تصلح طريقة العرض الشهري للجداول المزدحمة أو الخفيفة. بالنسبة للجداول المزدحمة، أنصحك باستخدامها للتركيز على أكثر المنشورات أهمية لكيلا تصبح متراكمة جدا. يوضّح المثال أدناه تقويم النشر على وسائل التواصل الاجتماعي لحسابات Solo PR Pro بطريقة العرض الشهري: طريقة العرض الأسبوعي/اليومييُعرض من خلال طريقة العرض الأسبوعي الجزء الأكبر من عملك. وأفضل طريقة ليعمل تقويمك للنشر على وسائل التواصل الاجتماعي بشكل فعّال هي كتابة كل منشور لكل يوم في الأسبوع مسبقا (أو على الأقل كل منشور يُتاح لك الوقت لكتابته). وأنصحك بفعل ذلك في أبكر وقت ممكن. إذ ستُزاح عنك الكثير من الضغوط عندما تبدأ الأسبوع وقد خططت لكل شيء مسبقا. الصورة أدناه توضح مثالا على تقويم اجتماعي اسبوعي من LocalVox: ما الذي يجب تضمينه في كل تحديث؟إنّ تنسيق تقويمك هو ما يجعل عملك يسير بصورة جيّدة وفعّالة. فمن خلال وجود جميع المعلومات اللازمة محضّرة وجاهزة عند الحاجة إليها سيقلل من الوقت الذي تستغرقه في النشر. فيما يلي بعض المعلومات التي يمكنك إدراجها في التقويم: التاريخالوقتالنص الذي ستنشرهالرابطرابط الوسائط المتعددةعدّاد الحروف (خاص بتويتر)فإذا كانت جميع المنشورات التي قمت بتحضيرها تحتوي على كل هذه المعلومات، كل ما يتبقى لك فعله هو نسخها ولصقها جميعا. ما الذي يجب تعقبه/تقييمه؟بعد أن انتهيت من إعداد تقويمك وبدأت بالاعتياد على إيقاع النشر، ربّما ترغب بإضافة عنصر آخر إلى تقويمك، كوسيلة لتعقّب أداء منشوراتك لكي تتمكن من تحديث خطة النشر وفقا لذلك. Google Analyticsتحليلات جوجل هي من الأدوات الرائعة لتعقّب الشبكة الاجتماعية التي ترسل أغلب التدفق traffic، بالإضافة إلى المحتوى الأكثر شعبية والذي يولّد أغلب العملاء المحتملين. الصورة أدناه توضّح الشبكات الاجتماعية التي ترسل التدفق إلى مدونة Buffer حسب تحليلات جوجل. كما تلاحظ، فإنّ فيس بوك وتويتر هما المصدر لأغلب التدفّق إلى المدونة، وهي أيضا الشبكتان التي نركّز عليها بالدرجة الأكبر. Buffer for Business يوفرّ هذا التطبيق تحليلات رائعة لدراستها في حال كنت تستخدمه (التطبيق) لمشاركة منشوراتك على الشبكات الاجتماعية. فيما يلي بعض الرؤى insights التي استخرجناها مؤخرا لحسابنا على تويتر: قوالب تقاويم التواصل الاجتماعيتتوفر العديد من القوالب الجاهزة الرائعة لتقاويم التواصل الاجتماعي يمكنك استخدامها إن لم تكن ترغب في إنشاء تقويمك من الصفر، أو إن كنت ترغب في الحصول على بعض الإلهام. فيما يلي بعض القوالب التي يمكنك الاطلاع عليها واستخدامها: Hootsuite: من قوالب تقاويم التواصل الاجتماعي الرائعة، وهو جاهز للتنزيل والاستخدام. Hubspot: من القوالب القوية والمفصّلة. يوفّر خاصية عرض تحديثات كل شبكة اجتماعية في تبويب مختلف. قد يناسبك هذا القالب إذا كنت تحتاج إلى هذه الخاصية. Solo PR Pro: يوفّر ثلاثة أمثلة من التقاويم اعتمادا على احتياجاتك. قد يناسبك هذا الخيار إذا كنت بحاجة إلى بعض الإلهام (ملاحظة: الصورة أعلاه هي إحدى قوالب Solo PR Pro). LocalVox: من القوالب الأخرى الجيدة، والذي يوفر العرض الشهري لجميع شبكاتك الاجتماعية على صفحة واحدة. الأدوات اللازمة لإنشاء تقويم التواصل الاجتماعي بنفسكهناك مختلف الأدوات التي يمكن أن تساعدك في إنشاء وإدارة تقويمك للنشر على وسائل التواصل الاجتماعي. لنلقِ نظرة على بعضها. Excelربّما يكون اكسل من الأدوات الأكثر شعبية لإنشاء وإدارة تقاويم التواصل الاجتماعي، فهو متنوّع الخصائص ويمكن تشكيله بالشكل الأفضل الذي يناسبك. شخصيا، أفضل العمل بجداول بيانات جوجل، خصوصا لأنني أستطيع الوصول إليها من أي مكان ما دمت متصلة بالإنترنت، والتعاون في العمل عليها إذا لزم الأمر. Google calendarتقويم جوجل من الأدوات الرائعة أيضا، وخصوصا لأنّه يأتي بشكل تقويم من الأصل. وهو يتيح لك أيضا اختيار ألوان مختلفة لتمييز تقاويم مختلفة. تُعتبر هذه الأداة مفيدة على وجه الخصوص لجداول وسائل التواصل الاجتماعي الخفيفة غير المزدحمة في الغالب، لكنها قد لا تكون الأكثر عملية إذا كنت تملك حسابات متعددة يجب عليك العمل عليها، و/أو تملك العديد من المنشورات لمشاركتها. أنصحك باستخدام تقويم جوجل لتعقّب الأحداث الخاصة مثلا، كما ذكرت في فقرة العرض الشهري. من الأمور الرائعة في هذا التقويم أنّه يمكنك وضع إشعارات لتذكير نفسك بتحضير منشورات لتلك الأحداث أو مجرد للحصول على تنبيه بسيط باقتراب موعد الحدث. يوضّح المثال أدناه كيفية استخدام تقويم جوجل من Social Media Examiner: Trelloيُعتبر Trello من المنصات الرائعة التي تتيح لك تنظيم المهام (أو أي شيء آخر) على شكل تدفق عمل مرئي لكي تتمكن من مشاهدة مشاريعك وإدارتها في لمحة. نحن في Buffer نفضّل Trello بشكل كبير، ونستخدمه لإدارة الكثير من الأمور المختلفة، من ضمنها مدونتنا. توضّح الصورة أدناه ما تبدو عليه لوحة Trello الخاصة بمدونتنا الاجتماعية: من الأمور الأخرى الرائعة بخصوص Trello أنّه يتيح لك تمكين خاصيّة التقويم والتي توفّر طريقة العرض الشهري لمهامك (تلك المهام التي لها تاريخ انتهاء). Trello من المنصات المذهلة لإنشاء منشوراتك. فكل بطاقة Trello تتيح لك كتابة نصوص، إرفاق صور، إضافة وسوم لونية، إضافة تواريخ انتهاء، وغيرها الكثير. كما أنّه يصلح لعمل الفرق لأنّه يتيح إضافة أشخاص إلى البطاقات. الصور أدناه توضّح كيف نستخدم Trello في Buffer لتخطيط التقويم الخاص بمحتوى مدونتنا الاجتماعية: تقويم التواصل الاجتماعي من Bufferلقد قمنا مؤخرا في Buffer بإطلاق تقويم التواصل الاجتماعي الذي يساعدك على الإدارة الشاملة لجميع حساباتك على الشبكات الاجتماعي وبلمحة. فإذا كنت بالفعل تستخدم Buffer ومشتركا بأحد برامجنا المدفوعة (Awesome، Business، وEnterprise)، أصبح بإمكانك الآن الاستفادة منها في إدارة تقوم التواصل الاجتماعي كذلك. بإمكانك إما أن تنشئ جميع تحديثاتك مباشرة على تقويم التواصل الاجتماعي في Buffer، أو تحضير المنشورات في وقت مسبق وبشكل منفصل ثم إضافتها إلى التقويم لتصبح جاهزة للنشر. بهذه الطريقة لن تتمكن من الحصول على فكرة مرئية حول المنشورات التي ستنشر في الأسبوع المقبل فحسب، وإنما: ستكون قادرا على تحريك المنشورات في التقويم حسب الحاجة.ستكون جميع منشوراتك مجدولة بالفعل وجاهزة للنشر بصورة تلقائية حسب الوقت الذي قمت بتعيينه، مما يوفّر لك الكثير من الوقت.توضّح الصورة أدناه ما يبدو عليها تقويم التواصل الاجتماعي من Buffer لحسابنا على تويتر: عندما أجهّز التحديثات، أجد نفسي دائما أقوم بإضافة المنشورات مباشرة في Buffer والتخطيط للأسابيع القادمة باستخدام قوائم الانتظار queue وخصائص التقويم، وهذا الأمر كان مفيدا لي على وجه الخصوص عند جدولة منشورات العطل/الأعياد في وقت مسبق. ابحث عن الصور/الفيديوهات في وقت مسبقمن الجوانب التي تستغرق وقتا طويلا للمشاركة الاجتماعية، بالإضافة إلى تحضير التحديثات، هو البحث عن الصور، الصورة المتحركة GIF، أو الفيديوهات المثالية. من الطرق التي أجدها مفيدة في تحقيق ذلك هي: البحث عن/إنشاء عناصر الوسائط المتعددة اللازمة في وقت مسبق.حفظ هذه العناصر في مجلّد إن لم تكن مستعدا لنشرها، وعندما يحين وقت النشر، كما ما عليك فعله هو الذهاب إلى ذلك المجلد ورفع الملف الصحيح.خطوة اختيارية: قم بتسمية الملفات بأسماء دلالية محددة بما في ذلك التواريخ، فهذا سيساعدك في العثور على الملف الذي تبحث عنه بشكل أسرع، وخصوصا إذا كان الملف يحتوي على الكثير من الصور.خاتمةسيسرنا أن تشاركنا أفكارك ونصائحك حول إنشاء تقويم التواصل الاجتماعي وإدامة العمل عليه. ما هي أكثر الطرق الفعالة للقيام ذلك؟ وما هي الأمور التي ما زلت تواجه صعوبة في التعامل معها؟ ترجمة -وبتصرّف- للمقال The Ultimate Guide To Creating The Perfect Social Media Calendar لصاحبته: Sandrine Sahakians.
  6. هذا الدّرس هو جزء من سلسلة دروس حول نشر تطبيقات PHP باستخدام Ansible على Ubuntu، تحدّثنا في الأجزاء الأولى عن الخطوات الأساسيّة لنشر تطبيق، وفي بقيّة الأجزاء تكلمنا عن مواضيع أكثر تقدّمًا مثل قواعد البيانات، عفاريت الطابور queue daemons، وجدولة المهام (عبر cron). سنقوم في هذا الدّرس بالبناء على ما تعلمناه في الدروس السابقة عن طريق تحويل playbook في Ansible من دعمها لتطبيق واحد إلى دعمها لنشر تطبيقات PHP متعدّدة على خادوم أو عدّة خواديم. سنستخدم تطبيقات Lumen بسيطة كجزء أمثلتنا، ولكن يُمكِن تعديل هذه التعليمات بسهولة لتدعم أطر عمل وتطبيقات أخرى في حال كانت متواجدة لديك، من المفضّل أن تستخدم تطبيقات الأمثلة حتى تجد نفسك متآلفًا مع القيام بالتغييرات لِـ playbook. الخطوة الأولى – إضافة المزيد من التطبيقاتفي هذه الخطوة سنقوم بإعداد تطبيقين إضافيين في الـ playbook لدينا. الآن وقد أعدنا تصنيع الـ playbook سنستخدم متغيرات لتعريف التطبيقات، إنّ عملية إضافة تطبيقات جديدة لخادومنا هي عملية سهلة جدًّا، نقوم بإضافتها ببساطة إلى قائمة المتغيرات applications، وهنا تظهر قوة متغيرات Ansible. نفتح playbook من أجل تحريرها: nano php.yml نبحث في أعلى القسم vars عن الكتلة applications: Existing applications variable in php.yml applications: - name: laravel domain: laravel.example.com repository: https://github.com/do-community/do-ansible-adv-php.git branch: example نضيف تطبيقين اثنين: Updated applications variable in php.yml applications: - name: laravel domain: laravel.example.com repository: https://github.com/do-community/do-ansible-adv-php.git branch: example - name: one domain: one.example.com repository: https://github.com/do-community/do-ansible-php-example-one.git branch: master - name: two domain: two.example.com repository: https://github.com/do-community/do-ansible-php-example-two.git branch: master نحفظ الـ playbook ونقوم بتشغيلها: ansible-playbook php.yml --ask-sudo-pass قد تستغرق هذه الخطوة بعض الوقت بينما يقوم الـ composer بإعداد التطبيقات الجديدة، وعندما ينتهي سنلاحظ تغيير عدد من المهام، وإن دققنا أكثر سنلاحظ أنّه سيتم عرض كل عنصر ناتج عن الحلقة، يخبرنا الأول وهو تطبيقنا الأصل بعبارة ok أو skipped، بينما يخبرنا التطبيقان الجديدان بالحالة changed. والأهم من ذلك أنّه إذا زرنا النطاقات الثلاثة لمواقعنا التي أعددناها في متصفح الإنترنت فينبغي أن نلاحظ ثلاثة مواقع مختلفة. الأول يبدو مألوفًا لنا، أما الموقعان الآخران سيعرضان: http://one.example.com/ This is example app one! http://two.example.com/ This is example app two! وبذلك قمنا بنشر تطبيقي ويب جديدين عن طريق تحديث قائمة التطبيقات ببساطة. الخطوة الثانية – استخدام متغيرات المضيفين Host Variablesسنستخرج في هذه الخطوة متغيراتنا إلى متغيرات المضيفين. بالرجوع إلى الوراء نجد أنّ متغيرات الـ playbook جيدة، ولكن ماذا لو أردنا نشر تطبيقات مختلفة على خواديم مختلفة باستخدام نفس الـ playbook؟ نستطيع عمل تحقّق شرطي على كل مهمّة لإيجاد الخادوم الذي يقوم بتشغيل المهمة، أو نستطيع استخدام متغيرات المضيفين، وهي تمامًا كما تبدو عليه: متغيرات تُطبَّق على مضيف معيّن بدلًا من كافّة المضيفين عبر الـ playbook. يمكن تعريف متغيرات المضيف سطريًّا inline بداخل الملف hosts كما فعلنا مع المتغير ansible_ssh_user أو يمكن تعريفها في ملف مخصّص لكل مضيف داخل الدليل host_vars. في البداية نقوم بإنشاء دليل جديد إلى جانب الملف hosts والـ playbook، نقوم بتسمية الدليل بـ host_vars: mkdir host_vars نحتاج بعدها إلى إنشاء ملف من أجل المضيف، الاتفاقية التي تستخدمها Ansible هي من أجل أن يتوافق اسم الملف مع اسم المضيف في الملف hosts، لذلك على سبيل المثال إن كان يبدو الملف hosts لدينا كما يلي: Ansible hosts file your_first_server_ip ansible_ssh_user=sammy فينبغي أن نقوم بإنشاء ملف يُدعى host_vars/your_first_server_ip، فلنقم بإنشائه الآن: nano host_vars/your_first_server_ip تستخدم ملفّات المضيفين YAML من أجل تنسيقها تمامًا كما هو الحال مع الـ playbooks، ويعني هذا أنّنا نستطيع نسخ القائمة applications إلى ملف المضيفين الجديد لدينا بحيث يبدو كما يلي: New host_vars/your_first_server_ip file --- applications: - name: laravel domain: laravel.example.com repository: https://github.com/do-community/do-ansible-adv-php.git branch: example - name: one domain: one.example.com repository: https://github.com/do-community/do-ansible-php-example-one.git branch: master - name: two domain: two.example.com repository: https://github.com/do-community/do-ansible-php-example-two.git branch: master نقوم بحفظ ملف المضيفين الجديد ونفتح الـ playbook لتحريرها: nano php.yml نحدّث أعلى الملف لإزالة كامل القسم applications: Updated top of php.yml --- - hosts: php sudo: yes vars: wwwuser: www-data tasks: . . . نحفظ الـ playbook ونقوم بتشغيلها: ansible-playbook php.yml --ask-sudo-pass وعلى الرغم من أنّنا نقلنا متغيراتنا من الـ playbook إلى ملف المضيفين فيجب أن يبقى الخرج نفسه ولا يجب أن يتم تبليغنا عن تغييرات من قبل Ansible، وكما نرى يعمل host_vars بنفس الطريقة التي يعمل بها vars في الـ playbook، ولكنّه مُخصّص للمضيف. ستكون المتغيرات المُعرّفة في ملفّات host_vars قابلة للوصول عبر كامل الـ playbooks التي تدير الخادوم، وهو مفيد من أجل الخيارات والإعدادات الشائعة، ومع ذلك كن حذرًا من استخدام اسم شائع قد يعني أشياء مختلفة عبر الـ playbooks المختلفة. الخطوة الثالثة – نشر التطبيقات على خادوم آخرسنستخدم في هذه الخطوة ملفات المضيفين الجديدة وننشر تطبيقاتنا على خادوم آخر. نحتاج في البداية إلى تحديث ملف المضيفين hosts بمضيفنا الجديد، نفتحه من أجل تحريره: nano hosts ونقوم بإضافة المضيف الجديد: Ansible hosts file your_first_server_ip ansible_ssh_user=sammy your_second_server_ip ansible_ssh_user=sammy نحفظ الملف ونغلقه. نحتاج بعدها إلى إنشاء ملف مضيفين جديد، كما فعلنا مع أول ملف: nano host_vars/your_second_server_ip تستطيع انتقاء واحد أو أكثر من تطبيقات مثالنا وإضافتها إلى ملف المضيف لديك، فإذا أردت مثلًا نشر مثالنا الأصلي والمثال الثاني إلى خادوم جديد فيجب أن تستخدم: New host_vars/your_second_server_ip file --- applications: - name: laravel domain: laravel.example2.com repository: https://github.com/do-community/do-ansible-adv-php.git branch: example - name: two domain: two.example2.com repository: https://github.com/do-community/do-ansible-php-example-two.git branch: master نقوم بحفظ playbook. وأخيرًا نقوم بتشغيلها: ansible-playbook php.yml --ask-sudo-pass ستستغرق Ansible وقتًا ليتم تشغيلها لأنّها تقوم بإعداد كل شيء على خادومنا الثاني، وعندما تنتهي نفتح تطبيقاتنا التي اخترناها في المتصفح (استخدمنا في هذا المثال laravel.example2.com وtwo.example2.com) وللتأكد من أنّه تم إعدادها بشكل صحيح يجب أن نرى التطبيقات المحدّدة التي اخترناها من أجل ملف المضيفين، وينبغي ألّا تحدث أيّة تغييرات على خادومنا الأصلي. الخاتمةأخذنا في هذا الدرس playbook تطبيق وحيد تعمل بشكل كامل وقمنا بتحويلها لتدعم تطبيقات متعددة عبر عدّة خواديم، وبجمعها مع المواضيع التي تمت تغطيتها في الدروس السابقة يجب أن تمتلك كل ما تحتاجه لكتابة playbook كاملة لنشر تطبيقاتك، وكما هو الحال مع الدروس السابقة فلا زلنا لم نسجل الدخول بشكل مباشر باستخدام SSH. ومن المؤكد أنك لاحظت مدى بساطة إضافة المزيد من التطبيقات والمزيد من الخواديم بعد الانتهاء من تجهيز بنية الـ playbook، وهنا تكمن قوة Ansible وهو ما يجعلها مرنة جدًّا وسهلة الاستخدام. ترجمة -وبتصرّف- لـ How To Deploy Multiple PHP Applications using Ansible on Ubuntu 14.04 لصاحبه Stephen Rees-Carter.
  7. سنواصل في هذا الدّرس حديثنا حول نشر تطبيق PHP باستخدام Ansible. هذا الدّرس هو الجزء الثّاني للسلسلة، إذا لم تقرأ الجزء الأول فمن الأفضل أن تشرع به أوّلا، حيث نُعالج فيه تثبيت Ansible وإعداده. إذا لم تكن لديك أيّة خلفية مُسبقة حول Ansible فمن الأفضل أن تبدأ مع مقال كيفيّة تثبيت وإعداد Ansible على Ubuntu. سنتحدث في هذا القسم من الدّرس عن كيفية الحصول على إطار عمل Laravel وإعداده وإعداد خادوم Nginx لتخديم تطبيق PHP. سنستخدم إطار عمل Laravel كمثال عن تطبيق PHP ولكن يُمكِن تعديل هذه التعليمات بسهولة لتدعم أطر عمل وتطبيقات أخرى في حال كانت متواجدة لديك. المتطلبات الأساسيةيبدأ هذا الدّرس مباشرة من حيث انتهى الجزء الأول من هذه السلسلة، ونحتاج كافّة الملفّات والإعدادات التي تم الحصول عليها في ذلك الجزء، إن لم تقم بإكمال أول درس من هذه السلسلة فنرجو أن تفعل ذلك قبل متابعة هذا الدّرس. الخطوة الأولى – استنساخ مستودع Gitفي هذا القسم سنقوم باستنساخ clone مستودع إطار عمل Laravel إلى الخادوم الخاص بنا باستخدام Git، سنشرح مثل الخطوة الثالثة كافّة الأقسام التي سنقوم بإضافتها إلى الـ playbook، ونضمّن بعدها كامل ملف php.yml من أجلك لتقوم بنسخه ولصقه. وقبل أن نستنسخ مستودع Git الخاص بنا نحتاج إلى التأكّد من وجود الدليل var/www/، نستطيع فعل هذا عن طريق إنشاء مهمّة مع وحدة الملف: - name: create /var/www/ directory file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700 نحتاج كما أشرنا سابقًا إلى استخدام الوحدة Git لاستنساخ المستودع إلى الخادوم الخاص بنا، وهي عمليّة بسيطة لأنّ كل ما نحتاجه بشكل طبيعي من أجل الأمر git clone هو مستودع المصدر source repository، في هذه الحالة سنعرّف أيضًا الوجهة destination ونخبر Ansible بعدم تحديث المستودع في حال وجوده مسبقًا عن طريق تعيين update=no، وبما أنّنا نستخدم Laravel سنستعمل رابط مستودع git التالي: https://github.com/laravel/laravel.git نحتاج مع ذلك إلى تشغيل المهمّة عن طريق المستخدم www-data للتأكّد من أنّ الصلاحيّات صحيحة، ولعمل هذا نستطيع إخبار Ansible أن ينفّذ الأمر كمستخدم محدّد باستخدام sudo، ستبدو المهمّة النهائية كما يلي: - name: Clone git repository git: > dest=/var/www/laravel repo=https://github.com/laravel/laravel.git update=no sudo: yes sudo_user: www-data ملاحظة: من أجل المستودعات المعتمدة على SSH نستطيع إضافة accept_hostkey=yes لمنع التحقّق من المضيف على SSH من تعليق المهمّة. نفتح الملف php.yml لتحريره: nano php.yml نضيف المهام السابقة إلى الـ playbook، يجب أن يبدو الملف النهائي كما يلي: ... - name: enable php5 mcrypt module shell: php5enmod mcrypt args: creates: /etc/php5/cli/conf.d/20-mcrypt.ini - name: create /var/www/ directory file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700 - name: Clone git repository git: > dest=/var/www/laravel repo=https://github.com/laravel/laravel.git update=no sudo: yes sudo_user: www-data handlers: - name: restart php5-fpm service: name=php5-fpm state=restarted - name: restart nginx service: name=nginx state=restarted نحفظ الـ playbook ونغلقها، ثمّ نقوم بتشغيلها: ansible-playbook php.yml --ask-sudo-pass الخطوة الثانية – إنشاء تطبيق باستخدام Composerسنستخدم في هذه الخطوة Composer لتثبيت تطبيق PHP واعتمادياته dependencies. يمتلك Composer الأمر create-project الذي يقوم بتثبيت كافّة الاعتماديات المطلوبة ومن ثمّ يُشغِّل خطوات إنشاء المشروع المُعرَّفة في القسم post-create-project-cmd من الملف composer.json، وهي الطريق المفضّلة للتأكّد من إعداد التطبيق بشكل صحيح لاستخدامه لأول مرّة. نستطيع استخدام مهمّة Ansible التالية لتنزيل وتثبيت Composer بشكل عمومي كـ usr/local/bin/composer/، سيكون بعدها قابلًا للنفاذ من قبل أي شخص يستخدم الخادوم بما فيهم Ansible: - name: install composer shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer args: creates: /usr/local/bin/composer ومع وجود Composer مُثبّتًا لدينا فهنالك وحدة لـ Composer يُمكننا استخدامها، في حالتنا نريد إخبار Composer عن مكان مشروعنا (باستخدام المُعامِل working_dir)، ونريد أيضًا تنفيذ الأمر create-project، نحتاج أيضًا لإضافة المُعامِل optimize_autoloader=no لأنّ هذا العَلَم غير مدعوم من قبل الأمر create-project، وكما في حالة الأمر git يجب علينا تنفيذ هذا عن طريق المستخدم www-data للتأكّد من صلاحيّة الأذونات permissions، وبوضع كل ذلك معًا نحصل على هذه المهمّة: - name: composer create-project composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no sudo: yes sudo_user: www-data ملاحظة: قد تستغرق المهمّة create-project قدرًا كبيرًا من الوقت على خادوم جديد، حيث يمتلك الـ Composer ذاكرة تخزين مؤقّت فارغة ويحتاج إلى تنزيل كل شيء من جديد. نفتح الآن الملف php.yml لتحريره: nano php.yml نضيف المهام السابقة في نهاية القسم tasks فوق handlers بحيث تتوافق نهاية الـ playbook مع التالي: ... - name: Clone git repository git: > dest=/var/www/laravel repo=https://github.com/laravel/laravel.git update=no sudo: yes sudo_user: www-data - name: install composer shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer args: creates: /usr/local/bin/composer - name: composer create-project composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no sudo: yes sudo_user: www-data handlers: - name: restart php5-fpm service: name=php5-fpm state=restarted - name: restart nginx service: name=nginx state=restarted نقوم أخيرًا بتشغيل الـ playbook: ansible-playbook php.yml --ask-sudo-pass ما الذي سيحدث إن قمنا بتشغيل Ansible مرّة أخرى الآن؟ سيتم تشغيل composer create-project مرّة أخرى، وفي حالة Laravel يعني هذا APP_KEY جديد، لذا نريد بدلًا من ذلك تعيين المهمّة لتعمل فقط بعد استنساخ clone جديد، نستطيع ضمان أنّها تعمل فقط مرّة واحدة عن طريق تسجيل متغيّر يحتوي نتائج المهمّة git clone ومن ثمّ التحقّق من هذه النتائج داخل المهمّة composer create-project، إن تمّ تغيير المهمّة git clone فسيتم تنفيذ composer create-project، أمّا إن لم يحدث ذلك فسيتم تخطّيها. ملاحظة: يبدو أنّه يوجد خطأ برمجي في بعض إصدارات وحدة composer في Ansible، وربّما تعيد الخَرْج OK بدلًا من Changed، حيث تتجاهل أنّه تمّ تنفيذ scripts على الرغم من أنّه لم يتم تثبيت اعتماديات. نفتح الملف php.yml من أجل تحريره: nano php.yml نبحث عن المهمّة git clone، نضيف الخيار register لحفظ نتائج المهمّة إلى المتغير cloned كما يلي: - name: Clone git repository git: > dest=/var/www/laravel repo=https://github.com/laravel/laravel.git update=no sudo: yes sudo_user: www-data register: cloned </code>نبحث بعدها عن المهمّة composer create-project، نضيف الخيار when للتحقّق من المتغيّر cloned لنرى إن تغيّرت قيمته أم لا: - name: composer create-project composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no sudo: yes sudo_user: www-data when: cloned|changed نقوم بحفظ الـ playbook وتشغيلها: ansible-playbook php.yml --ask-sudo-pass سيوقف الـ Composer الآن تغيير APP_KEY في كل مرّة يتم تشغيله فيها. الخطوة الثالثة – تحديث متغيرات البيئةفي هذه الخطوة سنقوم بتحديث متغيّرات البيئة Environment Variables من أجل تطبيقنا. يأتي Laravel مع ملف env. بشكل افتراضي والذي يقوم بتعيين قيمة APP_ENV إلى local وقيمة APP_DEBUG إلى true، نحتاج إلى تبديل هذه القيم إلى production و false على الترتيب، يُمكِن فعل هذا ببساطة باستخدام الوحدة lineinfile مع المهام التالية: - name: set APP_DEBUG=false lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false - name: set APP_ENV=production lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production نفتح الملف php.yml لتحريره: nano php.yml نضيف هذه المهمّة إلى الـ playbook، يجب أن تبدو نهاية الملف متطابقة مع التالي: ... - name: composer create-project composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no sudo: yes sudo_user: www-data when: cloned|changed - name: set APP_DEBUG=false lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false - name: set APP_ENV=production lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production handlers: - name: restart php5-fpm service: name=php5-fpm state=restarted - name: restart nginx service: name=nginx state=restarted نقوم بحفظ الـ playbook وتشغيلها: ansible-playbook php.yml --ask-sudo-pass إنّ الوحدة lineinfile مفيدة جدًا من أجل التطويعات tweaks السريعة لأي ملف نصّي، وهي رائعة للتأكّد من تعيين متغيّرات بيئة كهذه بشكل صحيح. الخطوة الرابعة – إعداد Nginxسنقوم في هذا القسم بإعداد Nginx لتخديم تطبيق PHP. إن زرت الآن الخادوم الخاص بك في متصفّح الإنترنت (على سبيل المثال http://your_server_ip )، فسترى صفحة Nginx الافتراضيّة بدلاً من صفحة المشروع الجديد في Laravel، حدث هذا لأنّنا لا زلنا نحتاج إلى إعداد خادوم ويب Nginx لدينا لتخديم التطبيق من الدليل var/www/laravel/public/، لفعل هذا نحتاج لتحديث إعدادات Nginx الافتراضيّة بهذا الدليل وإضافة دعم من أجل php-fpm بحيث يستطيع التعامل مع PHP scripts. نقوم بإنشاء ملف جديد يُدعى nginx.conf: nano nginx.conf نحفظ كتلة الخادوم التالية بداخل هذا الملف، تستطيع متابعة الخطوة الرابعة من هذا الدّرس من أجل المزيد من التفاصيل حول إعدادات Nginx، تُحدِّد التعديلات التالية مكان دليل Laravel العام وتتحقّق من استخدام Nginx لاسم المضيف الذي عرّفناه في الملف hosts كـ server_name مع المتغيّر inventory_hostname. nginx.conf server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /var/www/laravel/public; index index.php index.html index.htm; server_name {{ inventory_hostname }}; location / { try_files $uri $uri/ =404; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/laravel/public; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } نحفظ الملف nginx.conf ونغلقه. بإمكاننا الآن استخدام وحدة القالب template module لدفع ملف الإعدادات الجديدة عبرها، تبدو وحدة template مشابهة جدًا للوحدة copy، ولكن يوجد فرق كبير بينهما، فالوحدة copy ستنسخ ملف أو عدّة ملفّات بدون القيام بأيّة تغييرات، بينما تنسخ الوحدة template ملفًّا واحدًا وتقوم بتحليل كافّة الملفّات الموجودة بداخله، ولأنّنا استخدمنا {{ inventory_hostname }} داخل ملف إعداداتنا سنستخدم الوحدة template بحيث يتم تحليلها بداخل عنوان IP الذي استخدمناه في الملف hosts، وبهذه الطريقة لا يتوجّب علينا كتابة شيفرة محدّدة لملفّات الإعدادات التي تستخدمها Ansible. ومع ذلك فكما هو معتاد عند كتابة المهام نحتاج إلى أن نأخذ بعين الاعتبار ما سيحدث على الخادوم، ولأنّنا نقوم بتغيير إعدادات Nginx نحتاج لإعادة تشغيل Nginx و php-fpm، يتم هذا باستخدام الخيار notify: - name: Configure nginx template: src=nginx.conf dest=/etc/nginx/sites-available/default notify: - restart php5-fpm - restart nginx نفتح ملف php.yml: nano php.yml نضيف مهمّة nginx هذه في نهاية قسم المهام، ينبغي أن يبدو الملف php.yml كما يلي: php.yml --- - hosts: php sudo: yes tasks: - name: install packages apt: name={{ item }} update_cache=yes state=latest with_items: - git - mcrypt - nginx - php5-cli - php5-curl - php5-fpm - php5-intl - php5-json - php5-mcrypt - php5-sqlite - sqlite3 - name: ensure php5-fpm cgi.fix_pathinfo=0 lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0 notify: - restart php5-fpm - restart nginx - name: enable php5 mcrypt module shell: php5enmod mcrypt args: creates: /etc/php5/cli/conf.d/20-mcrypt.ini - name: create /var/www/ directory file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700 - name: Clone git repository git: > dest=/var/www/laravel repo=https://github.com/laravel/laravel.git update=no sudo: yes sudo_user: www-data register: cloned - name: install composer shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer args: creates: /usr/local/bin/composer - name: composer create-project composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no sudo: yes sudo_user: www-data when: cloned|changed - name: set APP_DEBUG=false lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false - name: set APP_ENV=production lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production - name: Configure nginx template: src=nginx.conf dest=/etc/nginx/sites-available/default notify: - restart php5-fpm - restart nginx handlers: - name: restart php5-fpm service: name=php5-fpm state=restarted - name: restart nginx service: name=nginx state=restarted نقوم بحفظ الـ playbook وتشغيلها مرّة أخرى: ansible-playbook php.yml --ask-sudo-pass حالما تكتمل نعود إلى متصفحنا ونقوم بتحديثه، ينبغي أن نرى الآن صفحة المشروع الجديد في Laravel. الخاتمةيُغطّي هذا الدرس نشر تطبيق PHP مع مستودع عام، وبينما يكون هذا مثاليًّا من أجل تعلّم كيفيّة عمل Ansible، فإنّك لن تعمل دائمًا على مشاريع مفتوحة المصدر بشكل كامل مع مستودعات مفتوحة، ويعني هذا أنّك ستحتاج إلى استيثاق git clone في الخطوة الثالثة مع مستودعك الخاص، يُمكِن فعل هذا بسهولة باستخدام مفاتيح SSH. على سبيل المثال بعدما تقوم بإنشاء وإعداد مفاتيح نشر SSH على مستودعك تستطيع استخدام Ansible لنسخها وإعدادها على خادومك قبل مهمّة git clone: - name: create /var/www/.<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr>/ directory file: dest=/var/www/.<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr>/ state=directory owner=www-data group=www-data mode=0700 - name: copy private <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr> key copy: src=deploykey_rsa dest=/var/www/.<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr>/id_rsa owner=www-data group=www-data mode=0600يجب أن يسمح هذا للخادوم بالاستيثاق بشكل صحيح ونشر تطبيقك. لقد قمنا للتو بنشر تطبيق PHP بسيط على خادوم ويب Nginx معتمد على Ubuntu باستخدام Composer لإدارة الاعتماديّات، وتمّ كل هذا بدون الحاجة للدخول مباشرة إلى الخادوم الخاصّ بنا وتنفيذ أي أمر بشكل يدوي. ترجمة -وبتصرّف- لـ How To Deploy a Basic PHP Application Using Ansible on Ubuntu 14.04 لصاحبه Stephen Rees-Carter.
  8. ستغطّي هذه السّلسلة عمليّة نشر تطبيق PHP بسيط باستخدام Ansible، الهدف النّهائي سيكون الحصول على خادوم ويب جديد يُخدِّم تطبيق PHP بسيط بدون أي اتصال عبر SSH أو تشغيل يدوي للأوامر على الخادوم الهدف، سنغطي في هذا القسم من الدرس تثبيت Ansible وإعداد البيئة بشكل عام. سنستخدم إطار عمل Laravel كمثال عن تطبيق PHP ولكن يُمكِن تعديل هذه التعليمات بسهولة لتدعم أطر عمل وتطبيقات أخرى في حال كانت متواجدة لديك. المتطلبات الأساسيةسنستخدم Ansible لتثبيت وإعداد Nginx، PHP، وخدمات أخرى على خادوم Ubuntu 14.04 ، يعتمد هذا الدّرس على معرفتك الأساسية بـ Ansible لذا إن كنت جديدًا عليها فبإمكانك قراءة درس Ansible الأساسي أولًا. ستحتاج لمتابعة هذا الدّرس إلى: خادوم Ubuntu 14.04 بأي حجم والذي سنستخدمه لإعداد ونشر تطبيق PHP الخاص بنا عليه، ستتم الإشارة إلى عنوان IP هذا الجهاز بـ your_server_ip خلال هذا الدّرس.خادوم Ubuntu 14.04 والذي سنستخدمه من أجل Ansible، وهو الخادوم الذي سنبقى في وضعية تسجيل دخول عليه في كامل هذا الدّرس.إعداد مستخدم غير جذري مع صلاحيّات sudo لكل خادوم.مفاتيح SSH من أجل خادوم Ansible لتصريح تسجيل الدخول على خادوم نشر PHP، ويُمكِن إعدادها باتّباع هذه السلسلة وتطبيقها على خادوم Ansible الخاص بنا.الخطوة الأولى – تثبيت Ansibleيُمكِن إنجاز هذه الخطوة بسهولة عن طريق تثبيت PPA (أرشيف الحِزَم الشخصي Personal Package Archive) وتثبيت حزمة Ansible باستخدام apt. نُضيف أوّلًا PPA باستخدام الأمر apt-add-repository: sudo apt-add-repository ppa:ansible/ansibleوبعد انتهائه نقوم بتحديث ذاكرة التخزين المؤقّت cache لـ apt: sudo apt-get update نقوم بتثبيت Ansible أخيرًا: sudo apt-get install ansibleحالما يتم تثبيت Ansible نقوم بإنشاء دليل جديد للعمل بداخله وضبط الإعدادات الأساسيّة، تستخدم Ansible افتراضيًّا ملف مضيفين hosts موجود في المسار etc/ansible/hosts/، وهو يحتوي كافّة الخواديم التي يُديرها، وبينما يكون هذا الملف مناسبًا لبعض حالات الاستخدام فهو عام global، وهو ما لا نريده هنا. سنقوم من أجل هذا الدّرس بإنشاء ملف مضيفين محلّي local واستخدامه بدلًا من الملف السابق، نستطيع فعل هذا عن طريق إنشاء ملف إعدادات Ansible جديد بداخل دليل العمل لدينا، والذي بإمكاننا استخدامه لإخبار Ansible بأن تبحث عن ملف المضيفين داخل نفس الدليل. نُنشِئ مُجلّدًا جديدًا (سنستخدمه لبقيّة هذا الدّرس): mkdir ~/ansible-php ننتقل إلى داخل المُجلّد الجديد: cd ~/ansible-php/نُنشِئ ملفًّا جديدًا يُدعى ansible.cfg ونفتحه من أجل تحريره باستخدام nano أو أي مُحرِّر نصوص تفضله: nano ansible.cfgنضيف خيار الإعدادات hostfile مع القيمة hosts في المجموعة [defaults] عن طريق نسخ ما يلي إلى الملف ansible.cfg: ansible.cfg [defaults] hostfile = hostsنحفظ الملف ansible.cfg ونغلقه، نقوم بعدها بإنشاء الملف hosts والذي يحتوي على عنوان IP لخادوم PHP حيث سيتم نشر تطبيقنا. nano hostsننسخ ما يلي لإضافة قسم من أجل php مع وضع عنوان IP الخاص بخادومك بدلًا من your_server_ip ووضع اسم المستخدم غير الجذري الذي قمت بإنشائه في المتطلبات الأساسيّة على خادوم PHP بدلًا من sammy: hosts [php] your_server_ip ansible_ssh_user=sammy نحفظ ونغلق الملف hosts، فلنقم بإجراء تحقّق أبسط للتأكد من قدرة Ansible على الاتصال بالمضيف كما هو متوقّع عن طريق استدعاء الوحدة ping على المجموعة php الجديدة: ansible php -m pingربّما تحصل على تحقّق من استيثاق مُضيف SSH اعتمادًا على كونك قد سجلّت الدخول إلى هذا المُضيف من قبل، ينبغي أن تعود ping باستجابة ناجحة تبدو كما يلي: Output 111.111.111.111 | success >> { "changed": false, "ping": "pong" تمّ الآن تثبيت وإعداد Ansible بنجاح، نستطيع الانتقال إلى إعداد خادوم الويب لدينا. الخطوة الثانية – تثبيت الحزم المطلوبةسنقوم في هذه الخطوة بتثبيت بعض حِزَم النظام المطلوبة باستخدام Ansible و apt، سنثبت تحديدًا git، nginx، sqlite3، mcrypt، وبعض حِزَم php5-*. نحتاج قبل إضافة الوحدة apt لتثبيت الحِزَم التي نريدها إلى إنشاء playbook بسيط (وهو عبارة عن قواعد تُحدِّد إعدادات Ansible)، سنبني على هذا الـ playbook مع تقدّمنا في هذا الدّرس، نقوم بإنشاء playbook جديد يُدعى php.yml: nano php.yml نلصق الإعدادات التالية، يُحدِّد أول سطرين مجموعة المضيفين التي نرغب باستخدامها (php) وتتحقّق من أنّها تنفّذ الأوامر باستخدام sudo افتراضيًّا، تُضيف باقي الأسطر وحدة بالحِزَم التي نحتاجها، تستطيع تخصيصها من أجل تطبيقاتك الخاصّة أو استخدام الإعدادات التالية إن كنت تتبع مثال تطبيق Laravel: --- - hosts: php sudo: yes tasks: - name: install packages apt: name={{ item }} update_cache=yes state=latest with_items: - git - mcrypt - nginx - php5-cli - php5-curl - php5-fpm - php5-intl - php5-json - php5-mcrypt - php5-sqlite - sqlite3نحفظ الملف php.yml، ونقوم أخيرًا بتشغيل ansible-playbook لتثبيت الحِزَم على الخادوم، يجب ألّا ننسى استخدام الخيار --ask-sudo-pass إن كان يتطلّب مستخدم sudo على خادوم PHP كلمة سر: ansible-playbook php.yml --ask-sudo-passالخطوة الثالثة – تعديل ملفات إعدادات النظامسنقوم في هذا القسم بتعديل بعض ملفّات إعدادات النظام على خادوم PHP، أهم خيار إعدادات يُمكِن تغييره (بغض النظر عن ملفّات Nginx، والتي سيتم تغطيتها في خطوة لاحقة) هو الخيار cgi.fix_pathinfo في php5-fpm، لأنّ القيمة الافتراضيّة له تُشكِّل خطرًا أمنيًّا. سنوضّح أوّلًا جميع الأقسام التي سنضيفها إلى هذا الملف، ونضمّن بعدها كامل الملف php.yml من أجلك لكي تقوم بنسخه ولصقه. يُمكِن استخدام الوحدة lineinfile للتأكّد من أنّ قيمة الإعدادات ضمن الملف مطابقة تمامًا لما نتوقعه، يُمكِن عمل هذا باستخدام تعبير نمطي regular expression عام بحيث تتمكّن Ansible من فهم معظم الصيغ التي من المحتمل أن يكون فيها المُعامِل، سنحتاج أيضًا لإعادة تشغيل php5-fpm وnginx لضمان تطبيق التغييرات، لذا نحتاج إلى إضافة مُداوِلَين handlers اثنين أيضًا في قسم جديد للمداولات handlers، تكون المداولات مثاليّة لهذا لأنّه يتم إطلاقها فقط عند تغيير المهمّة، ويتم أيضًا تشغيلها في نهاية الـ playbook، لذا يُمكن لمهام متعدّدة استدعاء نفس المُداوِل وسيعمل فقط مرّة واحدة. يبدو القسم الذي يُنفِّذ ما سبق كما يلي: name: ensure php5-fpm cgi.fix_pathinfo=0 lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0 notify: - restart php5-fpm - restart nginx handlers: - name: restart php5-fpm service: name=php5-fpm state=restarted - name: restart nginx service: name=nginx state=restartedملاحظة: خطأ برمجي bug في إصدار Ansible 1.9.1 يوجد خطا برمجي في إصدار Ansible 1.9.1 يمنع php5-fpm من إعادة تشغيلها مع الوحدة service، وقد استخدمنا هذا في مُداولاتنا. وحتى يتم إصدار إصلاح له نستطيع الالتفاف على هذه المشكلة عن طريق تغيير المُداوِل restart php5-fpm من استخدام الأمر service إلى استخدام الأمر shell كما يلي: - name: restart php5-fpm shell: service php5-fpm restartسيتجاوز هذا المشكلة ويعيد تشغيل php5-fpm بشكل صحيح. نحتاج بعد ذلك أيضًا إلى التأكّد من تمكين الوحدة php5-mcrypt، يُمكن فعل هذا عن طريق تنفيذ script يُدعى php5enmod باستخدام صدفة المهام shell task والتحقّق من وجود الملف 20-mcrypt.ini في مكانه عند تمكينه، لاحظ أنّنا نخبر Ansible أنّ المهمّة تقوم بإنشاء ملف مُحدَّد، فإن كان هذا الملف موجودًا فلن يتم تشغيل المهمّة: name: enable php5 mcrypt module shell: php5enmod mcrypt args: creates: /etc/php5/cli/conf.d/20-mcrypt.iniنفتح الآن الملف php.yml لتحريره مرّة أخرى: nano php.ymlنضيف المهام والمداولات السابقة بحيث يتطابق الملف مع التالي: --- - hosts: php sudo: yes tasks: - name: install packages apt: name={{ item }} update_cache=yes state=latest with_items: - git - mcrypt - nginx - php5-cli - php5-curl - php5-fpm - php5-intl - php5-json - php5-mcrypt - php5-sqlite - sqlite3 - name: ensure php5-fpm cgi.fix_pathinfo=0 lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0 notify: - restart php5-fpm - restart nginx - name: enable php5 mcrypt module shell: php5enmod mcrypt args: creates: /etc/php5/cli/conf.d/20-mcrypt.ini handlers: - name: restart php5-fpm service: name=php5-fpm state=restarted - name: restart nginx service: name=nginx state=restarted نقوم أخيرًا بتشغيل playbook: ansible-playbook php.yml --ask-sudo-pass يمتلك الآن الخادوم كافّة الحِزَم المطلوبة مُثبّتة عليه ومجموعة الإعدادات الأساسيّة جاهزة للانطلاق. الخاتمةتحدثنا في القسم الأول من هذا الدّرس عن طريقة تثبيت Ansible وإعداد البيئة بشكل عام من أجل التحضير لعمليّة نشر تطبيق PHP بسيط باستخدام Ansible، وسنكمل في القسم الثاني الحصول على Laravel وإعداده وإعداد خادوم Nginx لتخديم تطبيق PHP. ترجمة -وبتصرّف- لـ How To Deploy a Basic PHP Application Using Ansible on Ubuntu 14.04 لصاحبه Stephen Rees-Carter.
  9. وصلتني مؤخّرًا رسالة من قارئ يسأل عن عدد التّدوينات التي يجب أن ينشرها على مُدوّنته ونوعيتها. وبحكم أن التّدوين يُعتبر وسيلة تسويقة ضرورية ارتأيت أن أُخصّص مقالّا للأمر. أكثر من 66% من المدونات لم يتم تحديثها لمدة تزيد عن الشهرين، فيما يتم هجران 60 إلى 80% من المدونات بعد الشهر الأول، من السهل أن تتحول المدونة من فكرة جيدة إلى أمر يسبب الارتباك والحيرة. المشكلة الرئيسية أن التدوين يحتاج إلى جهد وعمل أكثر مما يتوقعه الناس، وكتابة المحتوى عالي الجودة بشكل منتظم ولفترة طويلة هو تحدٍ كبير، والكثير من الأفراد والمنظمات يجدون صعوبة في الاستمرار. الكثير من المدونين يسعون بشدة من أجل إخراج تدويناتهم بشكل سليم، ويشعرون بضغوطات تجعلهم يحرصون على النشر بشكل منتظم، لكن وفي نفس الوقت فإنهم يرغبون بالمحافظة على جودة المحتوى الذي ينشرونه. هناك سؤال مهم طرحه أحد الأشخاص وهو يعكس نظرة الكثير من المدونين: أشعر بأن صاحب السؤال حريص على تخفيف الأعباء عن نفسه وأتفهم ذلك دون شك، ولكن هذا الأمر قد يقلل من فاعلية مدونته. لنقم بمناقشة سؤالين مهمين ذكرهما السائل. هل ما زلت بحاجة إلى النشر المتكرر والمنتظم؟السائل كان محقا عندما قال بأن الفكر السائد هو أن على المدون نشر تدوينات جديدة بشكل متكرر ومنتظم، ولكني اعتقد بأن الهدف من هذا الأمر أكثر من مجرد جذب القراء للعودة لمدونتك. كم التدوينات والانتظام في نشرها يعتمد بشكل كبير على السبب الرئيسي الذي يدفعك للتدوين، فإذا كنت تقوم بالتدوين فقط لأنك تجد متعة في هذا الأمر فإن نقطة النشر المتكرر والمنتظم لا أهمية لها، ولكن إن كنت تدون لأسباب تجارية أو لبناء سمعة جيدة لنفسك فإن لهذا الأمر أهمية كبرى دون شك. التدوين هو وسيلة فعّالة لتبقي علامتك التجارية في ذاكرة الآخرين بشكل دائم (سواء كانت علامة شخصية أو تجارية). كمثال على ذلك، لو كنت أنا أقوم بالنشر مرة كل عدة أشهر لكنت سأذهب من ذاكرتك في وقت قريب ولن أحظى بفرصة للحصول على دعوة منك للعمل على المشروع الإلكتروني الذي تنفذه، وفي المقابل إذا كنت تقوم بالنشر بشكل منتظم فإن المتابعين سيفتقدونك في حال غيابك. مثلا في كل مرة أتوقف فيها عن النشر مدة أسبوع أتلقى دائما رسائل بريدية من أشخاص يبينون افتقادهم لما أنشر، وهذا يدل على أن حتى غياب المنشور الواحد الذي تعتاد على نشره بشكل منتظم سيبقي العلامة الخاصة بك في ذاكرة المتابعين. بالطبع فإن النقطة التي ذكرها السائل بخصوص التغذيات RSS feeds صحيحة، حيث أنه ومع استخدام هذه التقنية أصبح الاهتمام أقل بمحاولة جذب الزوار للرجوع لموقعك، ولكن عليك الحذر من وضع الافتراضات. نعم، إذا كنت تبحث عن القراء المهووسين بما تنشر فإنك لن تكون بحاجة للنشر المنتظم والمستمر كما في الحالات الأخرى، ولكن إذا كنت تبحث عن العامة فإني لست متأكدا إذا كانت التغذيات وحدها تكفي. التغذيات لا زالت بعيدة عن الانتشار الكافي، والكثير من الأشخاص لا يعرفون كيفية الحصول على التنبيهات من خلالها. هناك مناقشات لا تحصى على شبكة الإنترنت بخصوص كم التدوينات المناسب، ولأكون صريحا فإنه لا يوجد جواب وحيد لهذا السؤال، فالأمر يعتمد على مجموعة من العوامل ومنها الجمهور المستهدف وموضوع المدونة وكذلك مدى شهرتها. بالنسبة لي فأنا أشجع الأكثرية على التدوين مرة واحدة أسبوعيا على الأقل، ولكن بالطبع إذا كانت لديك مدونة تتمتع بشهرة عالية فإن الرقم قد يكون تدوينتان أو ثلاث يوميا! في كل الأحوال فإن التدوين لا يعتمد على الكم فقط بل أيضا على جودة المحتوى، وهذا يقودنا إلى القسم الثاني من السؤال الذي طرحه الشخص المذكور بالأعلى. ما هو الأهم الجودة أم الكم؟هل التركيز ينبغي أن يكون على النشر المنتظم والمستمر أو الجودة العالية للمحتوى؟ شخصيا لست متأكدا إذا كان هذا هو السؤال الصحيح الذي ينبغي طرحه، واعتقد أن السؤال ينبغي أن يكون "كيف يمكن أن أعد شيئا ذو صلة بالجمهور الذي يتابعني؟". إذا كنت تستهدف الفئة الأكاديمية بكتاباتك فإن التركيز ينبغي أن يكون على الجودة، أما إذا كنت تكتب للأصدقاء والعائلة فإنهم على الأرجح يرغبون بقراءة منشوراتك الجديدة بشكل منتظم، ولكن بالنسبة للمدونين الذين يمتلكون جمهورا بين الفئتين المذكورتين فإن هناك طرقا للاستفادة من كلا العالمين، أي الكم والجودة. لو قمت بإعداد قائمة تحتوي على عدد من أنواع التدوينات التي يمكن أن تنشرها في مدونتك، ستجد أنه ينبغي التركيز على الجودة بالنسبة لبعض التدوينات، بينما البعض الأخر يمكن كتابته بشكل سهل وسريع وبالتالي يمكن نشره بشكل منتظم. في مدونتي هذه على سبيل المثال، بعض المنشورات تحتوي على الكثير من التفاصيل وهذا يحتاج إلى الكثير من الوقت لإنهائها، وهناك بعض المنشورات المتعلقة بطرح الآراء حول موضوع معين كما هو الحال في هذا المقال، وهذا النوع ينشر باستمرار أكثر من النوع الأول ولكنه أقل تفصيلا، وأخيرا هناك روابط تنشر لمصادر أخرى وهذه تحتاج ثوانٍ فقط لنشرها والتعليق عليها ولهذا فإن هذا النوع ينشر بشكل أكثر انتظاما. باستخدام هذه النماذج المتعددة للمنشورات ستضمن النشر المستمر بدون أن تفقد جودة المحتوى. الخلاصةهناك الكثير من الأمور التي يمكن قولها حول التدوين، وبالفعل فإن هناك كتب قد نشرت حول هذا الموضوع، ولكن للإجابة على السؤال الذي طرحه السائل فأنا اعتقد بشدة بأن النشر المستمر والمنتظم لا زال في غاية الأهمية، ولكن التحدي هو أن تنجز ذلك بدون المساس بالجودة بشكل كبير، وتقسيم التدوينات إلى نماذج متعددة سيساعدك في هذا الأمر ولكن باستطاعتك أيضا أن تحصل على مساعدة من آخرين للنشر معك. الجانب السلبي الوحيد حسب خبرتي بأن الكثير من الأشخاص الذين يعرضون المساعدة في النشر يفشلون في تقديمه بالشكل الجيد. ترجمة وبتصرف للمقال How much to blog? لصاحبه Paul Boag. حقوق الصورة البارزة: Designed by Freepik.
  10. Ajenti هي لوحة تحكّم عبر الويب حرّة ومفتوحة المصدر يمكن استخدامها لتنفيذ مجموعة كبيرة ومتنوعة من مهام إدارة الخوادم، علاوةً على إمكانية تغطيتها لمجموعة أخرى من المهام عبر تركيب إضافات add-ons كإضافة Ajenti V والتي تسمح بإدارة عدّة مواقع من خلال لوحة تحكم واحدة. المتطلباتفي هذا الدرس ستحتاج إلى: عنوان نطاق domain مُسجّل ومربوط مع خادوم مُثبّت عليه لوحة التحكم Ajenti مع الإضافة Ajenti V (خلال الدرس سأستخدم النطاق example.com للتوضيح).لوحة التحكم Ajenti مُثبتة ومضبوطة بشكل صحيح مع الإضافة Ajenti V، يمكنك قراءة هذا الدرس لتثبيت Ajenti خطوة بخطوة.ضبط عنوان النطاقيُفترض هنا أنك تستطيع الوصول إلى لوحة تحكّم Ajenti الخاصّة بك عبر المسار https://panel.your_domain_name:8000، وقبل البدء بإعداد موقعك على الرابط http://your_domain_name وضبط عناوين البريد لنطاقك ينبغي علينا القيام ببعض تعديلات DNS الضرورية أولًا. حيث يتوجب علينا إضافة سجّلين (records) للتأكد من أن موقعك وعناوين البريد ستعمل كما ينبغي. إن كنت على DigitalOcean مثلا فاذهب إلى الرابط https://cloud.digitalocean.com/domains واضغط على زر View الأزرق (يبدو على شكل عدسة مُكبّرة) لعنوان النطاق الذي قمت بضبطته أثناء إعداد لوحة تحكم Ajenti وAjenti V. انقر على زر Add Record الأزرق ثم اختر MX، في مربع Enter Hostname النصيّ أدخل @ وأدخل الرقم 10 في مربع Enter Priority النصيّ، ثم اضغط على الزرق الأزرق Create MX Record. إذا كنتَ ستضبط عنوان النطاق الذي تستضيف عليه لوحة التحكم Ajenti فأنتَ بحاجة إلى إضافة سجل نصيّ TXT record. إن كان اسم نطاق على مزود خدمة آخر، فعليك الرجوع إلى أدلة المساعدة الخاصة بواجهة المزود لإضافة سجلّي MX و TXT بنفس الطريقة السابقة. على سبيل المثال إذا كان رابط دخول لوحة التحكم لديك يتمّ عبر المسار panel.example.com عليك حينها إضافة هذا السجل، أما لو كانت اللوحة تتبع لنطاق آخر (مثلا panel.otherdomain.com) فلستَ بحاجةٍ إلى شيء إذًا. لإضافة السجل النصيّ TXT record اضغط مجددًا على الزر الأزرق Add Record واختر TXT. في المربع النصيّ Enter Name أدخل @، وفي مربع Enter Text ألصق: v=spf1 a ip4:your_server_ip ~all (استبدل IP برقم الـIP الخاص بخادومك). اضغط أخيرًا على Create TXT Record. الآن يفترض أن تبدو إعدادات DNS الخاصة بنطاقك كهذه، انتبه أنّ عنوان نطاق سيكون بدلًا النطاق المُستخدم هنا jonaharagon.me. أما ملف المنطقة zone file فسيبدو على النحو التالي: $ORIGIN example.com. $TTL 1800 example.com. IN SOA ns1.digitalocean.com.hostmaster.example.com. 1434177047 10800 3600 604800 1800 example.com. 1800 IN NS ns1.digitalocean.com. example.com. 1800 IN NSns2.digitalocean.com. example.com. 1800 IN NS ns3.digitalocean.com. example.com. 1800 IN A 111.111.111.111 example.com. 1800 IN MX 10example.com. example.com. 1800 IN TXT v=spf1 a ip4:111.111.111.111 ~all panel.example.com. 1800 IN A 111.111.111.111 إنشاء مجلد الموقعفي متصفح الويب لديك انتقل إلى https://panel.example.com وسجّل دخولك إلى Ajenti، من الشريط الجانبي، أسفل قسم Web اختر Websites. عند الدخول الأول قد تظهر لك رسالة بأنّ الميزة غير مُفعّلة بعد، اضغط على Enable لتفعيلها والسماح لـ Ajenti V القيام بعدد من عمليات الضبط اللازمة. الآن من قسم New Website لدينا مربع نصيّ بعنوان Name يمكنك فيه كتابة أي معرّف لموقعك. اضغط على الزر Create، وستلاحظ أن موقعك الجديد قد أدرج أسفل قسم Websites في أعلى الصفحة. اضغط على Manage لإدارته. من أسفل قسم Website Files غيّر srv/new-website/ إلى أي مجلد آخر، على سبيل المثال srv/example.com/ اضغط على الزر Set ثم Create Directory. تذكّر الدليل الذي ستحدّده هنا حيث سنرفع إليه الملفات بعد قليل. ومن أسفل علامة التبويب General ألغ التحديد عن خيار Maintenance mode ثم انقر Apply changes أسفل الصفحة. الآن من علامة التبويب Domains أعلى الصفحة اضغط الزر Add واكتب عنوان النطاق الخاص بك في الحقل النصيّ الظاهر ثم انقر على Apply Changes. إنشاء/رفع ملفات الموقعالآن لدينا مجلّد خاص لملفات الموقع، ويتوجب علينا إنشاء أو رفع بعض الملفات إليه. في الشريط الجانبي وأسفل القسم Tools اختر File Manager، انقر على اسم المجلد الذي أنشأته منذ قليل للدخول إليه مثل srv/example.com/ والذي سيكون فارغًا بطبيعة الحال. هنا يمكنك رفع الملفات والمجلدات التي تريد تزويد موقعك بها. لهذا الدرس التعليمي سوف نُنشئ صفحة "!Hello world" بسيطة للموقع. اضغط على الزر New File أعلى الصفحة ليظهر أمامك ملفٌ جديد باسم new file ضمن المجلد. في نهاية السطر الخاص بالملف اضغط على زر القائمة: في حقل Name غيّر القيمة new file إلى index.html ثم اضغط على Save. افتح نفس القائمة مجددًا واختر Edit لفتح الملف ضمن المحرّر النصيّ Notepad. النصّ التالي هو مثال بسيط للتأكد فقط من أنّ كل شيء يعمل كما ينبغي، وبالتأكيد يمكنك كتابة المحتوى الذي ترغب به: <!DOCTYPE html> <html> <head> <title>This website is working!</title> </head> <body> <h1>Hello, world!</h1> <p>If you can read this correctly, your website is functional!</p> </body> </html>اضغط على Save أعلى المُحرّر، لحفظ التعديلات المُدخلة. أعد الخطوة السابقة لكتابة ملفات أخرى للموقع إن رغبت، أو استخدم مدير الملفات لرفع ملفات كنتَ قد كتبتها بالفعل على جهازك. عُد إلى File Manager ثم توجّه إلى أسفل الصفحة لتجد زرًا باسم Choose File، يمكنك من هنا رفع الملفات إلى موقعك عبر مربع اختيار بسيط. تصفّح موقعكفي متصفح الويب انتقل إلى عنوان موقعك مثل http://example.com، وحالما ترى صفحة "!Hello World" التي قمنا بإنشائها قبل قليل فهذا يعني بأن كلّ شيء يعمل كما يجب. إلى هنا نكون قد أنهينا شرح كيفية إنشاء موقع باستخدام لوحة التحكّم Ajent، سنتحدث الآن عن إنشاء عناوين بريد باستخدام نطاقك الخاص. إنشاء عناوين البريدمن لوحة تحكّم Ajenti الخاصّة بك وأسفل القسم Web انقر على Mail ثم اضغط Enable إذا طلب منك. أسفل New Mailbox يتوجب عليك ملئ عدّة خانات. أدخل في المربع النصيّ Address مُعرّف عنوان البريد الذي يَسبق عادةً الإشارة @، فإذا أدخلت sammy على سبيل المثال فسيكون عنوان البريد كاملًا sammy@example.com، هناك أيضًا قائمة منسدلة لاختيار عنوان النطاق الذي سيُسجّل البريد من خلاله فيما لو كنتَ تدير عدّة مواقع باستخدام Agenti V. أبق خانة Custom domain فارغة، وبعد ذلك انقر على + Mailbox. كما ترى فإن عنوان البريد الجديد سيظهر أسفل القسم Mailboxes ضمن الصفحة. انقر عليه ثم اختر Change password لإدخال كلمة مرور جديدة لصندوقك. اضغط على ENTER ثم Apply Changes أسفل الصفحة. الآن انتقل إلى علامة التبويب Advanced من أعلى الصفحة ومن قسم TLS حدّد صندوق التفعيل بجوارها ثم انقر على Generate new certificate بعد الانتهاء اضغط Apply changes أسفل الصفحة. تزيد هذه الخطوة من آمان اتصالك بصندوق البريد وتحسّن من توافقه مع عملاء البريد الإلكتروني. لاستقبال البريد الخاص بك يمكنك الاتصال عبر أحد عملاء سطح المكتب أو الأجهزة الذكية (مثل Outlook, Thunderbird, K-9 Mail الخ) أو يمكنك تركيب RainLoop كتطبيق وِب للوصول إلى صناديق البريد الخاصة بموقعك من خلال المتصفح عبر Ajenti. إليك أخيرًا معلومات الاتصال بصندوق البريد الخاص بك لتزويدها للعميل الذي ترغب باستخدامه: Username: user@example.com Password: your_mailbox_password IMAP Server: panel.example.com IMAP Port: 143 IMAP Encryption: STARTTLS (Accept all certificates) SMTP Server: panel.example.com SMTP Port: 25 SMTP Encryption: None الخاتمةيُفترض أنك قد نجحت الآن بإنشاء موقع ويب خاص بنطاقك بالإضافة إلى صندوق بريد من خلال لوحة التحكم Ajenti والتي تُمكّنك من إدارتهما بكلّ سهولة في الوقت عينه. ترجمة -وبتصرف- للمقال: Creating a Website and an Email Account on Ajenti V لصاحبه: Jonah Aragon.
  11. أعمل ككاتب مُستقل على عدّة مواقع حاليًا، وأدوّن على مدوّنتي أيضًا. التدوين الحر في غاية الأهمية بالنسبة إلي لأنّه في المستقبل القريب سيكون مدخل رزقي الوحيد، باعتبار أنني سوف أستقيل من عملي مع نهاية هذا العام، فالعمل بالتدوين الحر مهم بالنسبة إلي حتى أستطيع أن أعيل نفسي. ولهذا أنا أحضّر للاعتماد على العمل ككتاب مُستقل بشكل كامل بداية من العام المقبل. وما يجعل هذا الأمر صعبًا الآن هو أنني أعمل حاليًا بوظيفة بدوام كامل. وبما أنني أبحث عن معلومات متعلقة بالعمل الحر منذ مدّة فلقد أصبحت لدي خبرة لا بأس بها في هذا المجال، وسأحاول أن أنقل ما تعلمته عن العمل الحر إليكم من خلال هذا المقال . 1. تعرّف دائمًا على أشخاص جدديجب عليك التعرف إلى أناس جدد دائمًا ولا تقلّل أبدًا من مكانة أحد فأنت لا تعرف من أين يمكن أن يأتي عميلك القادم. فكلما تواصلت مع عدد أكبر من الناس كلما زادت فرص حصولك على مشاريع عمل جديدة. 2. لا تصُب كامل اهتمامك على العائد المادّيلا تصب كل تركيزك على المال الذي ستجنيه من القيام بعملٍ ما. فربما يمنحك هذا العمل فوائد أكبر من ذلك الربح المؤقت (المال). فعلى سبيل المثال ربما قيامك بهذا العمل يجلب لك معارف قيّمة ويحسن فرص حصولك على عمل على المدى البعيد . بدلاً من ذلك يمكنك التركيز على الاستمتاع بقيامك بالوظيفة الموكلة إليك، حتّى وإن قمت بذلك بسعر أقل من السّعر الذي اعتدت عليه. تذكر دائمًا أنّه إذا كنت سوف تستقيل من عملك للبحث عن حرية أكبر، مرونة ورضا أكبر كعامل مُستقل فإنّك لن ترغب في القيام بعمل لا تستمتع به. يجب عليك وضع ذلك نصب عينيك دائمًا. 3. اختر من العمل ما يناسب قدراتكهذه النقطة هامة خاصة عندما تكون مبتدئًا وسمعتك لم تترسخ بعد. فأسوء شيء يُمكنك أن تفعله هو أن تخذل عميلاً ولا تقوم بالعمل على أكمل وجه. لا تستلم أبدًا عملًا إذا كُنت تشك في قدرتك على تنفيذه على أتم وجه وتسليمه في الوقت المحدد . 4. لا تترفّع عن الأعماللا تترفّع عن الأعمال التي تُعرض عليك، ولكن هذا لا يعني أن تقبل بأي عمل تجده أمامك، بل يجب عليك دراسة كل عمل منها بدقة قبل الشّروع في تنفيذه. وتذكر، الأمر لا يتعلق بالمال فقط فالبدايات المتواضعة يُمكن أن توصلك إلى نتائج عظيمة. 5. كن ديناميكيًالا تتردّد في تقديم اقتراحات دقيقة ولبقة للعميل الذي تعمل معه. فإذا لاحظت أن هناك ثغرة في استراتيجية التّسويق الخاصة به على سبيل المثال فلا تتردد في أن تقدم عرضًا لإصلاح هذه الثغرة له. حتّى تتميّز عن باقي المُستقلين فيجب أن تقترح وتقّدم عروضك ولا تكتفي بأن تجلس محل المتفرجين وتنتظر قدوم المشاريع إليك. 6. العملاء الحاليين الذين تعمل معهم لهم الأولوية دائمًاالاحتفاظ بالعملاء الذين تعمل بالفعل معهم أسهل بكثير من البحث عن عملاء جدد. فلا تضيّع أبدا فرصة العمل مع العميل الذي يدفع بشكل مُنتظم ويجعل العمل معه سهلًا. حتّى لو كنت تريد أن تكسب مالًا أكثر وبشكل أسرع، ووجدت مشروعًا قد يوفّر لك ذلك، فكّر مرّتين قبل أن تتسرّع وتتخلّى عن العملاء الحاليّين. 7. اصنع اسمًا لنفسك أولًا ثم فكر بالمال لاحقًافي بداية العمل كمدون حر يجب لا أن يكون المال هو أولويتك الوحيدة. بعض المستقلين يعتقدون أنه يجب أن تُحدّد تسعيرًا ساعيّا جيّدًا منذ البداية، ولكن في بعض الأحيان لن يكون لديك خيار سوى أن تُقدّم بعض التنازلات على المدى القصير فيما يتعلق بذلك. ولكن لا حاجة لأن تقلق حيال ذلك، لأن علاقاتك مع عُملائك ستتطوّر وسترتفع أسعارك معها. 8. تعرّف على مُستقلّين آخرينيمكنني القول من واقع تجربتي الشخصية أن المدونين المستقلين هم مجموعة ودودة من الناس. فلقد كنت محظوظًا بالتعامل مع بعض المدونين اللطفاء. من الضرورة عليك أن تعرف زملائك المدونين جيدًا وألا تفكر بهم على أنهم منافسين لك، فلو أسست بعض العلاقات الجيدة مع زملائك المستقلين ستكون بذلك تسدي نفسك معروفًا بالحصول على أصدقاء جدُد . 9. لا تقطع جسور التّواصل مع عملائكستكون هناك بعض الأيام التي ستقع فيها مشاكل مع العملاء. ولكن عليك أن تتصرف بحكمة ورويّة عند حدوث ذلك، فيجب عليك مقاومة الرغبة في الجدال العقيم مع العميل وتضيق الخناق عليه أو حتّى أن تكتب وتنشر عن سوء العلاقة التي بينكما. فلن تكون هناك أي فائدة إن فعلت ذلك. ربما تشعر مؤقتًا بالرضا ولكن خلف ذلك ستكون هناك نتائج سلبية لما فعلته على المدى البعيد. فالعميل الذي يبدو التعامل معه صعبًا اليوم يمكن أن يزكّيك لعميل رائع غدًا، وعليه حاول دائما أن تُبقي علاقاتك مع جميع عملائك صحّية ومهنيّة. الطّريق لا تزال طويلةتلك فقط هي نصائح أوّلية لمن يرغب في العمل كمدون/كاتب مُستقل، والتي توصّلت إليها خلال بحثي في الأسابيع الماضية، ولكنني أعلم أن مازال هناك كم كبير من الأشياء التي تساعد على أن تكون ناجحًا بعملك كمستقل. ماذا عنك ؟ هل لديك أفكار ونصائح ترغب في تشاركها معنا؟ ترجمة -وبتصرّف- للمقال Freelance Writing: 9 Tips for Getting Started لكاتبه Tom Ewer.
  12. لقد كنت أفكر كثيرًا مؤخرًا عن الوقت المناسب لبداية التسويق لشركة ناشئة. في شركتي الناشئة السابقة، كنا مترددين في محاولة استقطاب الإعلام مبكراً. حيث كنا دائماً نننتظر إلى أن يصبح منتجنا "جاهزًا" أعتقد أن هذا غالبًا تفكير شائع. كي أزيل بعض المخاوف من التسويق المبكر وأزكي المنافع. سأشارك بعضًا من انطباعاتي عن مرحلة التسويق المبكر بناءً على تجربتي مع شركتي الناشئة حاليًا: Buffer. لم نتردد في التسويق في مرحلة مبكرة؟مثل كل شيء، من السهل أن تفكر في أسباب عدم البدء في تسويق شركة ناشئة. 1- نعتقد أن المنتج غير جاهز للتسويقفي مرحلة مبكرة، تعرف حتماً أن أشياء مثل مسارات التسجيل signup funnel وعملية تهيئة المُستخدمين الجدد onboarding process يمكن لها أن تتطور كثيرًا. بناءً على هذه الحقيقة الطبيعية، مع انتشار اتجاه الشركة الناشئة اللينة lean startup على مجال واسع الآن فإننا جميعا يستحسن بنا أن ننشر منتجاتنا بأبكر ما يمكن. إذ أنه من الطبيعي أن تعتقد أن التسويق يجب أن يبدأ حين يكون المنتج جاهزًا، ولكني أعتقد أننا نعيق أنفسنا بالانتظار. 2- نعتقد أن هناك فرصة واحدة فقطأعتقد أنه من المنطقي جدًا أن تتخوف من امتلاك فرصة واحدة مع المستخدمين المستهدفين عند التخطيط لتسويق منتج. إذ أن فكرة تكوين أحد ما قراره النهائي بناءً على الانطباع الأولي فكرة يمكن تصديقها للغاية. وقد اكتشفنا أن هذا الأمر بعيد تمامًا عن الحقيقة. 3- نعتقد أن المستخدمين المستهدفين سينفدونلقد اكتشفت مع Buffer أنه أحيانًا عندما كنا نصل لمرحلة مستقرة في معدل التسجيل في الموقع، وبينما كان الحل الواقعي هو تجربة طرق جديدة لتسويق فكرتنا، أو محاولة الارتقاء بطرقنا الحالية لمستويات أعلى، كان الاسلوب الأسهل هو الاعتقاد أننا وصلنا لنقطة التشبع ولم يعد بمقدورنا الوصول إلى المزيد من الناس. نعرف الآن، كما ستكتشف لاحقًا بالأسفل، أننا لن نصل أبداً لنقطة لا نستطيع أن نحضر فيها المزيد من التسجيلات الجديدة. لم يجب علينا التسويق حتى لو كان الوقت مبكراً جداًأدركت مع مرور الوقت، أنّه حتى حين نطلق منتجاتنا مبكراً، يجب علينا أن نهدف إلى تسويق شركتنا الناشئة مبكرًا جدًا. أعتقد أن ما يبدو مبكرًا جدًا هو في الحقيقة وقت ممتاز لبداية التسويق. معظم الناس غالبًا يتأخرون كثيرًا عما يجب. 1- أفضل طريقة لتطوير المنتج هي استخدامهمات مولينوِج Matt Mullenweg، مؤسس Wordpress، عبر عن هذا بشكل أفضل مما كنت سأفعل مطلقًا: ما اكتشفناه مع Buffer هو أن معاملتنا للتسويق كوسيلة لتبادل النقاشات بدلًا من كونه قناة إذاعية، قد جعل التسويق أفضل طريقة لتقوية الإعلان بالإضافة إلى تطوير المنتج. أجرينا العديد من التجارب مع إعلاننا وكان هناك الكثير لتحسينه في المنتج، وقد أصبح التطور السريع أسهل بكثير إذ كان شريكي ليو يكتب عدة مقالات أسبوعيًا عن Buffer لمجموعة متنوعة من المدونات. 2- لا يسجل الناس دائمًا في المرة الأولى التي يسمعون بها عن منتجكعندما بدأنا ننجح في إبراز Buffer في عدد من المدونات، اكتشفنا من المحادثات في التعليقات أن العديد من الناس قد سمعوا بالفعل عن Buffer. وما حدث هو أنه بينما كان بعض الناس يسجلون في المرة الأولى التي يسمعون بها عن Buffer، انتظر الآخرون حتى يسمعوا عنها عدة مرات. أعتقد الآن أن عددًا كبيرًا من الناس لا يسجلون في الخدمات التي يسمعون بها لأول مرة. ولهذا السبب، يجب أن نعمل على بروز اسم منتتجنا مرارًا على نطاق واسع. إذ أن هناك نقطة تحول للناس يقررون فيها التجربة. يجب عليك العمل للوصول إليها. 3- لن ينفذ عدد المستخدمين المستهدفينأدركت مؤخرًا أننا لن نصل لنقطة لا نستطيع فيها جلب المزيد من التسجيلات الجديدة في Buffer. إذ أننا في الأساس أداة لمستخدمي Twitter، يمكنك أن تتخيل سرعة نمو سوق تويتر لتدرك أننا لن نواجه مشكلة التشبع. لمزيد من الوضوح، ألقٍ نظرة على هذا المخطط الذي يظهر إحصائيات تسجيلات Evernote منذ ستة أشهر مضت: منذ ستة أشهر كانت Evernote تسجل حوالي 2000 مستخدم جديد كل ساعة. وقد أعلنوا مؤخرًا أنهم زادوا من 6 مليون مستخدم مسجل في وقت هذا المخطط إلى أكثر من 10 مليون مستخدم مسجل اليوم. وأتوقع أن ايفرنوت قد تسجل حوالي 100.000 مستخدم جديد يوميًا. لكي تحصل على نمو كهذا يجب عليك العمل باستمرار على التسويق. أعتقد أنه عند بناء شركة ناشئة يجب التركيز على التسويق وتطوير المستخدم مثلما نركز على تطوير المنتج. هل بدأت بتسويق منتجك بعد؟ وإن لم تكن، فلم تؤخره؟ بانتظار تعليقاتكم على هذه المقالة. ترجمة -وبتصرّف- للمقال Why you should start marketing early لصاحبه جويل غاسكوين (مؤسّس خدمة Buffer).
  13. ربما سمعت من قبل عن رخص المشاع الإبداعي Creative Commons، التي بدأت تنتشر على استحياء في المحيط العربي التقني، وربما لاحظت التنويه Content licensed under CC BY-NC-SA 4.0 unless mentioned otherwise (المحتوى منشور تخت رخصة المشاع الإبداعي النسب-غير تجاري-المشاركة بالمثل 4.0 ما لم يذكر غير ذلك) في خاتمة موقع أكاديمية حسوب وتساءلت عن معناها وفائدتها. دعنا أولاً نتعرف عليه من خلال هذا الإنفوجرافيك المبسط على هذه الرّخصة. من الأفكار الشائعة حول فكرة رخص المشاع الإبداعي خصوصاً، والرخص الحرة عموماً، هي أن فوائدها تنحصر على الجانب الخيري أو الأخلاقي، أي فائدة المجتمع دون أي عائد على مصلحة الشخص أو المؤسسة. وهي فكرة سريعة الحكم على رخص المشاع الإبداعي، إذ لها فوائد كثيرة في التسويق للأعمال والأفكار وأمثلة ناجحة في مجتمع الإنترنت. هناك عدة جوانب للاستفادة من ترخيص العمل برخص المشاع الإبداعي، نذكر منها ما سيلي في هذا المقال. زيادة نطاق جمهوركمع السماح للجمهور بمشاركة أعمالك، تزيد فرص وصولها إلى نطاق أوسع وأعرض من المستخدمين والمتابعين، مع ضمان النسب إلى المؤلف الأصلي للعمل، وهو أنت، بالتالي يزيد من انتشار اسمك وتعريف الناس بأعمالك مما يدفعهم للبحث عن بقية الأعمال ومتابعتها والمطالبة بأعمال مماثلة بمقابل، وهكذا قد وفرت جزءاً كبيراً من الدعاية المجانية. ونقتبس هنا من كاتب الخيال العلمي كوري دكتورو، الذي تحدث عن تجربته الناجحة في ترخيص جميع النسخ الإلكترونية من كتبه برخصة المشاع الإبداعي في مقالته "Giving it away منحه"، أنه بالرغم من أن معظم الناس ممن حملوا الكتاب الإلكتروني لا ينتهي بهم الأمر بشراءه، إلا أنهم لم يكونوا ليشتروه في جميع الأحوال، بالتالي لم أخسر مبيعات، بل كسبت جمهوراً. هناك عدد من الناس يعتبرون الكتاب الإلكتروني بديلاً عن شراء الكتاب الورقي، وهم مبيعات ضائعة، وهناك عدد أكبر منهم يعتبره تشجيعاً لشراء النسخة الورقية منه. وهم مبيعات مكتسبة، طالما عدد المبيعات المكتسبة يفوق المبيعات الضائعة، فأنا في الصدارة! قد لا ينحصر توسيع الجمهور نتيجة لرخصة المشاع الإبداعي في نطاق اللغة المنشور بها العمل، بل يشمل أيضاً، إذا كانت الرخصة تسمح بالاشتقاق من العمل، إمكانية ترجمة عملك إلى لغات قد لا تستطيع توفيرها بالطرق العادية، إذ أن ترجمة الأعمال المحمية بحقوق الملكية تتضمن معاملات قانونياً أكثر تعقيداً وتكلفة وتستهلك وقتاً أكثر مما تتطلبه عملية الترجمة نفسها. ونأخذ هنا على سبيل المثال ما ذكره الكاتب سيموني أليبراندي صاحب كتاب "Creative Commons: A user guide" عن ترجمة كتابه إلى اللغة العربية كيف أن الترخيص الحر للكتاب، أتاح ترجمته وإتاحته لما يقرب من 250 مليون شخصاً إضافياً من قارئي اللغة العربية، بينما لو كان الكتاب مرخصاً برخصة مغلقة، لاحتاج الناشر العربي الاتصال بناشر الاتصال والتفاوض على حقوق الترجمة في عملية مرهقة وطويلة، وهو ما لم يكن ضرورياً هنا لحسن الحظ! تحسين ترتيب ظهور أعمالك في نتائج البحثمع شرط النسب الموجود حتى في أكثر رخص المشاع الإبداعي تحرراً، وهي رخصة النسب، يساهم كثرة الروابط إلى العمل الأصلي في تحسين ترتيب ظهور العمل في محركات البحث وزيادة فرص ظهوره بشكل عام. بالإضافة إلى أن محرك البحث الشهير جوجل، يوفر خيار البحث عن الصور والمقالات المرخصة برخص المشاع الإبداعي مع تحديد نوع الرخصة، مما يسهل من عملية الوصول إلى المحتوى بشكل أكبر وأسرع، ناهيك عن توفير موقع المشاع الإبداعي لمحرك بحث قوي (وجاري العمل حالياً من قبل مؤسسة المشاع الإبداعي على تحديثه إلى أداة أقوى، ويمكن متابعة عملية التطوير والمشاركة فيها أيضاً، هذه من مميزات الرخص الحرة الرائعة) للبحث عن مختلف أنواع الأعمال الإبداعية بصيغها المختلفة في شتى أنواع المواقع. منبع مجاني من الأفكار والاقتراحاتإذا كان عملك عبارة عن كود برمجي أو موقع أو تطبيق إلكتروني ما، فإتاحته برخصة المشاع الإبداعي، ومثيلاتها من الرخص، يوفر لك دعماً مجانياً من محبي التقنية وروادها للعثور على الثغرات والأخطاء الموجودة في الكود وتصحيحها، وحتى إضافة خواص جديدة تطور من العمل، وخمن ماذا؟ ترخيصك للعمل بشكل يسمح بالتعديل عليه دون الاستفادة منه تجارياً، لا يمنعك من الاستغلال التجاري له، أو التعديل عليه بالاستلهام من الأفكار والاقتراحات الجديدة، أو ما شابه، إذ أن حقوق العمل ممنوحة لك كلياً طالما هو ضمن ملكيتك، فقط هي مقيدة للآخرين حسب رخصة العمل. وطبعاً لنا في موقع Github الشهير أفضل مثال على مشاركة الأعمال بمختلف الرخص الحرة والمساهمة في تطويرها وتحسينها. وهناك نماذج ناجحة لمؤسسات وأشخاص رخصوا أعمالهم برخص المشاع الإبداعي، نذكر على سبيل المثال لا الحصر: Ted Talks: واحدة من أعمدة العالم التقني، بدأت محاضرات تيد كحلقات دراسية خاصة يحضرها القليلون. وبعد خمس سنين من نشر كل محاضرات تيد تحت رخص المشاع الإبداعي، أكثر من 200 مليون مشاهد تمتعوا بالتفكير الإبداعي لمتحدثي تيد. تقول جون كوهين، مديرة تنفيذية لإعلام تيد "هذا النمو المزدهر كان نتيجة مترتبة كلياً على التوزيع الحر والمفتوح، إذ أتاح ترخيص المشاع الإبداعي المشاركة بطرق أفضل مما كنا لنفعله بمفردنا." Global Voices أصوات عالمية: تفشل المؤسسات الإعلامية الكبري في توصيل معلومات متعمقة من قلب الحدث في الأحداث العالمية - في حين أن المدونين المحليين والصحفيين المواطنين غالباً ما يكونون أكثر صلة ودراية بالمجتمعات التي يكتبون عنها. أصوات عالمية GlobalVoices، مؤسسة غير ربحية أنشأتها الصحفية ريبيكا ماك كينّون، توفر منصة لحوالي 350 محررين وكتاب ومترجمين متطوعين من حول العالم لجمع الأنباء من قلب مجتمعاتهم في مكان واحد. هؤلاء الصحفيين المواطنين وفروا تغطية مفصلة مباشرة لجميع الأحداث بداية من زلزال هايتي إلى احتجاجات إيران. وكل المحتوى مرخص برخصة المشاع الإبداعي النسب BY، لذا يمكن ترجمة ونشر المعلومات بحرية لمن يريد أكثر من اللقطات السريعة في أخبار المساء. Pratham Books كتب برثام: كتب براثام، دار نشر صغيرة غير ربحية في الهند، مهمتها البسيطة الطموحة هي إتاحة كتاب لكل طفل. مدركة أن هذا الهدف الضخم الجريء يستحيل تحقيقه بمفردها، بدأت براثام بنشر كتبها ورسوماتها تحت رخص المشاع الإبداعي على فليكر Flicker وسكريبد Scribd في عام 2008. جوتام جون، مدير المشاريع الجديدة في كتب براثام، يقول "كدار نشر صغيرة، لا نمتلك القدرة لتخصيص رخص كل مرة يود طرف مهتم استخدام محتوانا بشكل مختلف. وما أتاحته لنا رخص المشاع الإبداعي هو التعاون مع شركاء مختلفين دون مرافقة المفاوضات القانونية والوقت والمال الذي تستهلكه لتتم." بدلاً من ذلك، ترسل كتب برثام للمستخدمين رابط إلى تحميل الكتاب وصفحة الترخيص ببساطة. Jonathan Worth جوناثان وورث: تعلق أعمال المصور البريطاني جوناثان وورث في متحف اللوحات القومي في لندن، يدرس التصوير في جامعة كوفنتري بالمملكة المتحدة، وقد صور الممثلين كولين فيرث، رايتشل هانتر، جود لو وهيث لدجر. وقد قضى وورث وقته، مثل معظم زملائه، في تطويق الإنترنت لحماية أعماله من السرقة. كان منزعجاً من كمية الوقت المهدر في ملاحقة انتهاكات ملكيته الفكرية. يقول وورث "هنا قابلت كاتب الخيال العلمي كوري دكتورو، الذي كان يمنح كتابه للجمهور، ويكسب منه المال في الوقت ذاته. صورته صورة فوتوجرافية وسألته عن الصفقة، فاقترح عليّ اجراء تجربة." وقد وافق وورث، فرخصوا الصورة برخصة المشاع الإبداعي النسب BY وشاركوا نسخ عالية الجودة منها على الإنترنت مجاناً، مع توفير نسخ موقعة بأسعار متنوعة ومستويات مختلفة من الحقوق الحصرية. قال وورث "وقد بيعت النسخ الأغلى أولاً، لم يكن أحد منهم قد سمع عني، ولكنهم كانوا يدفعون أسعاراً جيدة لمطبوعاتي." Open University الجامعة المفتوحة: تقبل الجامعة المفتوحة الطلبة من جميع الخلفيات، بغض النظر عن إنجازاتهم الأكاديمية أو ظروفهم الاجتماعية. وهي أول جامعة تعليم عن بعد ناجحة في العالم، وواحدة من أكبرهم، مع حوالي أكثر من ربع مليون طالب في ٤٠ دولة. في عام 2005، أخذت الجامعة المفتوحة خطوة إضافية في انفتاحها مع إنشائها لموقع جديد، OpenLearn التعلم المفتوح، مع منح الجمهور صلاحيات الوصول إلى مواد دوراتها التدريبية وإعادة استخدامها تحت رخص المشاع الحر. باختيارها لاستخدام رخص المشاع الإبداعي بدلاً من تطوير قوانينها الخاصة بخصوص الصلاحيات، وفرت الجامعة كثيراً من أتعاب المحاماة. يقول باتريك ماك أندرو "لقد خصصنا بداية 100.000 جنيه استرليني كأتعاب قانونية لكتابة رخصة صالحة لموقع التعلم المفتوح OpenLearn، لكن لم يصرف أي منها حين استخدمنا المشاع الإبداعي"، ساعد المشاع الإبداعي الجامعة أيضاً في توفير التكلفة عند تطوير مواد الدورات التدريبية والتعامل مع موزعي الطرف الثالث. " استخدامنا لرخصة معروفة ساعدنا بدعم الآخرين للانضمام. حيث كنا نوجه الناس إلى معلومات المشاع الإبداعي المستقلة بدلاً من الطلب منهم لاتخاذ رخصة مخصصة." منذ إطلاقه، حصد موقع التعلم المفتوح OpenLearn أكثر من 2 مليون زائراً، وتم تحميل مواد الدورات التدريبية أكثر من 20 مليون مرة على أي تيونز يو iTunes U، مما يجعلها أكثر جامعة تحميلاً في متجر أبل. يمكنك معرفة تفاصيل أكثر عن قصص النجاح السابقة وتصفح المزيد في كتاب The Power Of Open.