# HG changeset patch # User Steve Losh # Date 1509817789 14400 # Node ID 0cd848f6023075cebdddeb34ec4f0f9c4c8434cb # Parent bb25eaad4d17e0ba5c3909d8a8c3a38b90463a80 Expunge Roswell diff -r bb25eaad4d17 -r 0cd848f60230 Makefile --- a/Makefile Sat Nov 04 13:49:42 2017 -0400 +++ b/Makefile Sat Nov 04 13:49:49 2017 -0400 @@ -1,4 +1,4 @@ -.PHONY: vendor binary +.PHONY: vendor binary clean # Vendor ---------------------------------------------------------------------- vendor/quickutils.lisp: vendor/make-quickutils.lisp @@ -6,20 +6,27 @@ vendor: vendor/quickutils.lisp +# Clean ----------------------------------------------------------------------- +clean: + rm -rf bin # Build ----------------------------------------------------------------------- lisps := $(shell ffind '\.(asd|lisp|ros)$$') -binary: build/magitek +binary: bin/magitek -build/magitek: $(lisps) - ros build build/magitek.ros +bin/magitek: $(lisps) + sbcl --load "src/build.lisp" +# Deploy ---------------------------------------------------------------------- + +# Server update-deps: - hg -R /home/sjl/chancery -v pull -u - hg -R /home/sjl/cl-losh -v pull -u + hg -R /home/sjl/lib/cl-losh -v pull -u + hg -R /home/sjl/lib/chancery -v pull -u +# Local deploy: 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 + rsync --exclude=bin --exclude=.hg --exclude=database.sqlite -avz . jam:/home/sjl/magitek + ssh jam make -C /home/sjl/magitek update-deps binary + diff -r bb25eaad4d17 -r 0cd848f60230 build/magitek.ros --- a/build/magitek.ros Sat Nov 04 13:49:42 2017 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -#!/bin/sh -#|-*- mode:lisp -*-|# -#| -exec ros -Q -- $0 "$@" -|# - - -(unless (find-package :ap) - (ql:quickload '(:magitek) :silent t)) - -(declaim (optimize (debug 2) (safety 2) (speed 1))) - -(defun main (&rest argv) - (declare (ignore argv)) - (setf *random-state* (make-random-state t)) - (magitek:main) - t) diff -r bb25eaad4d17 -r 0cd848f60230 magitek.asd --- a/magitek.asd Sat Nov 04 13:49:42 2017 -0400 +++ b/magitek.asd Sat Nov 04 13:49:49 2017 -0400 @@ -22,6 +22,11 @@ ) + :defsystem-depends-on (:deploy) + :build-operation "deploy-op" + :build-pathname "magitek" + :entry-point "magitek:main" + :serial t :components ((:module "vendor" :serial t :components ((:file "quickutils-package") diff -r bb25eaad4d17 -r 0cd848f60230 src/build.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/build.lisp Sat Nov 04 13:49:49 2017 -0400 @@ -0,0 +1,6 @@ +(ql:quickload '(:deploy :magitek)) + +;; (deploy:define-resource-directory assets "assets/") + +(sb-ext:gc :full t) +(asdf:operate :build-op :magitek) diff -r bb25eaad4d17 -r 0cd848f60230 src/main.lisp --- a/src/main.lisp Sat Nov 04 13:49:42 2017 -0400 +++ b/src/main.lisp Sat Nov 04 13:49:49 2017 -0400 @@ -41,7 +41,7 @@ (finding (funcall generator) :such-that #'tt-tweetable-p))) -(defun run-bot (bot &key (force nil)) +(defun run-bot (bot &key (force nil) (dry nil)) (with-bot (bot) (format t "Running ~S~%" name) (when (or force @@ -52,8 +52,9 @@ (progn (format t "Tweeting as ~S: ~S~%" name tweet) (db-insert-tweet name tweet) - (tt-tweet name tweet) - (sleep 5.0))))))) + (unless dry + (tt-tweet name tweet) + (sleep 5.0)))))))) (defun spinup () diff -r bb25eaad4d17 -r 0cd848f60230 vendor/make-quickutils.lisp --- a/vendor/make-quickutils.lisp Sat Nov 04 13:49:42 2017 -0400 +++ b/vendor/make-quickutils.lisp Sat Nov 04 13:49:49 2017 -0400 @@ -4,18 +4,14 @@ "quickutils.lisp" :utilities '( - :compose :curry :ensure-boolean :ensure-gethash - :ensure-list :n-grams :once-only :rcurry - :read-file-into-string :symb :with-gensyms - :write-string-into-file ) :package "MAGITEK.QUICKUTILS") diff -r bb25eaad4d17 -r 0cd848f60230 vendor/quickutils.lisp --- a/vendor/quickutils.lisp Sat Nov 04 13:49:42 2017 -0400 +++ b/vendor/quickutils.lisp Sat Nov 04 13:49:49 2017 -0400 @@ -2,7 +2,7 @@ ;;;; See http://quickutil.org for details. ;;;; To regenerate: -;;;; (qtlc:save-utils-as "quickutils.lisp" :utilities '(:COMPOSE :CURRY :ENSURE-BOOLEAN :ENSURE-GETHASH :ENSURE-LIST :N-GRAMS :ONCE-ONLY :RCURRY :READ-FILE-INTO-STRING :SYMB :WITH-GENSYMS :WRITE-STRING-INTO-FILE) :ensure-package T :package "MAGITEK.QUICKUTILS") +;;;; (qtlc:save-utils-as "quickutils.lisp" :utilities '(:CURRY :ENSURE-BOOLEAN :ENSURE-GETHASH :N-GRAMS :ONCE-ONLY :RCURRY :SYMB :WITH-GENSYMS) :ensure-package T :package "MAGITEK.QUICKUTILS") (eval-when (:compile-toplevel :load-toplevel :execute) (unless (find-package "MAGITEK.QUICKUTILS") @@ -14,14 +14,10 @@ (when (boundp '*utilities*) (setf *utilities* (union *utilities* '(:MAKE-GENSYM-LIST :ENSURE-FUNCTION - :COMPOSE :CURRY :ENSURE-BOOLEAN - :ENSURE-GETHASH :ENSURE-LIST :TAKE - :N-GRAMS :ONCE-ONLY :RCURRY - :WITH-OPEN-FILE* :WITH-INPUT-FROM-FILE - :READ-FILE-INTO-STRING :MKSTR :SYMB - :STRING-DESIGNATOR :WITH-GENSYMS - :WITH-OUTPUT-TO-FILE - :WRITE-STRING-INTO-FILE)))) + :CURRY :ENSURE-BOOLEAN :ENSURE-GETHASH + :TAKE :N-GRAMS :ONCE-ONLY :RCURRY + :MKSTR :SYMB :STRING-DESIGNATOR + :WITH-GENSYMS)))) (eval-when (:compile-toplevel :load-toplevel :execute) (defun make-gensym-list (length &optional (x "G")) "Returns a list of `length` gensyms, each generated as if with a call to `make-gensym`, @@ -46,35 +42,6 @@ (fdefinition function-designator))) ) ; eval-when - (defun compose (function &rest more-functions) - "Returns a function composed of `function` and `more-functions` that applies its ; -arguments to to each in turn, starting from the rightmost of `more-functions`, -and then calling the next one with the primary value of the last." - (declare (optimize (speed 3) (safety 1) (debug 1))) - (reduce (lambda (f g) - (let ((f (ensure-function f)) - (g (ensure-function g))) - (lambda (&rest arguments) - (declare (dynamic-extent arguments)) - (funcall f (apply g arguments))))) - more-functions - :initial-value function)) - - (define-compiler-macro compose (function &rest more-functions) - (labels ((compose-1 (funs) - (if (cdr funs) - `(funcall ,(car funs) ,(compose-1 (cdr funs))) - `(apply ,(car funs) arguments)))) - (let* ((args (cons function more-functions)) - (funs (make-gensym-list (length args) "COMPOSE"))) - `(let ,(loop for f in funs for arg in args - collect `(,f (ensure-function ,arg))) - (declare (optimize (speed 3) (safety 1) (debug 1))) - (lambda (&rest arguments) - (declare (dynamic-extent arguments)) - ,(compose-1 funs)))))) - - (defun curry (function &rest arguments) "Returns a function that applies `arguments` and the arguments it is called with to `function`." @@ -110,13 +77,6 @@ (values (setf (gethash ,key ,hash-table) ,default) nil)))) - (defun ensure-list (list) - "If `list` is a list, it is returned. Otherwise returns the list designated by `list`." - (if (listp list) - list - (list list))) - - (defun take (n sequence) "Take the first `n` elements from `sequence`." (subseq sequence 0 n)) @@ -187,58 +147,6 @@ (multiple-value-call fn (values-list more) (values-list arguments))))) - (defmacro with-open-file* ((stream filespec &key direction element-type - if-exists if-does-not-exist external-format) - &body body) - "Just like `with-open-file`, but `nil` values in the keyword arguments mean to use -the default value specified for `open`." - (once-only (direction element-type if-exists if-does-not-exist external-format) - `(with-open-stream - (,stream (apply #'open ,filespec - (append - (when ,direction - (list :direction ,direction)) - (when ,element-type - (list :element-type ,element-type)) - (when ,if-exists - (list :if-exists ,if-exists)) - (when ,if-does-not-exist - (list :if-does-not-exist ,if-does-not-exist)) - (when ,external-format - (list :external-format ,external-format))))) - ,@body))) - - - (defmacro with-input-from-file ((stream-name file-name &rest args - &key (direction nil direction-p) - &allow-other-keys) - &body body) - "Evaluate `body` with `stream-name` to an input stream on the file -`file-name`. `args` is sent as is to the call to `open` except `external-format`, -which is only sent to `with-open-file` when it's not `nil`." - (declare (ignore direction)) - (when direction-p - (error "Can't specifiy :DIRECTION for WITH-INPUT-FROM-FILE.")) - `(with-open-file* (,stream-name ,file-name :direction :input ,@args) - ,@body)) - - - (defun read-file-into-string (pathname &key (buffer-size 4096) external-format) - "Return the contents of the file denoted by `pathname` as a fresh string. - -The `external-format` parameter will be passed directly to `with-open-file` -unless it's `nil`, which means the system default." - (with-input-from-file - (file-stream pathname :external-format external-format) - (let ((*print-pretty* nil)) - (with-output-to-string (datum) - (let ((buffer (make-array buffer-size :element-type 'character))) - (loop - :for bytes-read = (read-sequence buffer file-stream) - :do (write-sequence buffer datum :start 0 :end bytes-read) - :while (= bytes-read buffer-size))))))) - - (defun mkstr (&rest args) "Receives any number of objects (string, symbol, keyword, char, number), extracts all printed representations, and concatenates them all into one string. @@ -299,36 +207,8 @@ unique symbol the named variable will be bound to." `(with-gensyms ,names ,@forms)) - - (defmacro with-output-to-file ((stream-name file-name &rest args - &key (direction nil direction-p) - &allow-other-keys) - &body body) - "Evaluate `body` with `stream-name` to an output stream on the file -`file-name`. `args` is sent as is to the call to `open` except `external-format`, -which is only sent to `with-open-file` when it's not `nil`." - (declare (ignore direction)) - (when direction-p - (error "Can't specifiy :DIRECTION for WITH-OUTPUT-TO-FILE.")) - `(with-open-file* (,stream-name ,file-name :direction :output ,@args) - ,@body)) - - - (defun write-string-into-file (string pathname &key (if-exists :error) - if-does-not-exist - external-format) - "Write `string` to `pathname`. - -The `external-format` parameter will be passed directly to `with-open-file` -unless it's `nil`, which means the system default." - (with-output-to-file (file-stream pathname :if-exists if-exists - :if-does-not-exist if-does-not-exist - :external-format external-format) - (write-sequence string file-stream))) - (eval-when (:compile-toplevel :load-toplevel :execute) - (export '(compose curry ensure-boolean ensure-gethash ensure-list n-grams - once-only rcurry read-file-into-string symb with-gensyms - with-unique-names write-string-into-file))) + (export '(curry ensure-boolean ensure-gethash n-grams once-only rcurry symb + with-gensyms with-unique-names))) ;;;; END OF quickutils.lisp ;;;;