"Luen sen myöhemmin": Internet-sivujen offline-kokoelman vaikea kohtalo

On olemassa ohjelmistotyyppejä, joita ilman jotkut eivät voi elää, kun taas toiset eivät voi edes kuvitella, että sellainen on olemassa tai että joku sitä ylipäätään tarvitsee. Minulle tämä ohjelma oli monta vuotta Macropool WebResearch, jonka avulla voit tallentaa, lukea ja järjestää Internet-sivuja eräänlaiseksi offline-kirjastoksi. Olen varma, että monet lukijamme tulevat hyvin toimeen linkkikokoelmalla tai selaimen ja kansion yhdistelmällä, jossa on joukko tallennettuja asiakirjoja. Haluaisin pystyä ainakin merkitsemään asiakirjat "luetuiksi" tai "suosikeiksi", siirtymään nopeasti tekstistä toiseen enkä riippuisi Internetin tai tietyn sivuston saatavuudesta. Tapahtuu, että on aikaa lukea tarkalleen, kun Internetiä ei ole (esimerkiksi tien päällä), ja linkit osoittautuvat valitettavasti usein lyhytaikaisiksi.

Ilmeisesti WebResearchin kirjoittajat luottivat suunnilleen näihin ihmisiin. Tämä ohjelma oli täynnä erilaisia ​​toimintoja: luettelointi osioiden ja tunnisteiden mukaan, muistiinpanojen muokkaaminen, kaikenlainen vienti/tuonti ja niin edelleen. Vuoden 2013 tienoilla projektin päivittäminen kuitenkin lopetettiin, ja sitten kehittäjän verkkosivusto lakkasi olemasta. Vielä useita vuosia onnistuin ratsastamaan tällä hevosella, mutta ensin katosivat selaimen lisäosat (saatavilla vain silloisille IE:n ja FireFoxin versioille), ja sitten modernit sivustot lakkasivat näyttämästä normaalisti vanhaan IE-moottoriin perustuvassa katseluohjelmassa.

"Luen sen myöhemmin": Internet-sivujen offline-kokoelman vaikea kohtalo
WebResearchin pääikkuna, PC Week/RE nro 17 (575)

Pettymysten tie

Heti kun kävi selväksi, että vaihtoa ei voitu välttää, aloin taustalla etsimään kunnollista analogia. Minusta näytti, että tässä ei olisi mitään erityisiä vaikeuksia, koska toiveeni ovat erittäin vaatimattomia. Olin valmis pärjäämään vain pienellä osajoukolla WebResearch-työkaluja, mukaan lukien:

  • HTML-sivun tallentaminen selaimesta laajennuksen avulla;
  • vähintään minimaaliset luettelointityökalut (uudelleennimeäminen, luetteloiden järjestäminen, tarrat);
  • (mieluiten) tuki PDF-dokumenteille;
  • mikä tahansa kunnollinen tapa synkronoida kokoelmasi muiden laitteiden kanssa.

Yllätyksekseni en löytänyt mitään vastaavaa, vaikka selailin rehellisesti Internetiä laajalti ja tutkin huolellisesti tusinaa merkintöjä vastaavaa ohjelmaa (poikkeuksena Evernote, jossa kuvaukseltaan samanlainen toiminnallisuus on saatavilla vain tilauksella). Nykyään ainoat asiat, jotka ainakin jotenkin tyydyttävät toiveeni, ovat projektit TagSpaces и myBase. Heidän tutkimuksensa on yleisesti ottaen kulttuurisesti kiinnostavaa.

TagSpaces on niin "tyylikäs-muodikas-nuorten" järjestäjä Electronissa, jolla on kaunis verkkosivusto, mukautuva ulkoasu ja tietysti tumma teema, missä olisimme ilman sitä. Samanaikaisesti kokoelman onneton sisällysluettelo muodikkailla pyöristetyillä ikoneilla vie puolet näytöstä, mutta siihen mahtuu korkeintaan parikymmentä elementtiä, ja perusasioita, kuten pikanäppäinten tuki tai katsottavan asiakirjan renderöinti, on kirjoitettu. jäännösperiaatteen mukaan. Tämän seurauksena asiakirjat näkyvät vinosti ja kokoelman kanssa työskentely muuttuu tylsäksi ja aikaa vieväksi harjoitussarjaksi hiirellä.

Sen antipodi myBase on peräisin 1990-luvun lopulta: täältä, lisäksi puhtaasti toiminnallinen käyttöliittymä meillä on erittäin runsas valikoima asetuksia ja toimintoja. Tässä katseluikkunassa on kuitenkin sama selain, joka perustuu vanhaan IE:hen (joka vaikeuttaa jo lukemista), ja kaikki asiakirjat on tallennettu monoliittiseen tietokantaan. Jos laitat sen esimerkiksi Dropbox-kansioon (ei edelleenkään ole muita tapoja synkronoida muiden laitteiden kanssa), niin pienimmälläkin muutoksella kokoelmassa on odotettava, kunnes satoja megatavuja tietoa ladataan palvelimelle.

