Lassen Sie uns wie Profis schnell codieren


Gib mir einen Hebel, Drehpunkt, Beinfreiheit und verstärktes Klebeband



Selbst wenn Sie es versuchen, können Sie nicht genau beschreiben, wie Sie von einem bodenlosen Kaninchenbau erwartet werden. Hier ist einer dieser seltenen Fälle, in denen es notwendig ist, die Rede bis zum Ende anzuhören, um zu erkennen, was diskutiert wird. Wenn Sie die Schritte in diesem Handbuch studiert haben, wird jeder etwas für sich finden: Der esoterische „Text“ -Editor Leo Editor mit all seinem Wesen fordert seine erstaunlichste Verwendung.




Inhalt


  1. Prolog ................................... 2 
  2. Leo Editor installieren ..................... 2 
  3. Setup ................................ 4 
  4. Das Interface kennenlernen ................. 7 
  5. Erstellung externer Dateien ................. 14 
  6. Verwendung benannter Abschnitte ........ 18 
  7. Gierige Aufnahme ........................ 21 
  8. Einfache Magie .................. 24 
  9. Die Rückseite des Werwolfs 30 
  10. Visualisieren Sie diese ........................ 33 
  11. Inhalt und Form ...................... 36 
  12. Ich werde eine IDE für mich selbst bauen .................... 39 
  13. Gedankenfreiheit .......................... 49 
  14. Hurra, das Ende .............................. 58 
  15. UPD.  Anwendungsbeispiele ................. 58 




Prolog


Wenn Sie in einer Programmiersprache schreiben, herrscht immer ein akuter Mangel an Klassenbrowsern von Smalltalk. Das nervige Gefühl, dass Ihre Hände gebunden und Ihre Beine feucht sind, ist endlos. Und es kommt auch vor, dass Sie im Internet oft nach etwas suchen und etwas völlig anderes finden, das aber so schön ist, dass der Grund für den Beginn der Suche vor dem Hintergrund der sich entfaltenden Horizonte verloren geht. Eine Suche nach der Phrase „Python Class Browser“ bringt eine Menge Müll hervor, aber ein ungeschliffener Diamant liegt in diesem Berg, der schwach glitzert, kein großes Interesse auf sich zieht und auf das aufmerksame Auge und den neugierigen Geist wartet, um ihn zu bemerken und aufzunehmen.



Installieren Sie den Leo Editor


Das Projekt ist plattformübergreifend, der Installationsprozess wird für die Windows-Plattform bereitgestellt. Um den Editor zu starten, benötigen Sie Python und die Qt-Bibliothek. Die beschriebene Installationsmöglichkeit ist für den leidensunvorbereiteten Anwender am unkompliziertesten, Profis können nach eigenem Ermessen handeln.

Installieren Sie den Miniconda Python Programmer Workspace Manager. Mit dieser Lösung können Sie die Fähigkeit, einen Kürbis anstelle von korrekt angeschlossenen Komponenten zu erhalten, erheblich reduzieren. Im Falle eines willkürlichen Deadlocks können Sie problemlos in den Null-Status zurückkehren und schnell zum Testen einer anderen Tuning-Option wechseln.

Von der Download- Seite laden wir das Python 3.7 Miniconda3 Windows 64-Bit-Installationsprogramm herunter . Wir stellen ein, wenn die Frage nach Häkchen auftaucht, aktivieren Sie beide beiden.

Führen Sie als nächstes die Befehlszeile aus (Tasten [Win + R], "cmd", [Enter]). Wir tippen:

conda 

Schicken sie das bild zurück

Es gibt keine Fehler, es gibt direkten Zugriff auf Conda. Wir prüfen die Verfügbarkeit der benötigten Version des Language Executors:

 python -V 

Schicken sie das bild zurück

Vor Ort.

Wir schauen uns an, welche Versionen des Editors für die Installation verfügbar sind:

 pip install leo== 

Wir bevorzugen die neueste Version ohne Buchstaben in der Nummer:

 pip install leo==6.1 

Nach dem Herunterladen, Entpacken und Installieren versuchen wir unser Glück: Wir starten den Python-Interpreter, verbinden uns mit den Komponenten des Editors, starten den Editor

 python >>>import leo >>>leo.run() 

Schicken sie das bild zurück



Anpassung


Wenn die Verknüpfung zum Starten nicht auf dem Desktop angezeigt wird, fügen Sie sie selbst hinzu:

Pfad zum Editor- Launcher : % USERPROFILE% \ Miniconda3 \ Scripts \ leo.exe
Symbolpfad : % USERPROFILE% \ Miniconda3 \ Lib \ site-packages \ leo \ Icons \ SplashScreen_trans.ico

Schicken sie das bild zurück

Ich mochte das Aussehen meiner einheimischen visuellen Themen nicht wirklich und musste es mir selbst machen. Um es zu verwenden, müssen Sie es zuerst herunterladen . Virusfrei 1000%. Die Datei python.py ist eine Beschreibung für die farbliche Unterscheidung von Python-Syntaxelementen. Es muss unter % USERPROFILE% \ Miniconda3 \ Lib \ site-packages \ leo \ modes \ abgelegt werden, wobei die vorherige Datei ersetzt werden muss. Was für Sie die Python-Sprache aufgegeben haben wird etwas später klar werden. Die restlichen Dateien aus dem Archiv müssen in den Ordner % USERPROFILE% \ Miniconda3 \ Lib \ site-packages \ leo \ themes \ kopiert werden.

Jetzt müssen Sie das Thema in den Benutzereinstellungen aktivieren.

Schicken sie das bild zurück

Klicken Sie auf das Element @settings und fügen Sie mit der Taste [Einfügen] ein neues verschachteltes Element hinzu. Fügen Sie den Text ein:

 @string theme-name = monokai.leo 

Drücken Sie die Eingabetaste, um die Änderungen zu speichern. Wenn die Bearbeitung eines Elementnamens versehentlich deaktiviert wird, können Sie ihn durch Doppelklicken auf das Element oder durch Drücken der Tastenkombination [Strg + h] aktivieren.

Schicken sie das bild zurück

Starten Sie mit dem Speichern der Änderungen neu.

