ืžืฆื’ืช ื›ืงื•ื“, ืื• ืœืžื” ืื ื™ ืœื ืžืฉืชืžืฉ ื™ื•ืชืจ ื‘-Powerpoint

ืžืฆื’ืช ื›ืงื•ื“, ืื• ืœืžื” ืื ื™ ืœื ืžืฉืชืžืฉ ื™ื•ืชืจ ื‘-Powerpoint

ืื ื™ ื—ื•ืฉื‘ ืฉื”ืขื‘ืจืชื™ ืขืฉืจื•ืช ืžืฆื’ื•ืช ืœืขืžื™ืชื™ื, ืœืงื•ื—ื•ืช ื•ื“ื™ื‘ื•ืจ ื‘ืคื ื™ ืงื”ืœ ื‘ืงืจื™ื™ืจืช ื”-IT ืฉืœื™. ื‘ืžืฉืš ืฉื ื™ื ืจื‘ื•ืช, Powerpoint ื”ื™ื™ืชื” ืขื‘ื•ืจื™ ื‘ื—ื™ืจื” ื˜ื‘ืขื™ืช ื•ืืžื™ื ื” ื›ื›ืœื™ ืœื™ื™ืฆื•ืจ ืฉืงืคื™ื. ืื‘ืœ ื”ืฉื ื” ื”ืžืฆื‘ ื”ืฉืชื ื” ืžื‘ื—ื™ื ื” ืื™ื›ื•ืชื™ืช. ืžืคื‘ืจื•ืืจ ืขื“ ืžืื™ ื”ื–ื“ืžืŸ ืœื™ ืœื ืื•ื ื‘ื—ืžื™ืฉื” ื›ื ืกื™ื, ื•ืืช ื”ืฉืงื•ืคื™ื•ืช ืœื“ื•ื—ื•ืช ื”ื™ื” ืฆื•ืจืš ืœื”ื›ื™ืŸ ื‘ื–ืžืŸ ืงืฆืจ, ืืš ื‘ืื™ื›ื•ืช ื’ื‘ื•ื”ื”. ืขืœืชื” ื”ืฉืืœื” ืœื’ื‘ื™ ื”ืืฆืœืช ื—ืœืง ื–ื” ืฉืœ ื”ืขื‘ื•ื“ื” ื”ื ื•ื’ืข ืœืขื™ืฆื•ื‘ ื”ื—ื–ื•ืชื™ ืฉืœ ื”ืฉืงื•ืคื™ื•ืช ืœืื ืฉื™ื ืื—ืจื™ื. ืคืขื ื ื™ืกื™ืชื™ ืœืขื‘ื•ื“ ืขื ืžืขืฆื‘, ืœืฉืœื•ื— ืงื‘ืฆื™ .pptx ื‘ื“ื•ืืจ, ืื‘ืœ ื”ืขื‘ื•ื“ื” ื”ืคื›ื” ืœื›ืื•ืก: ืืฃ ืื—ื“ ืœื ื™ื“ืข ืื™ื–ื• ื’ืจืกื” ืฉืœ ื”ืฉืงื•ืคื™ื•ืช ื”ื™ื "ื”ื—ื“ืฉื” ื‘ื™ื•ืชืจ", ื•ื”ืคืจื™ืกื” "ื–ื–ื”" ื‘ื’ืœืœ ื”ื”ื‘ื“ืœ ื‘-Powerpoint ื’ืจืกืื•ืช ื•ื’ื•ืคื ื™ื ื‘ืžื›ื•ื ื•ืช ืฉืœื ื•. ื•ื”ื—ืœื˜ืชื™ ืœื ืกื•ืช ืžืฉื”ื• ื—ื“ืฉ. ื ื™ืกื™ืชื™ ืืช ื–ื”, ื•ืžืื– ืœื ื—ืฉื‘ืชื™ ืœื—ื–ื•ืจ ืœ-Powerpoint.

ืžื” ืื ื—ื ื• ืจื•ืฆื™ื

