nsdi-presentation/naive-tikz

50 lines
1.8 KiB
Scheme
Executable File

#!/usr/bin/scheme -q
(define (get-random-nodes start stop)
(let [(x (- (random 10.0) 5)) (y (- (random 5.0) 2.5))]
(cond
((= start stop) '())
((< (sqrt (+ (* x x) (* y y))) 1.5) (get-random-nodes start stop))
(#t (cons (list start x y) (get-random-nodes (+ start 1) stop))))))
(define (print-node node type)
(let [(id (car node)) (x (cadr node)) (y (caddr node))]
(format #t "\\node (~a) at (~a, ~a) {\\~a};~%" id x y type)))
(define (print-nodes nodes type)
(map (lambda (node) (print-node node type)) nodes))
(define (select-nodes nodes start stop)
(filter (lambda (node) (and (>= (car node) start) (< (car node) stop))) nodes))
(define-syntax only
(syntax-rules ()
[(_ count body ...)
(begin
(format #t "\\only<~a> {~%" count)
body ...
(format #t "}~%"))]))
(let*
[(starting-nodes (get-random-nodes 0 100))
(still-healthy (select-nodes starting-nodes 0 80))
(broken (select-nodes starting-nodes 80 100))
(new (get-random-nodes 100 120))]
(format #t "\\clip (-5.5, 3) rectangle (5.5, -3.5);")
(format #t "\\node (origin) at (0, 0) {\\compmailr};~%")
(print-nodes still-healthy "compmailr")
(print-nodes broken "compbrok")
(print-nodes new "compnew")
(map (lambda (node) (format #t "\\draw[->, black!60!green] (origin.center) edge (~a.center);~%" (car node))) starting-nodes)
(print-nodes still-healthy "compmailr")
(print-nodes broken "compbrok")
(print-nodes new "compnew")
(format #t "\\node (fail1) at (-2.9, -3.3) {\\includegraphics[scale=0.3]{img/fail.png} BANDWIDTH};")
(format #t "\\node (fail2) at (0, -3.3) {\\includegraphics[scale=0.3]{img/fail.png} COVERAGE};")
(format #t "\\node (fail3) at (2.4, -3.3) {\\includegraphics[scale=0.3]{img/fail.png} DELAY};"))
(format #t "\\node (origin) at (0, 0) {\\compmailr};~%")
(exit)