"Kuring bakal maca engké": nasib susah tina kumpulan offline kaca Internét

Aya sababaraha jinis parangkat lunak anu sabagian jalma henteu tiasa hirup tanpana, sedengkeun anu sanésna henteu tiasa ngabayangkeun yén hal sapertos kitu aya atanapi saha waé anu peryogi éta. Pikeun kuring, mangtaun-taun, program sapertos kitu Macropool WebResearch, anu ngamungkinkeun hiji nyimpen, maca, jeung ngatur kaca internét kana jenis perpustakaan offline. Kuring yakin loba pamiarsa meunang ku ngan rupa jeung kumpulan Tumbu atawa kombinasi browser sarta folder ngandung kumpulan dokumén disimpen. Abdi sahenteuna hoyong tiasa nandaan dokumén salaku "baca" atawa "paporit," gancang napigasi ti hiji téks ka nu sejen, sarta teu gumantung kana aksés internét atawa ramatloka husus. Kadang-kadang anjeun ngan ukur gaduh waktos maca nalika teu aya internét (contona, di jalan), sareng hanjakalna, tautan sering henteu lami.

Tétéla, ieu mangrupikeun jinis pamiarsa anu diandelkeun ku panyipta WebResearch. Program ieu dipak ku rupa-rupa fitur: katalog ku bagian sareng tag, éditan catetan, sagala jinis ékspor / impor, sareng sajabana. Nanging, sakitar taun 2013, proyék éta lirén diropéa, teras halaman wéb pamekar turun. Kuring junun tetep nepi ka ieu sababaraha taun deui, tapi mimitina plugins browser (ngan sadia pikeun versi lajeng-ayeuna IE na Firefox) dieureunkeun gawe, lajeng malah situs web modern dieureunkeun némbongkeun leres dina browser dumasar kana mesin IE heubeul.

"Kuring bakal maca engké": nasib susah tina kumpulan offline kaca Internét
Jandéla utama WebResearch, PC Minggu/RE No. 17 (575)

Jalan Kuciwa

Pas janten écés yén panggantian teu tiasa dihindari, kuring mimiti milarian alternatif anu santun di latar tukang. Kuring nyangka moal aya kasusah khusus, sabab cita-cita kuring sederhana pisan. Kuring disiapkeun pikeun ngalakukeun ngan sawaréh leutik tina parabot WebResearch, kaasup:

  • nyimpen halaman HTML tina browser nganggo ekstensi;
  • sahenteuna alat katalog minimal (ngaganti nami, organisasi katalog, tag);
  • (desirable) rojongan pikeun dokumén PDF;
  • sagala cara anu santun pikeun nyingkronkeun koleksi anjeun sareng alat anu sanés.

Anu kaget kuring, kuring henteu mendakan anu sami, sanaos rajin nyitak internét sareng taliti mariksa belasan program anu cocog sareng katerangan (iwal Evernote, dimana fungsionalitas anu sami ngan sayogi kalayan langganan). Ayeuna, ngan proyek anu malah samar-samar nyugemakeun kabutuhan kuring TagSpaces и myBaseUlikan maranéhanana, umumna diomongkeun, mangrupa kapentingan budaya tangtu.

TagSpaces mangrupikeun pangatur anu gaya, trendi, sareng nonoman pikeun Éléktron kalayan situs wéb anu saé, perenah responsif, sareng, tangtosna, téma poék-naon upami henteu? Tapi, daptar eusi koléksi anu parah sareng ikon bunder anu trendi nyandak satengah layar, nahan maksimal dua puluh elemen, sedengkeun fitur dasar sapertos dukungan hotkey atanapi rendering dokumén dilaksanakeun salaku panginten. Hasilna, dokumén nembongkeun crookedly, sarta gawé bareng koleksi kabukti kana runtuyan tedious jeung laborious latihan mouse.

MyBase antipode na asalna ti nineties telat: di dieu, salian ti panganteur fungsi murni Kami gaduh set setelan sareng fitur anu beunghar pisan. Sanajan kitu, jandela nempoan dieu masih sarua heubeul browser basis IE (anu ngajadikeun bacaan hésé), sarta sakabeh dokumén disimpen dina database monolithic. Upami anjeun nempatkeun éta dina polder Dropbox, contona (teu aya cara sanés pikeun nyingkronkeun sareng alat anu sanés), teras unggal waktos koleksina robih, anjeun kedah ngantosan ratusan megabyte inpormasi diunggah ka server.

Titik balik