ืœืคื ื™ ื›ืฉื ื” ื•ื—ืฆื™ ื”ื—ื‘ืจื” ืฉืœื ื• ื”ืคืกื™ืงื” ืœื”ืฉืชืžืฉ ื‘-Word ืœื™ืฆื™ืจืช ืชื™ืขื•ื“ ืคืจื•ื™ืงื˜ื™ื, ืœืื—ืจ ืฉื ืชืงืœื” ื‘ืื•ืชืŸ ื‘ืขื™ื•ืช: ืœืžืจื•ืช ืฉ-Word ื˜ื•ื‘ ืœื”ืงืœื“ืช ืžืกืžืš ืงื˜ืŸ, ื›ื›ืœ ืฉื”ื ืคื— ื’ื“ืœ, ื ื•ืฆืจื™ื ืงืฉื™ื™ื ื‘ืฉื™ืชื•ืฃ ืคืขื•ืœื” ื•ืงื‘ืœืช ืื™ื›ื•ืช ื’ื‘ื•ื”ื” ืขื™ืฆื•ื‘ ืžืื•ื—ื“. ื”ื‘ื—ื™ืจื” ืฉืœื ื• ื ืคืœื” ืขืœ AsciiDoctor, ื•ืื ื—ื ื• ืœื ืžืคืกื™ืงื™ื ืœืฉืžื•ื— ืขืœ ื”ื‘ื—ื™ืจื” ื”ื–ื•, ืื‘ืœ ื–ื” ื ื•ืฉื ืœืžืืžืจ ื ืคืจื“. ื‘ืขืจืš ื‘ืื•ืชื• ื–ืžืŸ, ืœืžื“ื ื• ืืช ื”ื™ืขื™ืœื•ืช ืฉืœ ืื—ื“ ืžืขืงืจื•ื ื•ืช ื”-DevOps ืฉืœ "ื”ื›ืœ ื›ืงื•ื“", ื›ืš ืฉื”ื‘ื—ื™ืจื” ื‘ื“ืจื™ืฉื•ืช ืœื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื—ื“ืฉื” ืœื™ืฆื™ืจืช ืฉืงื•ืคื™ื•ืช ืžืฆื’ืช ื”ื™ื™ืชื” ื“ื™ ื‘ืจื•ืจื”:

  1. ื”ืžืฆื’ืช ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืงื•ื‘ืฅ ื˜ืงืกื˜ ืจื’ื™ืœ ื‘ืฉืคืช ืกื™ืžื•ืŸ.
  2. ื”ืฉืงืคื™ื ืฉืœื ื• ืขื•ืกืงื™ื ื‘ืคืจื•ื™ืงื˜ื™ ืคื™ืชื•ื—, ื›ืš ืฉื”ืกื™ืžื•ืŸ ืืžื•ืจ ืœื”ืงืœ ืขืœ ื”ื”ื›ื ืกื”, ืžื‘ืœื™ ืœื”ื–ื“ืงืง ืœืžืขืจื›ื•ืช ื—ื™ืฆื•ื ื™ื•ืช
    • ืงื˜ืขื™ ืงื•ื“ ืขื ื”ื“ื’ืฉืช ืชื—ื‘ื™ืจ,
    • ื“ื™ืื’ืจืžื•ืช ืคืฉื•ื˜ื•ืช ื‘ืฆื•ืจื” ืฉืœ ืฆื•ืจื•ืช ื’ื™ืื•ืžื˜ืจื™ื•ืช ื”ืžื—ื•ื‘ืจื•ืช ื‘ื—ืฆื™ื,
    • ื“ื™ืื’ืจืžื•ืช UML, ืชืจืฉื™ืžื™ ื–ืจื™ืžื” ื•ืขื•ื“.
  3. ื™ืฉ ืœืื—ืกืŸ ืืช ื˜ื™ื•ื˜ืช ื”ืžืฆื’ืช ื‘ืžืขืจื›ืช ื‘ืงืจืช ื’ืจืกืื•ืช.
  4. ืื™ืžื•ืช ื•ื”ืจื›ื‘ื” ืฉืœ ืฉืงื•ืคื™ื•ืช ืžื•ื’ืžืจื•ืช ืฆืจื™ืš ืœื”ื™ืขืฉื•ืช ื‘ืžืขืจื›ืช CI.

ื›ื™ื•ื, ืงื™ื™ืžื•ืช ืฉืชื™ ืืคืฉืจื•ื™ื•ืช ื‘ืกื™ืกื™ื•ืช ืœื™ืฆื™ืจืช ืฉืงื•ืคื™ื•ืช ื‘ืฉืคื•ืช ืกื™ืžื•ืŸ: ื—ื‘ื™ืœื” ืžื›ื” ืขื‘ื•ืจ LaTeX ืื• ืื—ืช ืžื”ืžืกื’ืจื•ืช ืœื™ืฆื™ืจืช ืฉืงื•ืคื™ื•ืช ื‘ืืžืฆืขื•ืช HTML/CSS (ืœื—ืฉื•ืฃ ืืช JS, ื”ึถืขึธืจึธื”, deck.js ื•ืจื‘ื™ื ืื—ืจื™ื).

