Skip to content

Commit e7a8d3b

Browse files
chore: Dokumentation und Beispiele
1 parent 8318ede commit e7a8d3b

7 files changed

Lines changed: 126 additions & 77 deletions

File tree

README.TurtleProgramming.png

-87.7 KB
Binary file not shown.

README.md

Lines changed: 66 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
# _Live View Programming_ mit jeder Programmiersprache
22

3-
Das _Live View Programming_ (LVP) bietet Ihnen für die Programmierung ein einfaches Textprotokoll an, um mediale Inhalte im Web-Browser darzustellen, also Texte, Bilder, Grafiken, Videos, inteaktive Animationen etc. Kommandos stellen auch nützliche Fähigkeiten bereit, die man z.B. zur Dokumentation von Code gebrauchen kann.
3+
Live View Programming (LVP) stellt ein einfaches Textprotokoll bereit, mit dem sich mediale Inhalte direkt im Web-Browser darstellen lassen, darunter Texte, Bilder, Grafiken, Videos und interaktive Animationen.
4+
5+
Das Protokoll dient als sprachunabhängige Schnittstelle zwischen Ihrem eigenen Programm und LVP. Die Kommunikation erfolgt über Kommandos, die durch gewöhnliche Konsolenausgaben erzeugt werden. Diese Kommandos können Inhalte transformieren und sie im Browser medial aufbereitet anzeigen.
6+
7+
Auf diese Weise stellt LVP praktische Funktionen bereit, die sich beispielsweise für die Code-Dokumentation, die Erzeugung von Turtle-Grafiken oder das Erstellen interaktiver HTML-Elemente nutzen lassen.
8+
49

5-
**Eine detaillierte Übersicht des Protokolls mit allen Kommandos folgt noch.**
610

711
## 🚀 Nutze das _Live View Programming_
812

913
Wenn Sie das _Live View Programming_ ausprobieren möchten, ist Folgendes zu tun:
1014

1115
### 1. Lade die `.jar`-Datei herunter
1216

