"سأقرأها لاحقًا": المصير الصعب لمجموعة من صفحات الإنترنت غير المتصلة بالإنترنت

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

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

"سأقرأها لاحقًا": المصير الصعب لمجموعة من صفحات الإنترنت غير المتصلة بالإنترنت
النافذة الرئيسية لأبحاث الويب، أسبوع الكمبيوتر/إعادة رقم 17 (575)

طريق خيبة الأمل

بمجرد أن أصبح من الواضح أنه لا يمكن تجنب الاستبدال، بدأت في الخلفية بالبحث عن نظير لائق. بدا لي أنه لن تكون هناك أي صعوبات خاصة هنا، لأن رغباتي متواضعة للغاية. لقد كنت على استعداد للاكتفاء بمجموعة فرعية صغيرة فقط من أدوات WebResearch، بما في ذلك:

  • حفظ صفحة HTML من المتصفح باستخدام ملحق؛
  • على الأقل الحد الأدنى من أدوات الفهرسة (إعادة التسمية، وتنظيم الكتالوجات، والعلامات)؛
  • (يفضل) دعم مستندات PDF؛
  • أي طريقة مناسبة لمزامنة مجموعتك مع الأجهزة الأخرى.

لدهشتي، لم أتمكن من العثور على أي شيء مماثل، على الرغم من أنني بحثت بأمانة في الإنترنت على نطاق واسع ودرست بعناية عشرات البرامج التي تطابق التعليقات التوضيحية (باستثناء Evernote، حيث لا تتوفر وظائف مماثلة في الوصف إلا عن طريق الاشتراك). اليوم، الشيء الوحيد الذي يرضي رغباتي بطريقة أو بأخرى على الأقل هو المشاريع مساحات العلامات и mybase. دراستهم، بشكل عام، ذات أهمية ثقافية معينة.

يعد TagSpaces منظمًا "شبابيًا أنيقًا" على Electron مع موقع ويب جميل وتخطيط متكيف وبالطبع سمة داكنة، أين سنكون بدونها. في الوقت نفسه، يشغل جدول محتويات المجموعة المشؤوم ذو الأيقونات المستديرة العصرية نصف الشاشة، بينما يستوعب حوالي عشرين عنصرًا على الأكثر، وتتم كتابة الأشياء الأساسية مثل دعم مفاتيح التشغيل السريع أو عرض المستند الذي يتم عرضه وفقا للمبدأ المتبقي. ونتيجة لذلك، يتم عرض المستندات بشكل ملتوي، ويتحول العمل مع المجموعة إلى مجموعة من التمارين المملة والمستهلكة للوقت باستخدام الماوس.

يأتي antipode myBase من أواخر التسعينات: هنا بالإضافة إلى واجهة وظيفية بحتة لدينا مجموعة غنية للغاية من الإعدادات والوظائف. ومع ذلك، فإن نافذة العرض هنا هي نفس المتصفح المستند إلى IE القديم (مما يجعل القراءة صعبة بالفعل)، ويتم تخزين جميع المستندات في قاعدة بيانات متجانسة. إذا قمت بوضعه في مجلد Dropbox، على سبيل المثال (لا توجد طرق أخرى للمزامنة مع الأجهزة الأخرى)، فعند أدنى تغيير في المجموعة، عليك الانتظار حتى يتم تحميل مئات الميجابايت من المعلومات إلى الخادم.

تحول لحظة

من المحتمل أن المحتوى الإضافي للملاحظة يبدو واضحًا للقارئ: الآن سنُعرض علينا دراجتنا الخاصة، والتي، بالطبع، ستكون أعلى من أي نظير موجود. نعم نوعًا ما، لكن ليس تمامًا. لم أتمكن حقًا من تحمل محنة myBase وTagSpaces وقمت برسم مدير المستندات الخاص بي، وهو الرابط الذي سأقدمه قرب النهاية. ومع ذلك، فإن هذا المشروع الشخصي الصغير لن يستحق مقالًا خاصًا به في حد ذاته؛ أكتب إلى حد كبير لأنني اعتقدت أنه سيكون من المثير للاهتمام مشاركة الخبرة التي اكتسبتها خلال عملي وعدد من المفاجآت غير السارة التي لم أتوقعها أبدًا.

