»Prebral bom pozneje«: težka usoda zbirke internetnih strani brez povezave

Obstajajo vrste programske opreme, brez katere nekateri ljudje ne morejo živeti, drugi pa si ne morejo niti predstavljati, da kaj takega obstaja ali da jo kdo sploh potrebuje. Zame je bil dolga leta ta program Macropool WebResearch, ki je omogočal shranjevanje, branje in organiziranje internetnih strani v nekakšno knjižnico brez povezave. Prepričan sem, da se številni naši bralci dobro znajdejo z zbirko povezav ali kombinacijo brskalnika in mape z nizom shranjenih dokumentov. Želel bi vsaj označevanje dokumentov kot »prebrano« ali »priljubljeno«, hitro premikanje od enega besedila do drugega in ne bi bil odvisen od razpoložljivosti interneta ali določene strani. Zgodi se, da je čas za branje ravno takrat, ko ni interneta (na primer na poti), povezave pa se na žalost pogosto izkažejo za kratkotrajne.

Očitno so avtorji WebResearch računali na približno te ljudi. Ta program je bil opremljen s široko paleto funkcij: katalogiziranje po razdelkih in oznakah, urejanje opomb, vse vrste izvoza/uvoza itd. Vendar pa se je okoli leta 2013 projekt prenehal posodabljati, nato pa je spletno mesto razvijalca prenehalo obstajati. Še nekaj let mi je uspelo jahati tega konja, a najprej so odpadli vtičniki brskalnika (na voljo samo za takratne različice IE in FireFox), nato pa so se moderna spletna mesta nehala normalno prikazovati v pregledovalniku, ki temelji na starem motorju IE.

»Prebral bom pozneje«: težka usoda zbirke internetnih strani brez povezave
Glavno okno WebResearch, PC Week/RE št. 17 (575)

Cesta razočaranja

Takoj ko je postalo jasno, da se zamenjavi ni mogoče izogniti, sem v ozadju začel iskati dostojnega analoga. Zdelo se mi je, da tu ne bo posebnih težav, saj so moje želje izjemno skromne. Pripravljen sem se zadovoljiti le z majhno podmnožico orodij WebResearch, vključno z:

  • shranjevanje strani HTML iz brskalnika z uporabo razširitve;
  • vsaj minimalna kataloška orodja (preimenovanje, organiziranje katalogov, oznake);
  • (po možnosti) podpora za dokumente PDF;
  • kakršen koli spodoben način za sinhronizacijo vaše zbirke z drugimi napravami.

Na moje presenečenje nisem našel ničesar podobnega, čeprav sem pošteno prebrskal internet daleč naokoli in skrbno preučil ducat programov, ki so ustrezali opombam (z izjemo Evernote, kjer je po opisu podobna funkcionalnost na voljo le z naročnino). Danes so edino, kar vsaj nekako zadovoljuje moje želje, projekti TagSpaces и myBase. Njihovo preučevanje je na splošno določenega kulturnega pomena.

TagSpaces je tak “stilsko-modno-mladinski” organizator na Electronu s čudovito spletno stranjo, prilagodljivo postavitvijo in seveda temno temo, kje bi bili brez tega. Obenem nesrečno kazalo zbirke z modnimi zaobljenimi ikonami zavzema polovico zaslona, ​​hkrati pa sprejme največ dvajset elementov, zapisane pa so osnovne stvari, kot je podpora vročim tipkam ali upodabljanje dokumenta, ki si ga ogledujete. po rezidualnem principu. Posledično so dokumenti prikazani krivo, delo z zbirko pa se spremeni v dolgočasno in zamudno vajo z miško.

Njegov antipod myBase prihaja iz poznih devetdesetih let: tukaj poleg čisto funkcionalen vmesnik imamo izjemno bogat nabor nastavitev in funkcij. Vendar je okno za ogled tukaj isti brskalnik, ki temelji na starem IE (kar že otežuje branje), vsi dokumenti pa so shranjeni v monolitni bazi podatkov. Če ga na primer postavite v mapo Dropbox (še vedno ni drugih načinov za sinhronizacijo z drugimi napravami), potem morate z najmanjšo spremembo zbirke počakati, da se na strežnik naloži na stotine megabajtov informacij.