Schicken sie das bild zurück

Die Zuordnung zu den ".leo" -Dateien sollte automatisch erfolgen. Andernfalls wird die integrierte Lösung verwendet.

Schicken sie das bild zurück

Bis vor kurzem funktionierte dies nicht ohne Änderungen, und jetzt haben sie repariert, als ob, hehe.



Das Interface kennenlernen


Schicken sie das bild zurück

Auf den ersten Blick liegt uns ein gewöhnlicher Redakteur für strukturierte Texte (englischer Gliederungseditor, Outliner) vor, ein Klon des von vielen geliebten Treepads (das Webarchiv, offsite, wurde leider aufgrund finanzieller Probleme des Entwicklers deaktiviert). In der Tat gibt es einen Baum und einen Bereich zum Eingeben von Text, der zum ausgewählten Baumknoten gehört. Der Multifunktionsbereich mit dem unkomplizierten Namen Registerkarten schließen neben dem Protokoll noch etwas Nützliches ab. Beginnen wir mit der Textsuche.

Schicken sie das bild zurück

Es scheint eine stereotype Sache zu sein, aber es gibt Exzentrizitäten, anstelle der Bildschirmtasten wird vorgeschlagen, die Tastaturtasten zu drücken. Und dem Befehl "Alle suchen" ist überhaupt keine Taste zugewiesen. Jetzt ist die ganze Aufmerksamkeit am unteren Rand des Fensters.

Schicken sie das bild zurück

Tru-Geeks müssen an Bier erstickt sein. Ja Leute, das ist eine direkte Anleihe von Emacs. Die meisten Editorvorgänge können über die integrierte Befehlszeile gestartet werden.

Schicken sie das bild zurück

Schicken sie das bild zurück

Schicken sie das bild zurück

Die Suchergebnisse für alle vorkommenden Wörter "the" werden in einem absichtlich erstellten neuen Baumknoten angezeigt. Der kollektive Bauernhof! (Keine Sorge, die elementweise Suche "durchläuft" die erkannten Vorkommen wie bei gesunden Onkeln.)

Schicken sie das bild zurück

Jugend, zerstreue nicht! Es war notwendig, die schlafenden Blasen zu schütteln. Sie können den Rand dieses Leo-Editors für dunkle Zonen jederzeit umgehen. Das Programm erinnert stark an Linux: Leidenschaft, wie viel alles von verschiedenen Enthusiasten für sich selbst getan wurde, alles erfordert ein sorgfältiges Studium, die Leistung des einen unterscheidet sich von der Implementierung des anderen, es ist immer wieder überraschend, neue Chips zu entdecken, die jemand eingesetzt hat, aber nicht wirklich beschrieben hat, und wann Für all das gibt es die Spitze des Eisbergs, auf der er bequem sitzt, und wenn Sie nicht bereit sind, Abenteuer zu unternehmen, können Sie sich nicht in düstere Tiefen hüllen.

Schicken sie das bild zurück

Im Tag-Bereich können Sie Knoten Beschriftungen zuweisen und anschließend damit arbeiten. Anscheinend verwendet, um der Tiefe der Chaosordnung neue Dimensionen hinzuzufügen. Wir wählen den Knoten aus, schreiben die Tag-ID und klicken auf "+". Wir wählen einen anderen Knoten aus, drücken Sie einfach "+", der aktive Tag wird zugewiesen. Wir wählen den dritten Knoten aus, schreiben "Schmucker", drücken "+". Wir haben derzeit zwei Knoten mit dem Tag "zutsker" und einen Knoten mit dem Tag "shmutsker".

Schicken sie das bild zurück

Wenn Sie ein Tag aus der Liste der Tags auswählen, wird eine Liste der Knoten angezeigt, die dem Tag zugeordnet sind und über deren Namen Sie navigieren können. Um eine Variable aus einem Knoten auszuwählen, klicken Sie mit der rechten Maustaste darauf.

Schicken sie das bild zurück

Als nächstes kommt das äußerst nützliche Nav-Panel. Es hilft, die Knoten, in denen ein bestimmtes Wort vorkommt, schnell zu übersehen. Da die Verwaltung von .leo-Dateien mit einem hohen Organisationsgrad ein großes Chaos darstellt, passt die Navigation durch die Suche in den natürlichen Zyklus der Anwendung.

Schicken sie das bild zurück

Die allgemeine Verwendung von Redakteuren von Strukturtexten ist die Ansammlung einer persönlichen Wissensbasis. Die zweithäufigste Verwendung ist das Verwalten einer Liste von Aufgaben. Auf der nächsten Registerkarte können Sie diesen Prozess anhand von Prioritäten, Terminen und Implementierungsstatus einfärben.

Schicken sie das bild zurück

Über das Kontextmenü des Knotens können Sie einen erheblichen Teil der Funktionen der Registerkarte Task verwenden.

Schicken sie das bild zurück



Erstellen Sie externe Dateien


Es wird nicht schwierig sein, den Text zu bearbeiten und den Baum selbst zu verwenden. Deshalb tauchen wir in den Abgrund der unendlichen Möglichkeiten ein, Abstraktionen in die reale Welt zu übertragen. Erstellen Sie eine neue Datei.

Schicken sie das bild zurück

Der Name des einzelnen Knotens NewHeadline in @file 1.txt geändert

Schicken sie das bild zurück

Fügen Sie dem Inhalt des Knotens Text hinzu.

Schicken sie das bild zurück

Speichern Sie die .leo-Datei irgendwo. Öffnen Sie den Ordner, in dem sich die .leo-Datei befindet. Wir bemerken dort 1.txt. Wir öffnen es.

Schicken sie das bild zurück

Was haben wir gebaut? Wir haben den Export eines der Knoten der .leo-Datei in eine externe Datei konfiguriert.
Welcher Müll ist um unseren Text? Metadaten, mit denen Sie die Struktur neu erstellen können, wenn Sie die Datei wieder in den Leo-Editor laden. Dies ist erforderlich, wenn die Datei an einer anderen Stelle geändert wird. Die meisten Python-Dateien aus dem Leo-Editor-Quellcode können per Drag-and-Drop in den Editor verschoben werden. Dabei wurde festgestellt, dass sie eine Beschreibung der Struktur enthalten:

Schicken sie das bild zurück

Wenn wir jedoch die Funktion zum @file überhaupt nicht benötigen, sondern die Datei keine @file Bytes enthalten soll, ersetzen Sie die Direktive @file durch @file-nosent (keine Sentinels).

Schicken sie das bild zurück

Nach dem Speichern der Änderungen in der .leo-Datei wird die externe Datei automatisch aktualisiert.

Schicken sie das bild zurück



Benannte Abschnitte verwenden


Jeder Knoten ist eine separate unabhängige Entität, die standardmäßig keine Informationen zu ihren Nachbarn enthält. Wenn wir versuchen, dem an eine externe Datei angehängten Knoten eine neue Struktur hinzuzufügen und auf Speichern klicken, tritt ein Fehler auf.

Schicken sie das bild zurück

Wir werden über zwei Probleme informiert:

  1. Wir haben einen "Test" -Knoten in der Luft hängen (relativ zur externen Datei, da es einen Knoten in der .leo-Struktur gibt, aber wir haben nicht angegeben, wie er zur externen Datei hinzugefügt werden soll, da dies ein Fehler ist).
  2. Bis das Problem mit dem hängenden Knoten behoben ist, werden keine weiteren Änderungen im @file-nosent 1.txt auf der Festplatte gespeichert.

Die erste Möglichkeit, Verknüpfungen zwischen Knoten hinzuzufügen, besteht in Abschnitten. Ein spezielles Format für Abschnittsnamen sieht folgendermaßen aus:

 <<my_name>> 

Auf diese Weise können Sie einen verschachtelten Knoten als benannten Abschnitt deklarieren. An der Stelle des externen Knotens, an der der Inhalt des untergeordneten Knotens platziert werden soll, muss derselbe Name angegeben werden.

Schicken sie das bild zurück

Schicken sie das bild zurück

Die resultierende Datei:

Schicken sie das bild zurück

Im selben Beispiel für eine reale Datei wird der Importabschnitt für externe Abhängigkeiten explizit einem separaten Knoten zugewiesen.

Schicken sie das bild zurück



Gierige Aufnahme


Aber was tun, wenn wir einen verschachtelten Abschnitt in einen verschachtelten Abschnitt einfügen möchten? Sie können naiv handeln:

Schicken sie das bild zurück

Aber für solche natürlichen Wünsche gibt es bis zu zwei Direktiven: @all und @others .

Die @all Direktive verkettet geschmacklos die Texte aller verschachtelten Knoten.

Schicken sie das bild zurück

Natürlich hängt alles von dem Dateiformat ab, das Sie für die Ausgabe benötigen, aber wahrscheinlich wird Ihnen die @others Direktive @others , mit der Sie die entworfene Struktur in der gewünschten Form materialisieren können. Wehmütige Option:

Schicken sie das bild zurück

Abschnitte mit Schlüsselwörtern umbrechen:

Schicken sie das bild zurück

Einrückungsformatierung:

Schicken sie das bild zurück

Und wie? Fängt es an Gestalt anzunehmen? Wir kommen kaum zu echtem Spaß. :: ::



Einfache Magie


Schließlich beginnen wir, den Code zu komponieren. Die Aufgabe wird dumm sein, aber typische Grundelemente eines nützlichen Programms enthalten. Erstellen Sie einen neuen Knoten an einer beliebigen Stelle in der vorhandenen oder einer neuen Datei. Die erste Zeile gibt die @language Direktive an, um die Code-Hervorhebung zu aktivieren. Wenn sich unter Ihrer Hervorhebungssprache im Ordner % USERPROFILE% \ Miniconda3 \ Lib \ site-packages \ leo \ modes \ no befindet, verbietet niemand, diese Sprache selbst hinzuzufügen.

Schicken sie das bild zurück

Angenommen, die zu verarbeitenden Informationen werden von einer Platte in einer CSV-Datei gespeichert.

Wir müssen: die Anzahl der Zeichen "0" zählen, die in der Spalte Anzahl gefunden wurden

Wir müssen:

  1. Konvertiert Text in eine Beispieldatenstruktur
  2. Führen Sie die Iteration mit Zählen durch

Schicken sie das bild zurück

Wir zerlegen das Programm nach dem entwickelten Algorithmus. Brechen Sie im zweiten Schritt nach dem Lesen der Datei den Text in Zeilen. Was war der erste Schritt bewegt sich auf den untergeordneten Knoten Lesen.

Schicken sie das bild zurück

Erstellen Sie als Nächstes ein Array von Wörterbüchern, die den Daten in der Tabelle entsprechen. Dieser Knoten befindet sich auf der oberen Ebene.

Schicken sie das bild zurück

Und der letzte Schritt.

Schicken sie das bild zurück

In der Zwischenzeit wird die resultierende main.py-Datei auf der Festplatte erstellt.

Schicken sie das bild zurück

Hurra, wir sind großartig. Aber plötzlich hatten wir den unbegreiflichen Wunsch, die Anzahl der signifikanten Zeilen in derselben CSV-Datei zu berechnen. Kein Problem, machen Sie copy.paste vom Hauptknoten, ändern Sie den Namen der Ausgabedatei, ändern Sie den Code des letzten Schritts. Wir bekommen das Ergebnis.

Schicken sie das bild zurück

Und hier weicht unsere Freude der Trauer, denn der Name der CSV-Datei kann sich ändern, was bedeutet, dass wir, wenn wir ihn in einem Programm korrigieren, ihn im zweiten Programm definitiv aus den Augen verlieren und damit die Freude an der Wiederverwendung des Codes schmälern.

Traurig und hübsch, es ist Leo Editor! Es wurden Kopien von Knoten synchronisiert. Was denn Anstatt den Inhalt des Knotens zu kopieren, können Sie den kopierten Knoten in den Modus "Klonen", "Phantom" einfügen. Wenn Sie dann einen der verknüpften Knoten ändern, wird dieser auf den anderen Knoten angezeigt. Dies ist ein äußerst leistungsfähiges Konzept, mit dem Sie die Widersprüche auflösen können, die mit der Organisation von Informationen in Bäumen verbunden sind.