الأهداف والغايات

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

تنسيق البيانات وحفظ الصفحة

بأي شكل يجب تخزين صفحات الويب على القرص؟ مع الأخذ في الاعتبار المتطلبات التي تمت صياغتها مسبقًا، بدا لي أن الاختيار كان صغيرًا: إما تنسيق حفظ "صفحة الويب بأكملها"، أي ملف HTML الرئيسي والمجلد بالموارد المرتبطة، أو تنسيق MHTML. بدا الخيار الأول على الفور أقل تفضيلاً بالنسبة لي: ليس هناك الكثير من الفرح في وجود كومة من الملفات على القرص الخاص بك، والتي ستحتاج منها إلى استخراج المستندات المهمة، وتصفية المستندات غير الضرورية عند البحث، ومراقبة السلامة عند النسخ. عندما حاولت العمل مع TagSpaces، اضطررت إلى إعادة حفظ جميع المستندات الخاصة بي بحيث يبدأ اسم مجلد المورد بنقطة: ثم تعرف عليها النظام على أنها "مخفية" ولم يعرضها.

هذه المشكلة مخفية عن العرض في myBase، حيث يتم تخزين كل شيء في قاعدة البيانات، ولكن في حالتي ساد مبدأ البساطة: أردت حقًا تخزين كل شيء كملفات عادية على القرص حتى لا أضطر إلى التعامل مع تنفيذ العمليات الروتينية مثل النسخ وإعادة التسمية والحذف والمزامنة.

يمر تنسيق MHTML بأوقات عصيبة. طريقة سهلة لحفظ MHTML تم طرده من Chrome هذا الصيفولا أعرف حتى أين من المفترض أن يتم تخزين الصفحات الآن؟ من الواضح أن الفرصة لم تضيع بعد، فهناك امتدادات لجهات خارجية، ولكن بشكل عام فهذه علامة سيئة. بالإضافة إلى ذلك، الحفظ بتنسيق MHTML غير مدعوم في Chromium Embedded Frameworkوهو ما لا يضيف التفاؤل أيضًا.

في الوقت نفسه، بدأت في البحث عن طريقة بسيطة لحفظ الصفحات من المتصفح إلى مجلد محدد. ونتيجة لذلك، تم حل كلتا المشكلتين دون خسارة تذكر: لقد صادفت مشروعًا رائعًا ملف واحد، قادر على حفظ محتويات صفحة الويب في ملف HTML منفصل ومستقل. ويتم ذلك عن طريق تحويل كافة الموارد المرتبطة إلى تنسيق base64 وتضمينها مباشرة في HTML. بالطبع، ينمو حجم الملف، وتبدو المحتويات مزدحمة بعض الشيء، ولكن بشكل عام بدا لي النهج موثوقًا وبسيطًا، واستقرت عليه.

يأتي SingleFile كملحق للمتصفح وتطبيق سطر الأوامر. الآن أستخدم الامتداد فقط: إنه مناسب تمامًا، باستثناء حقيقة أنه يتعين عليك تحديد المجلد الهدف يدويًا لحفظه. في المستقبل، ربما سأحاول تحسين التطبيق لتبسيط هذه العملية. للاتصال بتطبيق جهة خارجية من Chrome، يمكنك استخدام الامتداد زر التطبيق الخارجي - هذا اكتشاف مفيد آخر لي. بالمناسبة، كان التطبيق مفيدًا بالفعل: بمساعدته قمت بتحويل مجموعة من المجلدات والملفات من TagSpaces إلى مجموعة من مستندات HTML المستقلة.

مشكلة في واجهة المستخدم الرسومية والمتصفح

لقد وجدت أن لغة Python جيدة لجميع أنواع عمليات الملفات والسلاسل البسيطة، وبما أن أحد مشاريع عملي يستخدمها كويدغيتس، خيار wxPython يبدو منطقيا كإطار رئيسي.

علاوة على ذلك، بعد أن رأيت ما يكفي من المشاكل في عرض الصفحات في البرامج الأخرى، توصلت إلى استنتاج مفاده أن الطريقة الوحيدة الموثوقة للتعامل معها هي إدخال متخيل في البرنامج يعتمد على متصفح حديث، أي Chrome أو Firefox.