Točka obrata

Verjetno se zdi nadaljnja vsebina opombe bralcu očitna: zdaj nam bo ponujeno lastno kolo, ki bo seveda glavo in ramena nad katerim koli obstoječim analogom. Nekako da, vendar ne povsem. Resnično nisem prenesel preizkušnje z myBase in TagSpaces in sem skiciral lastnega upravljalnika dokumentov, povezavo do katerega bom dal na koncu. Vendar si ta majhen osebni projekt ne bi zaslužil lastnega članka; Pišem predvsem zato, ker se mi je zdelo zanimivo deliti izkušnje, ki sem jih pridobil med delom, in vrsto neprijetnih presenečenj, ki jih nisem pričakoval.

Cilji in cilji

Naj začnem z dejstvom, da imam zdaj precej natrpano življenje in enostavno nimam časa za polnopravne hobi projekte. Zato sem se že na začetku odločil, da sem pripravljen svoj inštrument izklesati iz vseh komponent, ki mi pridejo pod roke, če bo to pospešilo stvari. Poleg tega se za zdaj zavezujem, da bom implementiral le absolutni minimum funkcionalnosti, brez česar je absolutno nemogoče.

Format podatkov in shranjevanje strani

V kakšni obliki naj bodo spletne strani shranjene na disku? Glede na predhodno oblikovane zahteve se mi je zdelo, da je izbira majhna: ali format shranjevanja »celotne spletne strani«, to je glavna datoteka HTML in mapa s pripadajočimi viri, ali format MHTML. Prva možnost se mi je takoj zdela manj zaželena: ni veselja, če imate na disku kopico smeti, iz katere boste morali ekstrahirati pomembne dokumente, filtrirati nepotrebno pri iskanju in spremljati celovitost pri kopiranju. Ko sem poskušal delati s TagSpaces, sem moral znova shraniti vse svoje dokumente, tako da se je ime mape virov začelo s piko: potem jih je sistem prepoznal kot »skrite« in jih ni prikazal.

Ta težava je v myBase očem skrita, saj je vse shranjeno v bazi podatkov, vendar je v mojem primeru prevladalo načelo enostavnosti: resnično sem želel shraniti vse kot navadne datoteke na disk, da se mi ne bi bilo treba ukvarjati z implementacijo rutinske operacije, kot so kopiranje, preimenovanje, brisanje in sinhronizacija.

Format MHTML preživlja težke čase. Preprost način za shranjevanje MHTML je bil to poletje vržen iz Chroma, in sploh ne vem, kje naj bi bile strani zdaj shranjene? Jasno je, da priložnost še ni izginila, obstajajo razširitve tretjih oseb, a na splošno je to nekakšen slab znak. Dodatno shranjevanje v formatu MHTML ni podprto v Chromium Embedded Framework, kar tudi ne vliva optimizma.

Istočasno sem začel iskati preprost način za shranjevanje strani iz brskalnika v določeno mapo. Posledično sta bili obe težavi rešeni z malo izgube: naletel sem na čudovit projekt SingleFile, ki lahko shrani vsebino spletne strani v ločeno neodvisno datoteko HTML. To se naredi s pretvorbo vseh povezanih virov v format base64 in njihovo neposredno vdelavo v HTML. Seveda se velikost datoteke poveča in vsebina je videti nekoliko natrpana, a na splošno se mi je pristop zdel zanesljiv in preprost in sem se odločil zanj.

SingleFile je na voljo kot razširitev brskalnika in aplikacija ukazne vrstice. Zdaj samo uporabljam razširitev: je zelo priročno, razen dejstva, da morate ročno izbrati ciljno mapo za shranjevanje. V prihodnosti bom verjetno poskušal izboljšati aplikacijo, da bi poenostavil ta postopek. Če želite iz Chroma poklicati aplikacijo tretje osebe, lahko uporabite razširitev Gumb za zunanjo aplikacijo - to je še eno moje koristno odkritje. Mimogrede, aplikacija je bila že uporabna: z njeno pomočjo sem pretvoril zbirko map in datotek iz TagSpaces v niz neodvisnih dokumentov HTML.

