دليل أسطرلاب English GitHub

إشارات الويب والفيديفيرس

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


قد تكون التدوينة المنشورة جزءًا من حديث يجري في مكان آخر: يكتب أحدهم ردًّا في مدونته، أو يُعجب بها من ماستودون، أو يربط إليها في جولة أسبوعية. يستطيع Astrolabe أن يسمع بذلك، وأن يُبقي ما توافق عليه تحت التدوينة، وأن يخبر المواقع الأخرى حين تتحدث تدويناتك عنها. يفعل ذلك بمعيارين مفتوحين: إشارات الويب (يرسل موقعٌ «صفحتي تربط إلى صفحتك» إلى عنوان يُعلن عنه موقعك)، وActivityPub (البروتوكول الذي يتكلمه ماستودون وبيكسلفِد وبقية الفيديفيرس).

كل جزء منها وصولٌ إلى الشبكة، فلكلٍّ مفتاحه في الإعدادات ← التعليقات والإشارات، وكلها متوقفة في النسخة الجديدة:

الصفما يفعله حين يعمل
استقبال إشارات الويبتُعلن كل صفحة عامة عن ‎/webmention‎؛ وتُفحص الإشارات المرسلة إليه وتنتظر في الإشراف.
إرسال إشارات الويبنشرُ تدوينة (أو إعادة نشر تدوينة تغيّرت) يخبر كل موقع آخر تربط إليه.
الفيديفيرستصبح المدونة حسابًا واحدًا على ActivityPub: يجدها الناس ويتابعونها ويُعجبون ويُعيدون النشر ويردّون.
الاسم في الفيديفيرسالاسم الذي يسبق @ في عنوان الحساب.

اضبط SITE_URL (انظر الإعداد). تتذكر الخوادم الأخرى موقعك بعنوانه، والحساب في الفيديفيرس هو عنوانه: من دون SITE_URL يستعمل الخادم آخر عنوان فتحتَ منه إعدادات النشر والتعليقات، وهذا يصلح على حاسوب محمول ويهتزّ خلف وكيل. وتقول الصفوف ذلك حين يهمّ.

ما الذي يُعدّ عامًّا

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

  • الموقع مقروء للزوار (ليس PUBLIC=false، انظر النشر والوصول)؛
  • الملاحظة منشورة (publish: true)؛
  • وهي مُدرجة: من التدوينات التي تُصنع منها خلاصة RSS. القالب، ودرسٌ في مسار من المكتبة، والصفحة الثابتة في الموقع المصمَّم لها عناوين لكنها غير مُدرجة، فتُترك؛
  • ولا يخفيها مرشّح اللغة حين يتكلم الموقع دون قارئ بعينه، أي بلغة الموقع نفسه. إن كان المرشّح على «اتبع القارئ» ومفتاح اللغة ظاهرًا، فتدوينات اللغة الأخرى ظاهرة لمن يختارها من القرّاء، لكن الخط الزمني للمتابع لا قارئ فيه يختار؛ فتبقى تلك التدوينات في البيت.

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

استقبال إشارات الويب

حين يعمل استقبال إشارات الويب تحمل كل صفحة ‎<link rel="webmention" href="…/webmention">‎ في رأسها، والعنوان نفسه في ترويسة ‎Link:‎. يستطيع موقعٌ يربط إلى إحدى تدويناتك حينئذ أن يرسل source (صفحته) وtarget (تدوينتك) إلى ذلك العنوان، مرمَّزين بصيغة النماذج، كما تقول توصية W3C.