يجب أن أعترف أن آخر مرة اضطررت فيها إلى القيام بشيء كهذا كانت منذ حوالي 15 عامًا، ولم أتوقع أي مخاطر. اتضح أنه من المستحيل "مجرد صفعة المتصفح على النموذج": بطريقة ما لم تكن البشرية قادرة على التعامل مع هذه المهمة بشكل موثوق وعالمي. يمكن وضع نوع ما من مربعات القائمة أو الأزرار الموجودة في النموذج في أي إطار عمل لواجهة المستخدم الرسومية، وحتى إنشاء تعليمات برمجية مشتركة بين الأنظمة الأساسية، وبدا لي أنه في عام 2019، كان من المفترض أن يكون عرض HTML أيضًا مشكلة تم حلها عالميًا.

اتضح أنه في wxWidgets، على سبيل المثال، يكون مكون "المتصفح" القياسي عبارة عن غلاف مشترك بين الأنظمة الأساسية فوق "المتصفح" المعتمد على النظام، وهو ما يعني في حالة نظام التشغيل Windows، على سبيل المثال، إنترنت إكسبلورر 7، والوضع في Windows Forms ليس أفضل، والإصدارات الأحدث من IE9 متاحة فقط باستخدام غير تافه التلاعب بالتسجيل. وكما ترون، فأنا لست الوحيد الذي كان يفعل أشياء أخرى على مدار الخمسة عشر عامًا الماضية، ولم يتزحزح أي شيء هنا أيضًا.

ثم واجهت خيارًا: تغيير إطار العمل أو البحث عن مكون بديل للمتصفح. وبعد تردد، قررت تجربة المسار الثاني أولاً وسرعان ما صادفت المشروع CEF Python: روابط Python لإطار عمل Chromium Embedded Framework، مصمم خصيصًا لمهمة تضمين Chromium في تطبيقات Python.

قم بتقييم الموقف: تعد Python إحدى لغات البرمجة الأكثر شهرة في العالم، ويعتبر Chrome في الأساس محتكرًا لسوق المتصفحات. في الوقت نفسه، يتم دعم CEF Python فعليًا بالطاقة شخص واحدوالقوة والصحة له. ألا يحتاج أحد حقًا إلى هذا بعد الآن؟..

ومع ذلك، لم يساعدني CEF Python في النهاية: على الرغم من أن المثال الأساسي للتكامل مع wxWidgets من مستودع المشروع هو بصراحة عربات التي تجرها الدواب، إلا أنني حاولت العبث به أكثر، لكنني لم أتمكن من حل جميع المشكلات التي نشأت. لن أتعمق أكثر في الموضوع فهو لا يستحق ذلك.

لقد بحثت في المكونات المستندة إلى Chromium Embedded Framework بمزيد من التفاصيل وقررت أخيرًا تجربتها النسخة لـ C#. نظرًا لأنني أعمل طوال الوقت تقريبًا مع Windows، فإن احتمال التخلي عن الوظائف عبر الأنظمة الأساسية، بشكل عام، لم يزعجني بشكل خاص.

بعد بعض الضجة الحتمية في البداية، سارت الأمور بشكل أسرع بكثير: تبين أن الجمع بين CefSharp وWindows Forms هو الفائز، وتمكنت من حل معظم المشكلات الفنية دون أي مشاكل.

حول غير مجرب

يمكنك أيضًا محاولة تطبيق FireFox في تطبيق C# باستخدام المكون جيكوفكسلكن لا أستطيع أن أقول أي شيء عنه. أحد مكونات المتصفح القياسية لإطار عمل Qt يسمى QWebEngineView تأسست على الكروم، لذا فمن المحتمل أن يعمل مثل CefSharp.

قد يميل محبو كيو تي إلى التعليق: لو أنهم تناولوا كيو تي، لما واجهوا أي مشاكل. قد يكون هذا صحيحًا، لكن يمكن اعتبار wxWidgets، إن لم يكن الأول، الخيار الثاني عند اختيار إطار عمل واجهة المستخدم الرسومية (GUI) للتطبيقات في Python أو C++. وفي رأيي المتواضع، يجب دمج شيء مثل المتصفح في أي إطار عمل لواجهة المستخدم الرسومية أكثر أو أقل تطورًا دون الرقص مع الدف.

