Postoje vrste softvera bez kojih neki ljudi ne mogu živjeti, dok drugi ne mogu ni zamisliti da tako nešto postoji ili da je nekome uopće potrebno. Za mene je dugi niz godina ovaj program bio , koji vam je omogućio da sačuvate, čitate i organizujete internet stranice u neku vrstu oflajn biblioteke. Siguran sam da se mnogi naši čitaoci sasvim dobro snalaze sa kolekcijom veza ili kombinacijom pretraživača i foldera sa skupom sačuvanih dokumenata. Želio bih da mogu barem označiti dokumente kao „pročitane“ ili „favorite“, brzo prelaziti s jednog teksta na drugi i ne ovisiti o dostupnosti interneta ili određene stranice. Dešava se da ima vremena za čitanje baš kada nema interneta (na cesti, na primjer), a linkovi se, nažalost, često ispostavi da su kratkog vijeka.
Očigledno su autori WebResearch-a računali na otprilike ove ljude. Ovaj program je bio prepun širokog spektra funkcija: katalogizacija po odeljcima i oznakama, uređivanje beleški, sve vrste izvoza/uvoza, itd. Međutim, oko 2013. godine, projekat je prestao da se ažurira, a zatim je veb lokacija programera prestala da postoji. Još nekoliko godina uspio sam jahati ovog konja, ali su prvo otpali dodaci pretraživača (dostupni samo za tadašnje verzije IE i FireFoxa), a onda su moderni sajtovi prestali da se normalno prikazuju u pregledniku baziranom na starom IE engine-u.

