Yra programinės įrangos tipų, be kurių vieni negali gyventi, o kiti net neįsivaizduoja, kad toks dalykas egzistuoja arba kad kam nors jos apskritai reikia. Man ši programa buvo daugelį metų , kuri leido išsaugoti, skaityti ir tvarkyti interneto puslapius į tam tikrą neprisijungus pasiekiamą biblioteką. Esu tikras, kad daugelis mūsų skaitytojų puikiai susitvarko su nuorodų rinkiniu arba naršyklės ir aplanko su išsaugotų dokumentų rinkiniu deriniu. Norėčiau bent jau pažymėti dokumentus kaip „skaitytus“ ar „mėgstamiausius“, greitai pereiti nuo vieno teksto prie kito ir nepriklausyti nuo interneto ar konkrečios svetainės prieinamumo. Pasitaiko, kad yra laiko skaityti tiksliai tada, kai nėra interneto (pvz., kelyje), o nuorodos, deja, dažnai pasirodo trumpalaikės.
Matyt, WebResearch autoriai skaičiavo maždaug tokius žmones. Ši programa buvo supakuota su daugybe įvairių funkcijų: katalogavimas pagal skyrius ir žymas, pastabų redagavimas, visų rūšių eksportas / importas ir pan. Tačiau apie 2013 m. projektas nustojo būti atnaujinamas, o tada kūrėjo svetainė nustojo egzistuoti. Dar keletą metų man pavyko pajodinėti šiuo arkliuku, bet iš pradžių nukrito naršyklės įskiepiai (galimi tik tuometinėms IE ir FireFox versijoms), o vėliau šiuolaikinės svetainės nustojo normaliai rodyti senuoju IE varikliu paremtoje peržiūros priemonėje.