Kopieren Sie den Knoten.

Schicken sie das bild zurück

Wir fügen als "Phantom" ein.

Schicken sie das bild zurück

Phantome haben ein anderes Symbol. Alle Änderungen des Namens, des Inhalts oder der untergeordneten Knoten werden in der Kopie berücksichtigt. Wir löschen den alten Read-Knoten und stellen sicher, dass die Änderung des Dateinamens nun überall synchron durchgeführt wird.

Schicken sie das bild zurück

In der Sprache der Mathematik können Sie mit „Phantomen“ von einem Baum zu einem vollwertigen azyklischen Graphen wechseln. Ein Baum in Leo kann mehr als eine Wurzel haben!

Schicken sie das bild zurück

Auf diese Weise können Sie fantastische Dinge tun: mit Darstellungen von Informationen jonglieren, heterogene Datencontainer binden, eine unbegrenzte Anzahl von tatsächlichen Kopien von Daten in einem Projekt haben und Daten in den Leo-Baum laden, die nicht in einen regulären Baum eingefügt werden können.



Werwolf Reverse


Lass uns ein Experiment machen. Erstellen Sie einen neuen Knoten. Fügen Sie Text hinzu.

 g.es( len("This is test".split()) ) 

Schicken sie das bild zurück

Drücken Sie [Strg] + [b].

Schicken sie das bild zurück

Chpok, schönen Abend. Ja, wir haben hier, wie sich herausstellt, den eingebauten Python-Interpreter, der den Text des Knotens als Code ausführen kann. Wenn Abschnitte gemäß den Regeln zum Verbinden von Abschnitten mit externen Dateien mit dem Knoten verbunden sind, wird auch der Code aus diesen Abschnitten ausgeführt. Dies bedeutet, dass keine solche Kraft vorhanden ist, die uns in einem Kampf gegen die Unordnung aufhalten kann.

Schicken sie das bild zurück

Beispiel aus dem Leben: Der Code für die Tutorials zögert furchtbar, normal zu schreiben, aber wenn dies etwas mehr als 50 Zeilen sind, ist das Durcheinander, das am nächsten Tag unlesbar wird, garantiert. Es ist erwähnenswert, dass viele Trainer denselben Satz von Quelldaten verwenden und verschiedene Manipulationen an ihnen vornehmen. Das oben Gesagte gilt für jeden "Prototyp" oder "Tool Utility 1-2-mal". An dieser Stelle sind die beschriebenen Leo-Editor-Chips äußerst nützlich.

Schicken sie das bild zurück

Das ist alles - das ist Code, der im Leo-Editor etwas richtig macht, ohne ihn in .py-Dateien hochzuladen.

Im Gegensatz zu den Spaghetti-Blättern auf dem Bild können Sie sofort die allgemeine Essenz dessen verstehen, was passiert. Beispielsweise werden im Programm "4 Linear Regression" zuerst Daten aus dem Internet in eine Datei geschrieben. Anschließend werden verschiedene Manipulationen an dem numerischen Modell der „OLS-Regression“ durchgeführt, das gemäß der Datei erstellt wurde. Wenn wir andere Daten oder andere Einstellungen des Modells verwenden müssen, ist es außerdem ausreichend, Änderungen an einem Knoten vorzunehmen, da die wiederverwendeten Teile des Programms durch "Phantome" implementiert werden. Das Programm ist in 6 unabhängige Teile unterteilt, von denen jeder separat gestartet wird, die jedoch gleichzeitig von einem gemeinsamen Punkt aus ausgeführt werden.

Wenn der Code für ähnliche Themen an einem einzigen Ort organisiert ist, ist es sehr praktisch, auch wenn viel Zeit vergeht. Mithilfe der Navigationssuche können Sie schnell eine bestimmte Methode finden, und die strukturelle Organisation hilft bei der Navigation, was gerade passiert. Mit „Phantomen“ können Sie komplexen nichtlinearen Code in eine Reihe von sequentiellen Aktionen umwandeln, während durch „Klonen“ von Entitäten die Entropie nicht multipliziert, sondern reduziert wird, da Wiederholungen durch Bindungen ersetzt werden und keine zusätzlichen Abstraktionsebenen erstellt werden.

50 verstreute Dateien mit Quelldateien sind 50 verstreute Dateien. 50 Knoten mit Quellcodes sind eine Wissensbasis mit einem internen Wunsch nach Selbstorganisation.



Visualisiere es


Bevor Sie sich auf den Schwierigkeitsgrad "Nightmare" begeben, kehren wir zur Benutzeroberfläche zurück.

Editorfenster können gezogen werden, um Ihren Arbeitsbereich optimal zu organisieren. Jede Datei behält ihre eigenen Darstellungseinstellungen bei. Sie können alle Fenster mit Ausnahme des Baums schließen. Um die Panels wieder einzublenden, klicken Sie mit der rechten Maustaste auf die Baumüberschrift.

Schicken sie das bild zurück

Im selben Menü befindet sich ein bestimmtes Render. Dieses kleine Ding wurde nach seinem Namen entworfen, um alles auf der Welt zu zeigen.

Standardmäßig versucht das Rendern, den Text des Knotens als reStructuredText zu rendern. Andere Betriebsmodi werden durch Erzwingen des Inhaltstyps im Namen des Knotens berücksichtigt.
IDInhaltstypHinweis
@asciidocAsciidoctor-Dokumentations-MarkupErfordert die Installation von Asciidoctor
@htmlHTML-Markup
@graphics-scriptBenutzerdefinierte GUI durch QT-Klassen QGraphicsView, QGraphicsScene
@imageZeigen Sie Bilder gängiger Formate anDer Weg zum Bild ist im Körper angegeben
@svgSVG-ZuordnungDer Body gibt entweder den Pfad zum Bild oder die Quell-SVG an
@jupyterZeigen Sie interaktive Jupyter-Sitzungen anFunktioniert nicht richtig
@latexLaTeX-Markup-AnzeigeFunktioniert nicht richtig
@md, @markdownMarkdown-Markup-AnzeigeErfordert die Installation des Markdown-Prozessors
@movieVideoanzeigeDer Pfad zum Video wird in body angegeben
@pyplotAnzeigen von Diagrammen mit Matplotlib PythonErfordert die Installation von Matplotlib Python