ืœืžืจื•ืช ืฉื”ื ืฉืžื” ืฉืœื™ ื˜ืžื•ื ื” ื‘-LaTeX, ื“ืขืชื™ ื”ื›ืชื™ื‘ื” ืฉื”ื‘ื—ื™ืจื” ื‘ืคืชืจื•ืŸ ืฉืœื ืื”ื™ื” ื”ื™ื—ื™ื“ ืฉื™ืฉืชืžืฉ ื‘ื• ืฆืจื™ื›ื” ืœื”ื™ื•ืช ื‘ืฆื“ ืฉืœ ืคืชืจื•ืŸ ื”ืžื•ื›ืจ ืœืžืขื’ืœ ืจื—ื‘ ื™ื•ืชืจ ืฉืœ ืื ืฉื™ื. ืœื ื›ื•ืœื ืžื›ื™ืจื™ื ืืช LaTeX, ื•ืื ื”ืชืจื’ื•ืœ ื”ื™ื•ืžื™ื•ืžื™ ืฉืœืš ืื™ื ื• ืงืฉื•ืจ ืœื›ืชื™ื‘ืช ืžืืžืจื™ื ืžื“ืขื™ื™ื, ืœื ืกื‘ื™ืจ ืฉื™ื”ื™ื” ืœืš ื–ืžืŸ ืœื˜ื‘ื•ืœ ืืช ืขืฆืžืš ื‘ืขื•ืœื ื”ืขื ืง ื•ื”ืžื•ืจื›ื‘ ืฉืœ ื”ืžืขืจื›ืช ื”ื–ื•.

ืขื ื–ืืช, ืฉืœื™ื˜ื” ื‘-HTML/CSS ื”ื™ื ืœื ื‘ื“ื™ื•ืง ืžื™ื•ืžื ื•ืช ืจื•ื•ื—ืช: ืื ื™, ืœืžืฉืœ, ืจื—ื•ืง ืžืœื”ื™ื•ืช ื‘ืงื™ ื‘ื” ื‘ืื•ืคืŸ ืžืœื. ืœืžืจื‘ื” ื”ืžื–ืœ, AsciiDoctor ื”ืžื•ื›ืจ ืžืžื™ืœื ื‘ื ืœื”ืฆื™ืœ: ืžืžื™ืจ ืืกืงื™ื™ื“ื•ืงื˜ื•ืจ-ืžื’ืœื” ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืฉืงื•ืคื™ื•ืช RevealJS ื‘ืืžืฆืขื•ืช ืกื™ืžื•ืŸ AsciiDoctor. ื•ื–ื” ืงืœ ืœืœืžื•ื“ ื•ื ื’ื™ืฉ ืœื›ื•ืœื!

ื›ื™ืฆื“ ืœืงื•ื“ื“ ืฉืงื•ืคื™ื•ืช

ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ื”ืžื”ื•ืช ืฉืœ ืงื™ื“ื•ื“ ืฉืงื•ืคื™ื•ืช ื‘-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 โ€” ืฉืคื” ื”ืžืืคืฉืจืช ืœืš ืœืชืืจ ื“ื™ืื’ืจืžื•ืช ื’ืจืคื™ื ืขืœ ืกืžืš ืชื™ืื•ืจ ื”ืงื•ื“ืงื•ื“ื™ื ื•ื”ืงืฉืจื™ื ื‘ื™ื ื™ื”ื. 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 ื•ืœืืคื•ืช ื‘ืื’ื™ื ื‘ืชืžื•ื ื•ืช ื‘ืขืžื•ื“ Graphviz ื‘ืื™ื ื˜ืจื ื˜.