Sésana tulisan ieu sigana écés pikeun anu maca: urang badé ditawarkeun solusi unik urang sorangan, anu pasti bakal janten sirah sareng taktak saluhureun alternatif anu aya. Nurun, tapi teu cukup. Abdi leres-leres henteu tiasa nanggung kasulitan myBase sareng TagSpaces sareng ngahijikeun manajer dokumén kuring sorangan, tautan anu kuring bakal nyayogikeun dina tungtungna. Sanajan kitu, proyék pribadi leutik ieu moal patut artikel misah sorangan; Kuring nyerat ieu utamina kusabab kuring panginten bakal pikaresepeun pikeun ngabagi pangalaman anu kuring kéngingkeun sapanjang jalan, sareng sababaraha kejutan anu henteu pikaresepeun anu kuring henteu kantos ngarepkeun.

Gol & tujuan

Hayu atuh mimitian ku nyebutkeun yen kuring boga kahirupan geulis sibuk ayeuna, sarta kuring ngan saukur teu boga waktu pikeun proyék hobi full-fledged. Janten, ti mimiti pisan, kuring mutuskeun yén kuring daék ngahijikeun alat kuring sorangan tina komponén naon waé anu kuring mendakan, upami éta bakal nyepetkeun. Salajengna, pikeun ayeuna, kuring ngan ukur ngalaksanakeun fungsionalitas minimal anu teu tiasa dihindari.

Format data sareng nyimpen halaman

Kumaha kuring kedah nyimpen halaman wéb dina disk? Dibikeun sarat anu sateuacana dirumuskeun, kuring ngarasa kuring ngagaduhan sababaraha pilihan: boh format "halaman wéb lengkep", hartosna file HTML utama sareng polder sareng sumber daya anu aya hubunganana, atanapi format MHTML. Urut langsung sigana kirang pikaresep: teu senang mun gaduh mess cluttered file dina disk ti mana Abdi peryogi nimba dokumén relevan, nyaring kaluar nu teu perlu salila pilarian, sarta mastikeun integritas maranéhna nalika nyalin. Nalika kuring nyobian damel sareng TagSpaces, kuring kedah nyimpen deui sadaya dokumén kuring supados nami folder sumberdaya dimimitian ku titik; lajeng sistem bakal ngakuan aranjeunna salaku "disumputkeun" teu nembongkeun aranjeunna.

Masalah ieu disumputkeun tina panempoan dina myBase, sabab sadayana disimpen dina pangkalan data, tapi dina kasus kuring, prinsip kesederhanaan langkung kuat: Abdi hoyong pisan nyimpen sadayana salaku file biasa dina disk, ku kituna kuring henteu kedah ngurus operasi rutin sapertos nyalin, ngaganti nami, ngahapus, sareng singkronisasi.

The format MHTML bade ngaliwatan kali teuas. Hiji cara basajan pikeun nyimpen MHTML ieu ditajong kaluar tina Chrome usum panas ieu, sarta kuring malah teu terang dimana kaca nu sakuduna dituju pikeun disimpen ayeuna? Éta jelas yén pilihan éta masih aya, sareng aya ekstensi pihak katilu, tapi sacara umum, ieu mangrupikeun tanda anu goréng. Sajaba ti éta, nyimpen dina format MHTML teu dirojong dina Chromium Embedded Framework, nu ogé teu nambahan optimism.

Dina waktos anu sami, kuring mimiti milarian cara anu saderhana pikeun ngahémat halaman tina browser kana polder anu ditangtukeun. Tungtungna, duanana masalah anu direngsekeun ku usaha minimal: Kuring stumbled kana proyék éndah. SingleFile, anu tiasa nyimpen eusi halaman wéb dina file HTML anu mandiri. Hal ieu dilakukeun ku jalan ngarobah sagala sumber numbu ka format base64 sarta embedding aranjeunna langsung kana HTML nu. Tangtosna, ieu ningkatkeun ukuran file, sareng konténna katingalina rada cluttered, tapi sacara umum, kuring mendakan pendekatan anu dipercaya sareng saderhana, janten kuring netepkeunana.

SingleFile asalna salaku ekstensi browser sareng aplikasi garis paréntah. Ayeuna, kuring ngan ukur nganggo ekstensi; éta rada merenah, iwal kanyataan yén kuring kudu milih sacara manual nyimpen folder tujuan. Ka hareupna, kuring sigana bakal nyobian ningkatkeun aplikasi pikeun nyederhanakeun prosés ieu. Anjeun tiasa nganggo ekstensi pikeun nelepon aplikasi pihak katilu ti Chrome. Tombol Aplikasi éksternal - ieu téh kapanggihna mangpaat séjén milik kuring. Saliwatan, aplikasi éta parantos mangpaat: kalayan bantosanna, kuring ngarobih kumpulan polder sareng file tina TagSpaces kana sakumpulan dokumén HTML mandiri.

