هناك أنواع من البرامج ، والتي بدونها لا يمكن لبعض الأشخاص العيش ، بينما لا يتخيل البعض الآخر وجود شيء من هذا القبيل ويحتاجه شخص ما على الإطلاق. بالنسبة لي ، لسنوات عديدة ، كان هذا البرنامج هو Macropool WebResearch ، والذي سمح لي بحفظ وقراءة وتنظيم صفحات الويب في نوع من المكتبات غير المتصلة بالإنترنت. أنا متأكد من أن العديد من القراء على ما يرام مع مجموعة من الروابط أو مزيج من المتصفح ومجلد مع مجموعة من الوثائق المحفوظة. أود أن أكون قادرًا على الأقل على وضع علامة على المستندات على أنها "قراءة" أو "مفضلة" ، والانتقال بسرعة من نص إلى آخر وعدم الاعتماد على توفر الإنترنت أو موقع معين. يحدث أن يكون هناك وقت للقراءة بالضبط عندما لا يكون هناك إنترنت (على الطريق ، على سبيل المثال) ، والروابط ، للأسف ، غالبًا ما تكون قصيرة العمر.
على ما يبدو ، كان مؤلفو WebResearch يعولون على هؤلاء الأشخاص. كان هذا البرنامج مزودًا بمجموعة واسعة من الوظائف: الفهرسة حسب الأقسام والعلامات ، وتحرير الملاحظات ، وجميع أنواع التصدير / الاستيراد ، وما إلى ذلك. ومع ذلك ، بحلول عام 2013 تقريبًا ، توقف المشروع عن التحديث ، ثم لم يعد موقع المطور موجودًا. منذ عدة سنوات ، تمكنت من ركوب هذا الحصان ، لكن أولاً تم إيقاف المكونات الإضافية للمستعرض (المتوفرة فقط للإصدارات آنذاك من IE و FireFox) ، ثم توقفت المواقع الحديثة عن العرض بشكل طبيعي في العارض استنادًا إلى محرك IE القديم.