ืœื‘ืกื•ืฃ, ืื ืืชื” ืฆืจื™ืš ืœื”ื›ื ื™ืก ืชืจืฉื™ื ื–ืจื™ืžื”, ื“ื™ืื’ืจืžืช ืžื—ืœืงื” ืื• ืชืจืฉื™ื ืกื˜ื ื“ืจื˜ื™ ืื—ืจ ืœืฉืงื•ืคื™ืช, ืื– ืžืขืจื›ืช ืื—ืจืช ื”ืžืฉื•ืœื‘ืช ืขื AsciiDoctor ื™ื›ื•ืœื” ืœื‘ื•ื ืœื”ืฆื™ืœ, PlantUML. ืขืžื™ืชื™ ื ื™ืงื•ืœืื™ ืคื•ื˜ืฉื ื™ืงื•ื‘ ื›ืชื‘ ืขืœ ื”ื™ื›ื•ืœื•ืช ื”ื ืจื—ื‘ื•ืช ืฉืœ PlantUML ืคื•ืกื˜ ื ืคืจื“.

ื”ืคื™ื›ืช ืคืจื•ื™ืงื˜ ื”ืžืฆื’ืช ืœืงื•ื“ ื”ืžืื•ื—ืกืŸ ื‘ืžืขืจื›ืช ื‘ืงืจืช ื’ืจืกืื•ืช ืžืืคืฉืจืช ืœืืจื’ืŸ ืขื‘ื•ื“ื” ืžืฉื•ืชืคืช ืขืœ ื”ืžืฆื’ืช, ืงื•ื“ื ื›ืœ, ืœื”ืคืจื™ื“ ื‘ื™ืŸ ืžืฉื™ืžื•ืช ื™ืฆื™ืจืช ื”ืชื•ื›ืŸ ื•ื”ืขื™ืฆื•ื‘. ืขื™ืฆื•ื‘ ื”ืฉืงื•ืคื™ื•ืช (ื’ื•ืคื ื™ื, ืจืงืขื™ื, ื”ื–ื—ื•ืช) ื‘-RevealJS ืžืชื•ืืจ ื‘ืืžืฆืขื•ืช CSS. ื”ืžื™ื•ืžื ื•ืช ื”ืื™ืฉื™ืช ืฉืœื™ ืขื CSS ืžื•ืขื‘ืจืช ื‘ืฆื•ืจื” ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืขืœ ื™ื“ื™ ื”ื’ื™ืฃ ื”ื–ื” - ืื‘ืœ ื–ื” ืœื ืžืคื—ื™ื“ ื›ืฉื™ืฉ ืื ืฉื™ื ืฉืขื•ื‘ื“ื™ื ืขื CSS ื‘ืฆื•ืจื” ื”ืจื‘ื” ื™ื•ืชืจ ืžื™ื•ืžื ืช ื•ืžื”ื™ืจื” ืžืžื ื™. ื›ืชื•ืฆืื” ืžื›ืš, ืžืกืชื‘ืจ ืฉืขื ื“ื“-ืœื™ื™ืŸ ืฉืžืชืงืจื‘ ื‘ืžื”ื™ืจื•ืช ืœืžืฆื’ืช, ืื ื• ื™ื›ื•ืœื™ื ืœืขื‘ื•ื“ ืขืœ ืงื‘ืฆื™ื ืฉื•ื ื™ื ื‘ื• ื–ืžื ื™ืช ื‘ืืžืฆืขื•ืช Git ื•ืœืคืชื— ืžื”ื™ืจื•ืช ืฉื™ืชื•ืฃ ืคืขื•ืœื” ื‘ืœืชื™ ืืคืฉืจื™ืช ื‘ืขืช ืฉืœื™ื—ืช ืงื‘ืฆื™ .pptx ื‘ื“ื•ืืจ.

ื‘ื ื™ื™ืช ื“ืฃ HTML ืขื ืฉืงื•ืคื™ื•ืช

ืžืงื•ืจื•ืช ื˜ืงืกื˜ ืคืฉื•ื˜ื™ื ื”ื ื ื”ื“ืจื™ื, ืื‘ืœ ืื™ืš ืžืจื›ื™ื‘ื™ื ืื•ืชื ืœืžืฆื’ืช ืขืฆืžื”?

AsciiDoctor ื”ื•ื ืคืจื•ื™ืงื˜ ืฉื ื›ืชื‘ ื‘ืจื•ื‘ื™, ื•ื™ืฉื ืŸ ืžืกืคืจ ื“ืจื›ื™ื ืœื”ืคืขื™ืœ ืื•ืชื•. ืจืืฉื™ืช, ืืชื” ื™ื›ื•ืœ ืœื”ืชืงื™ืŸ ืืช ืฉืคืช Ruby ื•ืœื”ืคืขื™ืœ ืืช asciidoctor ื™ืฉื™ืจื•ืช, ื•ื–ื” ื›ื ืจืื” ื”ื“ื‘ืจ ื”ื›ื™ ืงืจื•ื‘ ืœืžืคืชื—ื™ Ruby.