مكتبة الويب

ومع ذلك، دعنا نعود إلى طلبي بعنوان العمل مكتبة الويب. اليوم يبدو (لفة الطبل) مثل هذا:

"سأقرأها لاحقًا": المصير الصعب لمجموعة من صفحات الإنترنت غير المتصلة بالإنترنت

بالإضافة إلى واجهة نظيفة وموجزة يتم تنفيذ الوظائف الأساسية فقط هنا:

  • عرض أي دليل محدد في النظام كمكتبة مستندات.
  • عرض المستندات في نافذة المتصفح. انتقل عبر القائمة بالطريقة المعتادة (مفاتيح المؤشر، PgUp، PgDn، Home، End)، وقم بالتمرير عبر المتصفح باستخدام مفتاحي Space وShift+Space.
  • إعادة تسمية المستندات.
  • قم بتمييز المستندات كمقروءة أو مفضلة باستخدام مفاتيح الاختصار.
  • فرز المستندات حسب أي مجال.
  • يقوم بتحديث نافذة التطبيق عند وجود أية تغييرات في مجلد المكتبة.
  • حفظ إعدادات النافذة عند الخروج.

قد يبدو كل هذا كوظيفة تافهة، ولكن، على سبيل المثال، لا يزال حفظ أحجام الأعمدة في TagSpaces غير مدعوم - على ما يبدو، لدى المؤلفين أولويات أخرى.

يتم تخزين الحالة (قراءة/مفضلة) ببساطة في اسم الملف (قراءة الملف doc.html إعادة تسميته إلى doc{R,S}.html). لا توجد مزامنة على هذا النحو، لكنني ببساطة أحتفظ بالمكتبة في Dropbox - فهي مجرد مجلد يحتوي على ملفات.

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

النتائج

متنوع. كما قلت منذ البداية، إنه لأمر مدهش مدى اختلاف مجموعة أدوات شخص ما عن شخص آخر. إن استخدام أداة مثل WebResearch أمر طبيعي بالنسبة لي، وشعرت بعدم الراحة الجسدية تقريبًا بسبب غيابها. في الوقت نفسه، على ما يبدو، لدي عدد قليل من الأشخاص ذوي التفكير المماثل، وإلا فلن تكون هناك مشاكل في العثور على نظائرها. من ناحية أخرى، تحدث حالات مماثلة مع برامج أكثر شيوعًا: على سبيل المثال، لن تقوم Microsoft بتحديث إصدار سطح المكتب من OneNote، لذلك فأنا مجبر على استخدام إصدار 2016، وعاجلاً أم آجلاً سأضطر أيضًا إلى الانتقال من في مكان ما.

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

لقد اتضح أن الواقع أقل خيرًا بكثير، ويمكنك ببساطة أن تواجه مشكلة فجأة. لنفترض أن لدي مقسمين يمكن استخدامهما لتمديد نافذة المتصفح. لذا، فإن استعادة مواضعها بعد التحميل في wxWidgets أمر صعب للغاية، حيث أن النظام يضعها في المواضع الافتراضية بعد كل الأحداث المتاحة لي تقريبًا، ولا بد لي من القيام بجميع أنواع القرصنة لتحقيق ما أحتاج إليه. من كان سيخمن؟

من ناحية أخرى، من الواضح أن كل شيء في Windows Forms مصمم لـ "واجهات الأعمال". كان كل ما هو مطلوب تقريبًا متاحًا خارج الصندوق: حفظ/استعادة إعدادات التطبيق، وواجهة ملائمة للمكونات (على سبيل المثال، لم أكن أتوقع أنه يمكن مطالبة مكون TreeView بالمسار الكامل من الجذر إلى أي عنصر فرعي) في شكل سلسلة)، وأدوات غير تافهة مثل أداة تعقب تغيير محتوى المجلد.

على أية حال، لم يضيع الوقت، ويمكن اعتبار النتيجة مرضية، فماذا تريد أكثر من الحياة، أليس كذلك؟

المصدر: www.habr.com

إضافة تعليق