النافذة الرئيسية لـ WebResearch ، الأسبوع PC / RE رقم 17 (575)
خيبة أمل الطريق
بمجرد أن أصبح من الواضح أنه لا يمكن تجنب الاستبدال ، بدأت في البحث عن نظير لائق في الخلفية. يبدو لي أنه لن تكون هناك صعوبات معينة ، لأن رغباتي متواضعة للغاية. كنت مستعدًا للتوافق مع مجموعة فرعية صغيرة فقط من أدوات WebResearch ، بما في ذلك:
- حفظ صفحات HTML من المستعرض باستخدام الملحق ؛
- الحد الأدنى من أدوات الفهرسة على الأقل (إعادة تسمية وتنظيم الدلائل والعلامات) ؛
- (يفضل) دعم مستندات PDF ؛
- أي وسيلة لائقة لمزامنة مجموعة مع الأجهزة الأخرى.
لدهشتي ، لم أجد شيئًا من هذا القبيل ، على الرغم من أنني صعدت الإنترنت لأعلى ولأسفل ودرست بعناية عشرات برامج التعليقات التوضيحية المناسبة (باستثناء Evernote ، حيث تتوفر وظيفة الوصف المماثلة فقط عن طريق الاشتراك). حتى الآن ، على الأقل بطريقة ما ترضي رغباتي باستثناء مشاريع TagSpaces و myBase . دراستهم ، بشكل عام ، لها مصلحة ثقافية معينة.
TagSpaces هو منظم "أنيق - شبابي" على Electron مع موقع إلكتروني جميل ، تخطيط قابل للتكيف ، وبطبيعة الحال ، سمة مظلمة ، حيث بدونه. في الوقت نفسه ، يحتل جدول محتويات المجموعة غير المشوه بأيقونات مستديرة أنيقة نصف الشاشة ، ويحتوي في نفس الوقت على عشرين قطعة على الأكثر ، ويتم كتابة القطع الأساسية مثل دعم المفاتيح الساخنة أو تقديم المستند الذي تشاهده وفقًا للمبدأ المتبقي. نتيجةً لذلك ، يتم عرض المستندات بطريقة ملتوية ، ويتحول العمل مع المجموعة إلى مجموعة من التمارين مملة وتستهلك الكثير من الوقت باستخدام الماوس.
يأتي myBase antipode من أواخر التسعينيات: هنا ، بالإضافة إلى واجهة وظيفية بحتة ، لدينا مجموعة غنية جدًا من الإعدادات والوظائف. ومع ذلك ، لا يزال العارض هنا هو نفس المستعرض استنادًا إلى IE القديم (مما يجعل القراءة صعبة بالفعل) ، ويتم تخزين جميع المستندات في قاعدة بيانات متجانسة. إذا قمت بوضعها في مجلد Dropbox ، على سبيل المثال (لا توجد حتى الآن طرق أخرى للمزامنة مع الأجهزة الأخرى) ، فمع أقل تغيير في المجموعة ، يجب عليك انتظار مئات الميجابايت من المعلومات لتنزيلها على الخادم.
نقطة تحول
ربما يبدو المحتوى الإضافي للمذكرة واضحًا للقارئ: الآن سيتم تقديم دراجة خاصة بنا ، والتي ، بالطبع ، ستكون أعلى من أي تناظرية موجودة. كما لو نعم ، ولكن ليس حقا. في الحقيقة ، لم أستطع تحمل المحن مع myBase و TagSpaces ورسمت مدير المستندات الخاص بي ، وهو رابط سأقرب منه حتى النهاية. ومع ذلك ، فإن هذا المشروع الصغير للاحتياجات الشخصية لا يستحق في حد ذاته مقالة منفصلة ؛ أكتب أكثر لأنني وجدت أنه من المثير للاهتمام مشاركة الخبرة المكتسبة خلال العمل ، وعدد من المفاجآت غير السارة التي لم أستطع الاعتماد عليها.
الأهداف والغايات
بادئ ذي بدء ، لدي حياة مرهقة إلى حد ما الآن ، وليس هناك وقت لمشاريع هواية كاملة. لذلك ، منذ البداية ، قررت أنني كنت مستعدًا لنحت أداتي من أي مكونات ستأتي في متناول اليد ، إذا كان هذا من شأنه تسريع الأمور. بالإضافة إلى ذلك ، في الوقت الحالي أحاول تطبيق الحد الأدنى المطلق من الوظائف ، والتي لا يمكن الاستغناء عنها.
كيفية تخزين صفحات الويب على القرص؟ مع الأخذ في الاعتبار المتطلبات التي تمت صياغتها مسبقًا ، بدا لي أن الخيار كان صغيراً: إما تنسيق حفظ "صفحة الويب الكاملة" ، أي ملف HTML الرئيسي والمجلد مع الموارد ذات الصلة ، أو تنسيق MHTML. بدا الخيار الأول على الفور أقل تفضيلًا بالنسبة لي: ليس من الرائع أن يكون لديك نفايات على القرص من مجموعة من الملفات ، والتي تحتاج منها إلى استخراج مستندات ذات معنى ، وتصفية الفائض أثناء البحث ومراقبة النزاهة عند النسخ. عندما حاولت العمل مع TagSpaces ، اضطررت إلى إعادة حفظ جميع مستنداتي حتى يبدأ اسم مجلد المورد بنقطة: ثم عرفها النظام على أنها "مخفية" ولم يعرضها.
هذه المشكلة مخفية عن الأنظار في myBase ، لأن كل شيء يتم تخزينه في قاعدة البيانات ، ولكن في حالتي ساد مبدأ البساطة: أردت حقًا تخزين كل شيء في شكل ملفات عادية على القرص حتى لا أضطر إلى التعامل مع تنفيذ العمليات الروتينية مثل النسخ وإعادة التسمية والحذف والمزامنة .
تنسيق MHTML يمر بأوقات عصيبة. تم التخلص من طريقة سهلة لحفظ MHTML من Chrome هذا الصيف ، ولا أعرف حتى ما يُفترض الآن تخزين الصفحات؟ من الواضح أن الفرصة لم تختف بعد ، فهناك امتدادات لأطراف ثالثة ، لكن بشكل عام هذا نوع من العلامات السيئة. بالإضافة إلى ذلك ، لا يتم توفير الحفظ بتنسيق MHTML في Chromium Embedded Framework ، والذي لا يضيف أيضًا تفاؤلًا.
في موازاة ذلك ، بدأت في البحث عن طريقة سهلة لحفظ الصفحات من المتصفح إلى المجلد المحدد. نتيجةً لذلك ، تمكنت من حل كلتا المشكلتين بدم صغير: صادفت مشروعًا منفردًا رائعًا يمكنه حفظ محتويات صفحة الويب في ملف HTML مستقل منفصل. ويتم ذلك عن طريق تحويل جميع الموارد ذات الصلة إلى تنسيق base64 وتضمينه مباشرةً في HTML. بطبيعة الحال ، مع هذا ، ينمو حجم الملف ، ويبدو المحتوى قبيحًا بعض الشيء ، لكن بشكل عام ، بدا النهج موثوقًا وبسيطًا بالنسبة لي ، واستقرت عليه.
يأتي SingleFile كملحق مستعرض أو كتطبيق لسطر أوامر. الآن أنا فقط استخدم الامتداد: إنه مناسب تمامًا ، باستثناء حقيقة أنك تحتاج إلى تحديد مجلد الوجهة يدويًا لحفظه. في المستقبل ، سأحاول على الأرجح وضع اللمسات الأخيرة على التطبيق لتبسيط هذه العملية. للاتصال بتطبيق تابع لجهة خارجية من Chrome ، يمكنك استخدام ملحق " زر التطبيق الخارجي" - وهذا اكتشاف آخر مفيد لي. بالمناسبة ، استفاد التطبيق بالفعل: قمت بمساعدته بتحويل مجموعة المجلدات والملفات من TagSpaces إلى مجموعة من مستندات HTML المستقلة.
مشاحنات مع واجهة المستخدم الرسومية والمتصفح
يبدو لي أن Python مناسب تمامًا لجميع أنواع العمليات البسيطة مع الملفات والسلاسل ، وبما أنه يتم استخدام wxWidgets في أحد مشاريع العمل الخاصة بي ، فإن اختيار wxPython كإطار أساسي بدا منطقياً.
علاوة على ذلك ، بعد أن نظرت إلى عضاداتها مع عرض الصفحات في برامج أخرى ، خلصت بنفسي إلى أن الطريقة الوحيدة الموثوقة للتعامل معها هي تقديم متخيل يعتمد على متصفح حديث ، وهو Chrome أو Firefox ، في البرنامج.
يجب أن أعترف أنه في المرة الأخيرة التي كان علي فيها فعل شيء كهذا قبل حوالي 15 عامًا ، ولم أتوقع أي حيل قذرة. لقد تبين أن "لا يمكنك فقط تصفيق المتصفح على النموذج" أمر مستحيل: بطريقة ما ، فشلت البشرية في التعامل بشكل موثوق وعالمي مع هذه المهمة. يمكن وضع أي مربع قائمة أو زر في النموذج في أي إطار عمل واجهة المستخدم الرسومية ، وحتى إنشاء رمز عبر النظام الأساسي ، وبدا لي أنه في عام 2019 ، كان يجب أن يكون عرض HTML أيضًا مشكلة تم حلها عالميًا.
اتضح أنه في wxWidgets ، على سبيل المثال ، مكون "المستعرض" القياسي عبارة عن مجمّع عبر نظام أساسي فوق "مستعرض" يعتمد على النظام ، وهو ما يعني في حالة نظام التشغيل Windows ، Internet Explorer 7 ، والموقف في Windows Forms ليس أفضل ، وتتوفر إصدارات جديدة من IE9 فقط بمساعدة التلاعب التسجيل غير تافهة. كما ترون ، لم أكن خلال الـ 15 عامًا الماضية الوحيدة التي شاركت في أمور أخرى - هنا أيضًا ، لم يكن هناك شيء يتزحزح.
بعد ذلك ، كان لدي خيار: تغيير الإطار أو البحث عن مكون بديل للمتصفح. بعد تردد ، قررت تجربة الطريقة الثانية أولاً وسرعان ما واجهت مشروع Python CEF: روابط Python لـ Chromium Embedded Framework ، المصممة خصيصًا لمهمة تضمين Chromium في تطبيقات Python.
تقييم الموقف: بيثون هي واحدة من لغات البرمجة الأكثر شعبية في العالم ، كروم هو أساسا المحتكر في سوق المتصفح. في الوقت نفسه ، يتم دعم CEF Python فعليًا بواسطة طاقة شخص واحد وقوته وصحته. هل هناك من يحتاج حقا هذا بعد الآن؟
ومع ذلك ، لم يساعدني CEF Python في النهاية: على الرغم من أن المثال الأساسي للتكامل مع wxWidgets من مستودع المشروع هو عربات التي تجرها الدواب بشكل واضح ، فقد حاولت العبث بها لفترة أطول ، لكنني لم أستطع حل جميع المشكلات التي تنشأ. لن أخوض في الموضوع ، فمن غير المرجح أن يستحق ذلك.
لقد درست المكونات المستندة إلى Chromium Embedded Framework بمزيد من التفاصيل وقررت في النهاية تجربة الإصدار C # . نظرًا لأنني أعمل طوال الوقت تقريبًا مع Windows ، فإن احتمال التخلي عن النظام الأساسي المشترك لا يزعجني بشكل عام.
بعد بعض الصعوبات التي لا مفر منها في البداية ، سارت الأمور بشكل أسرع: اتضح أن مزيج CefSharp و Windows Forms أصبح فائزًا ، وكنت قادرًا على حل معظم المشكلات التقنية دون أي مشاكل.
حول لم تختبر
يمكنك محاولة تطبيق FireFox في تطبيق C # باستخدام مكون Geckofx ، لكن لا يمكنني أن أقول أي شيء بشأنه. يستند مكون مستعرض Qt القياسي المسمى QWebEngineView إلى Chromium ، لذلك لن يعمل على الأرجح أكثر من CefSharp.
قد يتم إغراء مشجعي كيو تي بالتعليق: يقولون ، سوف آخذ كيو تي ، ولن أواجه مشكلات. من الممكن أن تكون كذلك ، ولكن يمكن اعتبار wxWidgets ، إن لم يكن الأول ، ثم الخيار الثاني عند اختيار إطار عمل واجهة المستخدم الرسومية للتطبيقات في Python أو C ++. وفي رأيي المتواضع ، يجب تضمين شيء مثل المستعرض في أي إطار واجهة المستخدم الرسومية أكثر أو أقل تطوراً دون الرقص مع الدف.
WebLibrary
دعنا نعود ، على أي حال ، إلى طلبي بعنوان العمل WebLibrary . اليوم يبدو مثل (طبل لفة) مثل هذا:

بالإضافة إلى واجهة نظيفة وموجزة ، يتم تنفيذ الوظائف الأساسية فقط هنا:
- يعرض أي دليل محدد في النظام كمكتبة مستندات.
- عرض المستندات في نافذة المتصفح. التنقل في القائمة بالطريقة المعتادة (مفاتيح المؤشر ، PgUp ، PgDn ، Home ، End) ، التمرير في المستعرض باستخدام مفاتيح Space و Shift + Space.
- إعادة تسمية المستندات.
- قم بتمييز المستندات كمقروءة أو محددة باستخدام مفاتيح الاختصار.
- فرز الوثائق حسب أي مجال.
- تحديث نافذة التطبيق مع أي تغييرات في مجلد المكتبة.
- حفظ إعدادات النافذة عند الخروج.
قد يبدو كل هذا وظيفة تافهة ، ولكن ، لنفترض أن حفظ أحجام الأعمدة في TagSpaces لا يزال غير مدعوم - يبدو أن للمؤلفين أولويات مختلفة.
يتم تخزين الحالة (للقراءة / المحددة) ببساطة في اسم الملف ( doc.html
إعادة تسمية ملف read doc.html
إلى doc{R,S}.html
). لم يتم تنفيذ التزامن على هذا النحو ، لكنني احتفظ فقط بالمكتبة في Dropbox - في النهاية ، إنه مجرد مجلد به ملفات.
هناك خطط لوضع اللمسات الأخيرة على أشياء بسيطة مثل نقل وحذف الملفات ، وكذلك تنفيذ العلامات مع العلامات التعسفية. إذا أراد أي شخص المساعدة ، سأكون سعيدًا فقط.
النتائج
الأكثر مختلفة. كما قلت من البداية ، إنه لأمر مدهش مدى اختلاف أدوات شخص ما عن أدوات شخص آخر. من الطبيعي بالنسبة لي استخدام أداة مثل WebResearch ، وشعرت بعدم الراحة الجسدية تقريبًا من غيابها. في الوقت نفسه ، على ما يبدو ، لديّ عدد قليل من الأشخاص المتشابهين في التفكير ، وإلا لن تكون هناك مشكلة في العثور على نظائرهم. من ناحية أخرى ، تحدث حالات مماثلة مع الكثير من البرامج السائدة: على سبيل المثال ، لن تقوم Microsoft بتحديث إصدار سطح المكتب من OneNote ، لذلك يتعين علي استخدام إصدار 2016 ، وسأضطر عاجلاً أم آجلاً إلى الانتقال من مكان ما أيضًا.
الأمر الأكثر إثارة للدهشة هو مدى صعوبة التنقل في المشهد الحالي للمكتبات والأطر. كنتيجة لخدمي ، نادراً ما اضطر إلى كتابة تطبيقات سطح المكتب من البداية إلى النهاية ، وافترضت أن أي أداة لأي لغة برمجة ستكون مناسبة لمهمتي (نافذة واحدة ، ثلاثة مكونات ، تفاعلات تافهة). سنأخذ أي شيء مباشرةً وننفذ ذلك في غضون بضعة أيام.
اتضح أن الواقع أقل مواتاة بكثير ، ويمكنك أن تواجه مشكلة ببساطة من اللون الأزرق. دعنا نقول لدي اثنين من الخائن التي يمكن استخدامها لتوسيع نافذة المتصفح. لذلك ، فإن استعادة مواقعها بعد التحميل في wxWidgets أمر صعب للغاية ، لأن النظام يضعها في الموضع الافتراضي بعد كل الأحداث المتوفرة تقريبًا ، وعليك القيام بكل أنواع القرصنة للحصول على ما تحتاج إليه. من كان سيخمن؟
من ناحية أخرى ، من الواضح أنه في Windows Forms ، تم تصميم كل شيء حسب "واجهات العمل". تحول كل ما هو مطلوب تقريبًا إلى إمكانية الوصول إليه من المربع: كلاً من إعدادات حفظ / استعادة التطبيق ، وواجهة مريحة للمكونات (دعنا نقول ، لم أكن أتوقع أن مكون TreeView يمكن أن يطلب المسار الكامل من الجذر إلى أي عنصر فرعي كسلسلة) ، وأدوات غير تافهة مثل تعقب لتغيير محتويات مجلد
في أي حال ، فإن الوقت الضائع لا تذهب سدى ، والنتيجة يمكن اعتبارها مرضية ، فما الذي يمكن أن يريده المرء أكثر من الحياة ، أليس كذلك؟