Käännöskohta

Todennäköisesti muistiinpanon lisäsisältö näyttää lukijalle ilmeiseltä: nyt meille tarjotaan omaa polkupyörää, joka on tietysti pää ja hartiat yli kaiken olemassa olevan analogin. Jotenkin kyllä, mutta ei aivan. En todellakaan kestänyt myBasen ja TagSpacesin koettelemista ja luonnostelin oman dokumentinhallintaohjelmani, jonka linkin annan lopuksi. Tämä pieni henkilökohtainen projekti ei kuitenkaan ansaitsisi omaa artikkeliaan sellaisenaan; Kirjoitan pitkälti siksi, että ajattelin, että olisi mielenkiintoista jakaa työssäni saamani kokemukset ja monet ikävät yllätykset, joita en osannut odottaa.

Tavoitteet ja tavoitteet

Aloitan siitä, että minulla on nyt melko kiireinen elämä, eikä minulla yksinkertaisesti ole aikaa täysipainoisiin harrastusprojekteihin. Siksi päätin alusta asti, että olen valmis muotoilemaan instrumenttini kaikista käsillä olevista komponenteista, jos tämä nopeuttaisi toimintaa. Lisäksi toistaiseksi sitoudun toteuttamaan vain ehdottoman minimin toiminnallisuuden, jota ilman on täysin mahdotonta tehdä.

Tietomuoto ja sivun tallennus

Missä muodossa verkkosivut tulee tallentaa levylle? Aiemmin laaditut vaatimukset huomioon ottaen minusta tuntui, että valinta oli pieni: joko "koko web-sivu" -tallennusmuoto, eli pääHTML-tiedosto ja kansio siihen liittyvine resursseineen, tai MHTML-muoto. Ensimmäinen vaihtoehto tuntui minusta heti vähemmän edulliselta: ei ole juurikaan iloa siitä, että levylläsi on roskakasa tiedostoja, joista joudut poimimaan merkittäviä asiakirjoja, suodattamaan tarpeettomat pois haettaessa ja valvomaan eheyttä kopioitaessa. Kun yritin työskennellä TagSpacesin kanssa, jouduin tallentamaan kaikki asiakirjani uudelleen niin, että resurssikansion nimi alkoi pisteellä: sitten järjestelmä tunnisti ne "piilotetuiksi" eikä näyttänyt niitä.

Tämä ongelma on piilotettu myBaseen näkyviltä, ​​koska kaikki on tallennettu tietokantaan, mutta minun tapauksessani yksinkertaisuuden periaate vallitsi: halusin todella tallentaa kaiken tavallisina tiedostoina levylle, jotta minun ei tarvitsisi käsitellä rutiinitoiminnot, kuten kopiointi, uudelleennimeäminen, poistaminen ja synkronointi.

MHTML-muoto elää vaikeita aikoja. Helppo tapa tallentaa MHTML poistettiin Chromesta tänä kesänä, enkä edes tiedä, missä sivut nyt pitäisi säilyttää? On selvää, että mahdollisuus ei ole vielä kadonnut, on olemassa kolmannen osapuolen laajennuksia, mutta yleensä tämä on jonkinlainen huono merkki. Lisäksi tallennus MHTML-muotoon ei tueta Chromium Embedded Frameworkissa, mikä ei myöskään lisää optimismia.

Samaan aikaan aloin etsiä yksinkertaista tapaa tallentaa sivuja selaimesta tiettyyn kansioon. Tuloksena molemmat ongelmat ratkesivat pienellä tappiolla: törmäsin upeaan projektiin Yksittäinen tiedosto, joka pystyy tallentamaan verkkosivun sisällön erilliseen itsenäiseen HTML-tiedostoon. Tämä tehdään muuntamalla kaikki siihen liittyvät resurssit base64-muotoon ja upottamalla ne suoraan HTML:ään. Tietysti tiedostokoko kasvaa ja sisältö näyttää hieman sekavalta, mutta kaiken kaikkiaan lähestymistapa vaikutti minusta luotettavalta ja yksinkertaiselta, ja päädyin siihen.

SingleFile tulee sekä selainlaajennuksena että komentorivisovelluksena. Nyt käytän vain laajennusta: se on melko kätevä, paitsi että sinun on valittava manuaalisesti kohdekansio tallentamista varten. Tulevaisuudessa yritän todennäköisesti parantaa sovellusta tämän prosessin yksinkertaistamiseksi. Voit soittaa kolmannen osapuolen sovellukseen Chromesta käyttämällä laajennusta Ulkoinen sovelluspainike - Tämä on toinen hyödyllinen löytöni. Muuten, sovellus on jo ollut hyödyllinen: sen avulla muunsin kokoelman kansioita ja tiedostoja TagSpacesista itsenäisiksi HTML-dokumenteiksi.

