"Saya akan membacanya nanti": nasib yang sulit dari kumpulan halaman web offline

Ada beberapa jenis perangkat lunak, yang tanpanya beberapa orang tidak dapat hidup, sementara yang lain bahkan tidak membayangkan bahwa hal seperti itu ada dan seseorang membutuhkannya sama sekali. Bagi saya, selama bertahun-tahun, program semacam itu adalah Macropool WebResearch , yang memungkinkan saya untuk menyimpan, membaca, dan mengatur halaman web menjadi semacam perpustakaan offline. Saya yakin banyak pembaca baik-baik saja dengan koleksi tautan atau kombinasi browser dan folder dengan sekumpulan dokumen yang disimpan. Saya ingin setidaknya dapat menandai dokumen sebagai "baca" atau "favorit", dengan cepat beralih dari satu teks ke teks lain dan tidak bergantung pada ketersediaan Internet atau situs tertentu. Kebetulan ada waktu untuk membaca dengan tepat ketika tidak ada Internet (di jalan, misalnya), dan tautan, sayangnya, sering berubah menjadi berumur pendek.


Rupanya, penulis WebResearch mengandalkan orang-orang seperti itu. Program ini dikemas dengan berbagai fungsi: katalog berdasarkan bagian dan tag, mengedit catatan, semua jenis ekspor / impor, dan sebagainya. Namun, sekitar 2013, proyek berhenti memperbarui, dan kemudian situs pengembang juga tidak ada lagi. Selama beberapa tahun saya berhasil menunggang kuda ini, tetapi pertama-tama plug-in browser (hanya tersedia untuk versi IE dan FireFox) jatuh, dan kemudian situs modern berhenti menampilkan secara normal dalam penampil berdasarkan mesin IE lama.



Jendela utama dari WebResearch, PC Week / RE No. 17 (575)


Jalan kekecewaan


Segera setelah menjadi jelas bahwa penggantian tidak dapat dihindari, saya mulai mencari mitra yang layak di latar belakang. Tampak bagi saya bahwa tidak akan ada kesulitan khusus, karena keinginan saya sangat sederhana. Saya siap bergaul dengan hanya sebagian kecil alat WebResearch, termasuk:


  • Menyimpan halaman HTML dari browser menggunakan ekstensi;
  • setidaknya alat katalogisasi minimal (penggantian nama, pengorganisasian direktori, tag);
  • (lebih disukai) dukungan untuk dokumen PDF;
  • cara yang layak untuk menyinkronkan koleksi dengan perangkat lain.

Yang mengejutkan saya, saya tidak dapat menemukan yang seperti itu, walaupun saya dengan jujur ​​memanjat Internet naik dan turun dan dengan hati-hati mempelajari lusinan program penjelasan yang cocok (dengan pengecualian Evernote, di mana fungsi deskripsi yang serupa hanya tersedia dengan berlangganan). Sampai saat ini, setidaknya entah bagaimana memenuhi keinginan saya kecuali untuk proyek TagSpaces dan myBase . Studi mereka, secara umum, adalah minat budaya tertentu.


TagSpaces adalah penyelenggara "stylish-fashion-youth" di Electron dengan situs web yang indah, tata letak yang adaptif dan, tentu saja, tema gelap, di mana tanpanya. Pada saat yang sama, daftar isi yang bernasib buruk dari koleksi dengan ikon bundar yang modis menempati separuh layar, menampung paling banyak dua puluh kali sekaligus, dan potongan-potongan dasar seperti mendukung hot key atau merender dokumen yang sedang Anda lihat ditulis sesuai dengan prinsip residual. Sebagai hasilnya, dokumen ditampilkan dengan bengkok, dan bekerja dengan koleksi berubah menjadi serangkaian latihan yang membosankan dan menghabiskan waktu dengan mouse.


Antipode myBase berasal dari akhir tahun sembilan puluhan: di sini, di samping antarmuka yang murni fungsional, kami memiliki serangkaian pengaturan dan fungsi yang sangat kaya. Namun, penampil di sini masih merupakan peramban yang sama berdasarkan pada IE lama (yang sudah mempersulit pembacaan), dan semua dokumen disimpan dalam basis data monolitik. Jika Anda meletakkannya di folder Dropbox, misalnya (masih tidak ada cara lain untuk menyinkronkan dengan perangkat lain), maka dengan sedikit perubahan dalam koleksi Anda harus menunggu ratusan megabyte informasi untuk diunduh ke server.


