“Lo leggerò dopo”: il difficile destino di una raccolta offline di pagine Internet

Esistono tipi di software di cui alcune persone non possono fare a meno, mentre altri non possono nemmeno immaginare che esista una cosa del genere o che qualcuno ne abbia bisogno. Per me questo programma è stato per molti anni Ricerca Web Macropool, che ti permetteva di salvare, leggere e organizzare le pagine Internet in una sorta di libreria offline. Sono sicuro che molti dei nostri lettori se la cavano bene con una raccolta di collegamenti o una combinazione di un browser e una cartella con una serie di documenti salvati. Vorrei poter almeno contrassegnare i documenti come “letti” o “preferiti”, passare velocemente da un testo all'altro e non dipendere dalla disponibilità di Internet o di un sito specifico. Succede che c'è tempo per leggere esattamente quando non c'è Internet (per strada, ad esempio), e i collegamenti, purtroppo, spesso risultano di breve durata.

Apparentemente gli autori di WebResearch contavano proprio su queste persone. Questo programma era ricco di un'ampia varietà di funzioni: catalogazione per sezioni e tag, modifica di note, tutti i tipi di esportazione/importazione e così via. Tuttavia, intorno al 2013, il progetto ha smesso di essere aggiornato e quindi il sito web dello sviluppatore ha cessato di esistere. Per molti altri anni sono riuscito a cavalcare questo cavallo, ma prima i plug-in del browser sono caduti (disponibili solo per le versioni allora di IE e FireFox), e quindi i siti moderni hanno smesso di essere visualizzati normalmente in un visualizzatore basato sul vecchio motore IE.

“Lo leggerò dopo”: il difficile destino di una raccolta offline di pagine Internet
Finestra principale di WebResearch, PC Settimana/RE N. 17 (575)

Strada della delusione

Non appena è diventato chiaro che una sostituzione non poteva essere evitata, in background ho iniziato a cercare un analogo decente. Mi sembrava che qui non ci sarebbero state particolari difficoltà, poiché i miei desideri sono estremamente modesti. Ero pronto ad accontentarmi solo di un piccolo sottoinsieme di strumenti WebResearch, tra cui:

  • salvare una pagina HTML dal browser utilizzando un'estensione;
  • strumenti di catalogazione almeno minimi (rinominazione, organizzazione di cataloghi, etichette);
  • (preferibilmente) supporto per documenti PDF;
  • qualsiasi modo decente per sincronizzare la tua raccolta con altri dispositivi.

Con mia sorpresa, non sono riuscito a trovare nulla di simile, anche se onestamente ho esplorato Internet in lungo e in largo e ho studiato attentamente una dozzina di programmi che corrispondevano alle annotazioni (ad eccezione di Evernote, dove funzionalità simili nella descrizione sono disponibili solo su abbonamento). Oggi le uniche cose che soddisfano almeno in qualche modo i miei desideri sono i progetti TagSpaces и myBase. Il loro studio, in generale, riveste un certo interesse culturale.

TagSpaces è un organizzatore "elegante-alla moda-per giovani" su Electron con un bellissimo sito Web, un layout adattivo e, ovviamente, un tema oscuro, dove saremmo senza di esso. Allo stesso tempo, lo sfortunato sommario della raccolta con icone arrotondate alla moda occupa metà dello schermo, ospitando al massimo una ventina di elementi, e vengono scritte cose basilari come il supporto per i tasti di scelta rapida o il rendering del documento visualizzato secondo il principio residuo. Di conseguenza, i documenti vengono visualizzati in modo storto e lavorare con la raccolta si trasforma in una serie di esercizi con il mouse noiosi e dispendiosi in termini di tempo.

Il suo antipodo myBase arriva dalla fine degli anni Novanta: qui, oltre a interfaccia puramente funzionale abbiamo un set estremamente ricco di impostazioni e funzioni. Tuttavia, la finestra di visualizzazione qui è lo stesso browser basato sul vecchio IE (che già rende difficile la lettura) e tutti i documenti sono archiviati in un database monolitico. Se lo metti nella cartella Dropbox, ad esempio (non ci sono ancora altri modi per sincronizzarsi con altri dispositivi), con la minima modifica nella raccolta devi attendere che centinaia di megabyte di informazioni vengano caricate sul server.

