Skip to content

Instantly share code, notes, and snippets.

@fukamachi
fukamachi / Dockerfile
Last active September 1, 2021 13:36
Dockerfile example to build Common Lisp app with Qlot
# syntax=docker/dockerfile:experimental
ARG SBCL_VERSION=2.1.8
ARG QLOT_VERSION=0.11.4
FROM fukamachi/qlot:${QLOT_VERSION}
WORKDIR /app
COPY qlfile /app
COPY qlfile.lock /app
@fukamachi
fukamachi / seminar2019.md
Last active October 7, 2023 15:02
Common Lisp Seminar 2019 ログ by fukamachi

Common Lisp Seminar 2019

2019/08/24 本町オープンソースラボ(大阪府大阪市中央区瓦町3-4-9) https://tcool.connpass.com/event/117789/

@fukamachi が聴いた質問をまとめました。

Q. 自分のプロジェクトを .roswell/local-projects 置くのは一般的なのか?

@fukamachi
fukamachi / hoge.asd
Created February 18, 2019 04:16
ASDF package-inferred-system sample with :pathname
(defsystem "hoge"
:class :package-inferred-system
:pathname "src"
:depends-on ("hoge/main")
:in-order-to ((test-op (test-op "hoge/tests"))))
(defsystem "hoge/tests"
:pathname "tests"
:depends-on ("hoge")
:components
(ql:quickload '(:clack :http-body))
(defvar *handler*)
(setf *handler*
(clack:clackup (lambda (env)
(if (eq (getf env :request-method) :get)
'(200 (:content-type :text-html)
("<html><head></head><body><form method='post' enctype='multipart/form-data'><input type='file' name='upload'><input type='submit' value='Upload'></form></body></html>"))
`(200 () (,(prin1-to-string (http-body:parse (getf env :content-type) (getf env :content-length) (getf env :raw-body)))))))
@fukamachi
fukamachi / keys.lisp
Created August 17, 2018 04:47
Generating RSA key pairs in DER format
(in-package :cl-user)
(ql:quickload '(:ironclad :asn1))
(defun generate-rsa-key-pair (num-bits)
"Same as (ironclad:generate-key-pair :rsa :num-bits num-bits) except returning in DER format."
(check-type num-bits integer)
(let ((l (floor num-bits 2)))
(multiple-value-bind (p q n)
(loop for a = (ironclad:generate-prime (- num-bits l))
@fukamachi
fukamachi / fntype-annot.lisp
Created June 24, 2018 15:07
Type annotation for functions in Common Lisp
(annot:defannotation fntype (args result form)
(:arity 3)
(let* ((last-form (cl-annot.util:progn-form-last form))
(symbol (cl-annot.util:definition-form-symbol last-form)))
`(progn (declaim (ftype (function ,args ,result) ,symbol))
,form)))
;; Usage:
;; (ql:quickload :cl-syntax)
;; (syntax:use-syntax :annot)
@fukamachi
fukamachi / lock-pool
Created October 14, 2017 06:50
Lock to allow n times to acquire
(defpackage #:lock-pool
(:use #:cl)
(:import-from #:bordeaux-threads)
(:import-from #:alexandria
#:once-only)
(:export #:lock-pool
#:make-lock-pool
#:acquire-lock-in-pool
#:release-lock-in-pool
#:with-lock-pool-held))
(ql:quickload '(:cl+ssl :fast-io))
(in-package #:cl-user)
(defpackage #:pkcs12-experiment
(:use #:cl)
(:import-from #:cffi)
(:import-from #:cl+ssl))
(in-package #:pkcs12-experiment)
(cffi:defcfun ("EVP_PKEY_new" evp-pkey-new) :pointer)
@fukamachi
fukamachi / external-program.lisp
Created March 31, 2017 01:44
external-program to stream
#+sbcl
(defun start (commands)
(check-type commands cons)
(multiple-value-bind (inputfd-shell outputfd-shell)
#+win32 (sb-win32::make-named-pipe) #-win32 (sb-posix:pipe)
(multiple-value-bind (inputfd-cl outputfd-cl)
#+win32 (sb-win32::make-named-pipe) #-win32 (sb-posix:pipe)
#+win32
(setf (sb-win32::inheritable-handle-p inputfd-cl) t
(sb-win32::inheritable-handle-p outputfd-cl) t)
@fukamachi
fukamachi / clssl.ros
Created March 10, 2017 10:01
Experimentation for loading CL+SSL on Windows with a custom ssleay32.dll
#!/bin/sh
#|-*- mode:lisp -*-|#
#| Experimentation for loading CL+SSL on Windows with a custom ssleay32.dll
exec ros -Q -- $0 "$@"
|#
#|
NOTE: Put ssleay32.dll at the same directory as this script.
|#