Titik balik


Mungkin isi lebih lanjut dari catatan itu tampak jelas bagi pembaca: sekarang kita akan ditawari sepeda kita sendiri, yang, tentu saja, akan menjadi potongan di atas analog yang ada. Seolah ya, tapi tidak juga. Saya benar-benar tidak tahan dengan cobaan dengan myBase dan TagSpaces dan membuat sketsa manajer dokumen saya sendiri, tautan yang akan saya bawa mendekati akhir. Namun, proyek kecil ini untuk kebutuhan pribadi tidak dengan sendirinya layak mendapatkan artikel terpisah; Saya menulis lebih banyak karena saya merasa menarik untuk membagikan pengalaman yang diperoleh selama bekerja, dan sejumlah kejutan tidak menyenangkan yang tidak dapat saya andalkan.


Tujuan dan sasaran


Awalnya, saya memiliki kehidupan yang agak stres sekarang, dan tidak ada waktu untuk proyek hobi penuh. Oleh karena itu, sejak awal, saya memutuskan bahwa saya siap untuk memahat alat saya dari komponen apa pun yang akan datang, jika ini akan mempercepat. Selain itu, untuk saat ini saya mencoba menerapkan hanya fungsionalitas minimum absolut, yang tidak dapat diabaikan.


Format Data dan Menyimpan Halaman


Bagaimana cara menyimpan halaman web pada disk? Mempertimbangkan persyaratan yang dirumuskan sebelumnya, menurut saya pilihannya kecil: apakah format penyimpanan "halaman web penuh", yaitu file dan folder HTML utama dengan sumber daya terkait, atau format MHTML. Opsi pertama segera terasa kurang disukai bagi saya: tidak bagus untuk memiliki sampah pada disk dari banyak file, dari mana Anda perlu mengekstrak dokumen yang bermakna, menyaring kelebihan selama pencarian dan memantau integritas saat menyalin. Ketika saya mencoba bekerja dengan TagSpaces, saya harus menyimpan kembali semua dokumen saya sehingga nama folder sumber daya dimulai dengan sebuah titik: kemudian sistem mengenalinya sebagai "tersembunyi" dan tidak menampilkannya.


Masalah ini tersembunyi dari pandangan di myBase, karena semuanya disimpan dalam database, tetapi dalam kasus saya prinsip kesederhanaan berlaku: Saya benar-benar ingin menyimpan semuanya dalam bentuk file biasa pada disk sehingga saya tidak perlu berurusan dengan operasi rutin seperti menyalin, mengganti nama, menghapus, dan menyinkronkan .


Format MHTML sedang mengalami masa-masa sulit. Cara mudah untuk menyelamatkan MHTML dibuang dari Chrome musim panas ini , dan saya bahkan tidak tahu apa yang seharusnya menyimpan halaman? Jelas bahwa peluang belum hilang, ada ekstensi pihak ketiga, tetapi secara umum ini semacam pertanda buruk. Selain itu, menyimpan dalam format MHTML tidak didukung dalam Chromium Embedded Framework , yang juga tidak menambah optimisme.


Secara paralel, saya mulai mencari cara mudah untuk menyimpan halaman dari browser ke folder yang ditentukan. Akibatnya, saya berhasil menyelesaikan kedua masalah dengan sedikit darah: Saya menemukan proyek SingleFile yang luar biasa yang dapat menyimpan konten halaman web dalam file HTML independen yang terpisah. Ini dilakukan dengan mengonversi semua sumber daya terkait ke format base64 dan menyematkannya langsung dalam HTML. Tentu saja, dengan ini, ukuran file bertambah, dan isinya terlihat agak sampah, tetapi secara umum, pendekatannya tampak dapat diandalkan dan sederhana, dan saya memutuskannya.


SingleFile hadir sebagai ekstensi browser atau sebagai aplikasi baris perintah. Sekarang saya hanya menggunakan ekstensi: itu cukup nyaman, kecuali untuk fakta bahwa Anda perlu memilih folder tujuan secara manual untuk disimpan. Di masa depan, saya mungkin akan mencoba menyelesaikan aplikasi untuk menyederhanakan proses ini. Untuk memanggil aplikasi pihak ketiga dari Chrome, Anda dapat menggunakan ekstensi Tombol Aplikasi Eksternal - ini adalah penemuan saya yang berguna. Ngomong-ngomong, aplikasi ini telah memperoleh manfaat: dengan bantuannya, saya mengubah koleksi folder dan file dari TagSpaces menjadi seperangkat dokumen HTML yang berdiri sendiri.