ืื ืืชื” ืœื ืจื•ืฆื” ืœื”ืชืขืกืง ืขื ื”ืชืงื ืช Ruby, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืชืžื•ื ืช docker asciidoctor/docer-asciidoctor, ืฉืœืชื•ื›ื•, ื‘ืขืช ื”ื”ืฉืงื”, ืชื•ื›ืœ ืœื—ื‘ืจ ืืช ื”ืชื™ืงื™ื” ืขื ืžืงื•ืจื•ืช ื”ืคืจื•ื™ืงื˜ ื‘ืืžืฆืขื•ืช VOLUME ื•ืœืงื‘ืœ ืืช ื”ืชื•ืฆืื” ื‘ืžื™ืงื•ื ื ืชื•ืŸ.

ื”ืืคืฉืจื•ืช ืฉื‘ื—ืจืชื™ ืื•ืœื™ ื ืจืื™ืช ืงืฆืช ืœื ืฆืคื•ื™ื”, ืื‘ืœ ื”ื™ื ื”ื›ื™ ื ื•ื—ื” ืœื™ ื›ืžืคืชื— ื’'ืื•ื•ื”. ื–ื” ืœื ื“ื•ืจืฉ ื”ืชืงื ื” ืฉืœ Ruby ืื• docker, ืื‘ืœ ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืฉืงื•ืคื™ื•ืช ื‘ืืžืฆืขื•ืช ืกืงืจื™ืคื˜ ืฉืœ Maven.

ื”ื ืงื•ื“ื” ื”ื™ื ืฉื”ืคืจื•ื™ืงื˜ ื’'ืจื•ื‘ื™ - ื”ื˜ืžืขืช Java ืฉืœ ืฉืคืช Ruby ื›ืœ ื›ืš ื˜ื•ื‘ื” ืฉื”ื™ื ืžืืคืฉืจืช ืœื”ืจื™ืฅ ื›ืžืขื˜ ื›ืœ ื“ื‘ืจ ืฉื ื•ืฆืจ ืขื‘ื•ืจ Ruby ื‘ืžื›ื•ื ืช Java, ื•ื”ืคืขืœืช AsciiDoctor ื”ื™ื ืื—ื“ ื”ืฉื™ืžื•ืฉื™ื ื”ื ืคื•ืฆื™ื ื‘ื™ื•ืชืจ ืฉืœ JRuby.

ื–ืžื™ื ื•ืช asciidoctor-maven-plugin ืžืืคืฉืจ ืœืš ืœืืกื•ืฃ ืชื™ืขื•ื“ AsciiDoctor ื”ืžื”ื•ื•ื” ื—ืœืง ืžืคืจื•ื™ืงื˜ Java (ื‘ื• ืื ื• ืžืฉืชืžืฉื™ื ื‘ืื•ืคืŸ ืคืขื™ืœ). ื‘ืžืงื‘ื™ืœ, AsciiDoctor ื•-JRuby ืžื•ืจื™ื“ื™ื ืื•ื˜ื•ืžื˜ื™ืช ืขืœ ื™ื“ื™ Maven, ื•-AsciiDoctor ืคื•ืขืœ ื‘ืกื‘ื™ื‘ืช JRuby: ืื™ืŸ ืฆื•ืจืš ืœื”ืชืงื™ืŸ ืฉื•ื ื“ื‘ืจ ืขืœ ื”ืžื›ื•ื ื”! (ืœื ื›ื•ืœืœ ื—ื‘ื™ืœื” graphviz, ื”ื“ืจื•ืฉ ืื ื‘ืจืฆื•ื ืš ืœื”ืฉืชืžืฉ ื‘ื’ืจืคื™ืงื” ืฉืœ GraphViz ืื• PlantUML.) ืคืฉื•ื˜ ืžืงื ืืช ืงื•ื‘ืฆื™ ื”-.adoc ืฉืœืš ื‘ืชื™ืงื™ื™ื” src/main/asciidoc/. ื›ืืŸ ื“ื•ื’ืžื” ืœืคื•ืžื ื™ืงืื™ืกื•ืฃ ืฉืงื•ืคื™ื•ืช ืขื ื“ื™ืื’ืจืžื•ืช.

