Presentation som kod, eller Varför jag inte lÀngre anvÀnder PowerPoint

Presentation som kod, eller Varför jag inte lÀngre anvÀnder PowerPoint

Det verkar som om jag har haft möjlighet att göra tiotals presentationer för kollegor, kunder och offentliga tal under min karriÀr inom IT. MÄnga Är har PowerPoint varit mitt naturliga och pÄlitliga val för att skapa bildspel. Men i Är har situationen förÀndrats kvalitativt. FrÄn februari till maj hade jag nöjet att tala pÄ fem konferenser, och jag var tvungen att förbereda bilder till föredragen under tidspress, men av god kvalitet. FrÄgan om att delegera den del av arbetet som rör den visuella designen av bilderna till andra personer uppstod. En gÄng försökte jag samarbeta med en designer genom att skicka .pptx-filer via e-post, men arbetet förvandlades till kaos: ingen visste vilken version av bilderna som var

Vad vi vill

För ungefÀr ett och ett halvt Är sedan avstod vi i företaget frÄn att anvÀnda Word för att skapa projektdokumentation, efter att ha stött pÄ samma problem: Àven om Word Àr bra för att skriva en liten dokument, uppstÄr det svÄrigheter med samarbete och att fÄ en kvalitativ och enhetlig presentation nÀr volymerna ökar. VÄrt val föll pÄ AsciiDoctor, och vi slutar aldrig att glÀdjas över detta val, men det Àr Àmnet för en annan artikel. UngefÀr vid samma tidpunkt upptÀckte vi effektiviteten av en av DevOps-principerna "everything as code", sÄ valet av krav för den nya teknologin för att skapa presentationsbilder var ganska uppenbart:

  1. Presentationer bör bestÄ av en plain text-fil i ett markup-sprÄk.
  2. Bilderna handlar om utvecklingsprojekt, sÄ markupen bör tillÄta oss att enkelt, utan att behöva hjÀlp av externa system, infoga
    • kodsnuttar med syntaxmarkering,
    • enkla diagram i form av geometriska figurer kopplade med pilar,
    • UML-diagram, flödesscheman och liknande.
  3. Projektpresentationen bör lagras i ett versionskontrollsystem.
  4. Validering och byggande av de fÀrdiga bilderna bör göras i en CI-system.

I dag finns det tvÄ grundlÀggande alternativ för att skapa bilder i markup-sprÄk: paketet beamer för LaTeX eller en av ramverken för att skapa bilder i HTML/CSS (RevealJS, remark, deck.js och mÄnga andra).

Även om min sjĂ€l dras till LaTeX, sa mitt förnuft att valet av en lösning som jag inte sjĂ€lva skulle anvĂ€nda, borde vara Ă„t det hĂ„ll av en lösning som Ă€r bekant för en bredare krets. LaTeX Ă€r inte vĂ€lkĂ€nt för alla, och om din vardagliga praktik inte handlar om att skriva vetenskapliga artiklar, finns det nog inte tid för att dyka ner i den omfattande, intrikata vĂ€rlden av detta system.

Trots detta Àr behÀrskning av HTML/CSS inte ett allmÀnt förekommande fÀrdighet: jag, till exempel, behÀrskar det inte helt. Lyckligtvis kommer den redan bekanta AsciiDoctor till hjÀlp: en konverterare asciidoctor-revealjs som möjliggör skapandet av RevealJS-slides med hjÀlp av AsciiDoctor-markup. Och den Àr faktiskt enkel att lÀra sig och tillgÀnglig för alla!

Hur man kodar slides

För att förstÄ kÀrnan i kodning av slides i AsciiDoctor Àr det enklast att ge konkreta exempel. Alla dessa kommer frÄn verkliga slides som jag har skapat för mina konferenspresentationer detta Är.

En slide med en rubrik och en lista dÀr punkterna dyker upp en efter en:

== Varför behöver vi Streams API?