Kerumitan dengan GUI dan browser


Tampak bagi saya bahwa Python sangat cocok untuk semua jenis operasi sederhana dengan file dan string, dan karena wxWidgets digunakan dalam salah satu proyek kerja saya, memilih wxPython sebagai kerangka kerja utama terlihat logis.


Selanjutnya, setelah melihat jambs dengan tampilan halaman di program lain, saya menyimpulkan sendiri bahwa satu-satunya cara yang dapat diandalkan untuk mengatasinya adalah dengan memperkenalkan visualizer berdasarkan browser modern, yaitu, Chrome atau Firefox, ke dalam program.


Saya harus mengakui bahwa terakhir kali saya harus melakukan sesuatu seperti itu sekitar 15 tahun yang lalu, dan saya tidak mengharapkan trik kotor. Ternyata "hanya menampar browser ke formulir" tidak mungkin: entah bagaimana, manusia telah gagal untuk secara andal dan secara universal mengatasi tugas ini. Listbox atau tombol apa pun pada formulir dapat ditempatkan dalam kerangka GUI apa pun, dan bahkan menghasilkan kode lintas-platform, dan menurut saya pada 2019 tampilan HTML seharusnya juga merupakan masalah yang dipecahkan secara universal.


Ternyata di wxWidgets, misalnya, komponen "browser" standar adalah pembungkus lintas platform di atas "browser" yang bergantung pada sistem, yang dalam kasus Windows, misalnya, berarti Internet Explorer 7 , dan situasi di Windows Forms tidak lebih baik, dan versi yang lebih segar dari IE9 tersedia hanya dengan bantuan manipulasi registri non-sepele. Seperti yang Anda lihat, 15 tahun terakhir saya bukan satu-satunya yang terlibat dalam masalah lain - di sini juga, tidak ada yang bergerak.


Selanjutnya, saya punya pilihan: mengubah kerangka kerja atau mencari komponen alternatif untuk browser. Setelah ragu-ragu, saya memutuskan untuk mencoba cara kedua terlebih dahulu dan dengan cepat menemukan proyek CEF Python: binding Python untuk Chromium Embedded Framework , yang dirancang khusus untuk tugas menanamkan Chromium dalam aplikasi Python.


Mengevaluasi situasinya: Python adalah salah satu bahasa pemrograman paling populer di dunia, Chrome pada dasarnya adalah perusahaan monopoli di pasar browser. Pada saat yang sama, CEF Python sebenarnya didukung oleh energi satu orang , kekuatan dan kesehatannya. Apakah ada yang benar-benar membutuhkan ini lagi? ..


Namun, CEF Python tidak membantu saya pada akhirnya: meskipun bahkan contoh dasar integrasi dengan wxWidgets dari repositori proyek jelas buggy, saya mencoba untuk mengotak-atiknya lagi, tetapi tidak dapat menyelesaikan semua masalah yang muncul. Saya bahkan tidak akan membahas topik, tidak mungkin itu layak untuk itu.


Saya mempelajari komponen-komponen berdasarkan Kerangka Tertanam Chromium lebih terinci dan akhirnya memutuskan untuk mencoba versi untuk C # . Karena saya bekerja hampir sepanjang waktu dengan Windows, prospek meninggalkan platform lintas platform tidak mengganggu saya, secara umum.


Setelah beberapa keributan tak terelakkan di awal, segalanya berjalan lebih cepat: kombinasi CefSharp dan Windows Forms ternyata menang, dan saya bisa menyelesaikan sebagian besar masalah teknis tanpa masalah.


Tentang belum teruji


Anda dapat mencoba mengimplementasikan FireFox dalam aplikasi C # menggunakan komponen Geckofx , tetapi saya tidak bisa mengatakan apa-apa tentang itu. Komponen peramban Qt standar yang disebut QWebEngineView didasarkan pada Chromium , sehingga mungkin akan bekerja tidak lebih buruk daripada CefSharp.


Penggemar Qt mungkin tergoda untuk berkomentar: mereka mengatakan, saya akan mengambil Qt, saya tidak akan memiliki masalah. Mungkin memang demikian, tetapi wxWidgets dapat dipertimbangkan, jika bukan yang pertama, lalu opsi kedua saat memilih kerangka kerja GUI untuk aplikasi dalam Python atau C ++. Dan menurut pendapat saya yang sederhana, hal seperti browser harus tertanam dalam kerangka GUI yang kurang lebih berkembang tanpa menari dengan rebana.