13-
* Stellen Sie sicher, dasss Sie mit einem aktuellen JDK (Java Development Kit) arbeiten; es empfiehlt sich das [TemurinJDK](https://adoptium.net/temurin/releases/)
17+
* Stellen Sie sicher, dasss Sie mit einem aktuellen JDK (Java Development Kit) arbeiten; es empfiehlt sich das [OpenJDK](https://jdk.java.net/25/)
1418
* Laden Sie die aktuelle `.jar`-Datei herunter, die Ihnen als Asset zum [aktuellen Release](https://github.com/denkspuren/LiveViewProgramming/releases) als Download angeboten wird; die Datei hat den Namen `lvp-<Version>.jar`
1519
* Laden Sie `demo.java`-Datei herunter, die Ihnen ebenfalls als Asset zum [aktuellen Release](https://github.com/denkspuren/LiveViewProgramming/releases) als Download angeboten wird.
1620

@@ -56,26 +60,74 @@ java -jar lvp-1.0.0.jar --log demo.java
5660
> Mehrere Argumente können kombiniert werden, z.B.:
5761
> `java -jar lvp-<Version>.jar --watch-filter=src/lib/**/*.java --log=Debug --port=50001 --config src/*View.java`
5862
59-
### 3. So nutzt man das _Live View Programming_
63+
### 3. Einbinden von Quellen
64+
Damit eigene Programme mit LVP kommunizieren können, werden sie innerhalb von LVP als Laufzeitumgebung ausgeführt. Diese Programme werden im Kontext von LVP als Quellen bezeichnet.
65+
66+
Die Programme selbst benötigen keine zusätzlichen Abhängigkeiten und können in beliebigen Programmiersprachen geschrieben sein. Es gibt zwei Möglichkeiten, Quellen in LVP zu definieren.
67+
68+
#### Variante 1: Übergabe über die Konsole
6069

61-
Die Datei `demo.java` dient als einfaches Beispiel für den Einstieg in das Live View Programming (LVP).
70+
Wie oben gezeigt, können Quellen als Argument beim Konsolenaufruf übergeben werden. Dabei lassen sich beliebig viele Quellen definieren. Alle angegebenen Quellen werden mit dem über --cmd übergebenen Befehl ausgeführt.
6271

63-
Damit LVP funktioniert, **muss der Server die Datei beobachten (watchen)** – sobald Änderungen erkannt werden, wird der Code automatisch neu ausgeführt und die Ausgabe aktualisiert.
72+
Wird das Argument `--cmd` nicht gesetzt, versucht LVP standardmäßig, die Quellen als Java-Programme auszuführen.
6473

65-
Innerhalb einer [`void main()`-Methode](https://openjdk.org/jeps/495) lassen sich interaktive Inhalte erzeugen, indem man `println`-Ausgaben entsprechend dem Protokoll erzeugt. Diese Inhalte werden anschließend im Browser angezeigt.
74+
#### Variante 2: Konfigurationsdatei (sources.json)
6675

67-
**Beispiel:**
76+
Bei einer größeren Anzahl von Quellen oder wenn Quellen unterschiedlich gestartet werden sollen (z. B. mit verschiedenen Startbefehlen), empfiehlt sich die Verwendung einer sources.json-Datei im Wurzelverzeichnis der Ausführung.
6877

78+
Wird LVP mit dem Argument `--config` gestartet, werden die in dieser Datei definierten Quellen zusätzlich ausgeführt.
79+
80+
Ein Beispiel für den Aufbau der Datei befindet sich im Ordner examples.
81+
82+
Beide Varianten lassen sich auch kombinieren.
83+
84+
### 4. Das Protokoll
85+
Im Folgenden eine grobe Übersicht über den generellen Aufbau des Protokolls. Ein ausführlicheres Beispiel finden Sie in `demo.java`, sowie weitere kleine Beispiele in dem Ordner `examples`.
86+
87+
Einzeilige Kommandos:
6988
```java
70-
import lvp.Clerk;
89+
println("Markdown: # Ich bin eine Überschrift");
90+
```
7191

72-
void main() {
73-
println("Markdown: # Hello World");
74-
}
92+
Mehrzeilige Kommandos:
93+
```java
94+
println("""
95+
Markdown:
96+
# Ich bin eine Überschrift
97+
Ich bin **Text**.
98+
~~~
99+
""");
75100
```
76-
Dieser einfache Aufruf rendert eine Markdown-Überschrift direkt im Browser. Weitere Ausgaben, Grafiken oder Interaktionen können durch zusätzliche Kommandos ergänzt werden.
101+
Kommandos bestehen aus einem Namen und einem Inhalt. Dabei wird zwischen einzeiligen und mehrzeiligen Kommandos unterschieden. Ein mehrzeiliges Kommando wird durch `~~~` beendet.
102+
103+
<br/>
104+
105+
```java
106+
println("""
107+
Text[template]:
108+
## Beispiel
109+
Irgendein ${0} anzeigen.
110+
~~~
111+
| Markdown
112+
113+
Text: Beispiel
114+
| Text[template] | Markdown
115+
""")
116+
117+
```
118+
Durch Piping können die Ergebnisse eines Kommandos an ein anderes Kommando weitergegeben werden.
119+
120+
### Kommandos und Anweisungen
121+
[Hier folgt eine Übersicht über alle Kommandos]
122+
- Register
123+
- Markdown
124+
- Html
125+
- Css
126+
- Javascript
127+
- ....
128+
77129

78-
### Troubleshooting
130+
## Troubleshooting
79131

80132
> Error starting server: Address already in use: bind
81133

demo.java

Lines changed: 57 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,89 @@
1+
import static java.lang.IO.println;
12
List<String> obst = List.of("Apfel", "Birne", "Banane");
23
void main() {
34
println("""
45
Clear
5-
Markdown: ## Einkaufsliste
6+
Markdown: # Wie nutze ich LVP?
7+
Markdown:
8+
Das neue LVP Protokoll bietet viele Möglichkeiten, um Textausgaben zu transformieren und
9+
daraus mediale Darstellungen im Browser anzeigen zu lassen. Diese Demo soll einen Überblick über die Möglichkeiten geben, die LVP bietet. Hier sieht man wie statische Markdown Texte erstellt werden können, die dann im Browser angezeigt werden. Diese können einzeilig sein, oder auch mehrzeilig, wie hier. Wesentlich spannender ist aber die Möglichkeit, dynamische Inhalte zu erstellen, wie im folgenden Beispiel zu sehen ist.
10+
~~~
11+
612
Markdown:
713
""");
814
println(buildObstListe());
915
println("~~~");
16+
17+
println("""
18+
Markdown:
19+
## Kommandoinhalte durch Pipelines reichen
20+
Ergebnisse von Kommandos können durch Pipelines an andere Kommandos weitergereicht werden, um diese weiter zu verarbeiten. Das ist aber nur für Kommandos möglich, die auch tatsächlich eine Ausgabe haben. Das Markdown Kommando hat zum Beispiel keine Ausgabe, die weiterverarbeitet werden könnte, da es sein Ergebnis direkt im Browser anzeigt.
21+
~~~
22+
""");
23+
24+
1025
println("""
1126
Text[template]:
1227
## Beispiel
13-
Irgendein ${0} anzeigen.
28+
Im folgenden Beispiel sieht man, wie das Text Kommando genutzt wird, um ein Template zu erstellen. Das Kommando selbst erzeugt keine Anzeige im Browser. Es ermöglicht aber, Platzhalter zu definieren, die dann durch die Pipeline mit ${0} gefüllt werden können.
1429
~~~
1530
| Markdown
1631
17-
Text: Text
32+
Text: Inhalten
1833
| Text[template] | Markdown
34+
""");
35+
1936

20-
Text[t2]:
21-
## Syntax Überschrift
22-
Das ist die Syntax
23-
${0}
24-
Danach
37+
println("""
38+
Markdown:
39+
Man sieht hier auch, dass sich das Text Kommando Inhalte merken kann, indem man eine ID vergibt, in diesem Fall "template". So kann ein Template mehrmals benutzt werden.
2540
~~~
41+
""");
2642

27-
Cutout: ./syntax.md
28-
| Text[t2] | Markdown
2943

30-
Text[t3]:
31-
```java
32-
${0}
33-
```
34-
~~~
44+
println("""
45+
Text[t2]:
46+
Jetzt fehlt nur noch die Dokumentation des Codes. Dazu kann das Codeblock Kommando genutzt werden. Es erstellt Codeblöcke, die im Browser angezeigt werden und dort auch bearbeitet werden können. Damit das funktioniert, muss das Ergebnis dieses Kommandos in einem Markdown Codeblock eingebettet werden.
3547
36-
Codeblock:./intro.java;// example
37-
| Text[t3] | Markdown
48+
```java
49+
${0}
50+
```
51+
~~~
52+
53+
Codeblock:./demo.java;// example
54+
| Text[t2] | Markdown
55+
""");
3856

39-
Register[skipId]: Counter wc
40-
Text:
41-
Hello World
42-
~~~
43-
| Counter | Html
57+
println("""
58+
Register[skipId]: Counter wc
59+
Text[wc-text]:
60+
## Externe Kommandos
61+
In diesem Beispiel wird gezeigt, wie LVP um externe Kommandos erweitert werden kann. Durch die Register Anweisung können beliebige Kommandos registriert werden, die dann in LVP genutzt werden können. In diesem Fall wird das Kommando "wc" registriert, das die Anzahl der Wörter in einem Text zählt. Das Kommando erwartet den Text als Eingabe und gibt die Anzahl der Wörter als Ausgabe zurück.
62+
</br>
63+
Das Ergebnis: ${0}
64+
~~~
65+
| Counter | Text[wc-text] | Markdown
4466
45-
""");
67+
Markdown: ### Eigene Kommandos registrieren
68+
69+
Register: Reverse java --enable-preview ./examples/ExternerService.java
70+
Text[reverse-text]:
71+
So kann man natürlich auch eigene Kommandos erstellen, die dann in LVP genutzt werden können. In diesem Fall wird ein Kommando registriert, das einen Text umkehrt. Das Kommando erwartet den Text als Eingabe und gibt den umgekehrten Text als Ausgabe zurück.
72+
~~~
73+
| Reverse | Markdown
74+
""");
75+
76+
//TODO: Turtle Beispiel
77+
78+
//TODO: Interaktive HTML Elemente Beispiel
4679

4780
}
4881

4982
// example
5083
String buildObstListe() {
5184
String out = "";
5285
for (String o : obst) {
53-
out += "**" + o + "**\n";
86+
out += "- **" + o + "**\n";
5487
}
5588
return out;
5689
}

demo_sources.json

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import java.util.Scanner;
2+
import static java.lang.IO.println;
23

34
/// Register with:
45
/// Register: Reverse java --enable-preview external.java

examples/Introduction.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
<properties>
1515
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16-
<maven.compiler.release>24</maven.compiler.release>
16+
<maven.compiler.release>25</maven.compiler.release>
1717
</properties>
1818

1919

@@ -52,7 +52,7 @@
5252
<artifactId>maven-compiler-plugin</artifactId>
5353
<version>3.13.0</version>
5454
<configuration>
55-
<release>24</release>
55+
<release>25</release>
5656
<compilerArgs>--enable-preview</compilerArgs>
5757
</configuration>
5858
</plugin>

0 commit comments

Comments
 (0)