I took a break from the day-to-day work (maybe giving Visual Studio’s a timeout will solve it’s “Generation of designer file failed: Unknown server tag…” problem), and noticed jsnell posted a list of SBCL contributors to #lisp, and decided to do some graphing:

Of course, since I’ve never graphed this before, I found 2 bugs. I copied the text from jsnell paste and used cl-ppcre to split it up into data sets. I had to do a little math to get the months to line up nicely with the yearly sums, but it was all pretty straightforward.
Code, excluding the copied text from lisppaste:
(defun make-months ()
(loop for month in '("Jan" "Feb" "Mar" "Apr" "May" "Jun"
"Jul" "Aug" "Sep" "Oct" "Nov" "Dec")
counting T into val
collect (list month (float (/ val 12)))))
(defun yearly-data ()
(let (result)
(cl-ppcre:do-register-groups (year contribs)
("(\\d+):(\\d+)" +yearly-raw-data+)
;;add 1 so the yearly totals line up with
;;december monthly data
(push (list (+ 1 (parse-integer year))
(parse-integer contribs))
result))
result))
(defun monthly-data ()
(let ((months (make-months))
result)
(cl-ppcre:do-register-groups (year monthname contribs)
("(\\d+)-(\\w{3}):(\\d+)" +monthly-raw-data+)
(push (list
(+ (parse-integer year)
(second
(assoc monthname months
:test #'string=)))
(parse-integer contribs))
result))
result))
(defun yearly-graph ()
(with-line-chart (600 400)
(add-series "Yearly Contributors" (yearly-data))
(add-series "Monthly Contributors" (monthly-data))
;;so the yearly totals line up, the data is offset by 1
(set-axis :x nil :draw-gridlines-p nil :data-interval 1
:label-formatter #'(lambda (y)
(princ-to-string (1- y))))
(set-axis :y nil)
(save-file "yearly.png")))
5 Comments