Wie Sie aus der Tabelle ersehen können, funktioniert Render nicht sehr gut. Die gute Nachricht ist, dass Leo Editor mit Plugins, einschließlich visueller, erweitert werden kann. Zum Beispiel musste ich die Zahlen in Tabellen laden und Diagramme zeichnen, während ich die anfänglichen Daten tausendfach änderte.

Schicken sie das bild zurück

Der minimale visuelle Plugin-Code sieht folgendermaßen aus:

 from leo.core.leoQt import QtCore, QtGui, QtWidgets import leo.core.leoGlobals as g class My_Plugin_Widget(QtWidgets.QWidget): def __init__(self, parent=None, leo_com=None): super(My_Plugin_Widget, self).__init__(parent) c = leo_com self.c = c self.layout = QtWidgets.QVBoxLayout() self.message = QtWidgets.QLabel("Hello there!", self) self.layout.addWidget(self.message) self.setLayout(self.layout) def init(): g.registerHandler("after-create-leo-frame", onCreate) g.plugin_signon(__name__) return True def onCreate(tag, keys): c = keys.get("c") if not c: return dw = c.frame.top dock = g.app.gui.create_dock_widget(closeable=True, moveable=True, height=150, name='My plugin') dw.leo_docks.append(dock) dock.setWidget(My_Plugin_Widget(leo_com=c)) dw.splitDockWidget(dw.body_dock, dock, QtCore.Qt.Horizontal) dock.show() 

Das Plugin wird benötigt:

  1. In %USERPROFILE%\Miniconda3\Lib\site-packages\leo\plugins\
  2. Registrieren Sie sich in der Datei myLeoSettings.leo im Knoten @settings\@enabled-plugins

Schicken sie das bild zurück

Sie können hier nachlesen, wie Plugins erstellt werden . Wenn Sie ungeduldig sind, weitere Informationen zu erhalten, können Sie das viewrendered.py-Plugin nur selbst studieren.

Warum ist das alles? Wieder zu grenzenlosen Möglichkeiten. Der uneingeschränkte Zugriff auf QT ermöglicht es Ihnen, Informationen entweder willkürlich wiederzugeben oder auf unerwartete Weise einzugeben.



Inhalt und Form


Alles, was oben beschrieben wurde, sieht aus wie ein praktisches Werkzeug zum Lösen einer begrenzten Anzahl von Bildschirmaufgaben, nicht mehr. Die Konvertierung von einer Baumdatei in eine externe Datei ist linear und durch strenge Rahmen begrenzt. Sogar die Namen der Knoten spielen die Rolle von Kommentaren, enthalten jedoch keine weiteren nützlichen Funktionen. In der Praxis stellt sich jedoch heraus, dass es sehr angebracht ist, eine komplexe Entität für das menschliche Denken mit einem Baum zu beschreiben, wobei das Format der Maschine jedoch möglicherweise nicht wie etwas aussieht und / oder überhaupt keine eindeutige Struktur aufweist. Für ein einfaches Beispiel nehmen Sie HTML. Es wäre sehr bequem und einfach (Werteinschätzung), ein Markup in dieser Form vorzubereiten:

Schicken sie das bild zurück

Alles ist strukturell konsistent und visuell, es ist unmöglich, den Fehler zu machen, ein Tag nicht zu schließen oder falsch zu platzieren, und Änderungen jeglicher Skalierung sind elementar. Obwohl die HTML-Ausgabedatei zu dieser fiktiven Struktur „linear proportional“ ist, kann der Mechanismus für das Anhängen von Abschnitten nicht Folgendes erzeugen:

  1. Open-Close-Tags
  2. Weisen Sie Knotentext als Tag-Attribute zu
  3. Der Text von Knoten mit dem speziellen Namen "> <" wird in die entsprechende Variable eingefügt

Natürlich bietet Leo Editor unbegrenzten Zugriff auf den Baum über den Knotencode. Sowohl zum Lesen als auch zum Schreiben. Was ermöglicht es, willkürliche Änderungen der Informationsdarstellungen für Mensch und Maschine vorzunehmen? In jede Richtung und so oft Sie möchten. Sie können ein bestimmtes Format herunterladen, es in einen für SIE verständlichen Baum umbauen, Änderungen vornehmen und es zurückkonvertieren. Wenn das Ausgabeformat trivial ist, können Sie mit Python eine externe Datei schreiben. Wenn das Format komplex ist und / oder eine erhebliche Datenmenge vorhanden ist, ist es vorteilhaft, Zeit damit zu verbringen, die Daten auf einen Dateiknoten mit Abschnitten zu verschieben, da dies das Debuggen von Konvertierungen erheblich erleichtert.

Beschreibung der Funktionen zum Arbeiten mit einem Baum:
Das teamWirkung
g.es('text')Ersetzung print('text')im Leo Editor
n = g.findNodeAnywhere(c, 'TITLE')Suchen Sie nach dem ersten Knoten mit dem Namen "TITLE".
for node in n.children():
node.h/
node.b/
node.parent()
p()
c.selectPosition(p)
root_node = p.findRootPosition()
for node in root_node.following_siblings():
if node.h.startswith('OUTPUT'):, 'OUTPUT'
new_node = node.insertAsLastChild()
if node.hasChildren():
new_node = node.insertAfter()
node.deleteAllChildren()
c.redraw_now()