Ongelma graafisen käyttöliittymän ja selaimen kanssa

Huomasin Pythonin olevan hyvä kaikenlaisiin yksinkertaisiin tiedosto- ja merkkijonotoimintoihin, ja koska yksi työprojekteistani käyttää wxWidgetit, valinta wxPython tuntui loogiselta pääkehyksenä.

Lisäksi nähtyään tarpeeksi ongelmia sivujen näyttämisessä muissa ohjelmissa, tulin siihen tulokseen, että ainoa luotettava tapa käsitellä niitä on tuoda ohjelmaan visualisoija, joka perustuu nykyaikaiseen selaimeen, eli Chromeen tai Firefoxiin.

Minun on myönnettävä, että viimeksi minun piti tehdä jotain tällaista noin 15 vuotta sitten, enkä odottanut mitään sudenkuoppia. Kävi ilmi, että on mahdotonta "vain lyödä selainta lomakkeeseen": jotenkin ihmiskunta ei ole pystynyt selviytymään tästä tehtävästä luotettavasti ja universaalisti. Jonkinlainen listalaatikko tai lomakkeen painike voidaan sijoittaa mihin tahansa GUI-kehykseen ja jopa tuottaa cross-platform-koodia, ja minusta tuntui, että vuonna 2019 HTML-näytön olisi pitänyt olla myös universaalisti ratkaistu ongelma.

Kävi ilmi, että esimerkiksi wxWidgeteissä vakio "selain"-komponentti on cross-platform-kääre järjestelmäriippuvaisen "selaimen" päälle, mikä esimerkiksi Windowsin tapauksessa tarkoittaa Internet Explorer 7, eikä Windows Formsin tilanne ole parempi, ja IE9:ää uudemmat versiot ovat saatavilla vain ei-triviaalilla rekisterin manipulointi. Kuten näette, en ole ainoa, joka on tehnyt muita asioita viimeisten 15 vuoden aikana – täälläkään ei ole mitään horjunut.

Sitten jouduin valinnan eteen: vaihda kehys tai etsi vaihtoehtoinen komponentti selaimelle. Epäröinnin jälkeen päätin kokeilla ensin toista polkua ja törmäsin projektiin nopeasti CEF Python: Python-sidokset Chromium Embedded Frameworkille, joka on suunniteltu erityisesti Chromiumin upottamiseen Python-sovelluksiin.

Arvioi tilanne: Python on yksi maailman suosituimmista ohjelmointikielistä, Chrome on pohjimmiltaan monopoli selainmarkkinoilla. Samaan aikaan CEF Python on itse asiassa tuettu energialla yksi kaveri, voimia ja terveyttä hänelle. Eikö kukaan oikeasti tarvitse tätä enää?

CEF Python ei kuitenkaan lopulta auttanut minua: vaikka jopa perusesimerkki integraatiosta wxWidgetien kanssa projektivarastosta on suoraan sanottuna buginen, yritin puuhailla sen kanssa enemmän, mutta en pystynyt ratkaisemaan kaikkia esiin tulleita ongelmia. En mene syvemmälle aiheeseen, se tuskin ansaitsee sitä.

Tutkin Chromium Embedded Frameworkiin perustuvia komponentteja tarkemmin ja päätin lopulta kokeilla sitä versio C#:lle. Koska työskentelen melkein koko ajan Windowsin kanssa, mahdollisuus luopua useista alustoista ei yleensä häirinnyt minua.

Alkuvaiheen väistämättömän hälinän jälkeen asiat sujuivat paljon nopeammin: CefSharpin ja Windows Formsin yhdistelmä osoittautui voittajaksi, ja pystyin ratkaisemaan suurimman osan teknisistä ongelmista ilman ongelmia.

Tietoja kokeilemattomista

Voit myös yrittää toteuttaa FireFoxin C#-sovellukseen komponentin avulla Geckofx, mutta en osaa sanoa hänestä mitään. Qt-kehyksen standardi selainkomponentti nimeltä QWebEngineView perustettu Chromiumissa, joten se todennäköisesti toimii yhtä hyvin kuin CefSharp.

Qt:n fanit saattavat joutua kommentoimaan: jos he olisivat ottaneet Qt:n, heillä ei olisi ollut ongelmia. Tämä saattaa olla totta, mutta wxWidgetit voidaan harkita, jos ei ensimmäistä, niin toista vaihtoehtoa valittaessa graafista käyttöliittymää Python- tai C++-sovelluksille. Ja minun vaatimattoman mielipiteeni mukaan sellainen asia kuin selain pitäisi rakentaa mihin tahansa enemmän tai vähemmän kehitettyyn GUI-kehykseen ilman tamburiinilla tanssimista.

