“Pročitat ću kasnije”: teška sudbina offline zbirke internetskih stranica

Postoje vrste softvera bez kojih neki ljudi ne mogu živjeti, dok drugi ne mogu ni zamisliti da takvo što postoji niti da nekome uopće treba. Za mene je dugi niz godina ovaj program bio Macropool WebResearch, koji vam je omogućio spremanje, čitanje i organiziranje internetskih stranica u neku vrstu offline knjižnice. Siguran sam da se mnogi naši čitatelji sasvim dobro snalaze sa zbirkom poveznica ili kombinacijom preglednika i mape sa skupom spremljenih dokumenata. Želio bih barem moći označiti dokumente kao "pročitane" ili "omiljene", brzo prelaziti s jednog teksta na drugi i ne ovisiti o dostupnosti interneta ili određene stranice. Događa se da ima vremena za čitanje upravo kada nema interneta (na putu, na primjer), a veze se, nažalost, često pokažu kratkotrajnim.

Navodno su autori WebResearcha računali otprilike na te ljude. Ovaj je program bio prepun raznih funkcija: katalogiziranje po odjeljcima i oznakama, uređivanje bilješki, sve vrste izvoza/uvoza i tako dalje. Međutim, oko 2013. projekt se prestao ažurirati, a zatim je web stranica programera prestala postojati. Još nekoliko godina uspio sam jahati ovog konja, ali prvo su otpali dodaci preglednika (dostupni samo za tadašnje verzije IE i FireFox), a zatim su se moderne stranice prestale normalno prikazivati ​​u pregledniku temeljenom na starom IE engineu.

“Pročitat ću kasnije”: teška sudbina offline zbirke internetskih stranica
Glavni prozor WebResearch, PC Week/RE br. 17 (575)

Cesta razočarenja

Čim je postalo jasno da se zamjena ne može izbjeći, u pozadini sam počeo tražiti pristojan analog. Činilo mi se da tu neće biti posebnih poteškoća, jer su moje želje krajnje skromne. Bio sam spreman zadovoljiti se samo malim podskupom alata WebResearch, uključujući:

  • spremanje HTML stranice iz preglednika pomoću proširenja;
  • barem minimalni kataloški alati (preimenovanje, organiziranje kataloga, oznake);
  • (po mogućnosti) podrška za PDF dokumente;
  • bilo koji pristojan način sinkronizacije vaše kolekcije s drugim uređajima.

Na moje iznenađenje, nisam uspio pronaći ništa slično, iako sam pošteno pretražio internet nadaleko i naširoko i pažljivo proučio desetak programa koji su odgovarali napomenama (s izuzetkom Evernotea, gdje je funkcionalnost slična u opisu dostupna samo uz pretplatu). Danas jedino što barem nekako zadovoljava moje želje su projekti TagSpaces и myBase. Njihovo proučavanje, općenito govoreći, od određenog je kulturnog interesa.

TagSpaces je takav “stilski-modni-mladinski” organizator na Electronu s prekrasnom web stranicom, prilagodljivim izgledom i, naravno, tamnom temom, gdje bismo bez toga. Istodobno, zlosretni sadržaj kolekcije s pomodnim zaobljenim ikonama zauzima polovicu zaslona, ​​a prima najviše dvadesetak elemenata, a ispisane su osnovne stvari poput podrške za vruće tipke ili renderiranja dokumenta koji se gleda. prema rezidualnom principu. Kao rezultat toga, dokumenti se prikazuju krivo, a rad sa zbirkom pretvara se u dosadan i dugotrajan skup vježbi s mišem.

Njegov antipod myBase dolazi iz kasnih devedesetih: ovdje, pored čisto funkcionalno sučelje imamo iznimno bogat skup postavki i funkcija. Međutim, prozor za pregled ovdje je isti preglednik temeljen na starom IE-u (što već otežava čitanje), a svi su dokumenti pohranjeni u monolitnoj bazi podataka. Ako ga stavite u mapu Dropbox, na primjer (još uvijek nema drugih načina za sinkronizaciju s drugim uređajima), tada uz najmanju promjenu u zbirci morate pričekati dok se stotine megabajta informacija ne učitaju na poslužitelj.