Поворотный момент

Probabilmente, l'ulteriore contenuto della nota sembra ovvio al lettore: ora ci verrà offerta la nostra bicicletta, che, ovviamente, sarà una spanna sopra qualsiasi analogo esistente. Più o meno sì, ma non del tutto. Non potevo davvero sopportare la dura prova con myBase e TagSpaces e ho abbozzato il mio gestore di documenti, il collegamento a cui fornirò verso la fine. Tuttavia questo piccolo progetto personale non meriterebbe da solo un articolo a parte; Scrivo soprattutto perché ho pensato che sarebbe stato interessante condividere l'esperienza maturata durante il mio lavoro e una serie di spiacevoli sorprese che non mi sarei mai aspettato.

Obiettivi e obiettivi

Vorrei iniziare con il fatto che ora ho una vita piuttosto impegnata e semplicemente non ho tempo per progetti di hobby a tutti gli effetti. Pertanto, fin dall'inizio, ho deciso che ero pronto a scolpire il mio strumento da qualsiasi componente mi fosse capitato a portata di mano, se questo avesse accelerato le cose. Inoltre per ora mi impegno a implementare solo il minimo assoluto di funzionalità, di cui è assolutamente impossibile fare a meno.

Formato dati e salvataggio pagina

In quale forma le pagine web dovrebbero essere archiviate su disco? Tenendo conto dei requisiti precedentemente formulati, mi è sembrato che la scelta fosse piccola: o il formato di salvataggio “intera pagina web”, cioè il file HTML principale e una cartella con le risorse associate, oppure il formato MHTML. La prima opzione mi è sembrata subito meno preferibile: c'è poca gioia nell'avere sul disco un mucchio di file spazzatura, dai quali sarà necessario estrarre documenti significativi, filtrare quelli non necessari durante la ricerca e monitorare l'integrità durante la copia. Quando ho provato a lavorare con TagSpaces, ho dovuto salvare nuovamente tutti i miei documenti in modo che il nome della cartella delle risorse iniziasse con un punto: quindi il sistema li ha riconosciuti come “nascosti” e non li ha visualizzati.

Questo problema è nascosto alla vista in myBase, poiché tutto è archiviato nel database, ma nel mio caso ha prevalso il principio di semplicità: volevo davvero archiviare tutto come normali file su disco in modo da non dovermi occupare dell'implementazione di operazioni di routine come copia, ridenominazione, eliminazione e sincronizzazione.

Il formato MHTML sta attraversando tempi difficili. Un modo semplice per salvare MHTML è stato espulso da Chrome quest'estatee non so nemmeno dove dovrebbero essere archiviate le pagine adesso? È chiaro che l'opportunità non è ancora scomparsa, ci sono estensioni di terze parti, ma in generale questo è un brutto segno. Inoltre, salvando in formato MHTML non supportato in Chromium Embedded Framework, il che non aggiunge ottimismo.

Allo stesso tempo, ho iniziato a cercare un modo semplice per salvare le pagine dal browser in una cartella specifica. Di conseguenza, entrambi i problemi sono stati risolti con poche perdite: mi sono imbattuto in un progetto meraviglioso File singolo, in grado di salvare il contenuto di una pagina web in un file HTML separato e indipendente. Questo viene fatto convertendo tutte le risorse associate nel formato base64 e incorporandole direttamente in HTML. Naturalmente, la dimensione del file aumenta e i contenuti sembrano un po' disordinati, ma nel complesso l'approccio mi è sembrato affidabile e semplice e l'ho scelto.

SingleFile è disponibile sia come estensione del browser che come applicazione da riga di comando. Adesso utilizzo solo l'estensione: è abbastanza comoda, a parte il fatto che devi selezionare manualmente la cartella di destinazione per il salvataggio. In futuro probabilmente proverò a migliorare l'applicazione per semplificare questo processo. Per chiamare un'applicazione di terze parti da Chrome, puoi utilizzare l'estensione Pulsante dell'applicazione esterna - questa è un'altra mia utile scoperta. A proposito, l'applicazione è già stata utile: con il suo aiuto ho convertito una raccolta di cartelle e file da TagSpaces in una serie di documenti HTML indipendenti.

