|
| 1 | +#lang racket/base |
| 2 | +(require racket/list |
| 3 | + racket/date |
| 4 | + racket/draw |
| 5 | + racket/class |
| 6 | + pict) |
| 7 | + |
| 8 | +(provide alog-plots) |
| 9 | + |
| 10 | +(define scales '()) |
| 11 | +(define (learn-scale! as bs) |
| 12 | + (for ([a (in-list as)] |
| 13 | + [b (in-list bs)]) |
| 14 | + (set! scales (cons (/ a b) scales))) |
| 15 | + as) |
| 16 | +(define (use-scale bs) |
| 17 | + (define s (/ (apply + scales) (length scales))) |
| 18 | + (for/list ([b (in-list bs)]) |
| 19 | + (* b s))) |
| 20 | + |
| 21 | +(define alog2-times |
| 22 | + (list |
| 23 | + (list '(2018 12 6) |
| 24 | + '(245.54 |
| 25 | + 4.69 |
| 26 | + 21.16 |
| 27 | + 59.86 |
| 28 | + 93.34 |
| 29 | + 171.27 |
| 30 | + 95.77) |
| 31 | + '(508.48 |
| 32 | + 15.37 |
| 33 | + 37.51 |
| 34 | + 59.71 |
| 35 | + 150.3 |
| 36 | + 176.41 |
| 37 | + 143.08)) |
| 38 | + (list '(2019 1 19) |
| 39 | + '(226.43 |
| 40 | + 4.53 |
| 41 | + 20.24 |
| 42 | + 59.76 |
| 43 | + 88.13 |
| 44 | + 150.26 |
| 45 | + 92.82) |
| 46 | + '(486.16 |
| 47 | + 14.57 |
| 48 | + 34.2 |
| 49 | + 63.13 |
| 50 | + 139.7 |
| 51 | + 173.36 |
| 52 | + 127.29)) |
| 53 | + #; |
| 54 | + (list '(2019 1 27) |
| 55 | + '(224 |
| 56 | + 4.56 |
| 57 | + 20.98 |
| 58 | + 59.8 |
| 59 | + 92.59 |
| 60 | + 159.78 |
| 61 | + 97.79) |
| 62 | + '(509.96 |
| 63 | + 11.84 |
| 64 | + 35.48 |
| 65 | + 85.69 |
| 66 | + 142.56 |
| 67 | + 180.47 |
| 68 | + 134.55)) |
| 69 | + (list '(2019 6 20) ; 7.3 |
| 70 | + (learn-scale! |
| 71 | + '(231.18 ; original |
| 72 | + 4.84 |
| 73 | + 20.68 |
| 74 | + 59.87 |
| 75 | + 91.16 |
| 76 | + 164.89 |
| 77 | + 95) |
| 78 | + '(229.03 ; newer |
| 79 | + 4.51 |
| 80 | + 17.82 |
| 81 | + 46.05 |
| 82 | + 83.19 |
| 83 | + 158.38 |
| 84 | + 85.36)) |
| 85 | + '(320.7 |
| 86 | + 6.66 |
| 87 | + 25.44 |
| 88 | + 60.57 |
| 89 | + 93.78 |
| 90 | + 185.25 |
| 91 | + 108.58)) |
| 92 | + (list '(2019 10 18) ; 7.4 |
| 93 | + (learn-scale! |
| 94 | + '(223.05 ; original |
| 95 | + 4.37 |
| 96 | + 19.47 |
| 97 | + 46.73 |
| 98 | + 89.16 |
| 99 | + 159.05 |
| 100 | + 88.11) |
| 101 | + '(207.77 ; newer |
| 102 | + 3.72 |
| 103 | + 16.49 |
| 104 | + 59.69 |
| 105 | + 71.97 |
| 106 | + 137.55 |
| 107 | + 75.10)) |
| 108 | + (learn-scale! |
| 109 | + '(320.07 ; original |
| 110 | + 6.7 |
| 111 | + 24.21 |
| 112 | + 58.6 |
| 113 | + 83.57 |
| 114 | + 150.12 |
| 115 | + 97.93) |
| 116 | + '(266.55 ; newer |
| 117 | + 5.68 |
| 118 | + 20.68 |
| 119 | + 49.53 |
| 120 | + 77.72 |
| 121 | + 133.56 |
| 122 | + 85.77))) |
| 123 | + (list '(2020 02 14) |
| 124 | + (use-scale |
| 125 | + '(207.70 |
| 126 | + 3.72 |
| 127 | + 16.97 |
| 128 | + 59.52 |
| 129 | + 74.77 |
| 130 | + 130.26 |
| 131 | + 76.01)) |
| 132 | + (use-scale |
| 133 | + '(234.99 |
| 134 | + 4.37 |
| 135 | + 16.71 |
| 136 | + 62.67 |
| 137 | + 66.75 |
| 138 | + 93.61 |
| 139 | + 73.39))))) |
| 140 | + |
| 141 | +(define alog2-labels |
| 142 | + '("build" |
| 143 | + "df-test" |
| 144 | + "db-test" |
| 145 | + "db-upgrade-test" |
| 146 | + "trends-test" |
| 147 | + "aggregate-test" |
| 148 | + "fit-test")) |
| 149 | + |
| 150 | +(define (stamp->seconds l) |
| 151 | + (find-seconds 0 0 0 (caddr l) (cadr l) (car l))) |
| 152 | + |
| 153 | +(define (date->pict dt) |
| 154 | + (define mo |
| 155 | + (case (cadr dt) |
| 156 | + [(12) "Dec"] |
| 157 | + [(10) "Oct"] |
| 158 | + [(6) "Jun"] |
| 159 | + [(1) "Jan"] |
| 160 | + [(2) "Feb"])) |
| 161 | + (vc-append 1 |
| 162 | + (text (format "~a" (car dt)) 'swiss 12) |
| 163 | + (text mo 'swiss 12))) |
| 164 | + |
| 165 | +(define (plots) |
| 166 | + (define dot (filled-ellipse 20 20)) |
| 167 | + (for/list ([label (in-list alog2-labels)] |
| 168 | + [i (in-naturals)]) |
| 169 | + (define start-x (stamp->seconds (car (car alog2-times)))) |
| 170 | + (define end-x (stamp->seconds (car (last alog2-times)))) |
| 171 | + (define xs (for/list ([at (in-list alog2-times)]) |
| 172 | + (stamp->seconds (car at)))) |
| 173 | + (define r-ys (for/list ([at (in-list alog2-times)]) |
| 174 | + (list-ref (cadr at) i))) |
| 175 | + (define rcs-ys (for/list ([at (in-list alog2-times)]) |
| 176 | + (list-ref (caddr at) i))) |
| 177 | + (define hi-y (* 1.1 (apply max (append r-ys rcs-ys)))) |
| 178 | + (define H 250) |
| 179 | + (define W 400) |
| 180 | + (define-values (r rcs) |
| 181 | + (for/fold ([r null] |
| 182 | + [rcs null]) |
| 183 | + ([x (in-list xs)] |
| 184 | + [r-y (in-list r-ys)] |
| 185 | + [rcs-y (in-list rcs-ys)]) |
| 186 | + (define dx (* (- x start-x) (/ W (- end-x start-x)))) |
| 187 | + (values (cons (cons dx |
| 188 | + (- H (* r-y (/ H hi-y)))) |
| 189 | + r) |
| 190 | + (cons (cons dx |
| 191 | + (- H (* rcs-y (/ H hi-y)))) |
| 192 | + rcs)))) |
| 193 | + (define p |
| 194 | + (dc (lambda (dc x y) |
| 195 | + (define p (send dc get-pen)) |
| 196 | + (send dc draw-line x y x (+ y H)) |
| 197 | + (send dc draw-line x (+ y H) (+ x W) (+ y H)) |
| 198 | + (send dc set-pen (make-pen #:color "red" #:width 5)) |
| 199 | + (send dc draw-lines r x y) |
| 200 | + (send dc set-pen (make-pen #:color "blue" #:width 5)) |
| 201 | + (send dc draw-lines rcs x y) |
| 202 | + (send dc set-pen p)) |
| 203 | + W H)) |
| 204 | + (define q (for/fold ([p p]) ([x (in-list (reverse (map car r)))] |
| 205 | + [at (in-list alog2-times)]) |
| 206 | + (define dt (car at)) |
| 207 | + (define lbl (vc-append (vline 0 5) (date->pict dt))) |
| 208 | + (pin-over p |
| 209 | + x H |
| 210 | + (inset lbl (* -1/2 (pict-width lbl)) 0)))) |
| 211 | + (define (add-label p lbl pts) |
| 212 | + (define left? (> (/ (abs (- (cdr (last r)) (cdr (last rcs)))) H) 0.03)) |
| 213 | + (cond |
| 214 | + [left? |
| 215 | + (pin-over p |
| 216 | + (- (car (last pts)) 5 (pict-width lbl)) (- (cdr (last pts)) 5) |
| 217 | + lbl)] |
| 218 | + [else |
| 219 | + (pin-over p |
| 220 | + (+ (car (first pts)) 5) (- (cdr (first pts)) 5) |
| 221 | + lbl)])) |
| 222 | + (let* ([q (add-label q (colorize (text "R/BC" '(bold . swiss) 12) "red") r)] |
| 223 | + [q (add-label q (colorize (text "R/CS" '(bold . swiss) 12) "blue") rcs)] |
| 224 | + [q (rt-superimpose q (text label 'swiss 24))] |
| 225 | + [q (refocus (ht-append (text (format "~a s " (inexact->exact (round hi-y))) 'swiss 12) |
| 226 | + q) |
| 227 | + q)]) |
| 228 | + (inset q 45 0 35 40)))) |
| 229 | + |
| 230 | +(define (alog-plots) |
| 231 | + (define l (plots)) |
| 232 | + (scale (table 2 |
| 233 | + (cons (car l) (cons (blank) (cdr l))) |
| 234 | + cc-superimpose cc-superimpose |
| 235 | + 12 12) |
| 236 | + 0.6)) |
| 237 | + |
| 238 | +(module+ main |
| 239 | + (require slideshow) |
| 240 | + (for-each (lambda (p) (slide (scale p 2))) (plots))) |
0 commit comments