
Es scheint, ich habe in meiner Karriere in der IT Dutzende von PrĂ€sentationen fĂŒr Kollegen, Auftraggeber und öffentliche VortrĂ€ge gehalten. Viele Jahre lang war PowerPoint als Tool zur Erstellung von Folien fĂŒr mich die natĂŒrliche und zuverlĂ€ssige Wahl. Doch in diesem Jahr hat sich die Situation grundlegend verĂ€ndert. Von Februar bis Mai durfte ich auf fĂŒnf Konferenzen sprechen, und die Folien fĂŒr die VortrĂ€ge mussten in kurzer Zeit, aber qualitativ hochwertig erstellt werden. Es stellte sich die Frage, einen Teil der Arbeit, der das visuelle Design der Folien betrifft, an andere Personen zu delegieren. Einmal versuchte ich, mit einem Designer zusammenzuarbeiten, indem ich .pptx-Dateien per E-Mail verschickte, aber die Arbeit verwandelte sich in ein Chaos: Niemand wusste, welche Version der Folien die 'neueste' war, und das Layout war aufgrund von Unterschieden in den Versionen von PowerPoint und den Schriftarten auf unseren Maschinen durcheinander geraten. Also beschloss ich, etwas Neues auszuprobieren. Ich habe es ausprobiert und seitdem denke ich nicht daran, zu PowerPoint zurĂŒckzukehren.
Was wir wollen
Vor etwa anderthalb Jahren haben wir in der Firma beschlossen, Word nicht mehr fĂŒr die Erstellung von Projektdokumentationen zu verwenden, da wir auf dieselben Probleme gestoĂen sind: Obwohl Word gut fĂŒr die Erstellung kleiner Dokumente geeignet ist, treten mit wachsendem Umfang Schwierigkeiten bei der Zusammenarbeit und der Erreichung einer qualitativ hochwertigen und einheitlichen Formatierung auf. Unsere Wahl fiel auf , und ĂŒber diese Entscheidung freuen wir uns weiterhin, aber das ist ein Thema fĂŒr einen eigenen Artikel. Etwa zu dieser Zeit erkannten wir die Effizienz eines der DevOps-Prinzipien 'everything as code', daher war die Wahl der Anforderungen fĂŒr die neue Technologie zur Erstellung von PrĂ€sentationsfolien ziemlich offensichtlich:
- Eine PrÀsentation sollte aus einer Plain-Text-Datei in einer Markup-Sprache bestehen.
- Die Folien befassen sich mit Entwicklungsprojekten, daher sollte die Markup-Sprache es ermöglichen, leicht, ohne die Hilfe externer Systeme, einzufĂŒgen
- Codeausschnitte mit Syntax-Highlighting,
- einfache Diagramme in Form von geometrischen Figuren, die durch Pfeile verbunden sind,
- UML-Diagramme, Flussdiagramme und mehr.
- Das Projekt der PrÀsentation sollte im Versionskontrollsystem gespeichert werden.
- Die Validierung und der Zusammenbau der fertigen Folien sollten in einem CI-System erfolgen.
Heutzutage gibt es zwei grundlegende Varianten zur Erstellung von Folien in Markup-Sprachen: das Paket fĂŒr LaTeX oder eines der Frameworks zur Erstellung von Folien in HTML/CSS (, , und viele andere).
Obwohl meine Seele zu LaTeX neigt, hat der Verstand mir geraten, dass die Wahl einer Lösung, die nicht nur ich nutze, auf der Seite einer Lösung liegen sollte, die einem breiteren Publikum bekannt ist. LaTeX ist nicht jedem bekannt, und wenn Ihre tÀgliche Praxis nicht mit dem Schreiben wissenschaftlicher Arbeiten verbunden ist, werden Sie wahrscheinlich nicht die Zeit finden, in die riesige, komplexe Welt dieses Systems einzutauchen.
Allerdings ist auch das Beherrschen von HTML/CSS nicht gerade eine allgegenwĂ€rtige FĂ€higkeit: Ich selbst beherrsche es beispielsweise keineswegs vollstĂ€ndig. GlĂŒcklicherweise kommt hier unser bereits bekanntes AsciiDoctor zur Hilfe: ein Konverter er ermöglicht das Erstellen von RevealJS-Slides unter Verwendung von AsciiDoctor-Markup. Und das ist einfach zu erlernen und fĂŒr jeden zugĂ€nglich!
Wie man Slides codiert
Um das Wesen der Slide-Codierung mit AsciiDoctor zu verstehen, ist es am einfachsten, konkrete Beispiele zu bringen. Alle stammen von realen Slides, die ich fĂŒr meine KonferenzvortrĂ€ge in diesem Jahr erstellt habe.
Eine Folie mit einem Titel und einer Liste, bei der die Punkte nacheinander aufklappen:
== Warum benötigen wir die Streams API?
[%step]
* Echtzeit-Stream-Verarbeitung
* Stream-Ă€hnliche API (map / reduce)
* Unter der Haube:
** Automatischer Offset-Commit
** Rebalancing
** Interner Zustand der Prozessoren
** Einfaches SkalierenErgebnis