Problemi con la GUI e il browser

Ho trovato Python adatto a tutti i tipi di semplici operazioni su file e stringhe e poiché uno dei miei progetti di lavoro utilizza wxWidget, scelta wxPython sembrava logico come quadro principale.

Inoltre, avendo riscontrato abbastanza problemi con la visualizzazione delle pagine in altri programmi, sono giunto alla conclusione che l'unico modo affidabile per affrontarli è introdurre nel programma un visualizzatore basato su un browser moderno, ovvero Chrome o Firefox.

Devo ammettere che l'ultima volta che ho dovuto fare una cosa del genere è stato circa 15 anni fa, e non mi aspettavo alcuna trappola. Si è scoperto che è impossibile "semplicemente schiaffeggiare il browser sul modulo": in qualche modo l'umanità non è stata in grado di far fronte a questo compito in modo affidabile e universale. Una sorta di casella di riepilogo o pulsante su un modulo può essere inserito in qualsiasi framework GUI e persino generare codice multipiattaforma, e mi è sembrato che nel 2019, anche la visualizzazione HTML avrebbe dovuto essere un problema universalmente risolto.

Si è scoperto che in wxWidgets, ad esempio, il componente “browser” standard è un wrapper multipiattaforma sul “browser” dipendente dal sistema, che nel caso di Windows, ad esempio, significa Internet Explorer 7, e la situazione in Windows Forms non è migliore e le versioni più recenti di IE9 sono disponibili solo utilizzando non banali manipolazione del registro. Come puoi vedere, non sono l’unico che ha fatto altro negli ultimi 15 anni, anche qui non è cambiato nulla.

Poi mi sono trovato di fronte a una scelta: cambiare il framework o cercare un componente alternativo per il browser. Dopo aver esitato, ho deciso di provare prima la seconda strada e mi sono imbattuto subito nel progetto CEF Python: collegamenti Python per Chromium Embedded Framework, progettato specificamente per il compito di incorporare Chromium nelle applicazioni Python.

Valuta la situazione: Python è uno dei linguaggi di programmazione più popolari al mondo, Chrome è essenzialmente un monopolista nel mercato dei browser. Allo stesso tempo, CEF Python è effettivamente supportato dall’energia un ragazzo, forza e salute per lui. Davvero nessuno ne ha più bisogno?...

Tuttavia, CEF Python alla fine non mi ha aiutato: sebbene anche l'esempio base di integrazione con wxWidgets dal repository del progetto sia francamente pieno di bug, ho provato ad armeggiare di più, ma non sono riuscito a risolvere tutti i problemi che sono sorti. Non approfondirò nemmeno l’argomento, difficilmente lo meriterebbe.

Ho esaminato i componenti basati su Chromium Embedded Framework in modo più dettagliato e alla fine ho deciso di provarlo versione per C#. Dato che lavoro quasi sempre con Windows, la prospettiva di rinunciare alla funzionalità multipiattaforma, in generale, non mi ha infastidito particolarmente.

Dopo qualche inevitabile trambusto iniziale, le cose sono andate molto più velocemente: la combinazione di CefSharp e Windows Forms si è rivelata vincente, e sono riuscito a risolvere la maggior parte dei problemi tecnici senza alcun problema.

A proposito di ciò che non è stato provato

Puoi anche provare a implementare FireFox in un'applicazione C# utilizzando il componente Geckofx, ma non posso dire nulla su di lui. Un componente browser standard del framework Qt chiamato QWebEngineView basato su Cromo, quindi probabilmente funzionerà altrettanto bene di CefSharp.

I fan di Qt potrebbero essere tentati di commentare: se solo avessero preso Qt, non avrebbero avuto problemi. Questo può essere vero, ma wxWidgets può essere considerato, se non la prima, almeno la seconda opzione quando si sceglie un framework GUI per applicazioni in Python o C++. E secondo la mia modesta opinione, qualcosa come un browser dovrebbe essere integrato in qualsiasi struttura GUI più o meno sviluppata senza ballare con un tamburello.

