Es gibt Arten von Software, ohne die manche Menschen nicht leben können, während andere sich nicht einmal vorstellen, dass so etwas existiert und jemand es überhaupt braucht. Ein solches Programm war für mich jahrelang Macropool WebResearch , mit dem ich Webseiten in einer Art Offline-Bibliothek speichern, lesen und organisieren konnte. Ich bin sicher, dass viele der Leser eine Sammlung von Links oder eine Kombination aus einem Browser und einem Ordner mit einer Reihe gespeicherter Dokumente gut finden. Ich möchte in der Lage sein, Dokumente zumindest als "gelesen" oder "Favoriten" zu markieren, schnell von einem Text zu einem anderen zu wechseln und nicht von der Verfügbarkeit des Internets oder einer bestimmten Site abhängig zu sein. Es kommt vor, dass es Zeit gibt, genau zu lesen, wenn es kein Internet gibt (z. B. unterwegs), und Links erweisen sich leider oft als kurzlebig.
Anscheinend haben sich die Autoren von WebResearch auf solche Leute verlassen. Dieses Programm war mit einer Vielzahl von Funktionen ausgestattet: Katalogisieren nach Abschnitten und Tags, Bearbeiten von Notizen, Exportieren / Importieren aller Art usw. Ungefähr 2013 wurde das Projekt jedoch nicht mehr aktualisiert, und auch die Website des Entwicklers bestand nicht mehr. Ich konnte dieses Pferd mehrere Jahre lang reiten, aber zuerst fielen die Browser-Plug-Ins (nur für die damaligen Versionen von IE und FireFox verfügbar) aus, und dann wurden moderne Websites im Viewer nicht mehr normal angezeigt, basierend auf der alten IE-Engine.