Verkkokirjasto

Palataan kuitenkin hakemukseeni työnimellä Verkkokirjasto. Nykyään se näyttää (rumpupyörä) tältä:

"Luen sen myöhemmin": Internet-sivujen offline-kokoelman vaikea kohtalo

Lisäksi puhdas ja ytimekäs käyttöliittymä Tässä toteutetaan vain perustoiminnot:

  • Näytä mikä tahansa järjestelmän määritetty hakemisto asiakirjakirjastona.
  • Tarkastele asiakirjoja selainikkunassa. Selaa luetteloa tavalliseen tapaan (kohdistinnäppäimet, PgUp, PgDn, Home, End), selaa selainta välilyönti- ja vaihto+välilyöntinäppäimillä.
  • Asiakirjojen uudelleennimeäminen.
  • Merkitse asiakirjat luetuiksi tai suosikeiksi pikanäppäimillä.
  • Asiakirjojen lajittelu minkä tahansa kentän mukaan.
  • Päivittää sovellusikkunan, kun kirjastokansiossa on muutoksia.
  • Tallenna ikkunan asetukset poistuessasi.

Kaikki tämä saattaa tuntua triviaalilta toiminnalliselta, mutta vaikkapa sarakekokojen tallentamista TagSpacesiin ei vieläkään tueta - ilmeisesti tekijöillä on muita prioriteetteja.

Tila (lue/suosikki) tallennetaan yksinkertaisesti tiedoston nimeen (luettu tiedosto doc.html nimetty uudelleen doc{R,S}.html). Synkronointia ei sinänsä ole, mutta pidän kirjastoa yksinkertaisesti Dropboxissa - loppujen lopuksi se on vain kansio tiedostoineen.

Suunnitelmissa on edelleen parantaa yksinkertaisia ​​asioita, kuten tiedostojen siirtämistä ja poistamista, sekä ottaa käyttöön koodaus mielivaltaisilla tunnisteilla. Jos joku haluaa auttaa, olen vain iloinen.

Tulokset

Lajike. Kuten sanoin alusta asti, on hämmästyttävää, kuinka erilainen yhden henkilön työkalupakki voi olla toisen. WebResearchin kaltaisen työkalun käyttäminen on minulle luonnollista, ja tunsin melkein fyysistä epämukavuutta sen puuttumisesta. Samaan aikaan minulla on ilmeisesti vähän samanhenkisiä ihmisiä, muuten analogien löytämisessä ei olisi ongelmia. Toisaalta samankaltaisia ​​tapauksia esiintyy paljon valtavirran ohjelmistojen kanssa: Microsoft ei esimerkiksi aio päivittää OneNoten työpöytäversiota, joten joudun käyttämään vuoden 2016 versiota ja ennemmin tai myöhemmin joudun myös siirtymään se jossain.

Yllättävää on myös se, kuinka vaikeaa on navigoida nykyisessä kirjastojen ja kehysten maisemassa. Työssäni joudun harvoin kirjoittamaan työpöytäsovelluksia alusta loppuun, ja oletin, että kirjaimellisesti mikä tahansa työkalu mille tahansa ohjelmointikielelle sopisi tehtävääni (yksi ikkuna, kolme komponenttia, triviaaleja vuorovaikutuksia). Joten otamme mitä tahansa ja teemme sen muutaman päivän sisällä.

Kävi ilmi, että todellisuus on paljon vähemmän hyväntahtoinen, ja voit yksinkertaisesti törmätä ongelmaan tyhjästä. Oletetaan, että minulla on kaksi jakajaa, joilla voidaan venyttää selainikkunaa. Joten niiden sijaintien palauttaminen wxWidgetiin lataamisen jälkeen on äärimmäisen vaikeaa, koska järjestelmä asettaa ne oletusasentoon lähes kaikkien käytettävissäni olevien tapahtumien jälkeen, ja minun on tehtävä kaikenlaista hakkerointia saavuttaakseni tarvitsemani. Kuka olisi arvannut?

Toisaalta on selvää, että Windows Formsissa kaikki on suunniteltu "liikerajapintoihin". Melkein kaikki tarvittava oli saatavilla heti valmiina: sovellusasetusten tallentaminen/palauttaminen, kätevä komponenttien käyttöliittymä (en esimerkiksi odottanut, että TreeView-komponentilta voidaan pyytää täyttä polkua juuresta mihin tahansa lapsielementtiin merkkijonon muodossa) ja ei-triviaaleja työkaluja, kuten kansion sisällön muutosseuranta.

Joka tapauksessa aikaa ei mennyt hukkaan, ja tulosta voidaan pitää tyydyttävänä, joten mitä muuta voisit elämältä toivoa, eikö niin?

Lähde: will.com

Lisää kommentti