[%step]
* Realtidsströmbehandling
* Stream-liknande API (map / reduce)
* Under huven:
** Automatisk offset commit
** Rebalansering
** Intern status för behandlare
** LĂ€tt skalning

Resultat

Presentation som kod, eller Varför jag inte lÀngre anvÀnder PowerPoint

Rubrik och fragment av kÀllkod med syntaxmarkering:

== Kafka Streams API: generell struktur för KStreams-applikationen

[source,java]
----
StreamsConfig config = ...;
// HÀr stÀller vi in olika alternativ

Topology topology = new StreamsBuilder()
// HĂ€r bygger vi topologi
....build();
----

Resultat

Presentation som kod, eller Varför jag inte lÀngre anvÀnder PowerPoint

Under förberedelserna för presentationen genomgÄr demonstrationskoden upprepade omarbetningar och förbÀttringar, dÀrför Àr det ovÀrderligt att snabbt kunna kopiera och klistra in "rÄ kod" direkt i sliden, vilket sÀkerstÀller relevansen av demonstrationsexemplet utan att behöva bekymra sig om syntaxmarkeringen.

Rubrik, illustration och text (layouten pÄ sliden gör vi i celler tabellen AsciiDoctor):

== Kafka Streams in Action

[.custom-style]
[cols="30a,70a"]
|===
|image::KSIA.jpg[]
|
* **William Bejeck**, +
“Kafkastreams i aktion”, november 2018
* Exempelcode för Kafka 1.0
|===

Resultat

Presentation som kod, eller Varför jag inte lÀngre anvÀnder PowerPoint

Ibland behövs ingen rubrik, och för att illustrera din tanke behövs bara en bild i fullskÀrmslÀge:

[%notitle]
== Att leva med legacy Àr inte enkelt

image::swampman.jpg[canvas, size=cover]

Resultat

Presentation som kod, eller Varför jag inte lÀngre anvÀnder PowerPoint

Ofta behöver en tanke förstĂ€rkas med en enkel diagram, i form av "rutor som Ă€r kopplade med pilar". Lyckligtvis Ă€r AsciiDoctor integrerat med systemet Graphviz — ett sprĂ„k som möjliggör beskrivning av grafdiagram baserat pĂ„ beskrivningen av noder och relationer mellan dem. Att bemĂ€stra Graphviz krĂ€ver tid, men att göra det utifrĂ„n befintliga exempel Ă€r ganska enkelt! SĂ„ hĂ€r ser det ut:

== Skriver "Bet Totalling App"

Vad Àr summan av utbetalningarna för gjorda insatser om resultatet slÄr in?

[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="Lokalt Lager"; fixedsize="true"; width="1.5"]
Source -> MapVal -> Sum -> Sink
Sum -> Store [dir=both; label=" n "]
{rank = same; Store; Sum;}
}
-----

Resultat

Presentation som kod, eller Varför jag inte lÀngre anvÀnder PowerPoint

Om det Ă€r nödvĂ€ndigt att redigera etiketten pĂ„ figuren, Ă€ndra pilens riktning osv. — kan detta göras direkt i presentationskoden, istĂ€llet för att rita om bilden nĂ„gon annanstans och sĂ€tta in den igen i sliden. Detta ökar avsevĂ€rt hastigheten pĂ„ arbetet med slids.

Ett nÄgot mer komplicerat exempel:

== Icke-reproducerbar byggnad
[graphviz, "unstable-update.png"]
-----
digraph G {
  rankdir="LR";
  graph [ dpi = 150 ];
  u -> r0;
  u[shape=plaintext; label="linter updaten+ 13 warnings"]
  r0[shape=point, width = 0]
  r1 -> r0[ arrowhead = none, label="master branch" ];
  r0-> r2 [];   b1 -> b4;  r1->b1
  r1[label="150nwarnings"]
  b1[label="± 0nwarnings"]
  b4[label="± 0nwarnings"]
  b4->r2
  r2[label="163nwarnings", color="red", xlabel=<merge blocked>]
  {rank = same; u; r0; b4;}
}
-----