Biblioteca Web

Torniamo però alla mia domanda con il titolo provvisorio Biblioteca Web. Oggi appare (rullo di tamburi) così:

“Lo leggerò dopo”: il difficile destino di una raccolta offline di pagine Internet

Oltre a interfaccia pulita e concisa Qui sono implementate solo le funzioni più basilari:

  • Visualizza qualsiasi directory specificata nel sistema come raccolta documenti.
  • Visualizza i documenti in una finestra del browser. Navigare nell'elenco nel modo consueto (tasti cursore, PgSu, PgGiù, Home, Fine), scorrere il browser utilizzando i tasti Spazio e Maiusc+Spazio.
  • Rinominare i documenti.
  • Contrassegna i documenti come letti o preferiti utilizzando i tasti di scelta rapida.
  • Ordinamento dei documenti in base a qualsiasi campo.
  • Aggiorna la finestra dell'applicazione quando vengono apportate modifiche alla cartella della libreria.
  • Salva le impostazioni della finestra all'uscita.

Tutto ciò può sembrare una funzionalità banale, ma, ad esempio, il salvataggio delle dimensioni delle colonne in TagSpaces non è ancora supportato: a quanto pare, gli autori hanno altre priorità.

Lo stato (letto/preferito) viene semplicemente memorizzato nel nome del file (leggi file doc.html rinominato in doc{R,S}.html). Non esiste una sincronizzazione in quanto tale, ma tengo semplicemente la libreria in Dropbox: dopotutto è solo una cartella con file.

Esistono ancora piani per migliorare cose semplici come lo spostamento e l'eliminazione di file, nonché per implementare l'etichettatura con tag arbitrari. Se qualcuno vuole aiutare, sarò solo felice.

risultati

Varietà. Come ho detto dall'inizio, è sorprendente quanto gli strumenti di una persona possano essere diversi da quelli di un'altra. Usare uno strumento come WebResearch mi viene naturale e ho provato un disagio quasi fisico per la sua assenza. Allo stesso tempo, a quanto pare, ho poche persone che la pensano allo stesso modo, altrimenti non ci sarebbero problemi con la ricerca di analoghi. D'altronde casi simili si verificano con software molto più mainstream: Microsoft, ad esempio, non aggiornerà la versione desktop di OneNote, quindi sono costretto a utilizzare la versione 2016, e prima o poi dovrò passare anche da da qualche parte.

Ciò che sorprende è anche quanto sia difficile orientarsi nell’attuale panorama di biblioteche e framework. Nel mio lavoro, raramente devo scrivere applicazioni desktop dall'inizio alla fine e presumevo che letteralmente qualsiasi strumento per qualsiasi linguaggio di programmazione sarebbe stato adatto al mio compito (una finestra, tre componenti, interazioni banali). Quindi prendiamo qualsiasi cosa e la facciamo entro pochi giorni.

Si è scoperto che la realtà è molto meno benevola e puoi semplicemente imbatterti in un problema all'improvviso. Diciamo che ho due splitter che possono essere utilizzati per allungare la finestra del browser. Quindi, ripristinare le loro posizioni dopo il caricamento in wxWidgets è estremamente difficile, poiché il sistema li mette nella posizione predefinita dopo quasi tutti gli eventi a mia disposizione e devo fare ogni sorta di hacking per ottenere ciò di cui ho bisogno. Chi l'avrebbe mai detto?

D’altronde è chiaro che in Windows Forms tutto è pensato per “interfacce aziendali”. Quasi tutto ciò che era necessario era disponibile immediatamente: salvataggio/ripristino delle impostazioni dell'applicazione, una comoda interfaccia dei componenti (ad esempio, non mi aspettavo che al componente TreeView potesse essere chiesto il percorso completo dalla radice a qualsiasi elemento figlio sotto forma di stringa) e strumenti non banali come un rilevatore di modifiche al contenuto della cartella.

In ogni caso il tempo non è stato sprecato, ed il risultato può considerarsi soddisfacente, quindi cosa si può volere di più dalla vita, no?

Fonte: habr.com

Aggiungi un commento