Titel und ein Quellcode-Ausschnitt mit Syntaxhervorhebung:
== Kafka Streams API: allgemeine Struktur einer KStreams-Anwendung
[source,java]
----
StreamsConfig config = ...;
//Hier setzen wir verschiedene Optionen
Topology topology = new StreamsBuilder()
//Hier bauen wir die Topologie
....build();
----Ergebnis

Im Vorbereitungsprozess fĂŒr den Vortrag werden die Beispielcodes mehrfach ĂŒberarbeitet und verbessert, daher ist es unbezahlbar, die Möglichkeit zu haben, den "Rohcode" schnell in die Folie einzufĂŒgen, um die Relevanz des Demo-Beispiels sicherzustellen, ohne sich um die Syntaxhervorhebung kĂŒmmern zu mĂŒssen.
Titel, Illustration und Text (die Anordnung auf der Folie erfolgt in den Zellen ):
== Kafka Streams in Action
[.custom-style]
[cols="30a,70a"]
|===
|image::KSIA.jpg[]
|
* **William Bejeck**, +
âKafka Streams in Actionâ, November 2018
* Beispielcode fĂŒr Kafka 1.0
|===Ergebnis

Manchmal ist kein Titel erforderlich, und fĂŒr die Veranschaulichung Ihrer Gedanken genĂŒgt einfach ein Bild im Vollbildformat:
[%notitle]
== Es ist nicht leicht, in Legacy zu leben
image::swampman.jpg[canvas, size=cover]Ergebnis

Oft muss ein Gedanke durch ein einfaches Diagramm, dargestellt als âQuadrate, die mit Pfeilen verbunden sindâ, untermauert werden. GlĂŒcklicherweise ist AsciiDoctor in das System integriert â in einer Sprache, die es ermöglicht, Diagramme auf der Grundlage der Beschreibung von Knoten und den Verbindungen zwischen ihnen zu beschreiben. Man muss sich mit Graphviz vertrautmachen, aber es ist ziemlich einfach, dafĂŒr auf die vorhandenen Beispiele zurĂŒckzugreifen! So sieht das aus:
== Schreiben einer "Bet Totalling App"
Wie hoch ist die Summe der Auszahlungen fĂŒr die platzierte Wette, wenn das Ergebnis eintritt?
[graphviz, "counting-topology.png"]
-----
digraph G {
graph [ dpi = 150 ];
rankdir="LR";
node [fontsize=18; shape="circle"; fixedsize="true"; width="1.1"];
Store [shape="cylinder"; label="Lokaler Speicher"; fixedsize="true"; width="1.5"]
Source -> MapVal -> Sum -> Sink
Sum -> Store [dir=both; label=" n "]
{rank = same; Store; Sum;}
}
-----Ergebnis

Wenn es notwendig ist, die Beschriftung auf der Figur zu bearbeiten, die Richtung des Pfeils zu Ă€ndern usw. â dann kann dies direkt im PrĂ€sentationscode erfolgen, anstatt irgendwo das Bild neu zu zeichnen und es erneut in die Folie einzufĂŒgen. Das erhöht die Effizienz bei der Arbeit an den Folien erheblich.
Ein komplexeres Beispiel:
== Nicht reproduzierbare Zusammenstellung
[graphviz, "unstable-update.png"]
-----
digraph G {
rankdir="LR";
graph [ dpi = 150 ];
u -> r0;
u[shape=plaintext; label="Linter-Update+ 13 Warnungen"]
r0[shape=point, width = 0]
r1 -> r0[ arrowhead = none, label="Hauptzweig" ];
r0-> r2 []; b1 -> b4; r1->b1
r1[label="150nWarnungen"]
b1[label="± 0nWarnungen"]
b4[label="± 0nWarnungen"]
b4->r2
r2[label="163nWarnungen", color="red", xlabel=<<font color="red">Merge blockiert<\/font>>]
{rank = same; u; r0; b4;}
}
-----Ergebnis