ثم يحدث ما يلي:

  1. يُفحص الهدف فورًا. يجب أن يكون تدوينة عامة في هذا الموقع (القاعدة أعلاه). والهدف على اسم نطاق كان للموقع من قبل (LEGACY_HOSTS) يُعدّ التدوينة التي يُحوِّل إليها الآن. وكل ما سوى ذلك يُرفض برمز 400، ولا يُجلب شيء.
  2. ينتظر الباقي دوره. تدخل الإشارات المقبولة طابورًا (‎ASTROLABE_DATA/webmentions.db‎) وتُعالج واحدة بعد واحدة. والإشارة الثانية للزوج نفسه وهو ينتظر تحلّ محل الأولى.
  3. يُجلب المصدر بحذر. لا تُجلب إلا عناوين الإنترنت العامة: عنوان الجهاز نفسه والشبكات الخاصة وعناوين الربط المحلي وأمثالها تُرفض عند الاتصال، فالاسم الذي يُحلّ إلى مكان خاص يُرفض كذلك. ميغابايت واحد على الأكثر، وعشر ثوانٍ، وثلاث إعادات توجيه. والمصدر الذي يخفق لسبب قد يزول (انتهاء المهلة، خطأ 5xx) يُجرَّب ثلاث مرات أخرى، بانتظار أطول كل مرة.
  4. يجب أن يربط إلى تدوينتك فعلًا. الرابط في الصفحة (‎<a href>‎، أو صورة، أو اقتباس) يُعدّ؛ أما العنوان مكتوبًا كلماتٍ فلا.
  5. يُقرأ بالتنسيقات الدقيقة microformats2. يعطي أول ‎h-entry‎ الكاتبَ (بطاقة ‎h-card‎ باسمه وصورته وموقعه)، والنصَّ (‎e-content‎ مختصرًا نصًّا عاديًا)، والنوعَ: ‎u-like-of‎ تدوينتك إعجاب، و‎u-repost-of‎ إعادة نشر، و‎u-in-reply-to‎ رد، وما سوى ذلك إشارة. والصفحة التي لا ‎h-entry‎ فيها إشارةٌ تُسمّى بعنوانها.
  6. ينتظرك. تُحفظ الإشارة مع تعليقاتك مخفيةً، وتظهر في الإشراف على التعليقات بنوعها ومن أين جاءت. لا يظهر شيء تحت التدوينة حتى تُظهرها.

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

تقبل نقطة الاستقبال عشرين إشارة في الدقيقة من العنوان الواحد، وخمسمئة تنتظر في الطابور؛ وما زاد يُجاب برمز 429.

إرسال إشارات الويب

