"Keyinroq o'qiyman": Internet sahifalarining oflayn to'plamining qiyin taqdiri

Shunday dasturiy ta'minot turlari mavjudki, ularsiz ba'zi odamlar yashay olmaydi, boshqalari esa bunday narsa mavjudligini yoki unga umuman muhtojligini tasavvur ham qila olmaydi. Men uchun ko'p yillar davomida bu dastur edi Macropool WebResearch, bu sizga Internet sahifalarini o'ziga xos oflayn kutubxonaga saqlash, o'qish va tartibga solish imkonini berdi. Ishonchim komilki, bizning ko'plab o'quvchilarimiz havolalar to'plami yoki brauzer va saqlangan hujjatlar to'plamiga ega papka kombinatsiyasi bilan yaxshi ishlaydi. Men hech bo'lmaganda hujjatlarni "o'qilgan" yoki "sevimlilar" deb belgilashni, tezda bir matndan ikkinchisiga o'tishni va Internet yoki ma'lum bir saytning mavjudligiga bog'liq bo'lmaslikni xohlayman. Internet yo'q bo'lganda (masalan, yo'lda) o'qish uchun vaqt bor va havolalar, afsuski, ko'pincha qisqa muddatli bo'lib chiqadi.

Ko'rinishidan, WebResearch mualliflari taxminan bu odamlarga ishonishgan. Ushbu dastur turli xil funktsiyalarga ega edi: bo'limlar va teglar bo'yicha kataloglash, eslatmalarni tahrirlash, eksport/importning barcha turlari va boshqalar. Biroq, taxminan 2013 yilda loyiha yangilanishni to'xtatdi, keyin esa ishlab chiquvchining veb-sayti mavjud bo'lishni to'xtatdi. Yana bir necha yil davomida men bu otni minishga muvaffaq bo'ldim, lekin avval brauzer plaginlari ishlamay qoldi (faqat o'sha paytdagi IE va FireFox versiyalari uchun mavjud), keyin zamonaviy saytlar eski IE dvigateliga asoslangan tomoshabinda normal ko'rsatilishini to'xtatdi.

"Keyinroq o'qiyman": Internet sahifalarining oflayn to'plamining qiyin taqdiri
WebResearch asosiy oynasi, Kompyuter haftaligi/RE № 17 (575)

Ko'ngilsizliklar yo'li

