久々にCommon Lisp
久々にCommon Lispネタ。
最近は色々やりたいことが増えてきて困る。 今週末、JavaScript(JQuery)を使って、WEB UIを作ってみたいなーと思い、 サーバサイドは何で作ろうかなーと考えてみた。
今、Erlangで作ってる監視アプリで、DBの値をJSONで返すAPIを作って、JavaScriptからその APIを呼び出してUIに表示するってのもやりたかったのですが、久々にLispを触ってみたくなった。
てことで、まずはCommon Lispのおさらいから。 「実践 Common Lisp」の最初のほうから読み直してみる。
第3章の「簡単なデータベース」を読んでいて、ピンときた。 これってパスワード管理ツールとして使えるなーと。そして、WEB UI持たせたら便利かもと。
で、「簡単なデータベース」のソースコードをほんの少し変えてみて、パスワード管理ツールに してみた。 ソースコードは以下。(ほとんど手を加えていません)
初回の使い方としては、以下を実行。 (add-system)関数を実行すると入力プロンプトが出てくるので、それに従えばOK。
CL-USER> (load "id-manage.lisp") CL-USER> (add-system)
一旦入力内容をファイルに書き出し(忘れるといけないので)
CL-USER> (save-db "id.db")
次に、入力した内容を表示してみる。 例えば、(add-system)でsystem名としてgoogleを登録していた場合、以下のようにして 内容を検索。CREATEは登録日時として、自動で入力されるようになっている。
CL-USER> (select (where :system "google")) SYSTEM: google ID: example@example.com PASSWORD: example CREATE: Sunday, May 13, 2012 UPDATE: NIL
以前に入力した内容を更新する場合は以下。 system名がgoogleのレコードに対して、passwordエントリの内容をhogehogeに更新
CL-USER> (update-record (where :system "google") :password "hogehoge")
再度検索してみると、ちゃんと変ってる。
CL-USER> (select-record (where :system "google")) SYSTEM: google ID: example@example.com PASSWORD: hogehoge CREATE: Sunday, May 13, 2012 UPDATE: NIL CL-USER> (save-db "id.db")
あとは、deleteなんかも付けたけど、使いかたはselect-recordと同じ。 2回目以降はREPLを起動したときに、(load-db “id.db”)として、保存した内容を読み込むのを忘れないように。
と、WEB UIを作る話しからかなり横道に入ってしまいましたが、次回はこれをWEB UIに表示させてみたいと思います。 ちょこっと調べたりしてたけど、今日は時間切れ。 @nitoro_idiotさんことfukamachiさんが作っている、Cavemanが良さそうなので、もう少し勉強して使ってみようと思う。
