Il existe des types de logiciels sans lesquels certaines personnes ne peuvent pas vivre, tandis que d’autres ne peuvent même pas imaginer qu’une telle chose existe ou que quiconque en ait besoin. Pour moi, pendant de nombreuses années, ce programme était
Apparemment, les auteurs de WebResearch comptaient sur environ ces personnes. Ce programme était doté d'une grande variété de fonctions : catalogage par sections et balises, édition de notes, toutes sortes d'exportation/importation, etc. Cependant, vers 2013, le projet a cessé d’être mis à jour, puis le site Web du développeur a cessé d’exister. Pendant plusieurs années encore, j'ai réussi à monter ce cheval, mais d'abord les plugins du navigateur sont tombés (disponibles uniquement pour les versions d'IE et FireFox d'alors), puis les sites modernes ont cessé de s'afficher normalement dans une visionneuse basée sur l'ancien moteur IE.
Fenêtre principale de WebResearch,
Route de la déception
Dès qu’il est devenu clair qu’un remplacement ne pouvait être évité, j’ai commencé en arrière-plan à chercher un analogue décent. Il m'a semblé qu'il n'y aurait pas de difficultés particulières ici, puisque mes désirs sont extrêmement modestes. J'étais prêt à me contenter d'un petit sous-ensemble d'outils WebResearch, notamment :
- enregistrer une page HTML depuis le navigateur à l'aide d'une extension ;
- au moins des outils de catalogage minimaux (renommer, organiser les catalogues, étiquettes) ;
- (de préférence) prise en charge des documents PDF ;
- tout moyen décent de synchroniser votre collection avec d’autres appareils.
À ma grande surprise, je n'ai rien trouvé de similaire, même si j'ai honnêtement parcouru Internet partout et étudié soigneusement une douzaine de programmes correspondant aux annotations (à l'exception d'Evernote, où des fonctionnalités de description similaire ne sont disponibles que sur abonnement). Aujourd'hui, les seules choses qui satisfont au moins d'une manière ou d'une autre mes souhaits, ce sont les projets
TagSpaces est un organisateur tellement « élégant et à la mode » sur Electron avec un beau site Web, une mise en page adaptative et, bien sûr, un thème sombre, où serions-nous sans lui. Dans le même temps, la malheureuse table des matières de la collection avec des icônes arrondies à la mode occupe la moitié de l'écran, tout en accueillant une vingtaine d'éléments au maximum, et des éléments de base comme la prise en charge des raccourcis clavier ou le rendu du document visualisé sont écrits. selon le principe résiduel. En conséquence, les documents sont affichés de travers et travailler avec la collection se transforme en une série d'exercices ennuyeux et fastidieux avec la souris.
Son antipode myBase date de la fin des années XNUMX : ici, en plus de interface purement fonctionnelle nous disposons d’un ensemble extrêmement riche de paramètres et de fonctions. Cependant, la fenêtre de visualisation ici est le même navigateur basé sur l'ancien IE (ce qui rend déjà la lecture difficile), et tous les documents sont stockés dans une base de données monolithique. Si vous le placez dans le dossier Dropbox, par exemple (il n'existe toujours pas d'autres moyens de synchronisation avec d'autres appareils), alors au moindre changement dans la collection, vous devrez attendre que des centaines de mégaoctets d'informations soient téléchargés sur le serveur.
Поворотный момент
Probablement, le contenu ultérieur de la note semble évident au lecteur : on nous proposera désormais notre propre vélo, qui, bien sûr, sera de la tête et des épaules supérieur à tout analogue existant. En quelque sorte oui, mais pas tout à fait. Je ne pouvais vraiment pas supporter l'épreuve avec myBase et TagSpaces et j'ai esquissé mon propre gestionnaire de documents, dont je fournirai le lien vers la fin. Cependant, ce petit projet personnel ne mériterait pas à lui seul son propre article ; J'écris en grande partie parce que j'ai pensé qu'il serait intéressant de partager l'expérience que j'ai acquise au cours de mon travail et un certain nombre de mauvaises surprises auxquelles je ne m'attendais pas.
Buts et objectifs
Permettez-moi de commencer par le fait que j’ai maintenant une vie assez chargée et que je n’ai tout simplement pas de temps pour des projets de loisirs à part entière. C'est pourquoi, dès le début, j'ai décidé que j'étais prêt à sculpter mon instrument à partir de tous les composants qui me tombaient sous la main, si cela pouvait accélérer les choses. De plus, pour l'instant je m'engage à n'implémenter que le minimum absolu de fonctionnalités, dont il est absolument impossible de se passer.
Format des données et enregistrement des pages
Sous quelle forme les pages Web doivent-elles être stockées sur disque ? Compte tenu des exigences formulées précédemment, il m'a semblé que le choix était restreint : soit le format de sauvegarde « page web entière », c'est-à-dire le fichier HTML principal et un dossier avec les ressources associées, soit le format MHTML. La première option m'a tout de suite semblé moins préférable : il n'y a pas de joie à avoir une poubelle de fichiers sur votre disque, à partir de laquelle vous devrez extraire des documents importants, filtrer ceux qui sont inutiles lors de la recherche et surveiller l'intégrité lors de la copie. Lorsque j'ai essayé de travailler avec TagSpaces, j'ai dû réenregistrer tous mes documents pour que le nom du dossier de ressources commence par un point : le système les a alors reconnus comme « cachés » et ne les a pas affichés.
Ce problème est caché dans myBase, puisque tout est stocké dans la base de données, mais dans mon cas, le principe de simplicité a prévalu : je voulais vraiment tout stocker sous forme de fichiers normaux sur le disque afin de ne pas avoir à m'occuper de l'implémentation de opérations de routine comme copier, renommer, supprimer et synchroniser.
Le format MHTML traverse une période difficile. Un moyen simple de sauvegarder du MHTML
Dans le même temps, j'ai commencé à chercher un moyen simple d'enregistrer les pages du navigateur dans un dossier spécifié. En conséquence, les deux problèmes ont été résolus avec peu de pertes : je suis tombé sur un merveilleux projet
SingleFile se présente à la fois comme une extension de navigateur et une application en ligne de commande. Maintenant, j'utilise simplement l'extension : c'est assez pratique, sauf qu'il faut sélectionner manuellement le dossier cible pour l'enregistrement. À l’avenir, j’essaierai probablement d’améliorer l’application pour simplifier ce processus. Pour appeler une application tierce depuis Chrome, vous pouvez utiliser l'extension
Problème avec l'interface graphique et le navigateur
J'ai trouvé que Python était bon pour toutes sortes d'opérations simples sur les fichiers et les chaînes, et comme l'un de mes projets de travail utilise
De plus, après avoir constaté suffisamment de problèmes d'affichage des pages dans d'autres programmes, je suis arrivé à la conclusion que le seul moyen fiable de les résoudre est d'introduire dans le programme un visualiseur basé sur un navigateur moderne, c'est-à-dire Chrome ou Firefox.
Je dois admettre que la dernière fois que j'ai dû faire quelque chose comme ça, c'était il y a environ 15 ans, et je ne m'attendais à aucun piège. Il s’est avéré qu’il est impossible de « simplement taper le navigateur sur le formulaire » : d’une manière ou d’une autre, l’humanité n’a pas été en mesure de faire face à cette tâche de manière fiable et universelle. Une sorte de liste ou de bouton sur un formulaire peut être placé dans n'importe quel framework GUI, et même générer du code multiplateforme, et il m'a semblé qu'en 2019, l'affichage HTML aurait également dû être un problème universellement résolu.
Il s'est avéré que dans wxWidgets, par exemple, le composant « navigateur » standard est un wrapper multiplateforme sur le « navigateur » dépendant du système, ce qui dans le cas de Windows, par exemple, signifie
Ensuite, j'ai été confronté à un choix : changer de framework ou rechercher un composant alternatif pour le navigateur. Après avoir hésité, j'ai décidé d'essayer d'abord la deuxième voie et suis rapidement tombé sur le projet
Évaluez la situation : Python est l'un des langages de programmation les plus populaires au monde, Chrome est essentiellement un monopole sur le marché des navigateurs. En même temps, CEF Python est en fait soutenu par l'énergie
Cependant, CEF Python ne m'a finalement pas aidé : bien que même l'exemple de base d'intégration avec wxWidgets du référentiel du projet soit franchement bogué, j'ai essayé de le bricoler davantage, mais je n'ai pas pu résoudre tous les problèmes qui se sont posés. Je n’approfondirai même pas le sujet, il ne le mérite guère.
J'ai examiné plus en détail les composants basés sur Chromium Embedded Framework et j'ai finalement décidé de l'essayer.
Après quelques inévitables tracas au début, les choses sont allées beaucoup plus vite : la combinaison de CefSharp et de Windows Forms s'est avérée gagnante, et j'ai pu résoudre la plupart des problèmes techniques sans aucun problème.
À propos des inédits
Vous pouvez également essayer d'implémenter FireFox dans une application C# à l'aide du composant
Les fans de Qt pourraient être tentés de commenter : s'ils avaient pris Qt, ils n'auraient eu aucun problème. Cela peut être vrai, mais wxWidgets peut être considéré, sinon la première, du moins la deuxième option lors du choix d'un framework GUI pour les applications en Python ou C++. Et à mon humble avis, un navigateur devrait être intégré à n'importe quel cadre d'interface graphique plus ou moins développé sans danser avec un tambourin.
Bibliothèque Web
Revenons cependant à ma candidature avec le titre provisoire
en plus de interface claire et concise Seules les fonctions les plus élémentaires sont implémentées ici :
- Afficher n'importe quel répertoire spécifié dans le système en tant que bibliothèque de documents.
- Afficher les documents dans une fenêtre de navigateur. Naviguez dans la liste de la manière habituelle (touches curseur, PgUp, PgDn, Home, End), faites défiler le navigateur à l'aide des touches Espace et Maj+Espace.
- Renommer des documents.
- Marquez les documents comme lus ou favoris à l’aide des raccourcis clavier.
- Tri des documents par n'importe quel champ.
- Actualise la fenêtre de l'application en cas de modifications dans le dossier de la bibliothèque.
- Enregistrez les paramètres de la fenêtre en quittant.
Tout cela peut sembler une fonctionnalité triviale, mais, par exemple, l'enregistrement de la taille des colonnes dans TagSpaces n'est toujours pas pris en charge - apparemment, les auteurs ont d'autres priorités.
Le statut (lecture/favori) est simplement stocké dans le nom du fichier (lecture du fichier doc.html
renommé en doc{R,S}.html
). Il n'y a pas de synchronisation en tant que telle, mais je garde simplement la bibliothèque dans Dropbox - après tout, ce n'est qu'un dossier contenant des fichiers.
Il est encore prévu d'améliorer des choses simples comme le déplacement et la suppression de fichiers, ainsi que d'implémenter le balisage avec des balises arbitraires. Si quelqu'un veut aider, je n'en serai que ravi.
résultats
Variété. Comme je l'ai dit dès le début, il est étonnant de constater à quel point la boîte à outils d'une personne peut être différente de celle d'une autre. Utiliser un outil comme WebResearch me vient naturellement, et j'ai ressenti un inconfort presque physique dû à son absence. En même temps, apparemment, j'ai peu de personnes partageant les mêmes idées, sinon il n'y aurait aucun problème à trouver des analogues. En revanche, des cas similaires se produisent avec des logiciels beaucoup plus courants : par exemple, Microsoft ne va pas mettre à jour la version de bureau de OneNote, je suis donc obligé d'utiliser la version 2016, et tôt ou tard je devrai également passer de quelque part.
Ce qui est également surprenant, c’est à quel point il est difficile de naviguer dans le paysage actuel des bibliothèques et des frameworks. Dans mon travail, je dois rarement écrire des applications de bureau du début à la fin, et j'ai supposé que littéralement n'importe quel outil pour n'importe quel langage de programmation conviendrait à ma tâche (une fenêtre, trois composants, des interactions triviales). Nous prenons donc n’importe quoi et le faisons en quelques jours.
Il s'est avéré que la réalité est beaucoup moins bienveillante et que vous pouvez simplement rencontrer un problème à l'improviste. Disons que j'ai deux séparateurs qui peuvent être utilisés pour étendre la fenêtre du navigateur. Ainsi, restaurer leurs positions après le chargement dans wxWidgets est extrêmement difficile, car le système les met dans les positions par défaut après presque tous les événements à ma disposition, et je dois faire toutes sortes de piratages pour obtenir ce dont j'ai besoin. Qui l'aurait deviné ?
En revanche, il est clair que dans Windows Forms tout est conçu pour les « interfaces métiers ». Presque tout ce qui était nécessaire était disponible immédiatement : sauvegarde/restauration des paramètres de l'application, une interface pratique des composants (par exemple, je ne m'attendais pas à ce qu'on puisse demander au composant TreeView le chemin complet de la racine à n'importe quel élément enfant sous la forme d'une chaîne) et des outils non triviaux comme un outil de suivi des modifications du contenu d'un dossier.
En tout cas, le temps n'a pas été perdu, et le résultat peut être considéré comme satisfaisant, alors que demander de plus à la vie, n'est-ce pas ?
Source: habr.com