ื”ืžืจืช ืฉืงื•ืคื™ื•ืช ืœ-PDF

ืœืžืจื•ืช ืฉื’ืจืกืช ื”-HTML ืฉืœ ื”ืฉืงื•ืคื™ื•ืช ื“ื™ ืขืฆืžืื™ืช, ืขื“ื™ื™ืŸ ื™ืฉ ืฆื•ืจืš ื‘ื’ืจืกืช PDF ืฉืœ ื”ืฉืงื•ืคื™ื•ืช. ืจืืฉื™ืช, ืงื•ืจื” ืฉื‘ื›ืžื” ื›ื ืกื™ื ืฉืื™ื ื ืžืกืคืงื™ื ืœื“ื•ื‘ืจ ืืช ื”ืืคืฉืจื•ืช ืœื—ื‘ืจ ืืช ื”ืžื—ืฉื‘ ื”ื ื™ื™ื“ ืฉืœื•, ื”ื ื“ื•ืจืฉื™ื ืฉืงื•ืคื™ื•ืช "ื‘ืคื•ืจืžื˜ pptx ืื• pdf ื‘ืœื‘ื“", ืžื‘ืœื™ ืœืฆืคื•ืช ืฉื”ื ื’ื ื‘-HTML. ืฉื ื™ืช, ื˜ื•ื‘ ืœืฉืœื•ื— ืœืžืืจื’ื ื™ื ื’ืจืกื” ืœื ืขืจื•ื›ื” ืฉืœ ื”ืฉืงื•ืคื™ื•ืช ืฉืœืš ื›ืคื™ ืฉื”ื•ืฆื’ื• ื‘ื“ื•ื—, ื‘ืคื•ืจืžื˜ PDF ืœืคืจืกื•ื ื”ืงื•ื‘ืฅ ื‘ื—ื•ืžืจื™ ื”ื›ื ืก.

ืœืžืจื‘ื” ื”ืžื–ืœ, ื›ืœื™ ื”ืฉื™ืจื•ืช Node.js ืžื˜ืคืœ ื‘ืžืฉื™ืžื” ื–ื•. ื“ื™ืงื˜ื™ื™ืค, ื‘ื ื•ื™ ืขืœ ื‘ืกื™ืก ืžืคืขื™ืœ ื‘ื•ื‘ื•ืช - ืžืขืจื›ื•ืช ืื•ื˜ื•ืžืฆื™ื” ืœื ื™ื”ื•ืœ ื“ืคื“ืคืŸ Chrome. ืืชื” ื™ื›ื•ืœ ืœื”ืžื™ืจ ืžืฆื’ืช RevealJS ืœ-PDF ืขื ื”ืคืงื•ื“ื”

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

ืฉื ื™ ื˜ืจื™ืงื™ื ื‘ืขืช ื”ืฉืงืช ืงืœื˜ืช, ืฉื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื”ืžืฆื™ื ื‘ืืžืฆืขื•ืช ื ื™ืกื•ื™ ื•ื˜ืขื™ื™ื”:

  • ืจื–ื•ืœื•ืฆื™ื” ื‘ืืžืฆืขื•ืช ืคืจืžื˜ืจ -s ื™ืฉ ืœืฆื™ื™ืŸ ืขื ืฉื•ืœื™ื™ื ื›ืคื•ืœื™ื, ืื—ืจืช ืขืœื•ืœื•ืช ืœื”ื™ื•ืช ื‘ืขื™ื•ืช ื‘ืชื•ืฆืื•ืช ื”ื”ืžืจื”

  • ื‘ื›ืชื•ื‘ืช ื”-URL ืฉืœ ื’ืจืกืช ื”-HTML ืฉืœ ื”ืžืฆื’ืช ืืชื” ืฆืจื™ืš ืœื”ืขื‘ื™ืจ ืคืจืžื˜ืจ ?fragments=true, ืฉื™ื™ืฆื•ืจ ื“ืฃ PDF ื ืคืจื“ ืขื‘ื•ืจ ื›ืœ ืžืฆื‘ ื‘ื™ื ื™ื™ื ืฉืœ ื”ืฉืงืฃ ืฉืœืš (ืœื“ื•ื’ืžื”, ื—ืžื™ืฉื” ืขืžื•ื“ื™ื ืขื‘ื•ืจ ื—ืžืฉ ื ืงื•ื“ื•ืช ืชื‘ืœื™ื˜ื™ื ืื ื”ื ืžื•ืฆื’ื™ื ื‘ื–ื” ืื—ืจ ื–ื”). ื–ื” ื™ืืคืฉืจ ืœืš ืœื”ืฉืชืžืฉ ื‘-PDF ื›ื–ื” ื‘ืคื ื™ ืขืฆืžื• ื›ืžืฆื’ืช ื‘ืžื”ืœืš ื“ื•ื—.

