Blöcke (.lnb)

Ein Blöcke-Bundle ist ein Ordner, dessen Name auf .lnb endet und der im Baum als ein einziges Element behandelt wird (Doppelklick öffnet). Jeder Block ist eine echte Datei auf der Festplatte; die Reihenfolge steht in einer blocks.json im Stammordner des Bundles. Es funktioniert wie ein Notizbuch: gestapelte Zellen mit Code oder Text. Ein Jupyter-Notebook kommt hier herein: Rechtsklick auf eine .ipynb im Baum und Als Blöcke importieren (.lnb) wählen. Jede Zelle wird zu einer echten Datei — versionierbar und von der Suche gelesen —, und die .ipynb bleibt, wo sie war, denn Importieren ist kein Konvertieren. Die im Notebook gespeicherten Ausgaben kommen nicht mit: Die Zelle hier auszuführen erzeugt das echte Ergebnis, mit Zeitpunkt und Befehl. Ist die blocks.json unlesbar (ein Git-Konflikt oder ein unterbrochener Schreibvorgang), warnt das Notizbuch und schreibt sie nicht neu: Reihenfolge, Verbindung und Sitzung werden erst wieder gespeichert, wenn Sie sie repariert haben.

Zellen, Notizbuchleiste und Tastenkürzel

Jede Zelle hat einen Namen, eine Typ-Schaltfläche (markdown, python, javascript, sql, shell, powershell, bat, r, julia, http, ki, mermaid, latex und die Texttypen) und Schaltflächen zum Kopieren, Einfügen (Klick: darunter; der Pfeil: darüber und duplizieren), Löschen, Verschieben nach oben und unten und Ausführen (der Pfeil bietet Bis hierher ausführen). Eine neue Zelle erbt den Typ ihrer Nachbarin. Die Schaltfläche rechts klappt die Zelle ein und lässt nur die erste Zeile in der Kopfzeile stehen; der Zähler [n] zeigt, in welcher Reihenfolge die Zellen in dieser Sitzung liefen. Ein Notizbuch erstellen Sie im Baum (Neu) oder über Datei → Neu.

Die Notizbuchleiste oben wirkt auf das ganze Notizbuch: Alles ausführen führt die Code-Zellen der Reihe nach aus; Stopp unterbricht die laufende und leert die Warteschlange (der Lauf landet mit Exit-Code -1 im Verlauf); Ausgaben leeren schließt die Bereiche, ohne etwas zu löschen; das Menü Mehr exportiert das Notizbuch und löscht den Verlauf. Der Schlüssel timeoutSec in der blocks.json setzt ein Zeitlimit pro Zelle (0, die Vorgabe, bedeutet ohne Limit).

Tastenkürzel, mit dem Fokus in der Zelle: Strg+Enter führt aus und bleibt; Umschalt+Enter führt aus und springt zur nächsten (bei der letzten wird eine neue angelegt); Alt+Enter führt aus und fügt direkt darunter eine Zelle ein. In einer Textzelle heißt Ausführen Rendern: Sie öffnet sich gerendert, wenn sie Inhalt hat, und ein Doppelklick (oder Enter darauf) kehrt zum Bearbeiten zurück.

Gespeichertes Ergebnis, Anhänge und Verlauf

Das Ergebnis wird gespeichert (wie in einem Laborbuch): Nach dem Ende wird jeder Lauf zu einer .md-Datei unter saida/<Zelle>/ im Bundle selbst — mit Zeitpunkt, Exit-Code, Dauer, Befehl und der Ausgabe selbst. Da es Markdown ist, lässt es sich in jedem Editor lesen, zusammen mit dem Notizbuch in Git versionieren und über die Suche in den Notizen wiederfinden. Das Bundle erneut zu öffnen bringt den Streifen Letzter Lauf über dem Bereich zurück: Klicken Sie darauf, um das Ergebnis zu sehen, ohne erneut auszuführen.

Anhänge: Jeder Lauf bekommt einen eigenen Ordner neben der .md, und sein Pfad erreicht das Programm in der Umgebungsvariablen LN_RUN_DIR. Was die Zelle dort schreibt — ein matplotlib-Diagramm, eine CSV — erscheint unter der Ausgabe (Bilder gezeichnet, der Rest als Link zum Ordner) und wird in der Verlaufsdatei aufgeführt. Eine Ausgabe, die bereits Markdown ist (die Tabelle eines SELECT, die Antwort der KI, ein Diagramm), öffnet sich gerendert; die Schaltfläche Text/Rendern im Streifen schaltet um.