Težave z GUI in brskalnikom

Ugotovil sem, da je Python dober za vse vrste enostavnih operacij datotek in nizov, in ker eden od mojih delovnih projektov uporablja wxWidgets, izbira wxPython zdelo logično kot glavni okvir.

Nadalje, ko sem videl dovolj težav s prikazovanjem strani v drugih programih, sem prišel do zaključka, da je edini zanesljiv način za njihovo reševanje ta, da v program vnesem vizualizator, ki temelji na sodobnem brskalniku, to je Chrome ali Firefox.

Moram priznati, da sem nazadnje moral narediti kaj takega pred približno 15 leti in nisem pričakoval nobenih pasti. Izkazalo se je, da je nemogoče »preprosto udariti brskalnik po obrazcu«: človeštvo nekako ni bilo sposobno zanesljivo in univerzalno kos tej nalogi. Nekakšen seznam ali gumb na obrazcu je mogoče postaviti v katero koli ogrodje GUI in celo generirati kodo za več platform in zdelo se mi je, da bi moral biti v letu 2019 tudi prikaz HTML univerzalno rešen problem.

Izkazalo se je, da je na primer v wxWidgets standardna komponenta »brskalnika« medplatformski ovoj nad sistemsko odvisnim »brskalnikom«, kar v primeru Windows na primer pomeni Internet Explorer 7, stanje v Windows Forms pa ni nič boljše in različice, novejše od IE9, so na voljo le z uporabo netrivialnih manipulacija registra. Kot vidite, nisem edini, ki je zadnjih 15 let počel druge stvari – tudi tukaj se ni nič premaknilo.

Potem sem bil postavljen pred izbiro: spremeniti okvir ali poiskati alternativno komponento za brskalnik. Po obotavljanju sem se odločil najprej poskusiti drugo pot in hitro naletel na projekt CEF Python: vezave Python za Chromium Embedded Framework, zasnovan posebej za nalogo vdelave Chromiuma v aplikacije Python.

Ocenite situacijo: Python je eden najbolj priljubljenih programskih jezikov na svetu, Chrome je v bistvu monopolist na trgu brskalnikov. Hkrati je CEF Python dejansko podprt z energijo en tip, moč in zdravje mu. Mar tega res nihče več ne potrebuje?..

Vendar mi CEF Python na koncu ni pomagal: čeprav je celo osnovni primer integracije z wxWidgets iz repozitorija projektov odkrito hrošč, sem se poskušal z njim bolj poigrati, vendar nisem mogel rešiti vseh težav, ki so se pojavile. Sploh se ne bom poglabljal v temo, saj si tega skoraj ne zasluži.

Podrobneje sem preučil komponente, ki temeljijo na Chromium Embedded Framework, in se končno odločil, da ga preizkusim različica za C#. Ker skoraj ves čas delam z operacijskim sistemom Windows, me možnost opustitve večplatformske funkcionalnosti na splošno ni posebej motila.

Po neizogibnem razburjanju na začetku je šlo vse veliko hitreje: kombinacija CefSharpa in Windows Forms se je izkazala za zmagovalno in večino tehničnih težav sem rešil brez težav.

O nepreizkušenem

Lahko tudi poskusite implementirati FireFox v aplikacijo C# z uporabo komponente Geckofx, vendar o njem ne morem reči ničesar. Standardna komponenta brskalnika ogrodja Qt, imenovana QWebEngineView temelji v Chromiumu, tako da bo verjetno deloval tako dobro kot CefSharp.

Ljubitelje Qt-ja bo morda zamikalo komentiranje: če bi le vzeli Qt, ne bi imeli nobenih težav. To je morda res, vendar je wxWidgets mogoče upoštevati, če ne kot prvo, pa kot drugo možnost pri izbiri ogrodja GUI za aplikacije v Pythonu ali C++. In po mojem skromnem mnenju bi bilo treba takšno stvar, kot je brskalnik, vgraditi v kateri koli bolj ali manj razvit GUI okvir brez plesa s tamburinom.