Andere Funktionen können aus den Leo-Editor-Quellen und vollständigen .leo-Dateien ausgewählt werden, und es gibt wirklich keine Dokumentation ( außer für diese Seite ) = (

Übrigens, dieser Artikel ist im Leo-Editor geschrieben.

Schicken Sie das Bild zurück

Der folgende Code wird zum Exportieren der Struktur in HTML verwendet:

 @language python from pathlib import Path @others path = Path('C:\\Projects\\article\\') / 'out.html' out_text = '<body><script>document.body.style.fontSize = 20;</script>' n = g.findNodeAnywhere(c, 'TITLE') assert nh == ('TITLE') tag = f'<h1>{nb}</h1> ' out_text = out_text + tag + '\n\n' n = g.findNodeAnywhere(c, 'TEXT') assert nh == ('TEXT') for header_node in n.children(): anchor_id = hash(header_node.h) tag = f'<anchor>{anchor_id}</anchor><h3>{header_node.h}</h3>' out_text = out_text + tag + '\n' if '' == header_node.h: text = make_toc(header_node) tag = f'{text}' out_text = out_text + tag + '\n' for content_node in header_node.children(): if '@image' in content_node.h: tag = f' <img src="{content_node.b}" alt="  "> ' else: text = content_node.b if not 'table' in content_node.h: content_node.h = ' '.join(content_node.b.split()[:3]) text = text.replace('\n', ' ') tag = f'{text}' out_text = out_text + tag + '\n' tag = ' <hr/>' out_text = out_text + tag + '\n' out_text = out_text + '</body>' + '\n' with open(path, 'w', encoding='utf-8') as f: f.write(out_text) g.es('.') 



Ich werde eine IDE für mich selbst bauen


Keine einzige Python, also versuchen wir, uns mit einer Ecke unter ... irgendetwas auszustatten. Drücken Sie zum Schluss die Script-Taste.

Schicken Sie das Bild zurück

Diese Aktion führt dazu, dass im Hauptmenü eine neue Schaltfläche mit dem Namen des aktuellen Knotens angezeigt wird. Logik schlägt vor, dass das Klicken auf diese neu erstellte Schaltfläche zu einem Versuch führt, Code von dem mit der Schaltfläche verknüpften Knoten auszuführen. Es ist praktisch, aber unpraktisch, dass die Schaltfläche nach dem Neustart des Editors nicht mehr angezeigt wird. Damit die Schaltfläche immer an ihrem Platz bleibt, müssen Sie dem Namen des Knotens einen speziellen Zauberspruch hinzufügen @buttonund Leo Editor neu starten.

Schicken Sie das Bild zurück

Für jede Benutzertaste können Sie mit dem Ausdruck einen Hotkey vergeben.Um ein @key=

Schicken Sie das Bild zurück

anderes Skript von einem Skript aus auszuführen, müssen Sie die Funktion aufrufenc.executeMinibufferCommand('FIRE'). Jedes Skript mit einer verknüpften Schaltfläche fällt unter dem Namen der Schaltfläche in den allgemeinen Pool der Editorbefehle. Das heißt, Ihr Skript kann auch über die Befehlszeile des Editors ausgeführt werden.

Schicken Sie das Bild zurück

Um das Skript des aktuell fokussierten Knotens von einem anderen Skript aus auszuführen (als ob Sie [Strg] + [b] drücken), wird der Befehl verwendet c.executeMinibufferCommand('execute-script').

Angenommen, wir haben Code vorbereitet. Es wäre vorteilhaft, es vom Leo-Editor auszuführen, und es wäre wunderbar, alle Fehler von der Konsole zu bekommen. Sehen Sie sich ein Beispiel für die automatische Formatierung von Python-Code in einem Knoten mit dem bekannten Dienstprogramm Black an.

 @language python import subprocess import re c.frame.log.selectTab('Log') c.frame.log.clearLog() python_src = [] for line in pbsplitlines(): if re.match(r'@', line) is not None: line = line.replace('@', '# special_comment@') elif re.match(r'<<', line) is not None: line = line.replace('<<', '# special_comment<<') python_src.append(line) text = '\n'.join(python_src) proc = subprocess.Popen( ['black', '-', '-q', '--skip-string-normalization'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, bufsize=0, shell=True, ) proc.stdin.write(text.encode()) proc.stdin.close() s = proc.stdout.read() if s: text = s.decode('utf-8') text = text.replace('# special_comment<<', '<<') text = text.replace('# special_comment@', '@') if 'error: cannot format -: Cannot parse:' in text: z = re.search(r'Cannot parse:.*', text) g.error(z.group(0)) else: undoData = c.undoer.beforeChangeNodeContents(p) pb = text.strip() c.undoer.afterChangeNodeContents(p,'Format with black', undoData) c.executeMinibufferCommand('execute-script') 

Folgendes wird getan:

  1. Wir nehmen den Text aus dem Knoten
  2. In den Kommentaren finden Sie spezielle Anweisungen für den Leo-Editor
  3. Starten Sie das Konsolendienstprogramm
  4. Wir übergeben den Text an das Dienstprogramm
  5. Lesen Sie die Schlussfolgerung
  6. Wir kehren zu den besonderen Anweisungen des Ortes zurück
  7. Wenn keine Fehler vorliegen, ersetzen Sie den aktuellen Text durch formatiert
  8. Führen Sie den Knotencode aus

Dieses Beispiel wird ausreichen, um irgendetwas auf seiner Basis zu starten.

Schauen wir uns nun eine schöne und übersichtliche Version der praktischen Verwendung von Leo Editor an. Das Python-Ökosystem bietet verschiedene Lösungen für die Erstellung von GUI-Anwendungen, darunter das Kivy-Framework. Ein wichtiges Merkmal dieses Frameworks ist die Fähigkeit, eine Schnittstellenbeschreibung in einer speziellen Sprache aus einer Textdatei zu laden. Leo Editor hilft uns zum einen dabei, den Code und die Beschreibung der Benutzeroberfläche an einer Stelle zu speichern, und zum anderen ersetzt es die Textbearbeitung durch die Baumbearbeitung, was uns in gewisser Weise den Skizzen der Wysiwyg-Benutzeroberfläche näher bringt.

Schicken Sie das Bild zurück

Welche Fakten können aus dem Screenshot oben extrahiert werden:

  1. Leo Editor Kivy
  2. RUN make_GUI, make_py,

Schicken Sie das Bild zurück

Oben können Sie sehen, wie die Beschreibung der Schnittstelle in zusammengesetzter Form aussieht. Das mag vielleicht gewürzt sein, aber die Kollektivfarm auf der linken Seite scheint eine handlichere und industriellere Lösung zu sein. In der richtigen Version wird am Freitagabend nach Tippfehlern gefragt.

Wir gehen mit dem Code zur Filiale.

Schicken Sie das Bild zurück

Sehr sauber Und es ist klar. DATAGRAPH wird von uns nicht beachtet. Und was ist mit den Klassen?

Schicken Sie das Bild zurück

Der Kreis hat sich geschlossen. Was dann passierte, war eine provisorische Implementierung des Klassenbrowsers für Python. Knotenkopfzeilen sind nicht nur Kommentare, sondern werden beim Generieren von .py-Dateien verwendet. Klassenverschachtelungsebenen bilden automatisch eine Vererbungshierarchie. Alles wie wir es lieben.

Schicken Sie das Bild zurück

KA-EE-FF !!! Konzentrieren Sie sich nicht auf die Bedeutung des Geschehens, es werden Klassen für einen Screenshot geworfen.

Ähnliches kann für die nackte Funktionalität der Dateibereiche getan werden, Sie müssen jedoch alle Sprachkonstrukte (def, class ...) explizit angeben, und bei Änderungen müssen zahlreiche Korrekturen vorgenommen werden (und auch die nutzlosen hängenden Header der Knoten) )

Und noch einmal zu einem einzigen Code- und Schnittstellenbereich. Denken Sie zunächst an die Navigationssuche, mit der Sie schnell nach Code-Handlern für visuelle Elemente und visuelle Elemente im Code suchen können.

Schicken Sie das Bild zurück

Zweitens gibt es immer noch eine ziemlich erwartete Funktion wie einen zusätzlichen Texteditor.

Schicken Sie das Bild zurück

Hop!

Schicken Sie das Bild zurück

Es ist also nicht erforderlich, mit der komplexen gegenseitigen Bearbeitung von Knoten vor und zurück zu laufen.

Übrigens:

Schicken Sie das Bild zurück



Gedankenfreiheit


Am Ende wird es ein wenig unnatürlich sein. Alles, was im Folgenden beschrieben wird, sollte nicht als Demonstration guter Ingenieurspraktiken verstanden werden. Dies ist nur ein Keim für die Kristallisierung Ihrer persönlichen Ideen.

Ausgangspunkt für das erste Experiment: Wenn die meisten Programme mehrmals aus einem einzigen Datenarray andere Datenarrays erstellen, warum dann nicht einen einfachen Baustein erstellen, der von einer Universalklasse mit einer einheitlichen Datenempfangs- / Ausgangsschnittstelle beschrieben wird, um Verknüpfen Sie ähnliche Blöcke im Leo-Editor-Baum visuell im Bild der Programmierung auf Grafiken (Funktionsblöcke). Mit dem Unterschied, dass es sich um ein hybrides Blockklassensystem handelt und jede Art der Codebeschreibung entsprechend dem maximalen langfristigen Nutzen verwendet wird.

Eine elementare Funktionseinheit sollte über einen Eingang zum Empfangen von Informationen verfügen, auf ihren Typ reagieren, die Anfangsinformationen verarbeiten, die Verarbeitungsergebnisse in einem Format für die Übertragung verpacken und das Ergebnis auswerten können.

Schicken Sie das Bild zurück

Angenommen, es ist eine gewagte Aufgabe, Websites zu analysieren. Wir werden die folgenden Blöcke brauchen:

  1. Netzwerkkomponente
  2. Webseiten-Parser
  3. Kommunikationsblock für empfangene Daten und grafische Oberfläche

Schicken Sie das Bild zurück

Die minimale praktische Implementierung eines ausreichend universellen Blocks, der in den Klassenzweig passt, ist unten gezeigt.

Schicken Sie das Bild zurück

Natürlich kann jeder Betonblock typische Methoden mit eigenen neu laden, wenn zwei Regeln genau eingehalten werden:

  1. In jedem Block ruft die Decodierungsmethode notwendigerweise process auf, was wiederum encodiert
  2. Die Codierungsmethode ruft die Decodierungsmethode für alle als Ausgänge registrierten Blöcke auf.

Das heißt: Die Verfügbarkeit einer strukturellen Vereinheitlichung und Homogenität des Informationsaustauschs ist gewährleistet.

Schicken Sie das Bild zurück

Das gleiche, aber klarer:

  1. Das Originalprodukt liegt in der linken Platte.
  2. Decode bereitet das Produkt für die Verarbeitung vor
  3. Danach erfüllt der Baustein seine Hauptfunktion in der Prozessmethode
  4. Das Produkt wird per Kodierung verpackt
  5. Das verpackte Produkt wird an nachfolgende Einheiten übergeben

Jeder Block erweist sich als ziemlich unabhängig. Das einzige, was er über die Außenwelt wissen muss, ist eine spezielle Methode zur Analyse eingehender Daten. Der Universalcode ist für die spezifische Implementierung des Verbindens der Blöcke verantwortlich. Wenn mehrere ähnliche Pipelines verfügbar sind, können Sie sie einfach als Ganzes kopieren, indem Sie nur Korrekturen an bestimmten Implementierungen der Prozessmethoden vornehmen.

Im nächsten Bild können Sie etwas sehr Ähnliches wie bei der Arbeit mit Klassen beobachten, die im vorherigen Abschnitt beschrieben wurde. Der Unterschied besteht darin, dass durch die Verschachtelung der Knoten nicht die Eltern-Kind-Beziehung hergestellt wird, sondern die Eingabe-Ausgabe-Beziehung der entsprechenden Blöcke. Um den Datenaustausch mit nicht benachbarten Blöcken zu organisieren, wird eine Krücke in Form einer expliziten Ankündigung von Ausgängen verwendet, was durch die geringe Anzahl solcher Fälle gerechtfertigt ist.

Schicken Sie das Bild zurück

Mit diesem Ansatz wird die Anzahl der Pipelines gleichgültig: zwei von ihnen oder 50. Die Anzahl der Stufen der Informationsverarbeitung ist ebenfalls unbedeutend (innerhalb angemessener Grenzen), dies beeinträchtigt nicht die Einfachheit des Verständnisses im Gegensatz zum Quellen von Textmodulen. Beim Kopieren von Förderbändern in einem Schritt entsteht eine völlig neue Kette. Alles ist absolut identisch angeordnet, Änderungen sind auch nach 5 Jahren leicht durchzuführen, das methodische Prinzip der Funktionsorganisation ist dasselbe, es müssen keine ätherischen Schlösser aus Abstraktionen im Kopf geschaffen werden.

Schicken Sie das Bild zurück

Das Anhängen von benutzerdefinierten Pipelines verzerrt nicht das Gesamtbild, da die Logik des Arbeitens mit beliebigen Daten immer identisch ist.

Schicken Sie das Bild zurück

Die zweite absurde Geschichte. Ich musste ein Kvent-Spiel machen (ein direktes Analogon des bekannten Spiels in einem noch bekannteren Spiel, für das Standardspielkarten verwendet wurden). Es gibt viele verschiedene Ansätze zur Organisation des Spielzyklus, eine der naiven Optionen ist die Zustandsmaschine. Mit der Zustandsmaschine ist theoretisch alles in Ordnung und einfach. In der Praxis wird die Unterstützung von mehr als 7 Zuständen in einem realen Programm allmählich langweilig, ohne dass ein paar Abstraktionsebenen hinzugefügt werden. Zu diesem Zeitpunkt hielt ich die visuelle Pflege der Zustandsmaschine in Form eines Baumes für eine interessante Option.

Schicken Sie das Bild zurück

Wir schreiben einen Programmcode-Generator aus einem Baum, der folgendes Ergebnis liefert:

Schicken Sie das Bild zurück

Es gibt keine Angst.

Schicken Sie das Bild zurück

Als nächstes folgt eine Bedingungsänderung nach Bedingung. Es wird misstrauisch gemacht.

Schicken Sie das Bild zurück

Schicken Sie das Bild zurück

Es war nur ein Kartenspiel, bei dem ein Paar willkürlicher Karten ersetzt wurde. Ok, teile eine einzelne Maschine in mehrere Maschinen.

Schicken Sie das Bild zurück

Als nächstes wird die Logik zur Verarbeitung der Spielrunde geboren.

Schicken Sie das Bild zurück

An diesem Punkt ist die Grenze der praktischen Anwendbarkeit einer solchen Beschreibung der Zustandsmaschine überschritten, obwohl der Baum nur dann gruselig aussieht, wenn er absichtlich zu hundert Prozent eingesetzt wird. Dennoch gab es völlig unrealisierte Auswirkungen des Einflusses von Karten mit Bildern auf den Spielverlauf. Es ist davon auszugehen, dass eine Event-Maschine für eine solche Aufgabe eine bessere Lösung wäre. Und wieder ist es einfach, es auf Bäumen zu machen;)



