Hi ha tipus de programari sense els quals algunes persones no poden viure, mentre que d'altres no poden ni imaginar que existeixi una cosa així o que algú ho necessiti. Per a mi durant molts anys aquest programa va ser , que us permetia desar, llegir i organitzar pàgines d'Internet en una mena de biblioteca fora de línia. Estic segur que molts dels nostres lectors s'ho passen bé amb una col·lecció d'enllaços o una combinació d'un navegador i una carpeta amb un conjunt de documents desats. M'agradaria poder, com a mínim, marcar documents com a "llegits" o "preferits", passar ràpidament d'un text a un altre i no dependre de la disponibilitat d'Internet o d'un lloc concret. Succeeix que hi ha temps per llegir exactament quan no hi ha Internet (a la carretera, per exemple), i els enllaços, malauradament, sovint resulten de curta durada.
Pel que sembla, els autors de WebResearch comptaven aproximadament amb aquestes persones. Aquest programa estava ple d'una gran varietat de funcions: catalogació per seccions i etiquetes, edició de notes, tot tipus d'exportació/importació, etc. Tanmateix, cap al 2013, el projecte es va deixar d'actualitzar i aleshores el lloc web del desenvolupador va deixar d'existir. Durant uns quants anys més vaig aconseguir muntar aquest cavall, però primer es van caure els connectors del navegador (disponibles només per a les versions d'IE i FireFox d'aleshores), i després els llocs moderns van deixar de mostrar-se normalment en un visor basat en l'antic motor d'IE.