Glavni prozor WebResearch-a,
Put 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 nekih posebnih poteškoća, jer su moje želje izuzetno skromne. Bio sam spreman da se zadovoljim samo sa malim podskupom alata WebResearch, uključujući:
- spremanje HTML stranice iz pretraživača pomoću ekstenzije;
- barem minimalni alati za katalogizaciju (preimenovanje, organiziranje kataloga, etikete);
- (poželjno) podrška za PDF dokumente;
- bilo koji pristojan način da sinhronizujete svoju kolekciju sa drugim uređajima.
Na svoje iznenađenje, nisam uspio pronaći ništa slično, iako sam pošteno pročešljao internet nadaleko i pažljivo proučio desetak programa koji su odgovarali napomenama (s izuzetkom Evernotea, gdje je funkcionalnost slična opisu dostupna samo uz pretplatu). Danas jedine stvari koje bar nekako zadovoljavaju moje želje su projekti и . Njihovo proučavanje, generalno govoreći, predstavlja određeni kulturni interes.
TagSpaces je takav „stilski-modni-mladinski” organizator na Electronu sa prekrasnom web-stranicom, prilagodljivim izgledom i, naravno, mračnom temom, gdje bismo bili bez toga. Istovremeno, nesrećni sadržaj kolekcije sa modernim zaobljenim ikonama zauzima polovinu ekrana, ugošćujući najviše dvadesetak elemenata, a ispisane su osnovne stvari poput podrške za vruće tipke ili renderiranja dokumenta koji se pregledava. po rezidualnom principu. Kao rezultat toga, dokumenti se prikazuju krivo, a rad sa kolekcijom 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 izuzetno bogat skup postavki i funkcija. Međutim, prozor za pregled ovde je isti pretraživač zasnovan na starom IE (koji već otežava čitanje), a svi dokumenti su 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), onda uz najmanju promjenu u kolekciji morate čekati dok se stotine megabajta informacija ne učitaju na server.
Prekretnica
Vjerovatno se čitatelju čini očiglednim daljnji sadržaj bilješke: sada će nam biti ponuđen vlastiti bicikl, koji će, naravno, biti iznad svih postojećih analoga. Nekako da, ali ne baš. Zaista nisam mogao podnijeti muku s myBase i TagSpaces i skicirao sam svoj vlastiti upravitelj dokumenata, link do kojeg ću dati pri kraju. Međutim, ovaj mali lični projekat ne bi zaslužio sopstveni članak; Pišem uglavnom zato što sam smatrao da bi bilo zanimljivo podijeliti iskustvo koje sam stekao tokom rada i niz neugodnih iznenađenja koja nisam očekivao.
Ciljevi i ciljevi
Dozvolite 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 svoj instrument oblikovati od svih komponenti koje mi dođu, ako bi to ubrzalo stvari. Osim toga, za sada se obvezujem implementirati samo apsolutni minimum funkcionalnosti, bez koje je apsolutno nemoguće.
Format podataka i čuvanje stranice
U kom obliku bi web stranice trebale biti pohranjene na disku? Uzimajući u obzir prethodno formulirane zahtjeve, činilo mi se da je izbor mali: ili format za čuvanje “cijele web stranice”, odnosno glavni HTML fajl i folder sa pripadajućim resursima, ili MHTML format. Prva opcija mi se odmah učinila manje poželjnom: malo je radosti imati hrpu datoteka na disku, iz kojih ćete morati izdvojiti značajne dokumente, filtrirati nepotrebne prilikom pretraživanja i pratiti integritet prilikom kopiranja. Kada sam pokušao da radim sa TagSpaces, morao sam ponovo da sačuvam sve svoje dokumente tako da ime fascikle resursa počinje sa tačkom: tada ih je sistem prepoznao kao „skrivene“ i nije ih prikazao.
Ovaj problem je skriven od pogleda u myBase-u, pošto je sve pohranjeno u bazi podataka, ali u mom slučaju je prevagnuo princip jednostavnosti: stvarno sam htio sve pohraniti kao obične fajlove na disk kako ne bih morao da se bavim implementacijom rutinske operacije poput kopiranja, preimenovanja, brisanja i sinkronizacije.
MHTML format prolazi kroz teška vremena. Jednostavan način da sačuvate MHTML , a ne znam ni gdje bi sada trebale biti pohranjene stranice? Jasno je da prilika još nije nestala, postoje ekstenzije trećih strana, ali općenito je to neka vrsta lošeg znaka. Dodatno, spremanje u MHTML formatu , što takođe ne uliva optimizma.
Istovremeno sam počeo da tražim jednostavan način da sačuvam stranice iz pretraživača u određenu fasciklu. Kao rezultat toga, oba problema su riješena uz mali gubitak: naišao sam na divan projekat , koji može pohraniti sadržaj web stranice u zasebnu nezavisnu HTML datoteku. Ovo se radi pretvaranjem svih povezanih resursa u base64 format i njihovo ugrađivanje direktno u HTML. Naravno, veličina fajla raste, a sadržaj izgleda malo pretrpan, ali generalno, pristup mi se činio pouzdanim i jednostavnim, pa sam se odlučio na njega.
SingleFile dolazi i kao ekstenzija pretraživača i kao aplikacija komandne linije. Sada samo koristim ekstenziju: prilično je zgodno, osim činjenice da morate ručno odabrati ciljnu mapu za spremanje. U budućnosti ću vjerovatno pokušati poboljšati aplikaciju kako bih pojednostavio ovaj proces. Da biste pozvali aplikaciju treće strane iz Chromea, možete koristiti ekstenziju - ovo je još jedno moje korisno otkriće. Inače, aplikacija je već bila korisna: uz njenu pomoć sam konvertovao kolekciju fascikli i fajlova iz TagSpaces-a u skup nezavisnih HTML dokumenata.
Problemi sa GUI i pretraživačem
Otkrio sam da je Python dobar za sve vrste jednostavnih operacija sa datotekama i stringovima, a pošto jedan od mojih radnih projekata koristi , izbor izgledalo logično kao glavni okvir.
Dalje, nakon što sam vidio dovoljno problema s prikazivanjem stranica u drugim programima, došao sam do zaključka da je jedini pouzdan način rješavanja njih uvođenje vizualizatora u program baziran na modernom pretraživaču, odnosno Chromeu ili Firefoxu.
Moram priznati da sam posljednji put ovako nešto morao raditi prije 15-ak godina i nisam očekivao nikakve zamke. Ispostavilo se da je nemoguće "samo udariti pretraživač na obrazac": čovječanstvo se nekako nije moglo pouzdano i univerzalno nositi s ovim zadatkom. Neka vrsta liste ili dugmeta na obrascu može se postaviti u bilo koji GUI framework, pa čak i generisati međuplatformski kod, a činilo mi se da je 2019. HTML prikaz takođe trebao biti univerzalno rešen problem.
Ispostavilo se da je, na primjer, u wxWidgets standardna komponenta "browser" višeplatformski omotač preko sistemski ovisnog "browsera", koji u ovom slučaju Windows, na primjer, znači , i situacija u Windows Forms nije ništa bolji, a verzije novije od IE9 dostupne su samo putem netrivijalnog . Kao što vidite, nisam jedini koji se bavi drugim stvarima posljednjih 15 godina – ni ovdje se ništa nije pomaknulo.
Tada sam bio suočen s izborom: promijeniti okvir ili potražiti alternativnu komponentu za pretraživač. Nakon oklevanja, odlučio sam prvo isprobati drugi put i brzo sam naišao na projekat , dizajniran posebno za zadatak ugrađivanja Chromiuma u Python aplikacije.
Procijenite situaciju: Python je jedan od najpopularnijih programskih jezika na svijetu, Chrome je u suštini monopolist na tržištu pretraživača. U isto vrijeme, CEF Python je zapravo podržan energijom , snage i zdravlja njemu. Zar ovo više nikome ne treba?..
Međutim, CEF Python mi na kraju nije pomogao: iako je čak i osnovni primjer integracije sa wxWidgets-om iz projektnog repozitorija, iskreno, pogrešan, pokušao sam još više da se petljam s njim, ali nisam mogao riješiti sve probleme koji su se pojavili. Neću ni dublje ulaziti u temu, teško da to zaslužuje.
Detaljnije sam pogledao komponente zasnovane na Chromium Embedded Framework-u i konačno odlučio da ih isprobam S obzirom da gotovo stalno radim sa Windows, mogućnost napuštanja podrške za više platformi me nije baš uznemirila.
Nakon neizbježne početne gužve, stvari su išle mnogo brže: kombinacija CefSharpa i Windows Forms se pokazao kao pobjednik i uspio sam riješiti većinu tehničkih izazova bez ikakvih problema.
O nesuđenim
Također možete pokušati implementirati FireFox u C# aplikaciju koristeći komponentu , ali ne mogu ništa reći o njemu. Standardna komponenta pretraživača Qt okvira tzv osnovana , tako da će vjerovatno raditi jednako dobro kao CefSharp.
Fanovi Qt-a mogu biti u iskušenju da komentarišu: da su samo uzeli Qt, ne bi imali nikakvih problema. Ovo može biti tačno, ali wxWidgets se mogu uzeti u obzir, ako ne prva, onda druga opcija kada se bira GUI okvir za aplikacije u Pythonu ili C++. I po mom skromnom mišljenju, takvu stvar kao što je pretraživač treba ugraditi u bilo koji više ili manje razvijen GUI okvir bez plesanja s tamburom.
WebLibrary
Vratimo se, međutim, mojoj aplikaciji s radnim naslovom . Danas to izgleda (bubanj roll) ovako:

Osim toga čist i koncizan interfejs Ovdje su implementirane samo najosnovnije funkcije:
- Prikažite bilo koji specificirani direktorij u sistemu kao biblioteku dokumenata.
- Pregledajte dokumente u prozoru pretraživača. Krećite se kroz listu na uobičajen način (tasteri sa kursorom, PgUp, PgDn, Home, End), skrolujte kroz pretraživač koristeći tastere za razmak i Shift+razmak.
- Preimenovanje dokumenata.
- Označite dokumente kao pročitane ili omiljene koristeći prečice.
- Sortiranje dokumenata po bilo kojem polju.
- Osvježava prozor aplikacije kada dođe do promjena u folderu biblioteke.
- Sačuvajte postavke prozora prilikom izlaska.
Sve ovo može izgledati kao trivijalna funkcionalnost, ali, recimo, spremanje veličina kolona u TagSpaces još uvijek nije podržano - očigledno, autori imaju druge prioritete.
Status (pročitano/omiljeno) se jednostavno pohranjuje u nazivu datoteke (čitaj fajl doc.html preimenovan u doc{R,S}.html). Sinhronizacija kao takva ne postoji, ali jednostavno držim biblioteku u Dropboxu - na kraju krajeva, to je samo fascikla sa fajlovima.
Još uvijek postoje planovi za poboljšanje jednostavnih stvari poput premještanja i brisanja datoteka, kao i implementacije označavanja proizvoljnim oznakama. Ako neko želi da pomogne, biće mi drago.
nalazi
Raznolikost. Kao što sam rekao od početka, neverovatno je koliko se alati jedne osobe mogu razlikovati od drugih. Korištenje alata kao što je WebResearch mi je prirodno i osjećao sam gotovo fizičku nelagodu zbog njegovog odsustva. U isto vrijeme, očigledno, imam malo istomišljenika, inače ne bi bilo problema s pronalaženjem analoga. S druge strane, slični slučajevi se dešavaju i sa mnogo popularnijim softverom: na primjer, Microsoft neće ažurirati desktop verziju OneNote-a, tako da sam primoran da koristim verziju iz 2016., a prije ili kasnije ću također morati preći sa to negde.
Ono što je također iznenađujuće je koliko je teško navigirati trenutnim pejzažom biblioteka i okvira. U svom poslu, rijetko moram pisati desktop aplikacije od početka do kraja, a pretpostavljao sam da bi doslovno bilo koji alat za bilo koji programski jezik bio prikladan za moj zadatak (jedan prozor, tri komponente, trivijalne interakcije). Tako da jednostavno uzmemo bilo šta i uradimo to u roku od nekoliko dana.
Ispostavilo se da je stvarnost mnogo manje dobronamjerna, i jednostavno možete naići na problem iz vedra neba. Recimo da imam dva razdjelnika koja se mogu koristiti za rastezanje prozora pretraživača. Dakle, vraćanje njihovih pozicija nakon učitavanja u wxWidgets je izuzetno teško, pošto ih sistem postavlja na podrazumevane pozicije nakon skoro svih meni dostupnih događaja, a ja moram da uradim razne vrste hakovanja da bih postigao ono što mi je potrebno. Ko bi pretpostavio?
S druge strane, jasno je da u Windows Forms je dizajniran za poslovne interfejse. Gotovo sve što mi je trebalo bilo je dostupno odmah: spremanje i vraćanje postavki aplikacije, korisnički prilagođen interfejs komponenti (na primjer, nisam očekivao da se komponenta TreeView može upitati za punu putanju od korijena do bilo kojeg podređenog elementa kao string) i sofisticirane funkcije poput praćenja promjena sadržaja mape.
U svakom slučaju, vrijeme nije izgubljeno, a rezultat se može smatrati zadovoljavajućim, pa šta više poželjeti od života, zar ne?
izvor: www.habr.com
