لومِن
مشغّل فيديو لسطح المكتب لمن يتعلمون من محاضرات مسجَّلة — علامات وملاحظات مثبَّتة على الثانية بالضبط، ونص قابل للبحث، وتقدُّم في الكورس، ومكتبة تصمد أمام نقل الملفات وإعادة تسميتها.
مشغّل فيديو مبني للمذاكرة. بلا حساب، وبلا سحابة، وبلا حاجة إلى اتصال بالإنترنت.

- الدور
- تصميم وتنفيذ، من البداية للنهاية
- النطاق
- تطبيق سطح مكتب + مثبِّت ويندوز
- التقنيات
- Electron 38 · JavaScript خام · HTML/CSS
- نوع المشروع
- منتج داخلي، بلا عميل
المطلوب
مشغّلات الفيديو السائدة مبنية لمشاهدة الأفلام. أما الطالب الذي يشق طريقه في كورس من أربعين محاضرة فيحتاج شيئًا آخر: أن يعلّم اللحظة التي يبدأ عندها الاشتقاق، وأن يكتب ملاحظة دون أن يفقد موضعه، وأن يعيد ثلاثين ثانية حتى تُفهم، وأن يعرف أي المحاضرات انتهى منها.
كان المطلوب مشغّلًا للملفات المحلية يبدو سلسًا وراقيًا، ويشغّل الصيغ التي تأتي بها الكورسات فعلًا، ويعامل أدوات المذاكرة كمزايا أصيلة لا كإضافات. بلا حساب، وبلا سحابة، وبلا حاجة إلى اتصال بالإنترنت.
قيد واحد شكّل ما عداه — الملاحظات هي المنتج. فالمشغّل الذي يضيّع ملاحظات فصل دراسي كامل لأن مجلدًا أُعيدت تسميته، أو لأن اللاب توب مات في منتصف الحفظ، قد فشل في الشيء الوحيد الذي يميّزه. لذلك نالت طبقة البيانات من الاهتمام قدر ما نال التشغيل.
ما تم تسليمه
- تشغيل صيغ MP4 وMKV وWebM وMOV وتسع صيغ فيديو وصوت أخرى، مع استئناف من حيث توقفت لكل ملف
- سرعة من ٠٫٢٥× إلى ٤×، وصوت حتى ٢٠٠٪، وتنقّل إطارًا إطارًا، وتكرار بين نقطتين، وصورة داخل صورة، وتثبيت فوق النوافذ
- علامات وملاحظات مثبَّتة على لحظة زمنية وتظهر كعلامات على شريط التقدم؛ ويمكن للملاحظة أن تحمل لقطة من الإطار الحالي وتُصدَّر إلى Markdown
- ترجمات خارجية (SRT وVTT) بتحكم في الحجم والتأخير، مع لوحة نصٍّ قابلة للبحث والنقر
- مجلدات الكورسات كقوائم تشغيل، بتقدُّم لكل فيديو، وعدّاد للمكتمل، و«أكمل المشاهدة» في الشاشة الرئيسية
- مؤقِّت تركيز يوقف الفيديو عند انتهاء الجلسة، وإحصائيات مذاكرة يومية مع سلسلة أيام
- مثبِّت ويندوز يسجّل التطبيق لـ١٣ نوع ملف وسائط، بلا حاجة إلى صلاحيات مدير
- اختصار لوحة مفاتيح
- 25
- صيغة وسائط
- 13
- اختبارًا آليًا على طبقة البيانات
- 19
- اعتماد وقت تشغيل
- 0
القرارات، ولماذا
سرد التقنيات المستخدمة لا يقول شيئًا. المفيد في دراسة الحالة هو القرارات التي كان لها بديل حقيقي — لذلك يذكر كل قرار هنا ثمنه، لا ما تم اختياره فحسب.
- ٠١
محرك المتصفح هو فاكُّ الترميز
تشغيل الوسائط بفاكّات ترميز Chromium المدمجة بدل حزم محرك وسائط.
Electron يشحن أصلًا فاكَّ ترميز مُسرَّعًا بالعتاد لـH.264 وVP9 وAV1 داخل MP4 وMKV وWebM، وهي صيغ المحاضرات المسجَّلة. وحزم محرك منفصل كان سيضاعف حجم التثبيت ويضيف اعتمادًا أصليًا يحتاج صيانة، من أجل صيغ نادرًا ما يقابلها الطالب.
الثمن · الملفات التي تحتاج تلك الفاكّات الإضافية تُسمّى صراحةً وتُرفض برسالة، بدل أن تُفتح على شاشة سوداء بلا تفسير.
- ٠٢
بلا إطار عمل، وبلا خطوة بناء
وحدات JavaScript خام، وCSS مكتوب يدويًا، وصفر اعتمادات وقت تشغيل.
الواجهة نافذة واحدة فيها فيديو واحد ولوحة جانبية. والأجزاء التي يجب أن تكون سريعة — شريط التقدم والترجمة وفحص التكرار — تعمل في حلقة إطار واحدة تلمس الـDOM مباشرةً. وإطار العمل كان سيضيف طبقة بين تلك الحلقة والشاشة.
الثمن · العرض يدوي، ومنطق الواجهة يعيش في وحدة واحدة كبيرة. وهذا هو الحجم الصحيح لنافذة واحدة، والنافذة الثانية هي نقطة إعادة النظر.
- ٠٣
للفيديو هوية، لا مسار
كل فيديو له معرّفه وبصمة محتواه؛ والملاحظات معلَّقة على المعرّف.
الطلاب يعيدون ترتيب مجلداتهم باستمرار. وربط الملاحظات بمسار الملف يعني أن إعادة التسمية تُيتّمها؛ وربطها باسم الملف يدمج «فيزياء/الدرس ٠١» مع «أحياء/الدرس ٠١». والبصمة هي حجم الملف مع تجزئة ثلاث عينات بحجم ٦٤ كيلوبايت، فتُعرَّف محاضرة بعدة جيجابايت في أجزاء من الثانية دون قراءتها كلها.
الثمن · هي تجزئة بالعيّنة لا تجزئة كاملة، وحين يظل الأصل موجودًا تُعامَل النسخة كملف جديد وتبدأ من الصفر — وهو الأسلم بين الخطأين الممكنين.
- ٠٤
ملف JSON واحد، صعب أن يضيع
حفظ المكتبة في ملف JSON واحد بدل قاعدة بيانات، وإنفاق الجهد على الاستعادة.
البيانات صغيرة، ومن حق المستخدم أن يقرأها. وكل حفظ يُبقي النسخة السابقة كنسخة احتياطية، وتُؤخذ لقطة مرة يوميًا لسبعة أيام، والملف التالف يُنحّى جانبًا لا يُكتب فوقه، ورقم إصدار للمخطط يقود الترحيلات التلقائية.
الثمن · الملف كله يُعاد كتابته مع كل حفظ. وهذا غير محسوس عند مئات الفيديوهات، وسيحتاج إعادة نظر عند عشرات الآلاف.
- ٠٥
الملفات المحلية تُبَثّ عبر بروتوكول خاص
التطبيق يقدّم الوسائط لنفسه عبر مخطط app:// خاص به مع دعم نطاقات البايتات.
تحميل الفيديوهات من مسارات القرص مباشرةً يجعلها أصلًا مختلفًا عن الواجهة، فيمنع لقطات الإطارات، ولا يعطي تحكمًا فيما تستطيع الواجهة قراءته. والمخطط الخاص يجعل التنقل داخل الملفات الكبيرة يعمل، ويُبقي اللقطات ممكنة، ويضع نقطة تفتيش واحدة أمام نظام الملفات.
الثمن · التعامل مع النطاقات وضغط البث الخلفي كودنا نحن لا كود المنصة — وهو أيضًا ما يجعل نقطة التفتيش ممكنة أصلًا.
- ٠٦
الواجهة لا تقرأ إلا ما يحتاجه مشغّل
مسار الوسائط يقدّم أنواع الملفات القابلة للتشغيل ولقطات التطبيق نفسه، ولا شيء غيرها.
كشفت مراجعة النسخة الأولى أن مسار الوسائط كان يسلّم أي ملف على القرص إلى الواجهة. ولم يُستغل ذلك، لأن التطبيق لا يحمّل أي محتوى بعيد، لكن ليس لمشغّل فيديو سبب يجعله قادرًا على قراءة مستنداتك. والقواعد الآن في وحدة صغيرة واحدة لها اختبارات، وكل نداء نظام يتحقق أنه جاء من صفحة التطبيق نفسها.
الثمن · دعم صيغة جديدة يعني تعديل قائمة المسموح، لا نافذة اختيار الملفات فقط — وهذا هو المقصود: القائمة هي ما يُفحص.
- ٠٧
الاختصارات تتبع موضع المفتاح، لا الحرف
اختصارات لوحة المفاتيح مربوطة بمواضع المفاتيح الفعلية.
الجمهور الأول يكتب بالعربية. ولو رُبطت بالحروف لمات كل اختصار لحظة تبديل تخطيط لوحة المفاتيح، في منتصف المحاضرة، بلا تفسير. ولأنها مربوطة بالمواضع، يظل B هو إضافة علامة دائمًا.
الثمن · على التخطيطات التي تنقل الحروف، مثل AZERTY، قد يختلف الحرف المطبوع عن الاختصار — وهي الحالة الأندر، وهي التي لا تنكسر في منتصف المحاضرة.
- ٠٨
التطبيق يحلّل الترجمة ويرسمها بنفسه
محلّل ترجمة وطبقة عرض خاصّان بدل مسارات النص المدمجة في المتصفح.
امتلاك مقاطع الترجمة هو ما يجعل لوحة النص ممكنة — تبحث عن عبارة، وتنقر سطرًا، فتقفز إليه. ويتيح أيضًا التحكم في التأخير وفي الحجم، وفكّ ترميز ملفات الترجمة العربية القديمة المحفوظة بترميز Windows-1256، والتي تعرضها المسارات المدمجة كرموز بلا معنى.
الثمن · SRT وVTT هما ما يقرؤه. أما ترجمات ASS المنسَّقة والمسارات المضمَّنة داخل ملف الفيديو فخارج النطاق، ولوحة النص هي ما اشتُري بذلك.
- ٠٩
الملاحظة تنتمي للحظة التي بدأت تكتبها فيها
الطابع الزمني يُؤخذ عند بدء الكتابة، والفيديو يتوقف أثناء كتابتك.
حين تنتهي من الجملة تكون المحاضرة قد تقدمت ثلاثين ثانية. وختم الملاحظة عند الحفظ كان سيشير إلى اللحظة الخطأ في كل مرة. والإيقاف يعني ألا يفوتك شيء أثناء الكتابة.
الثمن · هو رأي في طريقة مذاكرة الناس، لذلك يمكن لمن يخالفه أن يوقف هذا السلوك من الإعدادات.
ملاحظات تصمد
لم يكن أصعب ما في البناء هو التشغيل، بل ضمان ألا تختفي ملاحظات فصل دراسي كامل بهدوء. ثلاثة أشياء تهددها: أن يُنقل الملف، أو أن يموت التطبيق في منتصف الحفظ، أو أن يغيّر إصدار قادم صيغة البيانات.
عُولج كل منها ثم فُحص. النقل: وُضعت على محاضرة علامات وملاحظات، ثم نُقلت إلى مجلد آخر وأُعيدت تسميتها، ثم فُتحت من جديد — فتعرّف عليها التطبيق بالبصمة وأبلغ أن الملاحظات أُعيد وصلها. الموت في منتصف الحفظ: بُتر ملف مكتبة عمدًا في منتصف سجل؛ فعند التشغيل التالي استعاد التطبيق آخر نسخة سليمة، واحتفظ بالملف التالف للفحص، وقال ما فعله. تغيّر الصيغة: رُحِّلت مكتبة من الإصدار الأول مفهرسة بالمسار إلى الإصدار الثاني، وكل ملاحظة وعلامة وموضع سليم، ونسخة ما قبل الترحيل متروكة بجوارها.
تلك الحالات صارت الآن ١٩ اختبارًا آليًا، ومنها المحرجة: ألا تسرق النسخة ملاحظات الأصل، وأن يحتفظ ملفان منقولان بمحتوى متطابق بسجلٍّ واحد لكلٍّ منهما، وألا يكتب ملف تالف فوق نسخة احتياطية سليمة أبدًا. وكشف العمل كذلك عطلًا حقيقيًا — إغلاق النافذة أثناء التشغيل كان يضيّع موضع المشاهدة، لأن رسالة الحفظ قد تصل بعد خروج التطبيق فعلًا. والإغلاق الآن يحفظ تزامنيًا، وإعادة الفتح تستأنف عند الثانية التي تركتها.
ما استُبعد عن قصد
ضبط النطاق جزء من العمل. كل بند هنا دُرس ثم استُبعد لسبب مذكور.
- فاكّات ترميز إضافية لصيغ قديمة
- تحتاج حزم محرك وسائط. ولا تستحق مضاعفة حجم التثبيت من أجل صيغ نادرًا ما تستخدمها المحاضرات.
- الحسابات والمزامنة السحابية
- التطبيق يعمل دون اتصال وبلا تسجيل، والملاحظات تبقى على جهاز المستخدم. والمزامنة تحتاج خادمًا حتى يكون لها معنى.
- ملخّصات بالذكاء الاصطناعي
- لم تُحدَّد مهمة بعينها لا يؤديها النص والملاحظات بالفعل.
- مسارات الترجمة والصوت المضمَّنة
- محرك المتصفح لا يكشفها بشكل موثوق. وملف ترجمة خارجي يغطي الحالة الشائعة.
- توقيع الكود والتحديث التلقائي
- كلاهما يحتاج شهادة مدفوعة وخادم تحديثات. والمثبِّت يعمل بدونهما.
- واجهة عربية
- الواجهة إنجليزية حاليًا. أما الملاحظات والتسميات والترجمات العربية فمدعومة بالكامل، بما في ذلك النص من اليمين لليسار.
طبقة البيانات مغطاة باختبارات آلية؛ أما التشغيل والواجهة فيُفحصان يدويًا وبتشغيل تجريبي مكتوب، لا بحزمة اختبارات آلية. والمثبِّت غير موقَّع، فيُظهر ويندوز تنبيه SmartScreen عند أول تشغيل. ولومِن إصدار ١٫٠ ولم يُطلَق للعامة. وهو مبني ومُختبَر على ويندوز فقط.
التقنيات
- Electron 38
- JavaScript
- HTML
- CSS
- Node.js
الخدمات
- تصميم المنتج
- هندسة سطح المكتب
- هندسة الواجهة
- تصميم البيانات
- التحزيم والتوزيع
محتاج حاجة مبنية بنفس المستوى؟
نصمم ونبني أنظمة كاملة — مسار شراء يعمل، وصلاحيات، ولوحة تحكم تدير الشغل فعليًا. والعربية عندنا ليست ترجمة تُركَّب في الآخر.