Das Hauptfenster von WebResearch, PC Week / RE Nr. 17 (575)
Enttäuschungsstraße
Sobald sich herausstellte, dass ein Austausch nicht zu vermeiden war, machte ich mich im Hintergrund auf die Suche nach einem anständigen Gegenüber. Es schien mir, dass es keine besonderen Schwierigkeiten geben würde, weil meine Wünsche äußerst bescheiden sind. Ich war bereit, mich nur mit einer kleinen Auswahl von WebResearch-Tools zurechtzufinden, darunter:
- Speichern von HTML-Seiten aus dem Browser mithilfe der Erweiterung;
- mindestens minimale Katalogisierungswerkzeuge (Umbenennen, Organisieren von Verzeichnissen, Tags);
- (vorzugsweise) Unterstützung für PDF-Dokumente;
- jede anständige Möglichkeit, eine Sammlung mit anderen Geräten zu synchronisieren.
Zu meiner Überraschung konnte ich so etwas nicht finden, obwohl ich ehrlich im Internet auf und ab kletterte und Dutzende geeigneter Anmerkungsprogramme sorgfältig studierte (mit Ausnahme von Evernote, wo ähnliche Beschreibungsfunktionen nur im Abonnement verfügbar sind). Bislang erfüllen sie zumindest irgendwie meine Wünsche, mit Ausnahme der Projekte TagSpaces und myBase . Ihr Studium ist im Allgemeinen von einem bestimmten kulturellen Interesse.
TagSpaces ist so ein "stylish-fashion-youth" -Organisator auf Electron, mit einer wunderschönen Website, einem anpassungsfähigen Layout und natürlich einem dunklen Thema, wo auch immer es fehlt. Gleichzeitig nimmt das unglückselige Inhaltsverzeichnis der Sammlung mit modisch abgerundeten Symbolen die Hälfte des Bildschirms ein und enthält höchstens zwanzig Elemente. Grundlegende Elemente wie das Unterstützen von Tastenkombinationen oder das Rendern des angezeigten Dokuments werden nach dem Restprinzip geschrieben. Infolgedessen werden Dokumente schief angezeigt und die Arbeit mit der Sammlung wird zu einem langweiligen und zeitraubenden Satz von Übungen mit der Maus.
Sein Antipode myBase stammt aus den späten Neunzigern: Hier haben wir neben einer rein funktionalen Oberfläche eine extrem umfangreiche Reihe von Einstellungen und Funktionen. Der Betrachter ist hier jedoch immer noch derselbe Browser, der auf dem alten IE basiert (was das Lesen bereits erschwert), und alle Dokumente werden in einer monolithischen Datenbank gespeichert. Wenn Sie es zum Beispiel in den Dropbox-Ordner legen (es gibt noch keine anderen Möglichkeiten, mit anderen Geräten zu synchronisieren), müssen Sie mit der geringsten Änderung in der Sammlung darauf warten, dass Hunderte von Megabyte an Informationen auf den Server heruntergeladen werden.
Wendepunkt
Wahrscheinlich scheint der weitere Inhalt der Notiz für den Leser offensichtlich: Jetzt wird uns unser eigenes Fahrrad angeboten, das natürlich einen Schnitt über jedes bestehende Analogon darstellt. Als ob ja, aber nicht wirklich. Ich konnte die Tortur mit myBase und TagSpaces wirklich nicht ertragen und skizzierte meinen eigenen Dokumentenmanager, einen Link, mit dem ich mich dem Ende nähern werde. Dieses kleine Projekt für den persönlichen Bedarf hätte jedoch keinen eigenen Artikel verdient. Ich schreibe mehr, weil ich es interessant fand, die während der Arbeit gemachten Erfahrungen und eine Reihe von unangenehmen Überraschungen mitzuteilen, auf die ich nicht zählen konnte.
Ziele und Aufgaben
Zunächst habe ich jetzt ein ziemlich stressiges Leben und es bleibt einfach keine Zeit für vollwertige Hobbyprojekte. Daher habe ich von Anfang an beschlossen, dass ich bereit bin, mein Werkzeug aus allen verfügbaren Komponenten zu formen, wenn dies die Dinge beschleunigen würde. Außerdem versuche ich vorerst nur ein absolutes Minimum an Funktionalität zu implementieren, auf das nicht verzichtet werden kann.
Wie speichert man Webseiten auf der Festplatte? Unter Berücksichtigung der zuvor formulierten Anforderungen schien mir die Auswahl gering zu sein: entweder das Speicherformat "vollständige Webseite", dh die Haupt-HTML-Datei und -Ordner mit zugehörigen Ressourcen, oder das MHTML-Format. Die erste Option erschien mir auf Anhieb weniger empfehlenswert: Es ist nicht so toll, einen Müll auf der Festplatte aus einer Reihe von Dateien zu haben, aus denen Sie aussagekräftige Dokumente extrahieren, den Überschuss während der Suche herausfiltern und die Integrität beim Kopieren überwachen müssen. Als ich versuchte, mit TagSpaces zu arbeiten, musste ich alle meine Dokumente erneut speichern, sodass der Name des Ressourcenordners mit einem Punkt begann: Dann erkannte das System sie als "versteckt" und zeigte sie nicht an.
Dieses Problem ist in myBase nicht sichtbar, weil alles in der Datenbank gespeichert ist, aber in meinem Fall herrschte das Prinzip der Einfachheit vor: Ich wollte wirklich alles in Form von normalen Dateien auf der Festplatte speichern, damit ich mich nicht mit der Implementierung von Routineoperationen wie Kopieren, Umbenennen, Löschen und Synchronisieren befassen muss .
Das MHTML-Format macht schwere Zeiten durch. Eine einfache Möglichkeit, MHTML zu speichern, wurde in diesem Sommer aus Chrome entfernt , und ich weiß nicht einmal, was jetzt für Seiten gespeichert werden sollen. Es ist klar, dass die Gelegenheit noch nicht verschwunden ist, es gibt Erweiterungen von Drittanbietern, aber im Allgemeinen ist dies eine Art schlechtes Zeichen. Darüber hinaus wird das Speichern im MHTML-Format im Chromium Embedded Framework nicht unterstützt , was ebenfalls keinen Optimismus bewirkt.
Parallel dazu suchte ich nach einer einfachen Möglichkeit, Seiten aus dem Browser in dem angegebenen Ordner zu speichern. Als Ergebnis gelang es mir, beide Probleme mit ein wenig Blut zu lösen: Ich stieß auf ein wundervolles SingleFile- Projekt, das den Inhalt einer Webseite in einer separaten, unabhängigen HTML-Datei speichern kann. Dazu werden alle zugehörigen Ressourcen in das base64-Format konvertiert und direkt in HTML eingebettet. Damit wächst natürlich die Dateigröße und der Inhalt sieht ein bisschen mies aus, aber im Allgemeinen schien mir der Ansatz zuverlässig und einfach zu sein, und ich habe mich darauf geeinigt.
SingleFile wird als Browsererweiterung oder als Befehlszeilenanwendung geliefert. Jetzt benutze ich nur die Erweiterung: Sie ist sehr praktisch, außer dass Sie den Zielordner zum Speichern manuell auswählen müssen. In Zukunft werde ich wahrscheinlich versuchen, die Anwendung fertigzustellen, um diesen Prozess zu vereinfachen. Um eine Drittanbieteranwendung von Chrome aus aufzurufen, können Sie die Erweiterung Externe Anwendungstaste verwenden. Dies ist eine weitere nützliche Entdeckung von mir. Übrigens hat die Anwendung bereits davon profitiert: Mit ihrer Hilfe habe ich die Sammlung von Ordnern und Dateien von TagSpaces in eine Reihe von eigenständigen HTML-Dokumenten konvertiert.
Ärger mit GUI und Browser
Es schien mir, dass Python für alle Arten von einfachen Operationen mit Dateien und Strings gut geeignet ist, und da wxWidgets in einem meiner Arbeitsprojekte verwendet wird, sah es logisch aus, wxPython als Hauptframework zu wählen.
Nachdem ich mir die Pfosten mit der Anzeige von Seiten in anderen Programmen angesehen hatte, kam ich zu dem Schluss, dass die einzige verlässliche Möglichkeit, mit ihnen umzugehen, darin besteht, einen auf einem modernen Browser basierenden Visualizer, nämlich Chrome oder Firefox, in das Programm einzuführen.
Ich muss zugeben, dass ich vor ungefähr 15 Jahren das letzte Mal so etwas machen musste und keine schmutzigen Tricks erwartet hatte. Es stellte sich heraus, dass es unmöglich ist, "nur den Browser auf das Formular zu schieben": Irgendwie hat die Menschheit diese Aufgabe nicht zuverlässig und universell bewältigt. Jedes Listenfeld oder jede Schaltfläche im Formular kann in ein beliebiges GUI-Framework eingefügt werden und sogar plattformübergreifenden Code generieren. 2019 schien mir die Anzeige von HTML ebenfalls ein allgemein gelöstes Problem zu sein.
Es stellte sich heraus, dass in wxWidgets zum Beispiel die Standardkomponente „Browser“ ein plattformübergreifender Wrapper für einen systemabhängigen „Browser“ ist, was beispielsweise für Windows Internet Explorer 7 bedeutet und die Situation in Windows Forms nicht besser ist und dass neue Versionen als IE9 verfügbar sind nur mit Hilfe von nicht-trivialen Registry-Manipulationen . Wie Sie sehen, war ich in den letzten 15 Jahren nicht der einzige, der sich mit anderen Dingen beschäftigt hat - auch hier hat sich nichts bewegt.
Als nächstes hatte ich die Wahl: Ändern Sie das Framework oder suchen Sie nach einer alternativen Komponente für den Browser. Nachdem ich gezögert hatte, entschied ich mich, zuerst den zweiten Weg zu gehen, und stieß schnell auf ein Python-CEF- Projekt : Python-Bindungen für Chromium Embedded Framework , die speziell für die Einbettung von Chromium in Python-Anwendungen entwickelt wurden.
Bewerten Sie die Situation: Python ist eine der beliebtesten Programmiersprachen der Welt, Chrome ist im Wesentlichen ein Monopolist auf dem Browsermarkt. Gleichzeitig wird CEF Python von der Energie eines Mannes , seiner Stärke und Gesundheit, unterstützt. Braucht jemand das wirklich noch? ..
Letztendlich hat mir CEF Python jedoch nicht geholfen: Auch wenn das grundlegende Beispiel für die Integration mit wxWidgets aus dem Projekt-Repository eindeutig fehlerhaft ist, habe ich versucht, länger daran zu basteln, konnte aber nicht alle auftretenden Probleme lösen. Ich werde mich nicht einmal mit dem Thema befassen, es ist unwahrscheinlich, dass es es verdient.
Ich habe die auf dem Chromium Embedded Framework basierenden Komponenten genauer untersucht und mich schließlich für die C # -Version entschieden. Da ich fast immer mit Windows arbeite, hat mich die Aussicht, die plattformübergreifende Plattform aufzugeben, im Allgemeinen nicht gestört.
Nach einigen unvermeidlichen Problemen am Anfang ging es viel schneller: Die Kombination von CefSharp und Windows Forms hat sich als erfolgreich erwiesen, und ich konnte die meisten technischen Probleme problemlos lösen.
Über ungetestet
Sie können versuchen, FireFox mit der Geckofx- Komponente in einer C # -Anwendung zu implementieren, aber ich kann nichts dazu sagen. Die standardmäßige Qt-Browserkomponente mit dem Namen QWebEngineView basiert auf Chromium , daher wird sie wahrscheinlich nicht schlechter funktionieren als CefSharp.
Fans von Qt könnten versucht sein zu kommentieren: Sie sagen, ich würde Qt nehmen, ich würde keine Probleme haben. Möglicherweise ist dies der Fall, aber wxWidgets kann in Betracht gezogen werden, wenn nicht die erste, dann die zweite Option, wenn Sie ein GUI-Framework für Anwendungen in Python oder C ++ auswählen. Und meiner bescheidenen Meinung nach sollte so etwas wie ein Browser in ein mehr oder weniger entwickeltes GUI-Framework eingebettet sein, ohne mit einem Tamburin zu tanzen.
Webbibliothek
Kehren wir jedoch zu meiner Bewerbung mit dem Arbeitstitel WebLibrary zurück . Heute sieht es so aus:

Neben einer übersichtlichen und übersichtlichen Oberfläche sind hier nur die grundlegendsten Funktionen implementiert:
- Zeigt ein angegebenes Verzeichnis im System als Dokumentbibliothek an.
- Anzeigen von Dokumenten in einem Browserfenster. Navigieren Sie in der Liste wie gewohnt (Cursortasten, PgUp, PgDn, Home, End), und scrollen Sie im Browser mit den Tasten Leertaste und Umschalt + Leertaste.
- Dokumente umbenennen.
- Dokumente mit Hotkeys als gelesen oder ausgewählt markieren.
- Dokumente nach einem beliebigen Feld sortieren.
- Aktualisieren des Anwendungsfensters mit Änderungen im Bibliotheksordner.
- Fenstereinstellungen beim Beenden speichern.
All dies mag trivial erscheinen, aber das Speichern von Spaltengrößen in TagSpaces wird immer noch nicht unterstützt - anscheinend haben die Autoren unterschiedliche Prioritäten.
Der Status (gelesen / ausgewählt) wird einfach im Dateinamen gespeichert (die gelesene doc.html
Datei doc.html
in doc{R,S}.html
). Die Synchronisation als solche ist nicht implementiert, aber ich behalte die Bibliothek nur in Dropbox - am Ende ist es nur ein Ordner mit Dateien.
Es ist geplant, einfache Dinge wie das Verschieben und Löschen von Dateien abzuschließen und das Tagging mit beliebigen Tags zu implementieren. Wenn jemand helfen will, werde ich mich nur freuen.
Schlussfolgerungen
Am verschiedensten. Wie ich von Anfang an sagte, ist es erstaunlich, wie unterschiedlich die Werkzeuge einer Person von den Werkzeugen einer anderen Person sein können. Es ist für mich eine Selbstverständlichkeit, ein Tool wie WebResearch zu verwenden, und ich fühlte mich fast körperlich unwohl, weil es nicht vorhanden war. Gleichzeitig habe ich anscheinend nur wenige Gleichgesinnte, sonst hätte es keine Probleme gegeben, Analoga zu finden. Auf der anderen Seite treten ähnliche Fälle bei viel mehr Mainstream-Software auf: Beispielsweise wird Microsoft die Desktop-Version von OneNote nicht aktualisieren, daher muss ich die 2016-Version verwenden, und früher oder später muss ich auch irgendwohin wechseln.
Noch überraschender ist, wie schwierig es ist, sich in der aktuellen Bibliotheks- und Framework-Landschaft zurechtzufinden. Aufgrund meines Service muss ich selten Desktop-Anwendungen von Anfang bis Ende schreiben, und ich bin davon ausgegangen, dass buchstäblich jedes Tool für eine Programmiersprache für meine Aufgabe geeignet ist (ein Fenster, drei Komponenten, triviale Interaktionen). Wir nehmen alles direkt und erledigen es innerhalb weniger Tage.
Es stellte sich heraus, dass die Realität viel ungünstiger ist, und Sie können einfach aus heiterem Himmel auf ein Problem stoßen. Angenommen, ich habe zwei Splitter, mit denen das Browserfenster erweitert werden kann. Das Wiederherstellen ihrer Position nach dem Laden in wxWidgets ist äußerst schwierig, da das System sie nach fast allen verfügbaren Ereignissen in die Standardposition versetzt und Sie alle Arten von Hacking ausführen müssen, um das zu erhalten, was Sie benötigen. Wer hätte das gedacht?
Andererseits ist klar, dass in Windows Forms alles auf "Business Interfaces" zugeschnitten ist. Fast alles, was erforderlich war, erwies sich als sofort verfügbar: sowohl das Speichern / Wiederherstellen von Anwendungseinstellungen als auch eine praktische Benutzeroberfläche für Komponenten (ich hätte beispielsweise nicht erwartet, dass die TreeView-Komponente den vollständigen Pfad vom Stamm zu einem untergeordneten Element als Zeichenfolge anfordern kann) sowie nicht triviale Tools wie ein Tracker zum Ändern des Inhalts eines Ordners
In jedem Fall ist die vergeudete Zeit nicht umsonst und das Ergebnis kann als zufriedenstellend angesehen werden. Was kann man sich also mehr vom Leben wünschen?