Resultat

Presentation som kod, eller Varför jag inte lÀngre anvÀnder PowerPoint

Förresten Àr det praktiskt att experimentera med Graphviz och justera bilder pÄ sidan Graphviz online.

Slutligen, om det behövs att infoga ett flödesschema, klassdiagram eller nÄgon annan standardiserad diagram, sÄ kan en annan integrerad med AsciiDoctor-systemet komma till hjÀlp, PlantUML. Om PlantUML:s omfattande möjligheter har min kollega Nikolay Potashnikov skrivit separat post.

Att omvandla presentationsprojektet till kod som lagras i versionskontrollsystemet möjliggör samarbete kring presentationen, framför allt att dela upp ansvaret för innehĂ„llsskapande och design. Utformningen av slids (typsnitt, bakgrunder, indrag) i RevealJS beskrivs med hjĂ€lp av CSS. Min personliga förmĂ„ga att hantera CSS övertrĂ€ffas bĂ€st av denna gif — men det Ă€r inget problem nĂ€r det finns folk som arbetar med CSS snabbare och smidigare Ă€n jag. I slutĂ€ndan innebĂ€r det att vi i ljuset av den snabbt nĂ€rmande deadline för presentationen kan arbeta samtidigt pĂ„ olika filer via Git och öka hastigheten pĂ„ det gemensamma arbetet, vilket inte Ă€r möjligt vid överföring av .pptx-filer via mejl.

Byggande av HTML-sida med slides

Vanlig textkÀllor Àr bra, men hur kompletterar man dem till sjÀlva presentationen?

AsciiDoctor Àr ett projekt skrivet i Ruby och kan köras pÄ flera sÀtt. För det första kan du installera Ruby-sprÄket och köra asciidoctor direkt, vilket förmodligen kommer att vara mest bekvÀmt för Ruby-utvecklare.

Om du inte vill ge dig in pÄ att installera Ruby kan du anvÀnda Docker-avbildningen asciidoctor/docker-asciidoctor, som vid körning kan koppla en mapp med projektets kÀllor via VOLUME och fÄ resultatet pÄ den angivna platsen.

Alternativet som jag valde kan verka nÄgot ovÀntat, men det Àr mest bekvÀmt för mig som Java-utvecklare. Det krÀver varken installation av Ruby eller Docker, men tillÄter att generera presentationer med hjÀlp av Maven-skript.

Det Ă€r sĂ„ att projektet JRuby — Java-implementationen av Ruby — Ă€r sĂ„ bra att det tillĂ„ter att köra praktiskt taget allt som skapats för Ruby i Java-maskinen, och att köra AsciiDoctor Ă€r en av de vanligaste anvĂ€ndningarna av JRuby.

NÀrvaron av asciidoctor-maven-plugin möjliggör att kompilera AsciiDoctor-dokumentation som Àr en del av ett Java-projekt (vilket vi anvÀnder aktivt). BÄde AsciiDoctor och JRuby laddas ner automatiskt av Maven, och AsciiDoctor körs i JRuby-miljön: ingen installation pÄ maskinen behövs! (Förutom paketet graphviz, som behövs om du vill anvÀnda grafik frÄn GraphViz eller PlantUML.) Det rÀcker med att placera dina .adoc-filer i mappen src/main/asciidoc/. HÀr Àr exempel pÄ monument, som samlar presentationer med diagram.

Konvertering av presentationer till PDF

Även om HTML-versionen av presentationerna Ă€r fullt sjĂ€lvförsörjande, Ă€r det fortfarande nödvĂ€ndigt att ha en PDF-version av presentationerna. För det första kan det hĂ€nda att vissa konferenser, som inte ger talarna möjlighet att ansluta sina egna bĂ€rbara datorer, krĂ€ver presentationerna "strikt i pptx- eller pdf-format", utan att förvĂ€nta sig att de Ă€ven finns i HTML. För det andra Ă€r det god ton att skicka en oförĂ€ndrad version av dina presentationer till arrangörerna i det format de visades i, i PDF-format för publicering av filen i konferensmaterialet.