Ăbrigens ist es praktisch, mit Graphviz zu experimentieren und Bilder auf der Seite .
SchlieĂlich, wenn man ein Flussdiagramm, ein Klassendiagramm oder ein anderes standardisiertes Diagramm in eine Folie einfĂŒgen muss, kann in diesem Fall ein weiteres in AsciiDoctor integriertes System hilfreich sein, . Ăber die umfangreichen Möglichkeiten von PlantUML schrieb mein Kollege Nikolai Potashnikov .
Die Umwandlung des PrĂ€sentationsprojekts in Code, der im Versionskontrollsystem gespeichert ist, ermöglicht eine organisierte Zusammenarbeit an der PrĂ€sentation, insbesondere die Trennung von Inhalten und Gestaltung. Die Gestaltung der Folien (Schriftarten, HintergrĂŒnde, AbstĂ€nde) in RevealJS wird mittels CSS beschrieben. Meine persönliche FĂ€higkeit, mit CSS umzugehen, wird am besten durch â aber das ist nicht schlimm, wenn es Leute gibt, die viel geschickter und schneller mit CSS arbeiten als ich. So können wir im Angesicht der schnell nĂ€her rĂŒckenden Frist fĂŒr die PrĂ€sentation gleichzeitig an verschiedenen Dateien ĂŒber Git arbeiten und die Geschwindigkeit der Zusammenarbeit erhöhen, die beim Versenden von .pptx-Dateien per E-Mail unmöglich wĂ€re.
Zusammenstellung der HTML-Seite mit Folien
Einfache Textquellen sind groĂartig, aber wie kompiliert man sie in die eigentliche PrĂ€sentation?
AsciiDoctor ist ein in Ruby geschriebenes Projekt, das auf verschiedene Arten gestartet werden kann. ZunĂ€chst können Sie die Ruby-Sprache installieren und asciidoctor direkt ausfĂŒhren, was fĂŒr Ruby-Entwickler wahrscheinlich am nĂ€chsten kommt.
Wenn Sie sich nicht mit der Installation von Ruby befassen möchten, können Sie das Docker-Image nutzen , das beim Starten den Ordner mit den Projektquellen ĂŒber VOLUME anschlieĂen kann und an dem festgelegten Ort das Ergebnis erhĂ€lt.
Die Variante, fĂŒr die ich mich entschieden habe, mag etwas unerwartet erscheinen, ist aber fĂŒr mich als Java-Entwickler am bequemsten. Sie erfordert weder die Installation von Ruby noch die VerfĂŒgbarkeit von Docker, ermöglicht jedoch die Generierung von Folien mit einem Maven-Skript.
Das Projekt â eine Java-Implementierung der Ruby-Sprache â ist so gut, dass es ermöglicht, praktisch alles, was fĂŒr Ruby erstellt wurde, in der Java-Maschine auszufĂŒhren, und das Starten von AsciiDoctor ist eine der hĂ€ufigsten Anwendungen von JRuby.
Vorhandensein ermöglicht das Erstellen von AsciiDoctor-Dokumentationen, die Teil eines Java-Projekts sind (was wir aktiv nutzen). Dabei werden AsciiDoctor und JRuby automatisch von Maven heruntergeladen, und AsciiDoctor wird in der JRuby-Umgebung ausgefĂŒhrt: Es ist nichts auf der Maschine zu installieren! (AuĂer dem Paket graphviz, das benötigt wird, wenn Sie Grafiken von GraphViz oder PlantUML verwenden möchten.) Es genĂŒgt, Ihre .adoc-Dateien in den Ordner src/main/asciidoc/. Hier , das Folien mit Diagrammen erstellt.
Konvertierung von Folien in PDF
Obwohl die HTML-Version der Folien vollkommen autark ist, kann es dennoch erforderlich sein, auch eine PDF-Version der Folien zu haben. Erstens passiert es, dass einige Konferenzen, die dem Referenten nicht erlauben, seinen eigenen Laptop anzuschlieĂen, die Folien âausschlieĂlich im Format pptx oder pdfâ verlangen, ohne zu erwarten, dass sie auch in HTML vorliegen. Zweitens ist es guter Stil, den Organisatoren eine unverĂ€nderbare Variante Ihrer Folien in der Form zu schicken, in der sie bei der PrĂ€sentation gezeigt wurden, im PDF-Format zur Veröffentlichung der Datei in den Konferenzmaterialien.
GlĂŒcklicherweise bewĂ€ltigt dieses Aufgabe das Node.js-Tool , das auf â einem Automatisierungssystem zur Steuerung des Browsers Chrome â basiert. Um eine RevealJS-PrĂ€sentation in PDF zu konvertieren, kann der Befehl verwendet werden.
node decktape.js -s 3200x1800 --slides 1-500
reveal "file:///index.html?fragments=true" slides.pdf Zwei Tricks beim Start von decktape, zu denen ich durch Ausprobieren gekommen bin:
Auflösung ĂŒber Parameter
-sMan muss mit einem zweifachen Puffer rechnen, sonst können Probleme mit den Konvertergebnissen auftreten.Im URL der HTML-Version der PrĂ€sentation muss ein Parameter ĂŒbergeben werden.
?fragments=true, was es ermöglicht, fĂŒr jeden Zwischenstatus Ihrer Folie eine separate PDF-Seite zu erstellen (zum Beispiel fĂŒnf Seiten fĂŒr fĂŒnf Punkte der Liste, wenn sie nacheinander angezeigt werden). Dies ermöglicht es, dieses PDF selbst als PrĂ€sentation wĂ€hrend eines Vortrags zu verwenden.
Automatische Erstellung und Veröffentlichung im Web
Es ist praktisch, wenn Folien automatisch erstellt werden, wenn Ănderungen im Versionskontrollsystem vorgenommen werden, und noch praktischer, wenn die automatisch kompilierten Folien im Internet fĂŒr die allgemeine Nutzung bereitgestellt werden. Folien aus dem Internet können leicht von jedem mit dem Internet und einem Projektor verbundenen GerĂ€t vor einem Publikum âabgespieltâ werden.
Da wir in unserer Arbeit GitHub verwenden, ist eine natĂŒrliche Wahl fĂŒr das CI-System , und fĂŒr das Hosting der fertigen PrĂ€sentationen â . Die Idee von github.io ist, dass jeder statische Inhalt, der in den Branch gh-pages Ihres Projekts auf GitHub platziert wird, unter der Adresse .gihub.io/.
Die vollstĂ€ndige Konfigurationsdatei fĂŒr TravisCI, die die Erstellung der HTML-Version der Seite mit Maven, die Konvertierung in PDF mit decktape und das Hochladen der Ergebnisse in den Branch gh-pages zum Veröffentlichen auf github.io, sieht aus .
Um ein solches Projekt auf der TravisCI-Seite zu erstellen, mĂŒssen Umgebungsvariablen konfiguriert werden.
GH_REFâ Wert im Format github.com/inponomarev/csa-hbGH_TOKENâ Zugriffstoken fĂŒr GitHub. Kann in GitHub in den Einstellungen Ihres Profils, Entwickleroptionen -> Persönliche Zugriffstoken, erhalten werden. Wenn Sie die PrĂ€sentation in ein öffentliches Repository hochladen, reicht es fĂŒr dieses Token aus, nur das Zugriffslevel âZugriff auf öffentliche Repositoriesâ anzugeben.GH_USER_EMAIL/GH_USER_NAMEâ Paar Name/E-Mail, unter dem der Push in den Branch erfolgen wird.gh-pages.
Somit fĂŒhrt jeder Code-Commit der PrĂ€sentation auf GitHub zu einer automatischen Neubearbeitung der Folien in den Formaten HTML und PDF und deren erneuten Hochladen auf github.io. (NatĂŒrlich sollten nur die PrĂ€sentationen, die Sie letztendlich öffentlich machen möchten, auf github.io hochgeladen werden.)
Beispiele fĂŒr Projekte
AbschlieĂend â Links zu ein paar Beispielen von PrĂ€sentationsprojekten mit konfigurierten Maven-Skripten und CI-Konfiguration fĂŒr Travis-CI, die man klonen und verwenden kann, um eigene PrĂ€sentationsprojekte zu erstellen:
(mein Vortrag fĂŒr JPoint 2019)
(mein Vortrag fĂŒr Heisenbug 2019)
Lebewohl, Powerpoint! Ich glaube nicht, dass ich dich jemals fĂŒr technische PrĂ€sentationen brauchen werde đ
Quelle: habr.com