Verlauf: Die Schaltfläche Verlauf neben diesem Streifen listet die früheren Läufe dieser Zelle (Zeitpunkt und Exit-Code) — praktisch, um zu vergleichen, was dieselbe Zelle im Lauf der Zeit zurückgab. Wir behalten die 10 neuesten pro Zelle; zum Ändern bearbeiten Sie den Schlüssel historyLimit in der blocks.json des Bundles (0 schaltet das Speichern ab, und mit ihm die Anhänge). Sehr große Ausgaben werden gekürzt (die Datei sagt truncated: true). Die Zelle umzubenennen oder ihren Typ zu ändern nimmt den Verlauf mit; die Zelle zu löschen schickt den Verlauf in den Papierkorb.

Persistente Sitzung

Standardmäßig ist jede Zelle ein neuer Prozess: Was die eine definiert, sieht die nächste nicht. Mit eingeschalteter persistenter Sitzung (Schaltfläche Sitzung in der Leiste; Schlüssel session in der blocks.json) laufen Python-, JavaScript-, Shell- und PowerShell-Zellen in einem Prozess, der zwischen den Läufen am Leben bleibt — Variablen, Funktionen und Importe einer Zelle gelten in den folgenden, wie in Jupyter. In Python werden am Ende der Zelle offene matplotlib-Figuren von selbst in den Anhangsordner gespeichert. Sitzung neu starten vergisst alles; Stopp ebenfalls, denn Unterbrechen heißt, den Prozess zu beenden. In JavaScript deklarieren Sie mit var (oder ohne Deklaration): let, const und class auf oberster Ebene lassen sich nicht erneut deklarieren — nicht einmal, wenn dieselbe Zelle noch einmal läuft.

SQL-Zellen

Ohne gewählte Verbindung läuft die sql-Zelle im DuckDB des Notizbuchs selbst (im Speicher): In einer Zelle angelegte Tabellen gelten in den folgenden, und read_csv('daten/umsatz.csv') liest die Dateien im Ordner des Notizbuchs — legen Sie die Daten in einen Unterordner, denn jede lose Datei im Ordner des Notizbuchs ist eine Zelle. Für eine echte Datenbank zeigen Sie das Notizbuch über den Verbindungsstreifen (er listet die Verbindungen des Arbeitsbereichs) auf eine .lnc-Verbindung: Die Zellen laufen dann in der Datenbank, über dieselbe Verbindung wie das Verbindungen-Panel — gemerktes Passwort, SSH-Tunnel, erneutes Lesen der .lnc und die Produktionsbestätigung vor jedem Schreibzugriff. Das Ergebnis eines SELECT wird zu einer Tabelle in der Ausgabedatei; INSERT/UPDATE und Co. melden, wie viele Zeilen sich änderten, und ein Fehler bricht das Skript ab und hält die fehlgeschlagene Anweisung fest. Wir holen bis zu 100 Zeilen pro Abfrage (sqlMaxRows in der blocks.json; die Datei sagt, wenn es mehr gab).

@set name = wert definiert eine Variable mit Notizbuch-Gültigkeit, und :name (oder ?) ist ein Parameter, der beim Ausführen abgefragt wird, wie im SQL-Editor. Das letzte SELECT schreibt außerdem resultado.csv in den Anhangsordner (dieselben Zeilen wie die Tabelle, bis sqlMaxRows), und die folgenden Zellen erhalten den Pfad in LN_LAST_SQL — in Python pd.read_csv(os.environ["LN_LAST_SQL"]). Die Verbindung steht als relativer Pfad in der blocks.json; eine im Bundle abgelegte .lnc zählt als Konfiguration, nicht als Zelle.

HTTP, KI, Mermaid und LaTeX

Vier Typen laufen in LightNote selbst, ohne Interpreter: Die http-Zelle ist ein .lnh-Test, der vom selben Ausführer wie der API-Tester läuft (der Bericht landet im Verlauf; die Umgebung ist die, die der Schlüssel httpEnv in der blocks.json nennt, und eine Datei, die die Anfrage sendet, muss im Arbeitsbereich liegen); die ai-Zelle schickt den Prompt mit dem Notizbuchkontext — dem Quelltext der vorherigen Zellen und der letzten Ausgabe jeder einzelnen, außer den http-Zellen, die Zugangsdaten enthalten können — an den Standardassistenten, und die Antwort kommt gerendert an; die mermaid- und latex-Zellen zeichnen das Diagramm oder die Formel in ein Bild in den Anhängen. Stopp bricht die ersten beiden ab.

Das Notizbuch exportieren

Das Menü Mehr in der Leiste exportiert das ganze Notizbuch: als Markdown (Textzellen inline, Code in Zäunen mit der Sprache, die letzte Ausgabe direkt darunter und die Bilder verlinkt) oder als Jupyter-Notebook (.ipynb, mit der letzten Ausgabe jeder Zelle und eingebetteten Bildern; eine Zelle einer anderen Sprache trägt die Markierung, die VS Code liest). Es ist eine Kopie zum Teilen — das Notizbuch bleibt der Ordner.

Inhalt

Bearbeiten

Werkzeuge

Automatisierung (KI / Skripte)

Referenz