ื”ืจื›ื‘ื” ื•ืคืจืกื•ื ืื•ื˜ื•ืžื˜ื™ ื‘ืื™ื ื˜ืจื ื˜

ื–ื” ื ื•ื— ื›ืืฉืจ ืฉืงื•ืคื™ื•ืช ืžืงื•ืคืœื•ืช ืื•ื˜ื•ืžื˜ื™ืช ื›ืืฉืจ ืžืชื‘ืฆืขื™ื ืฉื™ื ื•ื™ื™ื ื‘ืžืขืจื›ืช ื‘ืงืจืช ื”ื’ืจืกืื•ืช, ื•ืขื•ื“ ื™ื•ืชืจ ื ื•ื— ื›ืืฉืจ ืฉืงื•ืคื™ื•ืช ืžืงื•ืคืœื•ืช ืื•ื˜ื•ืžื˜ื™ืช ืžืชืคืจืกืžื•ืช ื‘ืื™ื ื˜ืจื ื˜ ืœืฉื™ืžื•ืฉ ืฆื™ื‘ื•ืจื™. ืฉืงื•ืคื™ื•ืช ืžื”ืื™ื ื˜ืจื ื˜ ื ื™ืชื ื•ืช ืœ"ื ื™ื’ื•ืŸ" ื‘ืงืœื•ืช ืžื•ืœ ืงื”ืœ ืžื›ืœ ืžื›ื•ื ื” ื”ืžื—ื•ื‘ืจืช ืœืื™ื ื˜ืจื ื˜ ื•ืžืงืจืŸ.

ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘-GitHub ื‘ืขื‘ื•ื“ื” ืฉืœื ื•, ื”ื‘ื—ื™ืจื” ื”ื˜ื‘ืขื™ืช ืฉืœ ืžืขืจื›ืช CI ื”ื™ื TravisCI, ื•ืœืื™ืจื•ื— ืžืฆื’ื•ืช ืžื•ื›ื ื•ืช - github.io. ื”ืจืขื™ื•ืŸ ืžืื—ื•ืจื™ github.io ื”ื•ื ืฉื›ืœ ืชื•ื›ืŸ ืกื˜ื˜ื™ ืคื•ืจืกื ื‘ืกื ื™ืฃ gh-pages ืฉืœ ื”ืคืจื•ื™ืงื˜ ืฉืœืš ื‘-GitHub, ื”ื•ืคืš ื–ืžื™ืŸ ื‘- <ะฒะฐัˆะต ะธะผั>.gihub.io/<ะฒะฐัˆ ะฟั€ะพะตะบั‚>.

ืงื•ื‘ืฅ ืชืฆื•ืจื” ืžืœื ืฉืœ TravisCI, ื›ื•ืœืœ ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ ื’ืจืกืช ื”-HTML ืฉืœ ื”ื“ืฃ ื‘ืืžืฆืขื•ืช Maven, ื”ืžืจื” ืœ-PDF ื‘ืืžืฆืขื•ืช decktape, ื•ื”ืขืœืืช ื”ืชื•ืฆืื•ืช ืœืฉืจืฉื•ืจ 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 ื•ืชืฆื•ืจืช CI ืขื‘ื•ืจ Travis-CI, ืฉื ื™ืชืŸ ืœืฉื›ืคืœ ื•ืœื”ืฉืชืžืฉ ื‘ื”ื ื‘ืขืช ื™ืฆื™ืจืช ืคืจื•ื™ืงื˜ื™ ืžืฆื’ืช ืžืฉืœืš:

ืœื”ืชืจืื•ืช Powerpoint! ืื ื™ ืœื ื—ื•ืฉื‘ ืฉืื™ ืคืขื ืื–ื“ืงืง ืœืš ืœืžืฆื’ื•ืช ื˜ื›ื ื™ื•ืช :)

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”