Hurra, das Ende


Im Leo-Editor fehlen die normale automatische Vervollständigung und die mehrfache Hervorhebung des ausgewählten Wortes („intelligente Hervorhebung“ in Notepad ++). Aber selbst bei diesen Fettmängeln ist es einfach, sich damit abzufinden, denn wenn Sie es einmal ausprobiert haben, ist es bereits unmöglich, auf dieses praktische Werkzeug zu verzichten, mit dem Sie mühelos Ihre persönliche Umgebung für jede Aufgabe malen können. Gibt es etwas Ähnliches oder Besseres auf der Welt? Es gibt eine Menge Monster in der IDE, sie sind extrem voll mit Smart-Smart-Funktionen, aber welche von ihnen geben ähnliche Macht über Informationen und welche von ihnen bieten so viel Freiheit bei der Organisation des Workflows?

Idee, Material, Werkzeug, Produkt. In der Engineering-Welt können Sie mit einem Tool der vorherigen Generation zur nächsten Generation komplexerer Tools übergehen. Wir sind von einer Handbohrmaschine zu Anbaugeräten übergegangen, bei denen Katzen Strom verbrauchen. Die Programmierung hing im Stadium guter Drehmaschinen, aber anstatt tiefer zu gehen, diskutieren wir, welche Legierung besser vom Fräser ist, und Sie sollten von oben oder von der Seite einspeisen. Leo Editor ist nicht die Antwort auf die Fragen von morgen, sondern ein Signal dafür, was besser gemacht werden kann.

