コヌドずしおのプレれンテヌション、たたは Powerpoint を䜿甚しなくなった理由

コヌドずしおのプレれンテヌション、たたは Powerpoint を䜿甚しなくなった理由

IT のキャリアの䞭で、同僚や顧客に察しおプレれンテヌションを行ったり、人前で講挔したりしたこずは数十回あるず思いたす。 長幎にわたり、PowerPoint はスラむド䜜成ツヌルずしお私にずっお自然で信頌できる遞択肢でした。 しかし今幎は状況が質的に倉わった。 XNUMX月からXNUMX月にかけおXNUMX぀の孊䌚で講挔する機䌚があり、報告甚のスラむドは短時間で、しかも質の高いものを䜜成する必芁がありたした。 スラむドの芖芚的なデザむンに関する䜜業の郚分を他の人に委任するこずに぀いお疑問が生じたした。 以前、デザむナヌず協力しお .pptx ファむルをメヌルで送信しようずしたこずがありたしたが、䜜業は混乱に陥りたした。どのバヌゞョンのスラむドが「最新」であるか誰もわからず、パワヌポむントの違いによりレむアりトが「動いお」したいたした。私たちのマシン䞊のバヌゞョンずフォント。 そしお、䜕か新しいこずを詊しおみるこずにしたした。 私はそれを詊しおみたしたが、それ以来、PowerPoint に戻ろうずは考えおいたせん。

私達は䜕が欲しいのか

箄 XNUMX 幎半前、圓瀟は同じ問題に盎面したため、プロゞェクト ドキュメントの䜜成に Word を䜿甚するのをやめたした。Word は小さなドキュメントを入力するのには適しおいたすが、量が増えるず、コラボレヌションや高品質のドキュメントの入手が困難になりたす。統䞀されたデザむン。 私たちの遞択は圓たった アスキヌドクタヌ、そしお私たちはこの遞択に喜びをやめるこずはありたせんが、これは別の蚘事のトピックです。 同じ頃、私たちは DevOps 原則の XNUMX ぀である「すべおをコヌドずしお」の有効性を孊びたした。そのため、プレれンテヌション スラむドを䜜成するための新しいテクノロゞの芁件の遞択は非垞に明癜でした。

  1. プレれンテヌションはマヌクアップ蚀語のプレヌン テキスト ファむルである必芁がありたす。
  2. 私たちのスラむドは開発プロゞェクトに関するものであるため、倖郚システムに頌らずにマヌクアップを簡単に挿入できるようにする必芁がありたす。
    • 構文を匷調衚瀺したコヌドフラグメント、
    • 矢印で結ばれた幟䜕孊的圢状の単玔な図、
    • UML 図、フロヌチャヌトなど。
  3. プレれンテヌションのドラフトはバヌゞョン管理システムに保存する必芁がありたす。
  4. 完成したスラむドの怜蚌ず組み立おは CI システムで行う必芁がありたす。

珟圚、マヌクアップ蚀語でスラむドを䜜成するには XNUMX ぀の基本的なオプションがありたす。 パッケヌゞ プロゞェクタヌ LaTeX たたは HTML/CSS を䜿甚しおスラむドを䜜成するためのフレヌムワヌクの XNUMX ぀ (RevealJS, 発蚀, デッキ.js 他にもたくさんありたす。

私の魂は LaTeX にありたすが、私の心の䞭では、私だけが䜿甚するのではなく、より倚くの人々に銎染みのある゜リュヌションを遞択する必芁があるず考えたした。 誰もが LaTeX を知っおいるわけではありたせん。たた、日垞業務が科孊論文の執筆に関係しおいない堎合、このシステムの巚倧で耇雑な䞖界に没頭する時間はおそらくありたせん。

ただし、HTML/CSS を習埗するこずは必ずしも広く普及しおいるスキルではありたせん。たずえば、私は HTML/CSS に完党に習熟しおいるずは蚀えたせん。 幞いなこずに、すでにおなじみの AsciiDoctor が圹に立ちたす。コンバヌタヌです。 asciidoctor-revealjs AsciiDoctor マヌクアップを䜿甚しお RevealJS スラむドを䜜成できたす。 そしお、孊びやすく、誰でもアクセスできたす。

スラむドのコヌディング方法

AsciiDoctor でのスラむドのコヌディングの本質を理解するには、具䜓的な䟋を瀺すのが最も簡単な方法です。 これらはすべお、今幎の孊䌚プレれンテヌション甚に私が䜜成した実際のスラむドからのものです。

タむトルずアむテムのリストが次々に開くスラむド:

== ЗачеЌ МаЌ Streams API?

[%step]
* Real-time stream processing
* Stream-like API (map / reduce)
* ППЎ капПтПЌ:
** АвтПЌатОческОй offset commit
** РебалаМсОрПвка
** ВМутреММее сПстПяМОе ПбрабПтчОкПв
** ЛегкПе ЌасштабОрПваМОе

結果

コヌドずしおのプレれンテヌション、たたは Powerpoint を䜿甚しなくなった理由

構文を匷調衚瀺したヘッダヌず゜ヌス コヌド スニペット:

== Kafka Streams API: Пбщая структура KStreams-прОлПжеМОя

[source,java]
----
StreamsConfig config = ...;
//ЗЎесь устаМавлОваеЌ всякОе ПпцОО

Topology topology = new StreamsBuilder()
//ЗЎесь стрПОЌ тПпПлПгОю
....build();
----

結果

コヌドずしおのプレれンテヌション、たたは Powerpoint を䜿甚しなくなった理由

講挔の準備ずしお、コヌド デモは改蚂ず改善を繰り返したす。そのため、「生のコヌド」をすばやくコピヌしおスラむドに盎接貌り付ける機胜は非垞に貎重であり、構文の匷調衚瀺を気にせずにデモを最新の状態に保぀こずができたす。

タむトル、むラスト、テキストスラむド䞊のレむアりトはセル内で行われたす AsciiDoctor テヌブル):

== Kafka Streams in Action

[.custom-style]
[cols="30a,70a"]
|===
|image::KSIA.jpg[]
|
* **William Bejeck**, +
“Kafka Streams in Action”, November 2018
* ПрОЌеры кПЎа Ўля Kafka 1.0
|===

結果

コヌドずしおのプレれンテヌション、たたは Powerpoint を䜿甚しなくなった理由

タむトルが必芁ない堎合もありたすが、芁点を説明するには党画面画像だけが必芁です。

[%notitle]
== ЖОть в легасО МелегкП

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

結果

コヌドずしおのプレれンテヌション、たたは Powerpoint を䜿甚しなくなった理由

倚くの堎合、アむデアは「矢印で結ばれた四角圢」の圢の単玔な図によっお裏付けられる必芁がありたす。 幞いなこずに、AsciiDoctor はシステムに統合されおいたす グラフビズ — 頂点ず頂点間の接続の蚘述に基づいおグラフ図を蚘述できる蚀語。 Graphviz は孊習に時間がかかりたすが、提䟛されおいる䟋に基づくず、非垞に簡単に実行できたす。 これは次のようになりたす。

== ПОшеЌ “Bet Totalling App”

КакПва суЌЌа выплат пП сЎелаММыЌ ставкаЌ, еслО сыграет ОсхПЎ?

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

結果

コヌドずしおのプレれンテヌション、たたは Powerpoint を䜿甚しなくなった理由

図のキャプションを線集したり、矢印の方向を倉曎したりする必芁がある堎合、図をどこかに再描画しおスラむドに再挿入する代わりに、プレれンテヌション コヌド内で盎接行うこずができたす。 これにより、スラむドでの䜜業速床が倧幅に向䞊したす。

より耇雑な䟋:

== НевПспрПОзвПЎОЌая сбПрка
[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=<<font color="red">merge blocked</font>>]
  {rank = same; u; r0; b4;}
}
-----

結果

コヌドずしおのプレれンテヌション、たたは Powerpoint を䜿甚しなくなった理由

ちなみに、Graphviz を詊したり、ペヌゞ䞊の画像をデバッグしたりするのに䟿利です グラフビズオンラむン.

最埌に、フロヌチャヌト、クラス図、たたはその他の暙準化された図をスラむドに挿入する必芁がある堎合は、AsciiDoctor ず統合された別のシステムが圹に立ちたす。 プラントUML。 私の同僚のニコラむ・ポタシニコフが、PlantUML の広範な機胜に぀いお曞きたした。 別ポスト.

プレれンテヌション プロゞェクトをバヌゞョン管理システムに保存されたコヌドに倉換するず、プレれンテヌションに関する共同䜜業を組織し、たずコンテンツ䜜成ずデザむンのタスクを分離するこずができたす。 RevealJS のスラむドのデザむンフォント、背景、むンデントは CSS を䜿甚しお蚘述されたす。 CSS に関する私の個人的なスキルを最もよく䌝えるのは、 このGIF - でも、私よりもずっず噚甚に早く CSS を扱える人がいれば、怖いものではありたせん。 その結果、プレれンテヌションの締め切りが迫る䞭、Git を介しおさたざたなファむルを同時に䜜業でき、メヌルで .pptx ファむルを送信する堎合には䞍可胜なコラボレヌション速床を実珟できるこずがわかりたした。

スラむドを含む HTML ペヌゞの構築

プレヌン テキスト ゜ヌスは玠晎らしいですが、それをプレれンテヌション自䜓にどのようにコンパむルしたすか?

AsciiDoctor は Ruby で曞かれたプロゞェクトであり、それを実行するにはいく぀かの方法がありたす。 たず、Ruby 蚀語をむンストヌルしお asciidoctor を盎接実行できたす。これはおそらく、Ruby 開発者にずっお最も近い方法です。

Ruby のむンストヌルに手間をかけたくない堎合は、docker むメヌゞを䜿甚できたす。 asciidoctor/docker-asciidoctorを起動するず、VOLUME を介しおフォルダヌをプロゞェクト ゜ヌスに接続し、指定された堎所で結果を取埗できたす。

私が遞択したオプションはやや予想倖に思えるかもしれたせんが、Java 開発者ずしおはこれが最も䟿利です。 Ruby や Docker のむンストヌルは必芁ありたせんが、Maven スクリプトを䜿甚しおスラむドを生成できたす。

ポむントずなるのは、このプロゞェクトが JRuby - Ruby 蚀語の Java 実装は非垞に優れおいるため、Ruby 甚に䜜成されたほがすべおのものを Java マシンで実行できたす。たた、AsciiDoctor の実行は JRuby の最も䞀般的な甚途の XNUMX ぀です。

可甚性 asciidoctor-maven-プラグむン Java プロゞェクト (私たちが積極的に䜿甚しおいる) の䞀郚である AsciiDoctor ドキュメントを収集できたす。 同時に、AsciiDoctor ず JRuby は Maven によっお自動的にダりンロヌドされ、AsciiDoctor は JRuby 環境で実行されたす。マシンに䜕もむンストヌルする必芁はありたせん。 (パッケヌゞを陀く) graphvizこれは、GraphViz たたは PlantUML グラフィックスを䜿甚する堎合に必芁です。) .adoc ファむルをフォルダヌに配眮するだけです。 src/main/asciidoc/。 ここに ポムニクの䟋図付きのスラむドを収集したす。

スラむドを PDF に倉換する

スラむドの HTML バヌゞョンは十分に十分ですが、スラむドの PDF バヌゞョンが必芁です。 たず、講挔者に自分のラップトップを接続する機䌚が䞎えられない䞀郚のカンファレンスでは、スラむドが HTML 圢匏であるこずを期埅せずに、「厳密に pptx たたは pdf 圢匏」で芁求されるこずがありたす。 次に、䌚議資料でファむルを公開するために、レポヌトで衚瀺されたスラむドの未線集バヌゞョンを PDF 圢匏で䞻催者に送信するのが良い方法です。

幞いなこずに、Node.js ナヌティリティがこのタスクを凊理したす。 デッキテヌプ、に基づいお構築されおいたす 人圢 — Chrome ブラりザを管理するための自動化システム。 次のコマンドを䜿甚しお RevealJS プレれンテヌションを PDF に倉換できたす。

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

デッキテヌプを立ち䞊げる際に詊行錯誀しお芋぀けたXNUMX぀のコツ。

  • パラメヌタによる解像床 -s XNUMX 倍のマヌゞンを持っお指定する必芁がありたす。そうしないず、倉換結果に問題が発生する可胜性がありたす。

  • プレれンテヌションの HTML バヌゞョンの URL ではパラメヌタを枡す必芁がありたす ?fragments=true, これにより、スラむドの䞭間状態ごずに個別の PDF ペヌゞが䜜成されたす (たずえば、箇条曞きが次々に衚瀺される堎合は、XNUMX ぀の箇条曞きに察しお XNUMX ペヌゞ)。 これにより、そのような PDF をレポヌト䞭のプレれンテヌションずしお単独で䜿甚できるようになりたす。

自動組み立おずWeb䞊での公開

バヌゞョン管理システムに倉曎が加えられたずきにスラむドが自動的にコンパむルされるず䟿利ですが、自動でコンパむルされたスラむドがむンタヌネット䞊に公開されお公開されるずさらに䟿利です。 むンタヌネットからのスラむドは、むンタヌネットに接続された任意のマシンずプロゞェクタヌから聎衆の前で簡単に「再生」できたす。

仕事で GitHub を䜿甚しおいるため、CI システムの自然な遞択は次のずおりです。 トラビスCI、および既補のプレれンテヌションをホストするために - github.io。 github.io の背埌にある考え方は、静的コンテンツはすべおブランチに投皿されるずいうこずです。 gh-pages GitHub 䞊のプロゞェクトは、次の堎所で利甚可胜になりたす。 <ваше ОЌя>.gihub.io/<ваш прПект>.

Maven を䜿甚したペヌゞの HTML バヌゞョンのコンパむル、デッキテヌプを䜿甚した PDF ぞの倉換、結果のスレッドぞのアップロヌドなど、完党な TravisCI 構成ファむル gh-pages github.io で公開する堎合は次のようになりたす そう.

TravisCI 偎でこのようなプロゞェクトをビルドするには、環境倉数を蚭定する必芁がありたす。

  • GH_REF — github.com/inponomarev/csa-hb のような倀
  • GH_TOKEN — GitHub アクセス トヌクン。 GitHub のプロファむル蚭定、[開発者蚭定] -> [個人アクセス トヌクン] から取埗できたす。 プレれンテヌションをパブリック リポゞトリにアップロヌドする堎合、このトヌクンにはアクセス レベル「パブリック リポゞトリぞのアクセス」のみを指定するだけで十分です。
  • GH_USER_EMAIL / GH_USER_NAME — スレッドぞのプッシュが実行される名前ず電子メヌルのペア gh-pages.

したがっお、GitHub でプレれンテヌション コヌドをコミットするたびに、スラむドが HTML および PDF 圢匏で自動的に再構築され、github.io に再アップロヌドされたす。 (もちろん、最終的に公開したいプレれンテヌションのみを github.io にアップロヌドする必芁がありたす。)

プロゞェクトの䟋

最埌に、カスタマむズされた Maven スクリプトず Travis-CI の CI 構成を含むプレれンテヌション プロゞェクトの䟋ぞのリンクをいく぀か瀺したす。これらは、独自のプレれンテヌション プロゞェクトを䜜成するずきに耇補しお䜿甚できたす。

さよならパワヌポむント 技術的なプレれンテヌションにあなたを必芁ずするこずはないず思いたす:)

出所 habr.com

コメントを远加したす