Točka okretanja

Vjerojatno se daljnji sadržaj bilješke čitatelju čini očiglednim: sada ćemo ponuditi vlastiti bicikl, koji će, naravno, biti glava i ramena iznad bilo kojeg postojećeg analognog. Nekako da, ali ne baš. Zaista nisam mogao podnijeti muku s myBase i TagSpaces i skicirao sam vlastiti upravitelj dokumenata, čiju ću poveznicu dati pri kraju. Međutim, ovaj mali osobni projekt sam po sebi ne bi zaslužio vlastiti članak; Pišem uglavnom jer sam mislio da bi bilo zanimljivo podijeliti iskustvo koje sam stekao tijekom rada i niz neugodnih iznenađenja koja nisam očekivao.

Ciljevi i ciljevi

Dopustite mi da počnem s činjenicom da sada imam prilično zaposlen život i jednostavno nemam vremena za punopravne hobi projekte. Stoga sam od samog početka odlučio da sam spreman isklesati svoj instrument od bilo koje komponente koja mi dođe pod ruku, ako će to ubrzati stvari. Osim toga, za sada se obvezujem implementirati samo apsolutni minimum funkcionalnosti, bez čega je apsolutno nemoguće.

Format podataka i spremanje stranice

U kojem obliku web stranice trebaju biti pohranjene na disku? Uzimajući u obzir prethodno formulirane zahtjeve, činilo mi se da je izbor mali: ili format spremanja "cijele web stranice", odnosno glavne HTML datoteke i mape s pripadajućim resursima, ili MHTML format. Prva opcija mi se odmah učinila manje poželjnom: malo je radosti imati gomilu datoteka na disku iz koje ćete morati izdvojiti značajne dokumente, filtrirati nepotrebne prilikom pretraživanja i pratiti integritet prilikom kopiranja. Kad sam pokušao raditi s TagSpacesom, morao sam ponovno spremiti sve svoje dokumente tako da naziv mape s resursima počinje s točkom: tada ih je sustav prepoznao kao "skrivene" i nije ih prikazao.

Ovaj problem je skriven od pogleda u myBase, jer je sve pohranjeno u bazi podataka, ali u mom slučaju je prevladalo načelo jednostavnosti: stvarno sam želio sve pohraniti kao obične datoteke na disk kako se ne bih morao baviti implementacijom rutinske operacije poput kopiranja, preimenovanja, brisanja i sinkronizacije.

MHTML format prolazi kroz teška vremena. Jednostavan način za spremanje MHTML-a je ljetos izbačen iz Chromea, a ne znam ni gdje bi sada stranice trebale biti pohranjene? Jasno je da prilika još nije nestala, postoje proširenja trećih strana, ali općenito je to neka vrsta lošeg znaka. Dodatno, spremanje u MHTML formatu nije podržano u Chromium Embedded Frameworku, što također ne dodaje optimizam.

U isto vrijeme, počeo sam tražiti jednostavan način za spremanje stranica iz preglednika u određenu mapu. Kao rezultat toga, oba su problema riješena uz male gubitke: naišao sam na prekrasan projekt Jedna datoteka, koji može spremiti sadržaj web stranice u zasebnu neovisnu HTML datoteku. To se postiže pretvaranjem svih povezanih resursa u format base64 i njihovim izravnim ugrađivanjem u HTML. Naravno, veličina datoteke raste, a sadržaj izgleda malo pretrpano, ali općenito mi se pristup činio pouzdanim i jednostavnim i odlučio sam se za njega.

SingleFile dolazi i kao proširenje preglednika i kao aplikacija naredbenog retka. Sada samo koristim proširenje: prilično je zgodno, osim činjenice da morate ručno odabrati ciljnu mapu za spremanje. U budućnosti ću vjerojatno pokušati poboljšati aplikaciju kako bih pojednostavio ovaj proces. Da biste pozvali aplikaciju treće strane iz Chromea, možete upotrijebiti proširenje Gumb za vanjske aplikacije - ovo je još jedno moje korisno otkriće. Usput, aplikacija je već bila korisna: pomoću nje sam pretvorio kolekciju mapa i datoteka iz TagSpacesa u skup neovisnih HTML dokumenata.

Problemi s GUI i preglednikom

Otkrio sam da je Python dobar za sve vrste jednostavnih operacija datoteka i nizova, a budući da jedan od mojih radnih projekata koristi wxWidgeti, izbor wxPython činilo se logičnim kao glavni okvir.

Nadalje, nakon što sam vidio dovoljno problema s prikazom stranica u drugim programima, došao sam do zaključka da je jedini pouzdani način rješavanja problema uvođenje vizualizatora u program koji se temelji na modernom pregledniku, odnosno Chromeu ili Firefoxu.

Moram priznati da sam posljednji put ovako nešto morao napraviti prije 15-ak godina i nisam očekivao nikakve zamke. Pokazalo se da je nemoguće "samo pljesnuti preglednik na obrazac": nekako se čovječanstvo nije uspjelo pouzdano i univerzalno nositi s tim zadatkom. Nekakav popisni okvir ili gumb na obrascu može se smjestiti u bilo koji GUI okvir, pa čak i generirati međuplatformski kod, a činilo mi se da je u 2019. i HTML prikaz trebao biti univerzalno riješen problem.

Ispostavilo se da je u wxWidgetsu, na primjer, standardna komponenta "preglednika" višeplatformski omotač preko "preglednika" ovisnog o sustavu, što u slučaju Windowsa, na primjer, znači Internet Explorer 7, a situacija u Windows Forms nije ništa bolja, a verzije novije od IE9 dostupne su samo uz korištenje netrivijalnih manipulacija registrom. Kao što vidite, nisam jedini koji je radio druge stvari zadnjih 15 godina - ni ovdje se ništa nije pomaknulo.

Tada sam se suočio s izborom: promijeniti okvir ili potražiti alternativnu komponentu za preglednik. Nakon oklijevanja, odlučio sam prvo isprobati drugi put i brzo sam naišao na projekt CEF Python: Python povezivanja za Chromium Embedded Framework, dizajniran posebno za zadatak ugrađivanja Chromiuma u Python aplikacije.

Procijenite situaciju: Python je jedan od najpopularnijih programskih jezika na svijetu, Chrome je u biti monopolist na tržištu preglednika. U isto vrijeme, CEF Python zapravo je podržan energijom jedan tip, snagu i zdravlje njemu. Zar ovo više nikome ne treba?..

Međutim, CEF Python mi na kraju nije pomogao: iako je čak i osnovni primjer integracije s wxWidgets iz repozitorija projekta iskreno bugljiv, pokušao sam još petljati s njim, ali nisam mogao riješiti sve probleme koji su se pojavili. Neću ni ulaziti dublje u temu, teško da to zaslužuje.

Detaljnije sam proučio komponente koje se temelje na Chromium Embedded Frameworku i konačno sam odlučio pokušati verzija za C#. Budući da gotovo cijelo vrijeme radim sa sustavom Windows, mogućnost odustajanja od višeplatformske funkcionalnosti, općenito, nije mi posebno smetala.

Nakon neizbježne frke na početku, stvari su išle mnogo brže: kombinacija CefSharpa i Windows Formsa pokazala se pobjedničkom, a većinu tehničkih problema uspio sam riješiti bez ikakvih problema.

O nesuđenom

Također možete pokušati implementirati FireFox u C# aplikaciju pomoću komponente Geckofx, ali ne mogu ništa reći o njemu. Standardna komponenta preglednika Qt okvira tzv QWebEngineView temeljen na Chromiumu, pa će vjerojatno raditi kao i CefSharp.

Ljubitelji Qt-a mogli bi biti u iskušenju komentirati: samo da su uzeli Qt, ne bi imali problema. Ovo može biti točno, ali wxWidgets se može uzeti u obzir, ako ne kao prvu, onda kao drugu opciju pri odabiru GUI okvira za aplikacije u Pythonu ili C++. I po mom skromnom mišljenju, takva stvar kao što je preglednik trebala bi biti ugrađena u bilo koji više ili manje razvijen GUI framework bez plesanja s tamburinom.