Der Punkt ist nicht, dass ein Programmierer das Problem durch Schreiben von Code lösen kann, während der andere (bedingt) dasselbe "pusht". Mit einem Tool, auf das Sie (bedingt) „klicken“ können, können Sie Probleme lösen, auf die in Bezug auf Zeit und Komplexität bisher kein Zugriff möglich war. In Zukunft werden wir Programme benötigen, die Millionen verwandter Programme in Echtzeit schreiben, und wir haben nichts, um die Komplexität dieser Skala zu bewältigen.

Im Allgemeinen erstellen Sie Ihre Realität, und wenn es dafür keine erforderlichen Werkzeuge gibt, tun Sie sie, es funktioniert.




UPD Anwendungsbeispiele


Admin : Befehlsbibliothek. Sie können es einfach speichern, Sie können es so ausführen, wie es ist, Sie können die Argumenteinstellungen innerhalb des Baums verwenden. Organisieren Sie beispielsweise die Arbeit mit mehreren Datenbanken.

Schicken Sie das Bild zurück

Algorithmische Synthese von Musik : Organisation des Titels

Schicken Sie das Bild zurück

Embedder : Beliebige Organisation des Codes für den Fall, dass Ihre Umgebung nur über begrenzte Mittel verfügt.

Es gibt zwei Möglichkeiten:
1. Aufteilen des Programms in Abschnitte in der günstigsten Reihenfolge.
2. Wenn die Sprache keine Funktionen hat, können sie mit Phantomen simuliert werden.

Schicken Sie das Bild zurück

Es gibt drei Möglichkeiten, die Reihenfolge der

Schicken Sie das Bild zurück

Schicken Sie das Bild zurück

Schicken Sie das Bild zurück

Codeausführung zu organisieren: Pentester : Übertragen Sie Ihr übliches Arsenal in Ihren persönlichen „Cobalt-Strike“ "

Schicken Sie das Bild zurück

Source: https://habr.com/ru/post/de484930/


All Articles