src/robots/lisp-talks.lisp @ a5de24e85f19

Add lisp-talks bot
author Steve Losh <steve@stevelosh.com>
date Tue, 04 Apr 2017 16:20:13 +0200
parents (none)
children 05b19fdfdfb2
(in-package :magitek.robots.lisp-talks)
(named-readtables:in-readtable :chancery)

(defun ? (arg)
  (if (randomp)
    (format nil "~A " arg)
    ""))


(define-string (dialect :distribution :weighted)
  (5 "Arc")
  (5 "Clojurescript")
  (5 "Picolisp")
  (1 "Emacs Lisp")
  (2 "Lisp-Flavored Erlang")
  (10 "Common Lisp")
  (10 "Clojure")
  (10 "Scheme"))

(define-string implementation
  "Racket"
  "Guile"
  "Chicken"
  "Clasp"
  "CLISP"
  "SBCL"
  "ABCL"
  "ECL"
  "CCL")

(define-string language
  implementation
  dialect)

(define-string noun
  "source file"
  "type"
  "form"
  "image"
  "coffee"
  "archive"
  "macro"
  "number"
  "float"
  "class"
  "struct"
  "lambda"
  "compiler macro"
  "sequence"
  "HyperSpec"
  "UltraSpec"
  "network protocol"
  "sufficiently-smart compiler"
  "m-expression"
  "s-expression")

(define-string editor
  "Emacs"
  "Vim"
  "Neovim"
  "Sublime Text"
  "Atom"
  "Notepad"
  "Notepad++"
  "Eclipse"
  "SLIME"
  "NREPL"
  "CIDER"
  "ed"
  "acme"
  "nano"
  "vi"
  "IntelliJ")

(define-string editor-or-language
  editor
  language)

(define-string people
  "Lispers"
  "Schemers"
  "Clojurists"
  "Rich Hickey"
  "the X3J13 committee"
  "teachers"
  "programmers"
  "engineers"
  "students"
  "undergrads"
  "grad students"
  "PhD students")

(define-string activitying
  "evaluating"
  "expanding"
  "refactoring"
  "reading"
  "compiling"
  "recompiling"
  "serializing"
  "typechecking"
  "parsing")

(define-string activityion
  "evaluation"
  "expansion"
  "compilation"
  "recompilation"
  "serialization")

(define-string doer
  "evaluator"
  "expander"
  "reader"
  "compiler"
  "recompiler"
  "serializer"
  "typechecker"
  "parser")

(define-string making
  "writing"
  "making"
  "creating")

(define-string adjective
  "faster"
  "better"
  "portable"
  "easy"
  "simple"
  "safer"
  "complected"
  "extensible"
  "strongly-typed"
  "maintainable"
  "interactive"
  "saner"
  (language :. "-specific"))

(define-string techniques
  "techniques"
  "strategies")


(define-string talk-demo
  ("Paredit for" editor-or-language)
  ("a library for" activitying [noun s] "in" language)
  ("a portable" noun "library for" dialect)
  (activitying [noun s] "in" editor))

(define-string talk-parallel
  (["efficiently" ?] :. "parallelizing" activityion "of" [noun s])
  (["efficiently" ?] :. "parallelizing" activityion "of" [noun s] "in" language))

(define-string talk-teaching
  ("teaching" people adjective activitying techniques)
  ("a masterclass in" making [doer s])
  ("how to teach" people adjective activityion techniques)
  ("lessons learned from a class in" [activitying ?] :. [noun s]))

(define-string talk-better
  (adjective :. "," adjective :. ", and" adjective [noun s])
  ("writing" adjective :. "," adjective language))

(define-string talk-on
  ("on" [noun s])
  ("on" editor-or-language)
  ("on" people))

(define-string talk-writing
  ("writing" adjective dialect)
  ("writing" [adjective a] doer)
  ("writing" adjective [doer s])
  ("writing" [adjective a] doer "in" editor-or-language))

(define-string talk-tricks
  ("stupid" editor "tricks")
  ("stupid" doer "tricks")
  ("one weird trick for" adjective activityion "in" editor-or-language))

(define-string talk-x-in-y
  ("managing" [noun s] "in" language)
  ("dealing with" [noun s] "in" language)
  ("dealing with" activityion "in" language)
  ("DIY" noun :. "-" :. activitying "in" editor-or-language))

(define-string talk-editing
  ("editing" [adjective ?] :. dialect "faster with" editor))


(define-string talk%
  ("demo:" [talk-demo cap])
  talk-editing
  talk-x-in-y
  talk-writing
  talk-on
  talk-teaching
  talk-parallel
  talk-better)

(define-string (talk :distribution :weighted)
  (50 talk%)
  ( 1 ("reflections on" talk%))
  ( 1 (talk% "--" !(+ 5 (random 40)) "years later"))
  ( 1 (talk% :. ", Part" !(format nil "~@R" (+ 1 (random 3))))))


;;;; API ----------------------------------------------------------------------
(defun random-string ()
  (cap (talk)))