Spletna knjižnica

Pa se vrnimo k moji prijavi z delovnim naslovom Spletna knjižnica. Danes izgleda (drum roll) takole:

»Prebral bom pozneje«: težka usoda zbirke internetnih strani brez povezave

Poleg tega čist in jedrnat vmesnik Tu se izvajajo samo najosnovnejše funkcije:

  • Prikaži kateri koli določen imenik v sistemu kot knjižnico dokumentov.
  • Ogled dokumentov v oknu brskalnika. Po seznamu se pomikajte na običajen način (kurzorske tipke, PgUp, PgDn, Home, End), po brskalniku se pomikajte s preslednico in tipkama Shift+preslednica.
  • Preimenovanje dokumentov.
  • Označite dokumente kot prebrane ali priljubljene z bližnjičnimi tipkami.
  • Razvrščanje dokumentov po poljubnem polju.
  • Osveži okno aplikacije, ko pride do sprememb v mapi knjižnice.
  • Ob izhodu shrani nastavitve okna.

Vse to se morda zdi nepomembna funkcionalnost, vendar, recimo, shranjevanje velikosti stolpcev v TagSpaces še vedno ni podprto - očitno imajo avtorji druge prednostne naloge.

Status (prebrano/priljubljeno) se preprosto shrani v ime datoteke (prebrana datoteka doc.html preimenovan v doc{R,S}.html). Sinhronizacije kot take ni, ampak knjižnico preprosto hranim v Dropboxu - navsezadnje je le mapa z datotekami.

Še vedno obstajajo načrti za izboljšanje preprostih stvari, kot je premikanje in brisanje datotek, ter implementacijo označevanja s poljubnimi oznakami. Če kdo želi pomagati, bom le vesel.

Ugotovitve

Raznolikost. Kot sem rekel že na začetku, je neverjetno, kako drugačen je lahko komplet orodij ene osebe od druge. Uporaba orodja, kot je WebResearch, mi je samoumevna in zaradi njegove odsotnosti sem čutil skoraj fizično nelagodje. Hkrati pa očitno imam malo podobno mislečih ljudi, sicer ne bi bilo težav z iskanjem analogov. Po drugi strani pa se podobni primeri dogajajo pri veliko bolj običajni programski opremi: Microsoft na primer ne namerava posodobiti namizne različice OneNota, zato sem prisiljen uporabljati različico 2016, prej ali slej pa bom moral tudi preiti iz to nekje.

Presenetljivo je tudi, kako težko je krmariti po trenutni pokrajini knjižnic in ogrodij. Pri svojem delu mi je redko treba pisati namizne aplikacije od začetka do konca in domneval sem, da bi bilo dobesedno vsako orodje za kateri koli programski jezik primerno za mojo nalogo (eno okno, tri komponente, trivialne interakcije). Zato karkoli vzamemo in naredimo v nekaj dneh.

Izkazalo se je, da je realnost veliko manj dobronamerna in lahko preprosto naletite na težavo kar naenkrat. Recimo, da imam dva razdelilnika, s katerima lahko raztegnem okno brskalnika. Torej je obnovitev njihovih položajev po nalaganju v wxWidgets izjemno težka, saj jih sistem postavi na privzeti položaj po skoraj vseh dogodkih, ki so mi na voljo, in moram izvajati vse vrste vdiranja, da dosežem, kar potrebujem. Kdo bi uganil?

Po drugi strani pa je jasno, da je v Windows Forms vse namenjeno »poslovnim vmesnikom«. Skoraj vse, kar je bilo potrebno, je bilo na voljo takoj: shranjevanje/obnavljanje nastavitev aplikacije, priročen vmesnik komponent (na primer, nisem pričakoval, da bo komponento TreeView mogoče vprašati za celotno pot od korena do katerega koli podrejenega elementa v obliki niza) in netrivialna orodja, kot je sledilnik sprememb vsebine mape.

Vsekakor čas ni bil izgubljen in rezultat lahko štejemo za zadovoljivega, torej kaj več bi si lahko želeli od življenja, kajne?

Vir: www.habr.com

Dodaj komentar