O'zgartirishdan qochib bo'lmasligi aniq bo'lishi bilanoq, fonda men munosib analogni qidira boshladim. Nazarimda, bu erda hech qanday qiyinchilik bo'lmaydi, chunki mening istaklarim juda kamtar. Men WebResearch vositalarining kichik bir qismi bilan ishlashga tayyor edim, jumladan:

  • kengaytma yordamida brauzerdan HTML sahifani saqlash;
  • kamida minimal kataloglash vositalari (nomini o'zgartirish, kataloglarni tartibga solish, teglar);
  • (afzal) PDF hujjatlarini qo'llab-quvvatlash;
  • to'plamingizni boshqa qurilmalar bilan sinxronlashtirishning har qanday munosib usuli.

Ajablanarlisi shundaki, men shunga o'xshash narsani topa olmadim, garchi men halollik bilan Internetni uzoq va keng ko'rib chiqdim va izohlarga mos keladigan o'nlab dasturlarni sinchkovlik bilan o'rgandim (Evernote bundan mustasno, bu erda tavsifga o'xshash funksiya faqat obuna orqali mavjud). Bugungi kunda hech bo'lmaganda mening istaklarimni qondiradigan yagona narsa - bu loyihalar TagSpaces и myBase. Ularni o'rganish, umuman olganda, ma'lum bir madaniy qiziqish uyg'otadi.

TagSpaces - Electron-da chiroyli veb-sayt, moslashtirilgan tartib va, albatta, qorong'u mavzu bilan "zamonaviy-moda-yoshlar" tashkilotchisi, usiz biz qayerda bo'lardik. Shu bilan birga, moda yumaloq piktogrammalari bilan to'plamning yomon mazmuni ko'pi bilan yigirmaga yaqin elementni o'z ichiga olgan holda ekranning yarmini egallaydi va tezkor tugmachalarni qo'llab-quvvatlash yoki ko'rilayotgan hujjatni ko'rsatish kabi asosiy narsalar yozilgan. qoldiq printsipiga ko'ra. Natijada, hujjatlar egri ko'rsatiladi va to'plam bilan ishlash sichqoncha bilan zerikarli va ko'p vaqt talab qiladigan mashqlar to'plamiga aylanadi.

Uning antipodi myBase XNUMX-yillarning oxiridan keladi: bu erda, bundan tashqari sof funktsional interfeys bizda juda boy sozlamalar va funksiyalar to'plami mavjud. Biroq, bu erda ko'rish oynasi eski IE-ga asoslangan bir xil brauzerdir (bu allaqachon o'qishni qiyinlashtiradi) va barcha hujjatlar monolit ma'lumotlar bazasida saqlanadi. Agar siz uni Dropbox jildiga qo'ysangiz, masalan (boshqa qurilmalar bilan sinxronlashning boshqa usullari hali ham mavjud emas), to'plamdagi eng kichik o'zgarishlar bilan serverga yuzlab megabaytlik ma'lumotlar yuklanmaguncha kutishingiz kerak.

Burilish nuqtasi

Ehtimol, eslatmaning keyingi mazmuni o'quvchiga ravshan bo'lib tuyuladi: endi bizga o'z velosipedimizni taklif qilishadi, bu, albatta, har qanday mavjud analogdan ustun turadi. Ha, lekin unchalik emas. Men haqiqatan ham myBase va TagSpaces bilan qilingan sinovlarga dosh berolmadim va o'zimning hujjat boshqaruvchimning eskizini chizdim, bu havolani oxirigacha taqdim etaman. Biroq, bu kichik shaxsiy loyiha o'z-o'zidan o'z maqolasiga loyiq emas; Men yozyapman, chunki men ish paytida to'plagan tajribam va men kutmagan bir qator noxush kutilmagan hodisalar bilan bo'lishish qiziqarli bo'ladi deb o'yladim.

Maqsad va vazifalar

Men hozir juda band hayotim borligidan boshlaylik va menda to'liq hobbi loyihalariga vaqtim yo'q. Shuning uchun, men boshidanoq, agar bu ishlarni tezlashtiradigan bo'lsa, asbobimni qo'limga kelgan har qanday komponentdan haykaltaroshlikka tayyorman, deb qaror qildim. Bundan tashqari, men hozircha funksionallikning mutlaq minimalini amalga oshirishga majburman, bu holda amalga oshirish mutlaqo mumkin emas.

Ma'lumotlar formati va sahifani saqlash

Veb-sahifalar diskda qanday shaklda saqlanishi kerak? Oldin ishlab chiqilgan talablarni inobatga olgan holda, menga tanlov unchalik katta bo'lmagandek tuyuldi: yoki "butun veb-sahifani" saqlash formati, ya'ni asosiy HTML fayli va unga bog'liq resurslarga ega papka yoki MHTML formati. Birinchi variant men uchun darhol unchalik ma'qul bo'lmagandek tuyuldi: diskda fayllarning axlat qutisiga ega bo'lishdan juda xursand bo'lmaysiz, undan muhim hujjatlarni chiqarib olishingiz, qidirishda keraksizlarini filtrlashingiz va nusxa ko'chirishda yaxlitligini kuzatishingiz kerak bo'ladi. TagSpaces bilan ishlashga harakat qilganimda, men barcha hujjatlarimni resurs papkasining nomi nuqta bilan boshlanishi uchun qayta saqlashim kerak edi: keyin tizim ularni "yashirin" deb tan oldi va ularni ko'rsatmadi.

Bu muammo myBase-da ko'zdan yashirilgan, chunki hamma narsa ma'lumotlar bazasida saqlanadi, lekin mening holimda oddiylik printsipi ustunlik qildi: men hamma narsani oddiy fayllar sifatida saqlashni xohlardim, shunda men amalga oshirish bilan shug'ullanmayman. nusxa ko'chirish, nomini o'zgartirish, o'chirish va sinxronlash kabi muntazam operatsiyalar.

MHTML formati qiyin kunlarni boshdan kechirmoqda. MHTMLni saqlashning oson usuli shu yozda Chrome brauzeridan chiqarildi, va men hozir sahifalar qayerda saqlanishi kerakligini ham bilmaymanmi? Imkoniyat hali yo'qolmagani aniq, uchinchi tomon kengaytmalari mavjud, ammo umuman olganda bu qandaydir yomon belgidir. Bundan tashqari, MHTML formatida saqlash Chromium Embedded Framework-da qo'llab-quvvatlanmaydi, bu ham optimizmni qo'shmaydi.

Shu bilan birga, men sahifalarni brauzerdan belgilangan papkaga saqlashning oddiy usulini izlay boshladim. Natijada, ikkala muammo ham ozgina yo'qotish bilan hal qilindi: men ajoyib loyihaga duch keldim SingleFile, veb-sahifa mazmunini alohida mustaqil HTML faylida saqlashga qodir. Bu barcha bog'langan resurslarni base64 formatiga aylantirish va ularni to'g'ridan-to'g'ri HTMLga joylashtirish orqali amalga oshiriladi. Albatta, fayl hajmi kattalashadi va mazmuni biroz chigal ko'rinadi, lekin umuman olganda, yondashuv menga ishonchli va sodda bo'lib tuyuldi va men bunga qaror qildim.

SingleFile ham brauzer kengaytmasi, ham buyruq qatori ilovasi sifatida keladi. Endi men shunchaki kengaytmadan foydalanaman: bu juda qulay, faqat saqlash uchun maqsadli papkani qo'lda tanlashingiz kerak. Kelajakda, ehtimol, bu jarayonni soddalashtirish uchun ilovani yaxshilashga harakat qilaman. Chrome'dan uchinchi tomon dasturiga qo'ng'iroq qilish uchun siz kengaytmadan foydalanishingiz mumkin Tashqi dastur tugmasi - bu mening yana bir foydali kashfiyotim. Aytgancha, dastur allaqachon foydali bo'lgan: uning yordami bilan men TagSpaces-dan papkalar va fayllar to'plamini mustaqil HTML hujjatlari to'plamiga aylantirdim.

GUI va brauzer bilan muammo

Men Pythonni har qanday oddiy fayl va string operatsiyalari uchun yaxshi deb topdim va mening ish loyihalarimdan biri foydalanadi wxVidjetlar, tanlov wxPython asosiy ramka sifatida mantiqiy tuyuldi.

Bundan tashqari, boshqa dasturlarda sahifalarni ko'rsatishda etarlicha muammolarni ko'rib, men ularni hal qilishning yagona ishonchli usuli zamonaviy brauzer, ya'ni Chrome yoki Firefox asosida dasturga vizualizatorni kiritish degan xulosaga keldim.

Tan olishim kerakki, oxirgi marta bunday ishni taxminan 15 yil oldin qilishim kerak edi va men hech qanday tuzoq kutmagan edim. Ma'lum bo'lishicha, "brauzerni formaga urish" mumkin emas: qandaydir tarzda insoniyat bu vazifani ishonchli va universal tarzda bajara olmadi. Shakldagi ro'yxat qutisi yoki tugmachalari istalgan GUI tizimiga joylashtirilishi va hatto platformalararo kodni yaratishi mumkin va menga 2019 yilda HTML displeyi ham universal hal qilingan muammo bo'lishi kerak edi.

Ma'lum bo'lishicha, masalan, wxWidgets-da standart "brauzer" komponenti tizimga bog'liq bo'lgan "brauzer" ustidan o'zaro platforma o'ramidir, bu, masalan, Windows misolida, Internet Explorer 7, va Windows Forms-dagi vaziyat yaxshiroq emas va IE9 dan yangi versiyalar faqat ahamiyatsiz bo'lmagan holda mavjud ro'yxatga olish kitobi manipulyatsiyasi. Ko'rib turganingizdek, men so'nggi 15 yil davomida boshqa ishlar bilan shug'ullangan yagona odam emasman - bu erda ham hech narsa siljigan emas.

Keyin men tanlovga duch keldim: ramkani o'zgartirish yoki brauzer uchun muqobil komponentni izlash. Ikkilanib, men birinchi navbatda ikkinchi yo'lni sinab ko'rishga qaror qildim va tezda loyihaga duch keldim CEF Python: Chromium Embedded Framework uchun Python ulanishlari, Chromium-ni Python ilovalariga joylashtirish vazifasi uchun maxsus ishlab chiqilgan.

Vaziyatni baholang: Python dunyodagi eng mashhur dasturlash tillaridan biri, Chrome asosan brauzer bozorida monopolist hisoblanadi. Shu bilan birga, CEF Python aslida energiya bilan quvvatlanadi bitta yigit, unga kuch va sog'liq. Bu endi hech kimga kerak emasmi?..

Biroq, CEF Python menga oxir-oqibat yordam bermadi: hatto loyiha omboridagi wxWidgets bilan integratsiyaning asosiy misoli ham ochiqchasiga noto'g'ri bo'lsa ham, men u bilan ko'proq shug'ullanishga harakat qildim, lekin yuzaga kelgan barcha muammolarni hal qila olmadim. Men mavzuga chuqurroq kirmayman ham, u bunga loyiq emas.

Men Chromium Embedded Framework asosidagi komponentlarni batafsil ko‘rib chiqdim va nihoyat sinab ko‘rishga qaror qildim. C# uchun versiya. Men deyarli har doim Windows bilan ishlaganim sababli, platformalararo funksiyalardan voz kechish istiqboli, umuman olganda, meni bezovta qilmadi.

Boshida muqarrar shov-shuvlardan so'ng, ishlar ancha tezlashdi: CefSharp va Windows Forms kombinatsiyasi g'olib bo'ldi va men ko'pgina texnik muammolarni hech qanday muammosiz hal qila oldim.

Sinab ko'rilmaganlar haqida

Komponentdan foydalanib, siz FireFox-ni C# ilovasiga kiritishga urinib ko'rishingiz mumkin Geckofx, lekin men u haqida hech narsa deya olmayman. Qt ramkaning standart brauzer komponenti chaqirildi QWebEngineView asoslangan Chromium-da, shuning uchun u CefSharp kabi ishlaydi.

Qt muxlislari izoh berishga vasvasaga tushishlari mumkin: agar ular Qtni qabul qilgan bo'lsalar, ular hech qanday muammoga duch kelmagan bo'lardi. Bu to'g'ri bo'lishi mumkin, lekin Python yoki C++ ilovalari uchun GUI ramkasini tanlashda wxWidgetlar birinchi bo'lmasa, ikkinchi variant sifatida ko'rib chiqilishi mumkin. Va mening kamtarona fikrimcha, brauzer kabi narsa daf bilan raqsga tushmasdan ko'proq yoki kamroq rivojlangan GUI tizimiga o'rnatilishi kerak.

Veb-kutubxona

Keling, ish nomi bilan mening arizamga qaytaylik Veb-kutubxona. Bugungi kunda u (baraban rulosi) quyidagicha ko'rinadi:

"Keyinroq o'qiyman": Internet sahifalarining oflayn to'plamining qiyin taqdiri

Bundan tashqari toza va ixcham interfeys Bu erda faqat eng asosiy funktsiyalar amalga oshiriladi:

  • Tizimdagi har qanday belgilangan katalogni hujjatlar kutubxonasi sifatida ko'rsatish.
  • Hujjatlarni brauzer oynasida ko'rish. Roʻyxat boʻylab odatiy usulda harakatlaning (kursor tugmalari, PgUp, PgDn, Home, End), Space va Shift+Space tugmalari yordamida brauzer boʻylab aylantiring.
  • Hujjatlarni qayta nomlash.
  • Tezkor tugmalar yordamida hujjatlarni o'qilgan yoki sevimlilar sifatida belgilang.
  • Hujjatlarni istalgan maydon bo'yicha saralash.
  • Kutubxona papkasida har qanday o'zgarishlar mavjud bo'lganda dastur oynasini yangilaydi.
  • Chiqish paytida oyna sozlamalarini saqlang.

Bularning barchasi arzimas funksionallik kabi ko'rinishi mumkin, ammo aytaylik, TagSpaces-da ustun o'lchamlarini saqlash hali ham qo'llab-quvvatlanmaydi - aftidan, mualliflar boshqa ustuvorliklarga ega.

Holat (o'qilgan/sevimli) shunchaki fayl nomida saqlanadi (faylni o'qish doc.html deb qayta nomlandi doc{R,S}.html). Sinxronizatsiya yo'q, lekin men kutubxonani Dropbox-da saqlayman - axir bu shunchaki fayllar bilan papka.

Hali ham fayllarni ko'chirish va o'chirish kabi oddiy narsalarni yaxshilash, shuningdek, o'zboshimchalik teglar bilan teglashni amalga oshirish rejalari mavjud. Agar kimdir yordam berishni xohlasa, men faqat xursand bo'laman.

topilmalar

Turli xillik. Men boshidan aytganimdek, bir kishining asboblar to'plami boshqasidan qanchalik farq qilishi ajablanarli. WebResearch kabi vositadan foydalanish menga tabiiy ravishda keladi va men uning yo'qligidan deyarli jismoniy noqulaylikni his qildim. Shu bilan birga, menda hamfikrlar kam, aks holda analoglarni topishda hech qanday muammo bo'lmaydi. Boshqa tomondan, shunga o'xshash holatlar ko'proq asosiy dasturiy ta'minot bilan sodir bo'ladi: masalan, Microsoft OneNote-ning ish stoli versiyasini yangilamoqchi emas, shuning uchun men 2016 versiyasidan foydalanishga majburman va ertami-kechmi men ham o'tishim kerak bo'ladi. qayerdadir.

Ajablanarlisi shundaki, kutubxonalar va ramkalarning hozirgi manzarasida harakat qilish qanchalik qiyin. Mening ishim bo'yicha men kamdan-kam hollarda ish stoli ilovalarini boshidan oxirigacha yozishim kerak va men har qanday dasturlash tili uchun tom ma'noda har qanday vosita mening vazifamga mos keladi deb o'ylardim (bitta oyna, uchta komponent, ahamiyatsiz o'zaro ta'sirlar). Shunday qilib, biz hamma narsani olib, bir necha kun ichida qilamiz.

Ma'lum bo'lishicha, haqiqat unchalik xayrixoh emas va siz kutilmaganda muammoga duch kelishingiz mumkin. Aytaylik, menda brauzer oynasini kengaytirish uchun ishlatilishi mumkin bo'lgan ikkita splitter bor. Shunday qilib, wxWidgets-ga yuklangandan so'ng ularning o'rnini tiklash juda qiyin, chunki tizim men uchun mavjud bo'lgan deyarli barcha hodisalardan so'ng ularni standart pozitsiyalarga qo'yadi va men kerakli narsaga erishish uchun har qanday xakerlik qilishim kerak. Kim taxmin qilgan bo'lardi?

Boshqa tomondan, Windows Forms-da hamma narsa "biznes interfeyslari" uchun mo'ljallanganligi aniq. Zarur bo'lgan deyarli hamma narsa qutidan tashqarida mavjud edi: dastur sozlamalarini saqlash/tiklash, komponentlarning qulay interfeysi (masalan, TreeView komponentidan ildizdan har qanday asosiy elementga to'liq yo'l so'rashini kutmagan edim. satr shaklida) va jild tarkibini o'zgartirish kuzatuvchisi kabi ahamiyatsiz bo'lmagan vositalar.

Qanday bo'lmasin, vaqt behuda ketmadi va natijani qoniqarli deb hisoblash mumkin, shuning uchun hayotdan yana nimani xohlaysiz, to'g'rimi?

Manba: www.habr.com

a Izoh qo'shish