حين يعمل إرسال إشارات الويب، يرسل نشرُ تدوينة، أو حفظُ تدوينة منشورة بحيث تتغير، إشارةَ ويب لكل رابط فيها إلى موقع آخر. والروابط هي ما يراه القارئ روابط: ‎[نص](https://…)‎، و‎<https://…>‎، و‎https://…‎ مجرّدًا، و‎<a href>‎ خامًا. أما الروابط الداخلية ‎[[…]]‎ فهي لخزانتك ولا تُرسل أبدًا؛ ولا الصور ولا ما في داخل الشيفرة.

لكل رابط يجلب الخادم الصفحة، ويجد نقطة استقبالها (ترويسة ‎Link:‎ أولًا، ثم أول ‎<link>‎ أو ‎<a>‎ بالخاصية ‎rel="webmention"‎)، ويرسل ‎source=<عنوان تدوينتك>&target=<الرابط>‎. ويتذكر ما أرسله مع بصمة لتدوينتك، لذلك:

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

آخر خمسين إرسالًا، مع ما آل إليه كلٌّ منها (أُرسلت، بلا نقطة استقبال، أخفقت، في الانتظار)، هي قائمة المُرسَل تحت الصف. ولا يُرسل شيء أبدًا من صفحة غير عامة، ولا إلى موقعك نفسه.

تشغيل المفتاح أول مرة لا يرسل شيئًا للتدوينات الموجودة: يأخذ علمًا بها، ويرسل ابتداءً من النشر التالي.

الفيديفيرس

حين يعمل الفيديفيرس تصبح المدونة حسابًا واحدًا: ‎@name@your.host‎، والاسم هو الاسم في الفيديفيرس (افتراضيًا اسم موقعك بحروف لاتينية بسيطة: «Kitāb al-Ḥikma» يصير ‎kitab_al_hikma‎؛ واسمٌ بالعربية وحدها يصير ‎blog‎). البحث عن ذلك العنوان في ماستودون يجده، لأن الموقع يجيب الآن:

  • WebFinger في ‎/.well-known/webfinger‎، الذي يحوّل العنوان إلى الحساب؛
  • NodeInfo في ‎/.well-known/nodeinfo‎، الذي يقول أيّ برنامج هذا؛
  • الحساب نفسه في ‎/actor‎: اسم موقعك وسطره التعريفي وشعاره ولافتة الصفحة الرئيسية، ومفتاح عام. يُولَّد النصف الخاص مرة واحدة في ‎ASTROLABE_DATA/activitypub-key.pem‎ (لا يقرؤه إلا الخادم) ولا يغادر الجهاز أبدًا؛ كل طلب يرسله الخادم إلى خادم آخر موقَّع به، وكل نشاط يقبله يجب أن يوقّعه الحساب الذي يدّعي أنه جاء منه؛
  • صندوق صادر فيه تدويناتك العامة، الأحدث أولًا. التدوينة القصيرة تصل ملاحظةً كاملة في الخط الزمني؛ والأطول تصل مقالةً بعنوانها وبداية نصها ورابط. ويحمل كلٌّ منها لغته ووسومه ولافتته.

وفتح عنوان التدوينة نفسه من بحث ماستودون يُظهر التدوينة أيضًا: العنوان نفسه يجيب الفيديفيرس بالتدوينة، والمتصفحَ بالصفحة.

المتابعون يُقبلون فورًا ويُحفظون في ‎ASTROLABE_DATA/activitypub.db‎. ومن حينها، نشرُ تدوينة يسلّمها إليهم، وتغيير تدوينة منشورة يرسل التغيير، وإلغاء نشرها يحذفها من خطوطهم الزمنية. تذهب التسليمات إلى صندوق الوارد المشترك لكل خادم إن كان له واحد (ألف متابع على خادم واحد طلبٌ واحد)، واحدًا بعد واحد، مع ثلاث محاولات. والخادم الذي زال صندوق وارده نهائيًا يأخذ متابعيه معه. عدد المتابعين تحت الصف؛ أما القائمة نفسها فلا تُنشر أبدًا.

وما يعود:

  • الإعجابات وإعادات النشر لتدوينة تظهر تحتها فورًا، وجوهًا؛
  • والردود على تدوينة تُحفظ مع تعليقاتك وتنتظر في الإشراف، كإشارة الويب؛
  • والتراجع يزيل الإعجاب أو إعادة النشر، والحذف يزيل الرد. ولا يسحب شيئًا إلا الحساب الذي أرسله.

تحت التدوينة

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

ما يبقى على الجهاز

‎webmentions.db‎ و‎activitypub.db‎ و‎activitypub-key.pem‎ تعيش في مجلد بيانات الخادم، لا في الخزانة أبدًا، ولا تنسخها النسخ الاحتياطي والمزامنة إليها: إنها أحاديث هذا الخادم مع خوادم أخرى، والمفتاح الخاص في تاريخ git مفتاحٌ منشور. أما الإشارات الموافَق عليها فتعيش مع تعليقاتك في ‎comments.db‎.

والخزانة المحمولة لا عنوان عامًّا لها، فلا وجود لشيء من هذا فيها: ليس في الإعدادات ← التعليقات والإشارات فيها صفّ لإشارات الويب ولا للفيديفيرس، وتجيب المسارات بأنها تحتاج إلى خادم.

حرّر هذه الصفحة على GitHub

أسطرلاب برنامج حر. هذه الصفحات مبنية من ملفات Markdown في مجلد docs بالمستودع.