WebLibrary

Vratimo se, međutim, mojoj prijavi radnog naslova WebLibrary. Danas to izgleda (bubanj) ovako:

“Pročitat ću kasnije”: teška sudbina offline zbirke internetskih stranica

osim toga čisto i sažeto sučelje Ovdje su implementirane samo najosnovnije funkcije:

  • Prikaži bilo koji navedeni direktorij u sustavu kao biblioteku dokumenata.
  • Pregledajte dokumente u prozoru preglednika. Krećite se popisom na uobičajen način (kurzorske tipke, PgUp, PgDn, Home, End), pomičite se kroz preglednik pomoću tipki za razmak i Shift+razmaknica.
  • Preimenovanje dokumenata.
  • Označite dokumente kao pročitane ili omiljene pomoću prečaca.
  • Sortiranje dokumenata po bilo kojem polju.
  • Osvježava prozor aplikacije kada postoje promjene u mapi biblioteke.
  • Spremi postavke prozora pri izlasku.

Sve ovo može izgledati kao trivijalna funkcionalnost, ali, recimo, spremanje veličina stupaca u TagSpaces još uvijek nije podržano - očito, autori imaju druge prioritete.

Status (pročitano/omiljeno) jednostavno se pohranjuje u naziv datoteke (pročitana datoteka doc.html preimenovan u doc{R,S}.html). Ne postoji sinkronizacija kao takva, već jednostavno čuvam biblioteku u Dropboxu - na kraju krajeva, to je samo mapa s datotekama.

I dalje postoje planovi za poboljšanje jednostavnih stvari poput premještanja i brisanja datoteka, kao i za implementaciju označavanja proizvoljnim oznakama. Ako netko želi pomoći, bit će mi drago.

Zaključci

Raznolikost. Kao što sam rekao na početku, nevjerojatno je koliko se alati jedne osobe mogu razlikovati od drugih. Korištenje alata kao što je WebResearch prirodno mi je i osjećao sam gotovo fizičku nelagodu zbog njegove odsutnosti. U isto vrijeme, očito, imam nekoliko istomišljenika, inače ne bi bilo problema s pronalaženjem analoga. S druge strane, slični se slučajevi događaju s puno više mainstream softverom: primjerice, Microsoft neće ažurirati desktop verziju OneNotea, pa sam prisiljen koristiti verziju 2016., a prije ili kasnije morat ću prijeći i s to negdje.

Ono što također iznenađuje je koliko je teško snaći se u trenutnom krajoliku knjižnica i okvira. U svom poslu rijetko moram pisati aplikacije za stolna računala od početka do kraja i pretpostavio sam da bi doslovno svaki alat za bilo koji programski jezik bio prikladan za moj zadatak (jedan prozor, tri komponente, trivijalne interakcije). Dakle, jednostavno uzmemo bilo što i učinimo to u roku od nekoliko dana.

Ispostavilo se da je stvarnost puno manje dobronamjerna, a na problem možete jednostavno naići iz vedra neba. Recimo da imam dva razdjelnika koji se mogu koristiti za rastezanje prozora preglednika. Dakle, vraćanje njihovih pozicija nakon učitavanja u wxWidgets je izuzetno teško, budući da ih sustav stavlja na zadane pozicije nakon gotovo svih događaja koji su mi dostupni, i moram raditi svakakve vrste hakiranja da postignem ono što trebam. Tko bi pogodio?

S druge strane, jasno je da je u Windows Forms sve dizajnirano za "poslovna sučelja". Gotovo sve što je bilo potrebno bilo je dostupno izvan kutije: spremanje/vraćanje postavki aplikacije, prikladno sučelje komponenti (na primjer, nisam očekivao da se od komponente TreeView može tražiti puni put od korijena do bilo kojeg podređenog elementa u obliku niza) i ne-trivijalne alate poput praćenja promjene sadržaja mape.

U svakom slučaju, vrijeme nije izgubljeno, a rezultat se može smatrati zadovoljavajućim, pa što više poželjeti od života, zar ne?

Izvor: www.habr.com

Dodajte komentar