# HG changeset patch # User Steve Losh # Date 1491315613 -7200 # Node ID a5de24e85f19bc466bef6ac86e7ffb48a5b8df10 # Parent 7dd4cf56894434cfe981650f1f06933c7bfb548a Add lisp-talks bot diff -r 7dd4cf568944 -r a5de24e85f19 Makefile --- a/Makefile Mon Mar 27 08:46:10 2017 +0200 +++ b/Makefile Tue Apr 04 16:20:13 2017 +0200 @@ -20,6 +20,6 @@ hg -R /home/sjl/cl-losh -v pull -u deploy: build/magitek - rsync --exclude=build/magitek --exclude=.hg --exclude=database.sqlite --exclude=corpora -avz . silt:/home/sjl/magitek - ssh silt make -C /home/sjl/magitek update-deps - ssh silt make -C /home/sjl/magitek build/magitek + rsync --exclude=build/magitek --exclude=.hg --exclude=database.sqlite --exclude=corpora -avz . jam:/home/sjl/magitek + ssh jam make -C /home/sjl/magitek update-deps + ssh jam make -C /home/sjl/magitek build/magitek diff -r 7dd4cf568944 -r a5de24e85f19 magitek.asd --- a/magitek.asd Mon Mar 27 08:46:10 2017 +0200 +++ b/magitek.asd Tue Apr 04 16:20:13 2017 +0200 @@ -15,7 +15,7 @@ :fare-quasiquote :fare-quasiquote-readtable :flexi-streams - :html-entities + ;; :html-entities ; fuck my life :iterate :jonathan :losh @@ -41,6 +41,7 @@ (:file "markov") (:module "robots" :components ((:file "git-commands") + (:file "lisp-talks") (:file "hacker-booze") (:file "frantic-barista") (:file "rpg-shopkeeper"))) diff -r 7dd4cf568944 -r a5de24e85f19 package.lisp --- a/package.lisp Mon Mar 27 08:46:10 2017 +0200 +++ b/package.lisp Tue Apr 04 16:20:13 2017 +0200 @@ -43,6 +43,15 @@ :magitek.quickutils) (:export :random-string)) +(defpackage :magitek.robots.lisp-talks + (:use + :cl + :iterate + :losh + :chancery + :magitek.quickutils) + (:export :random-string)) + (defpackage :magitek.robots.rpg-shopkeeper (:use :cl diff -r 7dd4cf568944 -r a5de24e85f19 src/main.lisp --- a/src/main.lisp Mon Mar 27 08:46:10 2017 +0200 +++ b/src/main.lisp Tue Apr 04 16:20:13 2017 +0200 @@ -15,6 +15,11 @@ #'magitek.robots.git-commands:random-string 12)) +(defparameter *lisp-talks* + (make-bot :lisp-talks + #'magitek.robots.lisp-talks:random-string + 12)) + (defparameter *rpg-shopkeeper* (make-bot :rpg-shopkeeper #'magitek.robots.rpg-shopkeeper:random-string @@ -60,4 +65,5 @@ (spinup) (run-bot *frantic-barista*) (run-bot *git-commands*) + (run-bot *lisp-talks*) (run-bot *rpg-shopkeeper*)) diff -r 7dd4cf568944 -r a5de24e85f19 src/robots/hacker-booze.lisp --- a/src/robots/hacker-booze.lisp Mon Mar 27 08:46:10 2017 +0200 +++ b/src/robots/hacker-booze.lisp Tue Apr 04 16:20:13 2017 +0200 @@ -22,10 +22,10 @@ (defparameter *hn-corpus-path* "corpora/hacker-news.txt") (defun firebase-get (url) - (-> url + (-<> url drakma:http-request - (flex:octets-to-string :external-format :utf-8) - (jonathan:parse :as :hash-table))) + (flex:octets-to-string <> :external-format :utf-8) + (jonathan:parse <> :as :hash-table))) (defun hn-top () @@ -45,7 +45,9 @@ (defun hn-text (comment) (-> (gethash "text" comment) sanitize:clean - html-entities:decode-entities)) + ;; this is gone from quicklisp because god hates me + ;; html-entities:decode-entities + )) (defun hn-comments (story-id) diff -r 7dd4cf568944 -r a5de24e85f19 src/robots/lisp-talks.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/robots/lisp-talks.lisp Tue Apr 04 16:20:13 2017 +0200 @@ -0,0 +1,212 @@ +(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))) +