Perpustakaan web


Mari kita kembali ke aplikasi saya dengan judul WebLibrary yang berfungsi . Hari ini kelihatannya (drum roll) seperti ini:



Selain antarmuka yang bersih dan ringkas , hanya fungsi paling dasar yang diterapkan di sini:


  • Menampilkan direktori tertentu dalam sistem sebagai pustaka dokumen.
  • Lihat dokumen di jendela browser. Menavigasi daftar dengan cara biasa (tombol kursor, PgUp, PgDn, Home, End), gulir di browser dengan tombol Space dan Shift + Space.
  • Ganti nama dokumen.
  • Tandai dokumen sebagai sudah dibaca atau dipilih menggunakan tombol cepat.
  • Sortir dokumen berdasarkan bidang apa pun.
  • Memperbarui jendela aplikasi dengan perubahan apa pun di folder perpustakaan.
  • Menyimpan pengaturan jendela saat keluar.

Semua ini mungkin tampak seperti fungsi sepele, tetapi, katakanlah, menyimpan ukuran kolom di TagSpaces masih tidak didukung - tampaknya, penulis memiliki prioritas yang berbeda.


Status (baca / dipilih) hanya disimpan dalam nama file (file read doc.html diubah namanya menjadi doc{R,S}.html ). Sinkronisasi seperti itu tidak diterapkan, tapi saya hanya menyimpan perpustakaan di Dropbox - pada akhirnya, itu hanya folder dengan file.


Ada rencana untuk menyelesaikan hal-hal sederhana seperti memindahkan dan menghapus file, serta menerapkan penandaan dengan tag sewenang-wenang. Jika ada yang ingin membantu, saya hanya akan senang.


Kesimpulan


Yang paling berbeda. Seperti yang saya katakan sejak awal, sungguh menakjubkan betapa berbedanya alat-alat dari satu orang dapat dari alat-alat orang lain. Wajar bagi saya untuk menggunakan alat seperti WebResearch, dan saya merasakan ketidaknyamanan secara fisik karena tidak ada. Pada saat yang sama, tampaknya, saya memiliki beberapa orang yang berpikiran sama, kalau tidak, tidak akan ada masalah menemukan analog. Di sisi lain, kasus serupa terjadi dengan perangkat lunak yang jauh lebih umum: misalnya, Microsoft tidak akan memperbarui versi desktop OneNote, jadi saya harus menggunakan versi 2016, dan cepat atau lambat saya harus pindah ke suatu tempat dari itu juga.


Yang lebih mengejutkan adalah betapa sulitnya menavigasi dalam lanskap perpustakaan dan kerangka kerja saat ini. Sebagai hasil dari layanan saya, saya jarang harus menulis aplikasi desktop dari awal hingga akhir, dan saya berasumsi bahwa secara harfiah alat apa pun untuk bahasa pemrograman apa pun akan sesuai untuk tugas saya (satu jendela, tiga komponen, interaksi sepele). Kami akan mengambil apa pun secara langsung dan melakukannya dalam beberapa hari.


Ternyata kenyataan itu jauh lebih tidak menguntungkan, dan Anda dapat langsung mengalami masalah. Katakanlah saya memiliki dua splitter s yang dapat digunakan untuk memperpanjang jendela browser. Jadi, mengembalikan posisi mereka setelah memuat ke wxWidgets sangat sulit, karena sistem menempatkan mereka di posisi default setelah hampir semua acara tersedia untuk saya, dan Anda harus melakukan segala macam peretasan untuk mendapatkan apa yang Anda butuhkan. Siapa yang akan menebak?


Di sisi lain, jelas bahwa dalam Windows Forms semuanya dirancang untuk "antarmuka bisnis". Hampir semua yang diperlukan ternyata dapat diakses dari kotak: keduanya menyimpan / mengembalikan pengaturan aplikasi, dan antarmuka komponen yang nyaman (katakanlah, saya tidak berharap bahwa komponen TreeView dapat diminta path lengkap dari root ke elemen anak sebagai string), dan alat non-sepele seperti pelacak untuk mengubah isi folder.


Bagaimanapun, waktu tidak terbuang sia-sia, dan hasilnya dapat dianggap memuaskan, jadi apa lagi yang diinginkan dari kehidupan, bukan?

Source: https://habr.com/ru/post/id475092/


All Articles