Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
diagramize it
Search
Taras Kalapun
February 07, 2014
Programming
1
1.6k
diagramize it
Presentation about free & open source tools to produce diagrams from textural description
Taras Kalapun
February 07, 2014
Tweet
Share
Other Decks in Programming
See All in Programming
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
560
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
5
8.2k
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
340
型で語るカタ
irof
0
530
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
0
180
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
14k
AI Agent 時代のソフトウェア開発を支える AWS Cloud Development Kit (CDK)
konokenj
5
650
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
180
Porting a visionOS App to Android XR
akkeylab
0
660
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
20k
ニーリーにおけるプロダクトエンジニア
nealle
0
890
テスト駆動Kaggle
isax1015
1
510
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Adopting Sorbet at Scale
ufuk
77
9.5k
Git: the NoSQL Database
bkeepers
PRO
430
65k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Raft: Consensus for Rubyists
vanstee
140
7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Making Projects Easy
brettharned
116
6.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Transcript
DIAGRAMIZE IT TARAS KALAPUN
BLOCK DIAGRAMS
YUML.ME [Customer]<>-orders*>[Order]! [Order]++-0..*>[LineItem]! [Order]-[note:Aggregate root.]
BLOCKDIAG blockdiag {! A -> B -> C -> D;!
A -> E -> F -> G;! }
BLOCKDIAG blockdiag {! WeatherApi [shape = ellipse];! AdMob [shape =
ellipse];! Cloud [shape = cloud];! User [shape = actor];! ! WeatherApi -> Cloud! AdMob -> Cloud! Cloud -> App! App -> User! }
GRAPHVIZ
digraph G {! ranksep = 1! rankdir = TD! node
[! shape = "record"! height = 0.50! fontsize = 10! margin = 0.20,0.05! ]! A2 [! label = "Customer]"! style = "filled"! fillcolor = ""! ]! node [! shape = "record"! height = 0.50! GRAPHVIZ
USE CASE DIAGRAMS
YUML.ME [Customer]-(Make Cup of Tea)! (Make Cup of Tea)<(Add Milk)!
(Make Cup of Tea)>(Add Tea Bag)
GRAPHVIZ digraph G {! rankdir=LR;! ! subgraph clusterUser {label="User"; labelloc="b";
peripheries=0; user};! user [shapefile="stick.png", peripheries=0, style=invis];! login [label="Log In", shape=ellipse];! ! user->login [arrowhead=none];! }
GRAPHVIZ http://martin.elwin.com/blog/2008/05/uml-use-case-diagrams-graphviz/
ACTIVITY DIAGRAMS
YUML.ME (start)->|a|! |a|->(Make Coffee)->|b|! |a|->(Make Breakfast)->|b|! |b|-><c>[want more coffee]->(Make Coffee)!
<c>[satisfied]->(end)
GNU PIC .PS! ellipse "document";! arrow;! box "\fIgpic\fP(1)"! arrow;! box
width 1.2 "\fIgtbl\/\fP(1) or \fIgeqn\/\fP(1)" "(optional)" dashed;! arrow;! box "\fIgtroff\/\fP(1)";! arrow;! ellipse "PostScript"! .PE http://floppsie.comp.glam.ac.uk/Glamorgan/gaius/web/pic.html
GRAPHVIZ
digraph untitled {! rankdir=TD! size="4,4"! edge[fontsize="11" arrowhead=open]! start[shape=circle, label="", style=filled]!
end[shape=doublecircle, label="", style=filled]! action1[shape=box,style=rounded, label="action"]! action2[shape=box,style=rounded, label="action"]! action3[shape=box,style=rounded, label="action"]! if1[shape=diamond, label="decision"]! if2[shape=diamond, label="decision"]! ! start -> action1! action1 -> if1[headport=n]! if1 -> action2[label="condition" tailport=w]! if1 -> action3[taillabel="condition" labeldistance=2.5 tailport=e]! action2 -> if2[headport=w]
ACTDIAG actdiag {! write -> convert -> image! ! lane
user {! label = "User"! write [label = "Writing reST"];! image [label = "Get diagram IMAGE"];! }! lane actdiag {! convert [label = "Convert reST to Image"];! }! }
SEQUENCE DIAGRAMS
WEBSEQUENCEDIAGRAMS A->+B: text! B-->-A: text! A->B: text2
SEQDIAG seqdiag {! browser -> webserver [label = "GET /index.html"];!
browser <-- webserver;! browser -> webserver [label = "POST /blog/comment"];! webserver -> database [label = "INSERT comment"];! webserver <-- database;! browser <-- webserver;! }
PIC2PLOT brew install plotutils! https://github.com/dspinellis/UMLGraph/blob/master/sequence.pic! ! http://projetos.edugraf.ufsc.br/2011/1/convidado/jgzeni/ ProjetoFinal/JogoDeCartas/002/bin/src/UMLGraph-5.4/doc/uml- appa.html!
.PS! ! copy "sequence.pic";! ! boxwid = 1.1;! movewid =
0.5;! ! # Define the objects! object(C,"c:Client");! pobject(T);! object(P,"p:ODBCProxy");! ! # Message sequences! step();! active(C);! cmessage(C,T,":Transaction");! oconstraint("{Transient}");
OTHER COOL DIAGRAMS
NWDIAG
nwdiag {! network dmz {! address = "210.x.x.x/24"! ! //
set multiple addresses (using comma)! web01 [address = "210.x.x.1, 210.x.x.20"];! web02 [address = "210.x.x.2"];! }! network internal {! address = "172.x.x.x/24";! ! web01 [address = "172.x.x.1"];! web02 [address = "172.x.x.2"];! db01;! db02;! }! }
RACKDIAG rackdiag {! // define height of rack! 16U;! !
// define rack items! 1: UPS [2U];! 3: DB Server! 4: Web Server 1 // put 2 units to r 4: Web Server 2! 5: Web Server 3! 5: Web Server 4! 7: Load Balancer! 8: L3 Switch! }
ASCII DITAA +--------+ +-------+ +-------+! | | --+ ditaa +-->
| |! | Text | +-------+ |diagram|! |Document| |!magic!| | |! | {d}| | | | |! +---+----+ +-------+ +-------+! : ^! | Lots of work |! +-------------------------+ http://ditaa.sourceforge.net
GRAPHVIZ IC
digraph G {! graph [rankdir = LR];! ! node[shape=record];! Bar[label="{
\"Bar\"|{<p1>pin 1|<p2> 2|<p3> 3|<p4> 4| <p5> 5} }"];! Foo[label="{ {<data0>data0|<data1>data1|<data2>data2|<data3>data3| <data4>data4}|\"Foo\" |{<out0>out0|<out1>out1|<out2>out2|<GND>gnd| <ex0>ex0|<hi>hi|<lo>lo} }"];! ! Bew[label="{ {<clk>clk|<syn>syn|<mux0>mux0|<mux1>mux1| <signal>signal}|\"Bew\" |{<out0>out0|<out1>out1|<out2>out2} }"];! Bar:p1 -> Foo:data0;! Bar:p2 -> Foo:data1;! Bar:p3 -> Foo:data2;! Bar:p4 -> Foo:data3;! Bar:p5 -> Foo:data4;
THX! Q?