Lyckligtvis hanterar detta uppgift Node.js-verktyget decktape, som bygger pĂ„ Puppeteer — ett automatiseringssystem för att kontrollera Chrome-webblĂ€saren. Du kan konvertera en RevealJS-presentation till PDF med kommandot

node decktape.js -s 3200x1800 --slides 1-500 
  reveal "file:///index.html?fragments=true" slides.pdf  

TvÄ knep vid körning av decktape som jag kom fram till genom trial and error:

  • upplösningen via parameter -s det mĂ„ste anges med dubbla marginaler, annars kan det uppstĂ„ problem med konverteringsresultaten

  • i URL:en för HTML-versionen av presentationen mĂ„ste parametrar överföras ?fragments=true, vilket möjliggör skapandet av en separat PDF-sida för varje mellanliggande tillstĂ„nd av din bild (till exempel fem sidor för fem punkter pĂ„ listan, om de visas en i taget). Detta gör att man kan anvĂ€nda en sĂ„dan PDF för sig sjĂ€lv som en presentation under en förelĂ€sning.

Automatisk byggnation och publicering pÄ webben

Det Àr praktiskt nÀr bilderna samlas automatiskt vid Àndringar i versionskontrollsystemet, och Ànnu mer praktiskt nÀr de automatiskt sammanstÀllda bilderna publiceras pÄ internet för allmÀn anvÀndning. Bilder frÄn internet kan enkelt "spelats upp" för en publik frÄn vilken maskin som helst som Àr ansluten till internet och projektorn.

Eftersom vi arbetar med GitHub, Ă€r ett naturligt val av CI-system TravisCI, och för hosting av avslutade presentationer — github.io. IdĂ©n med github.io Ă€r att allt statiskt innehĂ„ll som placeras i grenen gh-pages av ditt projekt pĂ„ GitHub blir tillgĂ€ngligt pĂ„ adressen .gihub.io/.

Den fullstÀndiga konfigurationsfilen för TravisCI, som inkluderar kompileringen av HTML-versionen av sidan med hjÀlp av Maven, konvertering till PDF med decktape och uppladdning av resultaten till grenen gh-pages för publicering pÄ github.io, ser ut som sÄ.

För att bygga ett sÄdant projekt pÄ TravisCI-sidan mÄste miljövariablerna stÀllas in

  • GH_REF — ett vĂ€rde av typen github.com/inponomarev/csa-hb
  • GH_TOKEN — en Ă„tkomsttoken för GitHub. Den kan erhĂ„llas pĂ„ GitHub i instĂ€llningarna för din profil, Developer Settings -> Personal Access Tokens. Om du publicerar presentationen i ett offentligt repository, rĂ€cker det att ange den enda Ă„tkomstnivĂ„n "Access public repositories" för denna token.
  • GH_USER_EMAIL / GH_USER_NAME — ett par namn/e-post som kommer att anvĂ€ndas för att göra ett push i grenen gh-pages.

SÄledes leder varje kodcommit för presentationen pÄ GitHub till en automatisk ombyggnad av bilderna i HTML- och PDF-format och deras Äteruppladdning pÄ github.io. (SjÀlvklart bör man endast publicera de presentationer pÄ github.io som man slutligen vill göra offentliga.)

Exempel pÄ projekt

Slutligen — lĂ€nkar till nĂ„gra exempelprojekt för presentationer med konfigurerade Maven-skript och CI-konfiguration för Travis-CI, som kan klonas och anvĂ€ndas för att skapa egna presentationsprojekt:

FarvĂ€l, Powerpoint! Jag tror inte att jag nĂ„gonsin kommer att behöva dig för tekniska presentationer 🙂

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster