https://www.youtube.com/watch?v=eTgDaMREKT4&t=2s
Take a time and choose one. The world is not limited only by Vim and Emacs. However, I prefer emacs these days (happily switched from Vim a decade ago).
75 karma · joined February 28, 2011
https://www.youtube.com/watch?v=eTgDaMREKT4&t=2s
Take a time and choose one. The world is not limited only by Vim and Emacs. However, I prefer emacs these days (happily switched from Vim a decade ago).
In this video, I tell you how to make a complex web application in Common Lisp and Clack.
You will see how you can add different middleware to your application, for example, logging all HTTP requests.
I will also show you how to distribute static files from the CL web server and how to combine several Clack applications in one server so that each application responds in its own route.
Also, I will explain the difference between Clack and Hunchentoot. If you want to learn about it, watch the video to the end!
Thus CL-WHO is vulnerable to XSS attack by default.
How about bringing some value to the community?
And yes, I have real project experience – a lot of Commmon Lisp libraries at https://github.com/40ants and also I'm developing a hosting for CL library distributions: https://ultralisp.org
Turn on English subtitles if Russian is not your native language.
If you are interested, please read it's docs and join the effort of making good documentation for CL projects: https://40ants.com/doc/
There is a work in progress on SBCL to make it possible to create a really static binaries:
https://www.timmons.dev/posts/static-executables-with-sbcl-v...
I tried this fork and it worked for me!
I'd use it in my own startup.
I'm the author of this tool.
https://github.com/40ants/cl-bitbar
It is a library to write plugins for https://getbitbar.com
CL-USER> (set-macro-character #\{
(lambda (str char)
(declare (ignore char))
(let ((*readtable* (copy-readtable *readtable* nil))
(keep-going t))
(set-macro-character #\} (lambda (stream char)
(declare (ignore char) (ignore stream))
(setf keep-going nil)))
(let ((pairs (loop for key = (read str nil nil t)
while keep-going
for value = (read str nil nil t)
collect (list key value)))
(retn (gensym)))
`(let ((,retn (make-hash-table :test #'equal)))
,@(mapcar
(lambda (pair)
`(setf (gethash ,(car pair) ,retn) ,(cadr pair)))
pairs)
,retn)))))
T
CL-USER> {:foo 100500 :bar 42}
#<HASH-TABLE :TEST EQUAL :COUNT 2 {1005879463}>
CL-USER> (alexandria:hash-table-alist #v1)
((:BAR . 42) (:FOO . 100500))
CL-USER>
And define a printer for the hash to output it as desired: CL-USER> (defmethod print-object ((obj hash-table) stream)
(princ "{" stream)
(loop with indent = nil
for key being the hash-keys in obj using (hash-value value)
when indent
do (format stream "~% ")
unless indent
do (setf indent t)
do (format stream "~S ~S" key value))
(princ "}" stream))
#<STANDARD-METHOD COMMON-LISP:PRINT-OBJECT (HASH-TABLE T) {10040C9F83}>
CL-USER> {:foo 100500 :bar 42}
{:FOO 100500
:BAR 42}https://www.reddit.com/r/lisp/comments/7z7wuq/has_anyone_con...
(mapcar #'string-downcase '("Hello" "world!"))