finestra principal de WebResearch,
Camí de la decepció
Tan bon punt va quedar clar que no es podia evitar un reemplaçament, en el fons vaig començar a buscar un anàleg decent. Em va semblar que aquí no hi hauria dificultats especials, ja que els meus desitjos són extremadament modestos. Estava preparat per conformar-me només amb un petit subconjunt d'eines de recerca web, que inclouen:
- desar una pàgina HTML des del navegador mitjançant una extensió;
- almenys eines de catalogació mínimes (anomenar-se, organitzar catàlegs, etiquetes);
- (preferiblement) suport per a documents PDF;
- qualsevol manera decent de sincronitzar la vostra col·lecció amb altres dispositius.
Per a la meva sorpresa, no vaig poder trobar res semblant, tot i que sincerament vaig recórrer Internet arreu i vaig estudiar amb atenció una dotzena de programes que coincideixen amb les anotacions (a excepció d'Evernote, on només hi ha una funcionalitat similar a la descripció només disponible per subscripció). Avui, les úniques coses que almenys d'alguna manera satisfan els meus desitjos són els projectes и . El seu estudi, en general, té un cert interès cultural.
TagSpaces és un organitzador tan "elegant-moda-joven" a Electron amb un lloc web preciós, disseny adaptatiu i, per descomptat, un tema fosc, on estaríem sense ell. Al mateix temps, la desafortunada taula de continguts de la col·lecció amb icones arrodonides de moda ocupa la meitat de la pantalla, alhora que alberga uns vint elements com a màxim, i s'escriuen coses bàsiques com el suport per a tecles d'accés ràpid o la representació del document que es visualitza. segons el principi residual. Com a resultat, els documents es mostren malament i treballar amb la col·lecció es converteix en un conjunt d'exercicis avorrits i que consumeixen molt de temps amb el ratolí.
La seva antípoda myBase ve de finals dels noranta: aquí, a més interfície purament funcional tenim un conjunt extremadament ric de configuracions i funcions. No obstant això, la finestra de visualització aquí és el mateix navegador basat en l'antic IE (que ja dificulta la lectura) i tots els documents s'emmagatzemen en una base de dades monolítica. Si el poseu a la carpeta de Dropbox, per exemple (encara no hi ha altres maneres de sincronitzar-se amb altres dispositius), aleshores amb el menor canvi en la col·lecció haureu d'esperar fins que es pengin centenars de megabytes d'informació al servidor.
Moment de tornada
Probablement, el contingut addicional de la nota sembla obvi per al lector: ara se'ns oferirà la nostra pròpia bicicleta, que, per descomptat, estarà per sobre de qualsevol anàleg existent. Una mena de sí, però no del tot. Realment no vaig poder suportar la prova amb myBase i TagSpaces i vaig dibuixar el meu propi gestor de documents, l'enllaç al qual us proporcionaré prop del final. Tanmateix, aquest petit projecte personal no mereixeria un article propi; Escric en gran part perquè vaig pensar que seria interessant compartir l'experiència adquirida durant la meva feina i una sèrie de sorpreses desagradables que mai m'esperava.
Objectius i objectius
Permeteu-me començar amb el fet que ara tinc una vida força ocupada i simplement no tinc temps per a projectes d'afició en tota regla. Per això, des del principi, vaig decidir que estava preparat per esculpir el meu instrument a partir de qualsevol component que tingués a la mà, si això accelerava les coses. A més, de moment em comprometo a implementar només el mínim absolut de funcionalitat, de la qual és absolutament impossible prescindir.
Format de dades i estalvi de pàgines
De quina forma s'han d'emmagatzemar les pàgines web al disc? Tenint en compte els requisits anteriorment formulats, em va semblar que l'elecció era petita: o bé el format de desat “tota la pàgina web”, és a dir, el fitxer HTML principal i una carpeta amb els recursos associats, o bé el format MHTML. La primera opció immediatament em va semblar menys preferible: hi ha poca alegria tenir un munt d'escombraries al vostre disc, dels quals haureu d'extreure documents importants, filtrar els innecessaris quan cerqueu i controlar la integritat en copiar. Quan vaig intentar treballar amb TagSpaces, vaig haver de tornar a desar tots els meus documents perquè el nom de la carpeta amb recursos comencés amb un punt: aleshores el sistema els reconeixia com a "ocults" i no els mostrava.
Aquest problema s'oculta a la vista a myBase, ja que tot s'emmagatzema a la base de dades, però en el meu cas prevalgué el principi de simplicitat: realment volia emmagatzemar-ho tot com a fitxers normals al disc perquè no hagués de fer front a la implementació de operacions rutinàries com copiar, canviar el nom, esborrar i sincronitzar .
El format MHTML està passant per moments difícils. Una manera senzilla d'estalviar MHTML , i ni tan sols sé on s'han d'emmagatzemar les pàgines ara? Està clar que l'oportunitat encara no ha desaparegut, hi ha extensions de tercers, però en general això és una mena de mal senyal. A més, desar en format MHTML , que tampoc afegeix optimisme.
Al mateix temps, vaig començar a buscar una manera senzilla de desar pàgines del navegador a una carpeta especificada. Com a resultat, tots dos problemes es van resoldre amb poca pèrdua: em vaig trobar amb un projecte meravellós , capaç de desar el contingut d'una pàgina web en un fitxer HTML independent independent. Això es fa convertint tots els recursos associats al format base64 i inserint-los directament en HTML. Per descomptat, la mida del fitxer creix i el contingut sembla una mica desordenat, però en general l'enfocament em va semblar fiable i senzill, i em vaig conformar.
SingleFile es presenta com una extensió del navegador i una aplicació de línia d'ordres. Ara només faig servir l'extensió: és força convenient, excepte pel fet que heu de seleccionar manualment la carpeta de destinació per desar-la. En el futur, probablement intentaré millorar l'aplicació per simplificar aquest procés. Per trucar a una aplicació de tercers des de Chrome, podeu utilitzar l'extensió - Aquest és un altre descobriment útil meu. Per cert, l'aplicació ja ha estat útil: amb la seva ajuda he convertit una col·lecció de carpetes i fitxers de TagSpaces en un conjunt de documents HTML independents.
Problemes amb la GUI i el navegador
Vaig trobar que Python era bo per a tot tipus d'operacions simples de fitxers i cadenes, i com que un dels meus projectes de treball utilitza , elecció semblava lògic com a marc principal.
A més, després d'haver vist prou problemes amb la visualització de pàgines en altres programes, vaig arribar a la conclusió que l'única manera fiable de tractar-los és introduir un visualitzador al programa basat en un navegador modern, és a dir, Chrome o Firefox.
He de reconèixer que l'última vegada que vaig haver de fer una cosa així va ser fa uns 15 anys, i no m'esperava cap parany. Va resultar que és impossible "només colpejar el navegador al formulari": d'alguna manera la humanitat no ha pogut fer front a aquesta tasca de manera fiable i universal. Es pot col·locar algun tipus de llista o botó d'un formulari en qualsevol marc de GUI, i fins i tot generar codi multiplataforma, i em va semblar que el 2019, la visualització HTML també hauria d'haver estat un problema resolt universalment.
Va resultar que a wxWidgets, per exemple, el component estàndard "browser" és un contenidor multiplataforma sobre el "browser" dependent del sistema, que en el cas Windows, per exemple, significa , i la situació a Windows El Forms no és millor, i les versions més noves que l'IE9 només són accessibles a través d'una configuració no trivial. . Com podeu veure, no sóc l'únic que ha estat fent altres coses durant els últims 15 anys, aquí tampoc no s'ha mogut res.
Aleshores em vaig enfrontar a una opció: canviar el marc o buscar un component alternatiu per al navegador. Després de dubtar, vaig decidir provar primer el segon camí i ràpidament em vaig trobar amb el projecte , dissenyat específicament per a la tasca d'incrustar Chromium a les aplicacions de Python.
Valoreu la situació: Python és un dels llenguatges de programació més populars del món, Chrome és essencialment un monopolista al mercat dels navegadors. Al mateix temps, CEF Python està realment recolzat per energia , força i salut per a ell. Ja ningú ho necessita realment?...
Tot i això, CEF Python no em va ajudar al final: tot i que fins i tot l'exemple bàsic d'integració amb wxWidgets del repositori del projecte és francament defectuós, vaig intentar retocar-lo més, però no vaig poder resoldre tots els problemes que van sorgir. Ni tan sols aprofundiré en el tema;
Vaig mirar els components basats en Chromium Embedded Framework amb més detall i finalment vaig decidir provar-ho Com que treballo gairebé tot el temps amb Windows, la perspectiva d'abandonar el suport multiplataforma no em molestava gaire.
Després d'un enrenou inevitable al principi, les coses van anar molt més ràpid: la combinació de CefSharp i Windows Forms va resultar ser un guanyador i vaig poder resoldre la majoria dels reptes tècnics sense cap problema.
Sobre el no provat
També podeu provar d'implementar FireFox en una aplicació C# mitjançant el component , però no puc dir res d'ell. Un component estàndard del navegador del framework Qt anomenat basat , de manera que probablement funcionarà tan bé com CefSharp.
Els fans de Qt poden tenir la temptació de comentar: si només haguessin pres Qt, no haurien tingut cap problema. Això pot ser cert, però wxWidgets es pot considerar, si no és el primer, llavors la segona opció a l'hora d'escollir un marc GUI per a aplicacions en Python o C++. I, segons la meva humil opinió, una cosa com ara un navegador s'hauria d'incorporar a qualsevol marc de GUI més o menys desenvolupat sense ballar amb un tamborí.
WebLibrary
Tornem, però, a la meva sol·licitud amb el títol de treball . Avui es veu (rodo de tambor) així:

A més interfície neta i concisa Aquí només s'implementen les funcions més bàsiques:
- Mostra qualsevol directori especificat del sistema com a biblioteca de documents.
- Veure documents en una finestra del navegador. Navegueu per la llista de la manera habitual (tecles de cursor, PgAp, PgDn, Inici, Fi), desplaceu-vos pel navegador utilitzant les tecles Espai i Maj+Espai.
- Canviar el nom dels documents.
- Marqueu els documents com a llegits o com a preferits mitjançant les tecles d'accés directe.
- Ordenar documents per qualsevol camp.
- Actualitza la finestra de l'aplicació quan hi ha cap canvi a la carpeta de la biblioteca.
- Desa la configuració de la finestra en sortir.
Tot això pot semblar una funcionalitat trivial, però, per exemple, desar mides de columnes a TagSpaces encara no s'admet; pel que sembla, els autors tenen altres prioritats.
L'estat (llegit/preferit) simplement s'emmagatzema al nom del fitxer (fitxer de lectura doc.html rebatejat a doc{R,S}.html). No hi ha sincronització com a tal, però simplement guardo la biblioteca a Dropbox; després de tot, només és una carpeta amb fitxers.
Encara hi ha plans per millorar coses senzilles com moure i suprimir fitxers, així com implementar l'etiquetatge amb etiquetes arbitràries. Si algú vol ajudar, només estaré encantat.
Troballes
Varietat. Com he dit des del principi, és increïble com de diferent pot ser el conjunt d'eines d'una persona d'una altra. L'ús d'una eina com WebResearch em ve de manera natural, i vaig sentir una incomoditat gairebé física per la seva absència. Al mateix temps, pel que sembla, tinc poques persones semblants, sinó no hi hauria problemes per trobar anàlegs. D'altra banda, casos semblants es donen amb un programari molt més convencional: per exemple, Microsoft no actualitzarà la versió d'escriptori de OneNote, així que em veig obligat a utilitzar la versió 2016, i tard o d'hora també hauré de passar de en algun lloc.
El que també sorprèn és la dificultat que és navegar pel panorama actual de biblioteques i marcs. En la meva línia de treball, poques vegades he d'escriure aplicacions d'escriptori de principi a fi, i vaig suposar que literalment qualsevol eina per a qualsevol llenguatge de programació seria adequada per a la meva tasca (una finestra, tres components, interaccions trivials). Així que prenem qualsevol cosa i ho fem en pocs dies.
Va resultar que la realitat és molt menys benèvola, i simplement pots trobar-te amb un problema de la blau. Suposem que tinc dos separadors que es poden utilitzar per estirar la finestra del navegador. Per tant, restaurar les seves posicions després de carregar-los a wxWidgets és extremadament difícil, ja que el sistema els posa a les posicions predeterminades després de gairebé tots els esdeveniments disponibles per a mi, i he de fer tot tipus de pirateria per aconseguir el que necessito. Qui ho hauria endevinat?
D'altra banda, és clar que en Windows El Forms està dissenyat per a interfícies empresarials. Gairebé tot el que necessitava estava disponible de fàbrica: desar i restaurar la configuració de l'aplicació, una interfície de component fàcil d'utilitzar (per exemple, no esperava que es pogués consultar el component TreeView per obtenir la ruta completa des de l'arrel fins a qualsevol element fill com a cadena) i funcions sofisticades com ara un rastrejador de canvis de contingut de carpeta.
En qualsevol cas, el temps no es va perdre, i el resultat es pot considerar satisfactori, així que què més es pot desitjar de la vida, oi?
Font: www.habr.com
