SBCL で UnitTest
なんか作るにしてもユニットテスト書けないと辛いなってことで
ユニットテストのやり方を調べてみました。
探す
CLで使えるテストフレームワークはこの辺で探してみました qiita.com
選ぶ
- インストール簡単なやーつがいいな
- 情報が多いほうが良いなぁ
- みんなに使われてるのがいいなぁ
qiita.com https://lisphub.jp/common-lisp/users/index.cgi?FiveAM
わかりやすい記事がたくさんある fiveam
を使ってみることに
使う
install
ros run (ql:quickload "fiveam")
run
ros run ? (5am:test test (5am:is (= 1 1))) TEST ? (5am:run! 'test) Running test TEST . Did 1 check. Pass: 1 (100%) Skip: 0 ( 0%) Fail: 0 ( 0%) T NIL NIL ?
リモートディスクトッププロトコル(RDP)のプロキシとか
RDP を直接接続するのではなく、色んな方法で間接的に繋げる方法を調べてみました
環境情報
調査した環境はこんな感じ
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"
トンネル
socat を使用した トンネル掘り
socat -d tcp4-listen:3389,reuseaddr,fork TCP:<Windowsホスト>:3389
HTTP Proxy
squid を使って HTTP Proxy 経由でRDPする方法。
squid インストール+設定
$ sudo apt install squid $ squid -v Squid Cache: Version 3.5.12 Service Name: squid $ sudo vi /etc/squid/squid.conf acl Safe_ports port 3389 http_access allow Safe_ports http_access allow localhost manager http_access deny manager http_access allow localhost http_access deny all http_port 3128 $ sudo systemctl restart squid $ sudo tail -f /var/log/squid/access.log
middleware ってどうやって呼んでるのん?
Nuxt で Layoutに設定したミドルウェアがどのような順序で実行されているのか調べてみました。
Promise.all で呼んでたりするのかな?
該当コード
呼んでいる
https://github.com/nuxt/nuxt.js/blob/fb978b812a3790f3e0be386931a75662e6903fe5/lib/app/server.js#L131
よばれている
- middlewareSeries https://github.com/nuxt/nuxt.js/blob/90d9283e705349f0367df645fe583801e353e219/lib/app/utils.js#L172
結果
- Promise.all では実行されていなかった。
- middlewareSeries というファンクションで実行されているみたい
middlewareSeries
export function middlewareSeries(promises, appContext) { if (!promises.length || appContext._redirected || appContext._errored) { return Promise.resolve() } return promisify(promises[0], appContext) .then(() => { return middlewareSeries(promises.slice(1), appContext) }) }
then句 内で次のPromise を再帰的に呼んでるみたい。
てことは middlewareは 指定した順番通りに実行されると思っていいのかな?
ES初心者なのでわかっていないかも・・・
間違ってたら教えてください。
はじめてのマクロ
こういう感じでマクロを作る
(defmacro @@@ (car op cdr) `(,op ,car ,cdr)) (print (@@@ 1 + 2)) (print (macroexpand '(@@@ 1 + 2))))
出力
3 (+ 1 2)
へぇ。。。
roswellをインストールしてみる
あらすじ
前回、Roswellをインストールしてみようとしたらうまくいかなかったので ソースからコンパイルしてインストールしてみることにします
参考
ここを参考にインストールしていきます github.com
インストール
事前準備
$ sudo apt update $ sudo apt install gcc automake libcurl4-openssl-dev zlib1g-dev
インストール
$ git clone -b release https://github.com/roswell/roswell.git $ cd roswell $ sh bootstrap $ ./configure $ make $ sudo make install
setup
この辺を参考にセットアップ github.com
$ ros $ ros -- --version roswell 18.4.10.91(0bd00aa) $ ros install sbcl $ ros install sbcl-bin $ ros install ccl-bin $ ros use sbcl/1.4.8
備考
setupのやり直しをしたい場合
rm -rf ~/.roswell/
install sbcl がうまく行かない
最初はros install sbcl
でなんかエラーが起きたのですがググってみると zlib1g-dev が必要みたい
debian jessie: "ros install sbcl" error · Issue #125 · roswell/roswell · GitHub
hello world
REPL でハローワールド
~$ ros run * (print "hello world!") "hello world!" "hello world!" * (exit) ~$
文字列を突っ込んでハローワールド
~$ ros run -e "(princ \"hello world\!\")" -q
ファイルを作る
~$ ros init hello-world
hello-worls.ros ができるのでエディタで開いて編集します
#!/bin/sh #|-*- mode:lisp -*-|# #| exec ros -Q -- $0 "$@" |# (progn ;;init forms (ros:ensure-asdf) ;;#+quicklisp (ql:quickload '() :silent t) ) (defpackage :ros.script.hello-world.3738098721 (:use :cl)) (in-package :ros.script.hello-world.3738098721) (defun main (&rest argv) (declare (ignorable argv)) ;; ここに処理を追加 (print (format t "~A" "Hello world!")) ) ;;; vim: set ft=lisp lisp:
実行
$ ./hello-world.ros Hello world! NIL
バイナリにもできるよ! (ちょっと早くなる)
~$ ros build hello-world.ros $ ./hello-world Hello world! NIL
roswell をインストールしてみる(失敗)
パッケージマネージャってどれがいいんだろうか。。 diary.wshito.com
Roswell がよさそうだな インストール方法はこんな感じだな。よしよし github.com
debをDLしてインストールするんだな。 deb のインストールはここを参考にしてみました mickey-happygolucky.hatenablog.com
環境
Ubuntu 18.01LTS Desktop
必要なコマンドを最初にインストール
~$ sudo apt install curl jq gdebi make ~$ curl -sOL `curl -s https://api.github.com/repos/roswell/roswell/releases/latest | jq -r '.assets | .[] | select(.name|test("deb$")) | .browser_download_url'` ~$ sudo gdebi roswell_18.3.10.89-1_amb64.deb
~$ ros list versions candidates for ros list versions [impl] are: abcl-bin allegro asdf ccl-bin clasp clisp cmu-bin ecl quicklisp sbcl-bin sbcl slime sly ~ $ ros install sbcl <なんかエラー>
ん!? なんか最新版じゃないと動かないかも・・・ https://github.com/roswell/roswell/issues/320
おかたずけ
あとでやりなおすため、失敗したものを取り除いておきます。
~ $ sudo apt remove roswell
keycloak を HAモードで動かす (Docker Swarm mode)
概要
前に作ったKeycloakコンテナをHAモードで動かします。 https://hub.docker.com/r/moremagic/keycloak-jdbc-ping/
ロードバランサが必要なのですが nginxとかを使うのではなく
Docker の Swarmモードを使ってみようとおもいます
環境情報
Ubuntu 18.04 Server(ip: 192.168.56.101)
# uname -a Linux mitsu 4.15.0-22-generic #24-Ubuntu SMP Wed May 16 12:15:17 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Docker
~# docker version Client: Version: 17.12.1-ce API version: 1.35 Go version: go1.10.1 Git commit: 7390fc6 Built: Wed Apr 18 01:23:11 2018 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.1-ce API version: 1.35 (minimum version 1.12) Go version: go1.10.1 Git commit: 7390fc6 Built: Wed Feb 28 17:46:05 2018 OS/Arch: linux/amd64 Experimental: false
準備
swarm mode の準備をします
~# docker swarm init --advertise-addr 192.168.56.101
network, postgres の準備をしてから keycloak service を作ります
networkを作るとき、 --driver overlay ---attachable
オプションを付けることがポイントです。
docker network create --driver overlay --attachable mynet docker run --name postgres --net mynet -e POSTGRES_DATABASE=keycloak -e POSTGRES_USER=keycloak -e POSTGRES_PASSWORD=password -e POSTGRES_ROOT_PASSWORD=password -d postgres docker service create -p 8080:8080 -p 8443:8443 -p 9990:9990 -p 7600:7600 -p 57600:57600 -p 45700:45700 --name keycloak --network mynet -e POSTGRES_DATABASE=keycloak -e POSTGRES_USER=keycloak -e POSTGRES_PASSWORD=password moremagic/keycloak-jdbc-ping
ここまでできたら Keycloakは立ち上がっているのですが、初期ユーザがないのでログインできません。
keycloak の初期ユーザが無いのでユーザ登録をするためのセットアップコンテナを単独で起動させます。
docker run -dP --name keycloak-setup --net mynet -e POSTGRES_DATABASE=keycloak -e POSTGRES_USER=keycloak -e POSTGRES_PASSWORD=password moremagic/keycloak-jdbc-ping
セットアップコンテナが起動したらにそのコンテナで。初期ユーザを admin/admin で作りましょう
docker exec -ti keycloak-setup /bin/bash # keycloak/bin/add-user-keycloak.sh -u admin -p admin # exit
ここまでできたら以下URLをブラウザで開いて adminでログインできるようになるはずです
http://
必要に応じて keycloak-setupコンテナは潰してください。
scale
~# docker service scale keycloak=4 keycloak scaled to 4 overall progress: 4 out of 4 tasks 1/4: running [==================================================>] 2/4: running [==================================================>] 3/4: running [==================================================>] 4/4: running [==================================================>] verify: Service converged
log
~# docker service logs -f keycloak
image のアップデート
docker service update --image moremagic/keycloak-jdbc-ping:<new-version> keycloak
感想
swarm mode があると ラクチン。