GUI jeung browser repot

Kuring mendakan Python janten pilihan anu hadé pikeun sagala jinis file basajan sareng manipulasi senar, sareng saprak salah sahiji proyék padamelan abdi nganggo. wxWidgets, pilihan wxPython Sigana logis salaku kerangka utama.

Teras, saatos ningali masalah anu cukup dina tampilan halaman dina program anu sanés, kuring nyimpulkeun yén hiji-hijina cara anu tiasa dipercaya pikeun nungkulanana nyaéta nerapkeun visualizer dumasar kana browser modern, nyaéta Chrome atanapi Firefox, kana program.

Kuring kudu ngaku, panungtungan waktu kuring kungsi ngalakukeun nanaon kawas ieu ngeunaan 15 sababaraha taun ka pengker, sarta kuring teu nyangka pitfalls nanaon. Tétéla yén "ngan saukur nyabok browser dina formulir" sanes pilihan: kumaha bae, umat manusa teu junun reliably tur universal ngajawab masalah ieu. Sakur kerangka GUI tiasa nampilkeun kotak daptar atanapi tombol dina formulir, bahkan ngahasilkeun kode cross-platform, janten panginten rendering HTML kedah janten masalah anu direngsekeun sacara universal dina 2019.

Tétéla dina wxWidgets, contona, komponén "browser" standar mangrupikeun bungkus lintas platform di luhur "browser" anu gumantung kana sistem, anu dina kasus ieu Windowscontona, hartina Internet Explorer 7, jeung kaayaan di Windows Formulir teu langkung saé, sareng vérsi anu langkung énggal tibatan IE9 ngan ukur tiasa diaksés ngalangkungan anu henteu sepele manipulasi pendaptaranSakumaha anjeun tiasa tingali, kuring sanés ngan ukur anu sibuk ku hal-hal sanés salami 15 taun ka pengker — teu aya anu maju ka dieu.

Salajengna, kuring disanghareupan ku pilihan: robih kerangka atanapi milarian komponén browser alternatif. Saatos sababaraha ragu, abdi mutuskeun pikeun nyobaan pilihan dimungkinkeun munggaran tur gancang stumbled kana proyék. CEF Python: Python bindings pikeun Chromium Embedded Framework, dirancang husus pikeun tugas embedding Chromium kana aplikasi Python.

Pertimbangkeun kaayaan: Python mangrupikeun salah sahiji basa program anu pang populerna di dunya, sareng Chrome dina dasarna monopoli dina pasar browser. Samentara éta, CEF Python dasarna dirojong ku hiji lalaki, kakuatan sarta kaséhatan ka anjeunna. Teu aya anu peryogi ieu? ..

Nanging, CEF Python pamustunganana henteu ngabantosan kuring: bahkan conto integrasi wxWidgets dasar tina gudang proyék leres pisan. Kuring diusahakeun tinkering kalawan eta bari, tapi teu bisa ngajawab sagala masalah anu timbul. Kuring malah moal balik kana detil; éta boro patut eta.

Kuring nyandak katingal ngadeukeutan dina komponén dumasar kana Chromium Embedded Framework sarta ahirna mutuskeun pikeun nyobaan. Vérsi pikeun C#Kusabab kuring ampir sadaya waktos damel sareng Windows, kamungkinan pikeun ngantunkeun dukungan lintas platform teu ngaganggu kuring.

Saatos sababaraha ribut anu teu tiasa dihindari di awalna, sadayana langkung gancang: kombinasi CefSharp sareng Windows Formulir tétéla jadi juara, sareng kuring tiasa ngarengsekeun kaseueuran tantangan téknis tanpa masalah.

Ngeunaan anu teu acan dicoba

Anjeun tiasa nyobian ngahijikeun FireFox kana aplikasi C # anjeun nganggo komponén Geckofx, tapi kuring teu bisa ngomong nanaon ngeunaan eta. Komponén browser baku tina kerangka Qt disebut QWebEngineView dumasar dina Chromium, jadi meureun bakal dianggo sagampil ogé CefSharp.

fans Qt bisa jadi cocoba pikeun mairan: "Mun ngan kuring dipaké Qt, Abdi teu bakal boga masalah naon." Éta bisa jadi bener, tapi wxWidgets ogé bisa dianggap, lamun teu kahiji, lajeng sahenteuna pilihan kadua lamun milih hiji kerangka GUI pikeun Python atawa C ++ aplikasi. Sarta dina pamadegan hina kuring, hal kawas browser kudu terpadu kana sagala leuwih atawa kirang dimekarkeun kerangka GUI tanpa fuss nanaon.

Perpustakaan wéb