WebResearch pagrindinis langas,
Nusivylimo kelias
Kai tik tapo aišku, kad pakeitimo negalima išvengti, fone pradėjau ieškoti tinkamo analogo. Man atrodė, kad čia nebus jokių ypatingų sunkumų, nes mano norai yra labai kuklūs. Buvau pasiruošęs apsieiti tik su nedideliu WebResearch įrankių pogrupiu, įskaitant:
- HTML puslapio išsaugojimas iš naršyklės naudojant plėtinį;
- bent minimalios katalogavimo priemonės (katalogų pervadinimas, tvarkymas, etiketės);
- (pageidautina) PDF dokumentų palaikymas;
- bet koks tinkamas būdas sinchronizuoti savo kolekciją su kitais įrenginiais.
Mano nuostabai, nieko panašaus rasti nepavyko, nors sąžiningai išnaršiau po internetą ir atidžiai išstudijavau tuziną programų, kurios atitiko anotacijas (išskyrus Evernote, kur panašus funkcionalumas pasiekiamas tik užsisakius). Šiandien vieninteliai dalykai, kurie bent kažkaip patenkina mano norus, yra projektai и . Paprastai tariant, jų tyrimas yra tam tikras kultūrinis interesas.
„TagSpaces“ yra tokia „stilinga-madinga-jaunimo“ organizatorius Electron su gražia svetaine, prisitaikančiu išdėstymu ir, žinoma, tamsia tema, kur mes būtume be jos. Tuo pačiu metu nelemtas kolekcijos turinys su madingomis apvaliomis piktogramomis užima pusę ekrano, o daugiausiai talpina apie dvidešimt elementų, o pagrindiniai dalykai, tokie kaip greitųjų klavišų palaikymas ar žiūrimo dokumento atvaizdavimas, yra parašyti. pagal likutinį principą. Dėl to dokumentai rodomi kreivai, o darbas su kolekcija virsta nuobodžiu ir daug laiko reikalaujančiu pratimų su pele rinkiniu.
Jo antipodas myBase kilęs iš 9-ojo dešimtmečio pabaigos: čia, be grynai funkcinė sąsaja turime itin gausų nustatymų ir funkcijų rinkinį. Tačiau peržiūros langas čia yra ta pati naršyklė, pagrįsta senąja IE (tai jau apsunkina skaitymą), o visi dokumentai saugomi monolitinėje duomenų bazėje. Jei įdėsite jį, pavyzdžiui, į „Dropbox“ aplanką (kitų būdų sinchronizuoti su kitais įrenginiais vis dar nėra), tuomet su menkiausiu kolekcijos pasikeitimu tenka laukti, kol į serverį bus įkelta šimtai megabaitų informacijos.
Tekinimo momentas
Ko gero, skaitytojui akivaizdus tolimesnis užrašo turinys: dabar mums bus pasiūlytas nuosavas dviratis, kuris, žinoma, bus galva aukščiau už bet kurį esamą analogą. Kažkaip taip, bet ne visai. Tikrai neištvėriau išbandymų su myBase ir TagSpaces ir nubraižiau savo dokumentų tvarkyklę, kurios nuorodą pateiksiu pabaigoje. Tačiau šis nedidelis asmeninis projektas nebūtų vertas savo straipsnio; Rašau daugiausia todėl, kad maniau, kad būtų įdomu pasidalinti savo darbo metu įgyta patirtimi ir daugybe nemalonių netikėtumų, kurių nesitikėjau.
Tikslai ir uždaviniai
Pradėsiu nuo to, kad dabar turiu gana įtemptą gyvenimą ir tiesiog neturiu laiko pilnaverčiams pomėgių projektams. Todėl nuo pat pradžių nusprendžiau, kad esu pasiruošęs savo instrumentą suformuoti iš bet kokių pasitaikančių komponentų, jei tai paspartins. Be to, kol kas įsipareigoju įgyvendinti tik absoliutų minimumą funkcionalumo, be kurio visiškai neįmanoma apsieiti.
Duomenų formatas ir puslapio išsaugojimas
Kokia forma tinklalapiai turi būti saugomi diske? Atsižvelgiant į anksčiau suformuluotus reikalavimus, man atrodė, kad pasirinkimas buvo mažas: arba „viso tinklalapio“ išsaugojimo formatas, tai yra pagrindinis HTML failas ir aplankas su susijusiais ištekliais, arba MHTML formatas. Pirmas variantas man iš karto pasirodė mažiau priimtinesnis: mažai džiaugsmo, kai diske yra šiukšlių krūva failų, iš kurių reikės ištraukti reikšmingus dokumentus, ieškant išfiltruoti nereikalingus, o kopijuojant stebėti vientisumą. Kai bandžiau dirbti su TagSpaces, turėjau iš naujo išsaugoti visus savo dokumentus, kad išteklių aplanko pavadinimas prasidėtų tašku: tada sistema atpažino juos kaip „paslėptus“ ir nerodė.
Ši problema paslėpta myBase, nes viskas saugoma duomenų bazėje, tačiau mano atveju vyravo paprastumo principas: labai norėjau viską saugoti kaip įprastus failus diske, kad man nereikėtų rūpintis įprastas operacijas, tokias kaip kopijavimas, pervadinimas, trynimas ir sinchronizavimas.
MHTML formatas išgyvena sunkius laikus. Lengvas būdas išsaugoti MHTML , o aš net nežinau, kur dabar turėtų būti saugomi puslapiai? Aišku, kad galimybė dar neišnyko, yra trečiųjų šalių plėtinių, tačiau apskritai tai yra kažkoks blogas ženklas. Be to, įrašymas MHTML formatu , kas taip pat neprideda optimizmo.
Tuo pačiu metu pradėjau ieškoti paprasto būdo, kaip išsaugoti puslapius iš naršyklės į nurodytą aplanką. Dėl to abi problemos buvo išspręstos be didelių nuostolių: aš susidūriau su nuostabiu projektu , galinti išsaugoti tinklalapio turinį atskirame nepriklausomame HTML faile. Tai atliekama konvertuojant visus susijusius išteklius į base64 formatą ir įterpiant juos tiesiai į HTML. Žinoma, failo dydis auga, o turinys atrodo šiek tiek netvarkingas, bet apskritai metodas man atrodė patikimas ir paprastas, todėl aš apsisprendžiau.
„SingleFile“ yra tiek naršyklės plėtinys, tiek komandų eilutės programa. Dabar aš tiesiog naudoju plėtinį: tai gana patogu, išskyrus tai, kad turite rankiniu būdu pasirinkti tikslinį aplanką, kurį norite išsaugoti. Ateityje tikriausiai bandysiu patobulinti programą, kad supaprastinčiau šį procesą. Jei norite skambinti trečiosios šalies programai iš „Chrome“, galite naudoti plėtinį – tai dar vienas naudingas mano atradimas. Beje, programa jau pravertė: jos pagalba konvertavau aplankų ir failų kolekciją iš TagSpaces į nepriklausomų HTML dokumentų rinkinį.
Problemos su GUI ir naršykle
Radau, kad Python tinka visoms paprastoms failų ir eilučių operacijoms, o kadangi vienas iš mano darbo projektų naudoja , pasirinkimas atrodė logiška kaip pagrindinė struktūra.
Be to, matydamas pakankamai problemų, susijusių su puslapių rodymu kitose programose, priėjau prie išvados, kad vienintelis patikimas būdas su jomis susidoroti yra įdiegti vizualizatorių į programą, pagrįstą modernia naršykle, tai yra, „Chrome“ ar „Firefox“.
Turiu pripažinti, kad paskutinį kartą man teko kažką panašaus daryti maždaug prieš 15 metų ir aš nesitikėjau jokių spąstų. Paaiškėjo, kad „tiesiog trenkti naršyklei ant formos“ neįmanoma: žmonija kažkaip nesugebėjo patikimai ir visuotinai susidoroti su šia užduotimi. Kažkoks sąrašo laukelis ar formos mygtukas gali būti dedamas į bet kurią GUI sistemą ir netgi generuoti kelių platformų kodą, ir man atrodė, kad 2019 m. HTML ekranas taip pat turėjo būti visuotinai išspręsta problema.
Paaiškėjo, kad, pavyzdžiui, „wxWidgets“ standartinis „naršyklės“ komponentas yra kelių platformų apvalkalas, apimantis nuo sistemos priklausomą „naršyklę“, kuri šiuo atveju Windows, pavyzdžiui, reiškia ir situacija Windows „Forms“ nėra geresnė, o naujesnės nei IE9 versijos pasiekiamos tik per ne trivialius . Kaip matote, aš nesu vienintelis, kuris pastaruosius 15 metų užsiimu kitais dalykais – čia taip pat niekas nepasikeitė.
Tada aš susidūriau su pasirinkimu: pakeisti karkasą arba ieškoti alternatyvaus komponento naršyklei. Po dvejonių nusprendžiau pirma išbandyti antrąjį kelią ir greitai susidūriau su projektu , sukurtas specialiai Chromium įterpimui į Python programas.
Įvertinkite situaciją: Python yra viena populiariausių programavimo kalbų pasaulyje, Chrome iš esmės yra monopolistas naršyklių rinkoje. Tuo pačiu metu CEF Python iš tikrųjų palaikoma energija , stiprybės ir sveikatos jam. Ar tikrai niekam to nebereikia?..
Tačiau CEF Python man galiausiai nepadėjo: nors net pagrindinis integracijos su wxWidgets pavyzdys iš projekto saugyklos, atvirai kalbant, yra klaidingas, bandžiau su juo labiau padirbėti, bet negalėjau išspręsti visų iškilusių problemų. Net nesigilinsiu į temą, vargu ar ji to verta.
Išsamiau išnagrinėjau komponentus, pagrįstus Chromium Embedded Framework, ir galiausiai nusprendžiau pabandyti Kadangi beveik visą laiką dirbu su Windows, perspektyva atsisakyti platforminio palaikymo manęs iš tikrųjų netrikdė.
Po neišvengiamo šurmulio pradžioje viskas klostėsi daug greičiau: „CefSharp“ ir Windows „Forms“ pasirodė esanti nugalėtoja, ir man pavyko išspręsti daugumą techninių iššūkių be jokių problemų.
Apie nebandytus
Taip pat galite pabandyti įdiegti „FireFox“ į C# programą naudodami komponentą , bet nieko apie jį negaliu pasakyti. Standartinis Qt sistemos naršyklės komponentas vadinamas pagrįstas , todėl tikriausiai veiks taip pat, kaip ir CefSharp.
Qt gerbėjams gali kilti pagunda pakomentuoti: jei tik jie būtų vartoję Qt, nebūtų turėję jokių problemų. Tai gali būti tiesa, tačiau wxWidgets gali būti svarstomas jei ne pirmasis, tai antrasis variantas renkantis GUI sistemą programoms Python arba C++. Ir mano kuklia nuomone, toks dalykas kaip naršyklė turėtų būti integruotas į bet kokį daugiau ar mažiau išvystytą GUI karkasą, nešokant su tamburinu.
WebLibrary
Tačiau grįžkime prie mano paraiškos darbiniu pavadinimu . Šiandien jis atrodo (būgno ritinys) taip:

