* [2023-02-26 日]
小雪
** lisptea timeの質問のまとめ :lisp:
前回は普段訊きたいなと思ってた事をメモし忘れてたので、
今回は思いついた時に紙に書き殴っておいた。
しかし、今日はdiscordと直前になって知って
慌てて登録したものの前回使っているので、
当然登録済みな訳で。。。
とにかく書くと長くなるからその辺省略するが、
いろいろと大変だった。
*** プロジェクトの作成の手順
これについてはだいたいquickprojectかcl-projectの
2択かなと思ってたけど、今日教えて頂いたのはcl-projectの方。
こっちはBOM付きファイルでエラーが出て最初は難儀したけど、
前者に比べるとtestまで想定したしっかりしたスケルトンという感じ。
あまり自分でtestしてないんだけど苦笑
とりあえず、make-projectがシェルコマンドとして登録
されているので、terminalから直接プロジェクト作成出来て
便利だと思った。
(自分はわざわざ自分専用のros scriptを書いてたが、
アホすぎた。その名もまさにmake-project笑)
#+begin_src lisp :
(defun main (argv)
(declare (ignorable argv))
(let* ((author "biofermin2")
(license "MIT")
(file (merge-pathnames (make-pathname
:directory `(:relative ".roswell" "local-projects" ,author ,argv))
(user-homedir-pathname))))
(quickproject:make-project file
:author author
:license license)))
#+end_src
でも、これはquickprojectの方を使ってる。
とりあえず、lisperの方だとこんな感じ。
#+begin_src shell
$ make-project <project name>
$ cd <project name>
;; ros scriptを作成時は以下を実行
$ mkdir roswell
$ sudo chmod 777 roswell
$ cd roswell
$ ros init <ros script name>
#+end_src
で、projectのディレクトリ内でgit initとか
してリモート側にpushしていくような感じの流れらしい。
リモート側から作るのか、ローカル側から作るのか
どっちでもできるだろうから一体どういう流れなんだろうなぁと
思っていたが、ローカル→リモートという流れのようだ。
その辺りの説明はこれか。
ローカルでホストされているコードを GitHub に追加する
*** dexadorでのhash tableの使い方
#+begin_src lisp
(ql:quickload :dexador :silent t)
(dex:get "https://yahoo.co.jp") var TLDataContext = {
ual : {
<途中省略>
})() 200
#<HASH-TABLE :TEST EQUAL :COUNT 18 {10020BCFD3}>
#<QURI.URI.HTTP:URI-HTTPS https://www.yahoo.co.jp/>
#<CL+SSL::SSL-STREAM for #<FD-STREAM for "socket 192.168.10.105:34302, peer: 183.79.250.251:443" {1001F71943}>>
#+end_src
これを見ていつも
#<HASH-TABLE :TEST EQUAL :COUNT 18 {10020BCFD3}>
って事はこのhash tableのデータを何かに使えたりするのか?
と思った訳で。
これに関しては
文字列、ステータスコード、ハッシュテーブル、URLともう1つなんだろう?
とりあえず、sslってあるからsecurity関係かな?
という事がわかるので、multiple-value-bindで件のコードを囲んで
変数に格納し、maphashを使って格納したデータを表示するという方法があるとの事。
#+begin_src lisp
(ql:quickload :dexador :silent t)
(multiple-value-bind (string status hashtable url security)
(dex:get "https://biofermin2.github.io")
(maphash #'(lambda (k v) (format t "~a: ~a~%" k v)) hashtable)) content-length: 1368
server: GitHub.com
content-type: text/html permissions-policy: interest-cohort=()
last-modified: Tue, 21 Feb 2023 08:09:08 GMT
access-control-allow-origin: *
etag: "63f47c24-558"
expires: Mon, 27 Feb 2023 05:07:50 GMT
cache-control: max-age=600
x-proxy-cache: MISS
x-github-request-id: 5C22:7572:EBB4:559BA:63FC384E
accept-ranges: bytes
date: Mon, 27 Feb 2023 04:58:02 GMT
via: 1.1 varnish
age: 12
x-served-by: cache-itm18829-ITM
x-cache: HIT
x-cache-hits: 1
x-timer: S1677473883.802889,VS0,VE1
vary: Accept-Encoding
x-fastly-request-id: d4092071270eafafcaa8365a9bf72b1b4e9d6dc7
NIL
#+end_src
その他にもinspectorを使って、表示する方法も教えていただいた。
普段あまりreplを使ってないので気づかなかったが、REPL上で
出力したhashtableの箇所をマウスで右クリックするとinspectorと
プロダウンメニューにあるので、それを指定すればOK
個人的にはC-csにslime inspectorを設定していると
思ったが、slime selectorの間違いだった笑
slime selectorもあまり使った事ないけど、以下の通り。
Select Methods:
4: Select in other window
?: Selector help buffer.
c: SLIME connections buffer.
d: sldb buffer for the current connection.
e: most recently visited emacs-lisp-mode buffer.
i: inferior-lisp buffer.
l: most recently visited lisp-mode buffer.
n: Cycle to the next Lisp connection.
p: Cycle to the previous Lisp connection.
q: Abort.
r: SLIME Read-Eval-Print-Loop.
s: slime-scratch buffer.
t: SLIME threads buffer.
v: slime-events buffer.
slime inspectorはC-cIにバインドされているとの事。
3.11 Inspector commands
REPLから指定するのとちょっと勝手が違う感じがする。
あとはalexandriaのhash-table-alistで
alist表示も出来ますよ!って教えていただいた。
途中だけど、ここまで。