Hayu urang balik deui ka aplikasi kuring kalayan judul anu tiasa dianggo Perpustakaan wébDinten ieu sigana kieu (drum roll):

"Kuring bakal maca engké": nasib susah tina kumpulan offline kaca Internét

sajaba ti panganteur beresih jeung singket Ngan ukur fungsi anu paling dasar anu dilaksanakeun di dieu:

  • Tampilkeun diréktori anu mana waé dina sistem salaku perpustakaan dokumén.
  • Ningali dokumén dina jandela pangotektak. Napigasi daptar sapertos biasa (tombol panah, PgUp, PgDn, Home, End), gulung dina browser nganggo Spasi sareng Shift + Spasi.
  • Ngaganti ngaran dokumén.
  • Cirian dokumén jadi dibaca atawa paporit maké hotkeys.
  • Nyortir dokumén dumasar kana widang naon waé.
  • Refreshes jandela aplikasi iraha wae aya parobahan dina folder perpustakaan.
  • Simpen setélan jandela dina kaluar.

Ieu sadayana sigana sapertos fungsional anu teu penting, tapi, contona, ngajaga ukuran kolom dina TagSpaces masih henteu didukung-tétéla, panulis gaduh prioritas anu sanés.

Status (baca/paporit) ngan saukur disimpen dina nami file (baca file doc.html diganti ngaranna jadi doc{R,S}.html). Teu aya singkronisasi sapertos kitu, tapi kuring ngan saukur nyimpen perpustakaan di Dropbox — barina ogé, éta ngan ukur folder sareng file.

Kuring masih boga rencana pikeun ngaronjatkeun hal basajan kawas mindahkeun sarta mupus file, kitu ogé ngalaksanakeun tag custom. Upami aya anu hoyong ngabantosan, kuring bakal resep ngabantosan.

papanggihan

Sagala rupa. Sakumaha anu kuring nyarios ti mimiti, endah pisan kumaha bédana alat hiji jalma ti anu sanés. Pikeun kuring, ngagunakeun alat sapertos WebResearch sacara alami, sareng kuring ngarasa teu ngarareunah ampir fisik tanpa éta. Dina waktos anu sami, sigana kuring henteu gaduh seueur jalma anu sami, upami henteu, kuring moal ngalaman masalah milarian alternatif. Di sisi anu sanés, kaayaan anu sami kajantenan sareng parangkat lunak anu langkung mainstream: contona, Microsoft henteu ngarencanakeun pikeun ngapdet versi desktop OneNote, janten kuring macét nganggo versi 2016, sareng engké atanapi engké kuring ogé kedah ngaléngkah.

Anu matak pikaheraneun nyaéta kumaha sesahna pikeun nganapigasi bentang perpustakaan sareng kerangka ayeuna. Pakasaban kuring jarang ngabutuhkeun kuring pikeun nyerat aplikasi desktop ti mimiti dugi ka réngsé, sareng kuring nganggap yén sacara harfiah alat naon waé dina basa program bakal tiasa dianggo pikeun tugas kuring (jandela tunggal, tilu komponén, interaksi anu teu penting). Janten, urang ngan ukur nyandak naon waé anu urang tiasa sareng ngawangun dina sababaraha dinten.

Tétéla kanyataanana jauh kurang ramah, sareng anjeun tiasa titajong kana masalah anu teu jelas. Contona, kuring boga dua splitters nu kuring make manteng jandela browser. Malikkeun posisi maranéhanana sanggeus loading aranjeunna dina wxWidgets pisan hésé, saprak sistem resets aranjeunna ka posisi standar maranéhanana sanggeus ampir unggal acara sadia pikeun kuring, merlukeun sagala sorts hacker pikeun ngahontal hasil nu dipikahoyong. Anu bakal geus ditebak?

Di sisi séjén, jelas yén dina Windows Forms dirancang pikeun antarmuka bisnis. Ampir sadayana anu kuring peryogikeun sayogi langsung: nyimpen sareng mulangkeun setélan aplikasi, antarmuka komponén anu ramah-pangguna (contona, kuring henteu nyangka yén komponén TreeView tiasa dipariksa pikeun jalur lengkep ti root ka unsur anak naon waé salaku string), sareng fitur canggih sapertos pelacak parobahan eusi folder.

Bisi wae, waktu teu wasted, sarta hasilna bisa dianggap nyugemakeun, jadi naon deui anjeun bisa hayang ti hirup, katuhu?

sumber: www.habr.com

Mésér hosting anu dipercaya pikeun situs anu gaduh panyalindungan DDoS, server VPS VDS 🔥 Meser hosting situs wéb anu tiasa dipercaya nganggo panyalindungan DDoS, server VPS VDS | ProHoster