HهENRead in English
كل المشاريع

منفردًا · 2026

هورايزن

استراحات للعين تعرف متى تكون أمام الحاسوب فعلًا.

horizon

تطبيق سطح مكتب لماك وويندوز لاستراحات العين وفق قاعدة 20-20-20. وما يميّزه أنه ينمذج الحضور — وقت الخمول وحالة القفل والنوم والاستيقاظ وكتم الشاشة الكاملة — فلا يزعجك باستراحة لم تكن موجودًا لتفوّتها.

نرمش أمام الشاشة أقل بنحو 60%، والعلاج — كل 20 دقيقة، انظر إلى مسافة 20 قدمًا لمدة 20 ثانية — معروف ولا يُتذكَّر أبدًا. والجزء الصعب في بناء التذكير ليس المؤقّت.

«هورايزن» هو المحاولة الثانية. أرست الأولى، LookAway، الشكل: مقيم في شريط المهام، محلي بالكامل، إعدادات في ملف JSON، بلا حسابات وبلا خادم. وأعاد «هورايزن» بناءه حول نموذج مجال صريح — حلقة استراحة، وحضور، وكتم، وطبقة عرض، وإحصاءات — لأن أخطاء النسخة الأولى كانت كلها مشكلات نمذجة متنكرة في زي مؤقّتات.

مشكلات تستحق الحل

  1. المؤقّت لا يعرف إن كنت موجودًا

    المؤقّت الدوري البسيط يعمل وأنت في اجتماع، وبعد قفلك للشاشة، وفي لحظة استيقاظ الحاسوب بأربع استراحات فائتة متراكمة. وكلٌّ من ذلك يجعل التطبيق يبدو معطلًا.

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

  2. مقاطعة عرض تقديمي لا تُغتفر

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

    الكتم سياسة قائمة بذاتها، تقودها حالات الشاشة الكاملة وما يشبه العرض التقديمي، ويُسمح لها بإلغاء استراحة مستحقة تمامًا لا بتأجيل الطبقة فحسب.

  3. Electron لا يكشف ما يلزم

    حالة القفل وكشف الخمول والوعي بالشاشة الكاملة تختلف بين الأنظمة وليست متاحة بالكامل عبر واجهات Electron العابرة للمنصات.

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

ما الذي نتج عنه

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