Be švari ir glausta sąsaja Čia įgyvendinamos tik pagrindinės funkcijos:
- Rodyti bet kurį nurodytą katalogą sistemoje kaip dokumentų biblioteką.
- Peržiūrėkite dokumentus naršyklės lange. Naršykite sąrašą įprastu būdu (žymeklio klavišai, PgUp, PgDn, Home, End), slinkite per naršyklę naudodami tarpo ir Shift+tarpo klavišus.
- Dokumentų pervadinimas.
- Pažymėkite dokumentus kaip skaitytus arba mėgstamiausius naudodami sparčiuosius klavišus.
- Rūšiuoti dokumentus pagal bet kurią sritį.
- Atnaujina programos langą, kai bibliotekos aplanke yra kokių nors pakeitimų.
- Išeidami išsaugokite lango nustatymus.
Visa tai gali atrodyti kaip nereikšmingas funkcionalumas, bet, tarkime, stulpelių dydžių išsaugojimas „TagSpaces“ vis tiek nepalaikomas – matyt, autoriai turi kitų prioritetų.
Būsena (skaityta / mėgstamiausia) tiesiog išsaugoma failo pavadinime (skaityto failo doc.html pervadintas į doc{R,S}.html). Sinchronizavimo kaip tokio nėra, o aš tiesiog laikau biblioteką Dropbox – juk tai tik aplankas su failais.
Vis dar planuojama patobulinti paprastus dalykus, tokius kaip failų perkėlimas ir trynimas, taip pat įdiegti žymėjimą savavališkomis žymomis. Jei kas norės padėti, aš tik džiaugsiuosi.
išvados
Įvairovė. Kaip sakiau nuo pat pradžių, nuostabu, kaip vieno žmogaus įrankių rinkinys gali skirtis nuo kito. Naudoti tokį įrankį kaip „WebResearch“ man yra savaime suprantamas dalykas, ir dėl jo nebuvimo jaučiau beveik fizinį diskomfortą. Tuo pačiu, matyt, turiu mažai bendraminčių, kitaip nebūtų problemų ieškant analogų. Kita vertus, panašių atvejų pasitaiko ir naudojant kur kas labiau įprastą programinę įrangą: pavyzdžiui, „Microsoft“ nesiruošia atnaujinti „OneNote“ darbalaukio versijos, todėl esu priverstas naudoti 2016 m. versiją, o anksčiau ar vėliau taip pat turėsiu pereiti nuo „OneNote“ versijos. tai kažkur.
Taip pat stebina tai, kaip sunku naršyti dabartinėje bibliotekų ir sistemų aplinkoje. Savo darbe retai turiu rašyti darbalaukio programas nuo pradžios iki pabaigos ir maniau, kad mano užduočiai tiktų bet koks įrankis bet kuriai programavimo kalbai (vienas langas, trys komponentai, nereikšmingos sąveikos). Taigi mes tiesiog imame bet ką ir padarome per kelias dienas.
Paaiškėjo, kad realybė yra daug mažiau geranoriška, ir jūs galite tiesiog netikėtai susidurti su problema. Tarkime, turiu du skirstytuvus, kuriais galima išplėsti naršyklės langą. Taigi atkurti jų pozicijas įkėlus į wxWidgets yra nepaprastai sunku, nes sistema juos nustato į numatytąsias pozicijas po beveik visų man prieinamų įvykių ir aš turiu atlikti visokius įsilaužimus, kad pasiekčiau tai, ko man reikia. Kas būtų atspėjęs?
Kita vertus, akivaizdu, kad 2013 m. Windows „Forms“ skirta verslo sąsajoms. Beveik viskas, ko man reikėjo, buvo prieinama iš karto: programos nustatymų išsaugojimas ir atkūrimas, patogi komponentų sąsaja (pavyzdžiui, nesitikėjau, kad „TreeView“ komponentui bus galima pateikti užklausą dėl viso kelio nuo šaknies iki bet kurio antrinio elemento kaip eilutės) ir sudėtingos funkcijos, tokios kaip aplanko turinio pakeitimų sekiklis.
Bet kuriuo atveju laikas nebuvo švaistomas, o rezultatas gali būti laikomas patenkinamu, tad ko daugiau norėti iš gyvenimo, tiesa?
Šaltinis: www.habr.com
