気分を変えるために StumpWM を久々に動かしてみた。
StumpWM は Common Lisp で記述されたシンプルなウインドマネージャーで、タイル型と呼ばれるウインドマネージャーです。キーボードを中心に操作を行い、Emacs と相性が良いです。
xrdp で動かす場合の導入のメモを残しておきます。roswellのおかげですごく簡単になっています。
-
このページの記事一覧
- 2020年2月2日日曜日 - ContOS8 StumpWM & Emacs 26.3
- 2016年2月15日月曜日 - CLML.LAPACK-ENVIRONMENT::DYNAMIC-HEAP-SPACE-TOO-SMALL
- 2014年5月25日日曜日 - Common Lisp のスレッド処理
- 2014年5月4日日曜日 - Helm から Hyerspec/CLtL2 を引く
- 2014年2月19日水曜日 - Clack & Swank によるインタラクティブなWebシステム開発
- 2013年12月24日火曜日 - 続:イブの夜はIaaSをCommon Lispでキめる!
- 2013年12月15日日曜日 - 世の中の Common Lisp OpenStack Clients を眺めてみる
- 2013年3月23日土曜日 - 実行中 Common Lisp アプリのホットディプロイ
- 2012年12月24日月曜日 - OpenStack Advent Calendar 2012 JP 12/24 イヴの夜はOpenStackをCommon Lispでキメる!
- 2011年6月9日木曜日 - CL clack & cl-markup GET/POST/SESSION
- 2011年6月7日火曜日 - CL clack & cl-markup
- 2011年6月2日木曜日 - CL で Livedoor Blog へ投稿
- 2011年6月1日水曜日 - Common Lisp で WSSE認証
- - Hash Digest の算出
- 2011年5月31日火曜日 - Hunchentoot で2chブラウザ その3
- 2011年5月25日水曜日 - Hunchentoot で2chブラウザ その2
- 2011年5月18日水曜日 - Hunchentoot で2chブラウザを作ってみた
- 2011年5月14日土曜日 - cl-twitter を使ったフォロワーを自動で増やすサンプルプログラム
- 2011年5月10日火曜日 - Emacs anythig から hyperspec と cltl2 を引く
- - Emacs Slime で auto-complete
CLML.LAPACK-ENVIRONMENT::DYNAMIC-HEAP-SPACE-TOO-SMALL

SBCLで機械学習パッケージのCLMLを導入しようとすると、以下のエラーが出る場合があります。
When you try to install CLML on SBCL, you might encounter the blow problem.
この理由は実行環境のメモリ不足です。
This reason is too small memory size of lisp execution environment.
以下で解決できます。
The solution is below:
デフォルトでSBCLは1GBです。これは、CLMLをコンパイルするには少なすぎます。
Default SBCL memory size is 1gb . It's too small to compile CLML on SBCL.
When you try to install CLML on SBCL, you might encounter the blow problem.
COMMON-LISP:SIMPLE-TYPE-ERROR : CLML.LAPACK-ENVIRONMENT::DYNAMIC-HEAP-SPACE-TOO-SMALL does not designate a condition class.
この理由は実行環境のメモリ不足です。
This reason is too small memory size of lisp execution environment.
以下で解決できます。
The solution is below:
$ sbcl --dynamic-space-size 4gb
デフォルトでSBCLは1GBです。これは、CLMLをコンパイルするには少なすぎます。
Default SBCL memory size is 1gb . It's too small to compile CLML on SBCL.
Common Lisp のスレッド処理

Common Lispにおけるスレッド処理は処理系依存であり、利用する場合はなかなか悩ましい問題です。そんな頭痛の種を解決してくれる一つの手段として、bordeaux-threads というライブラリがあります。
bordeaux-threads は処理系依存のスレッド処理をラップして、共通の記述が可能となる事を目的として開発されたライブラリです。bordeaux-threads は QuickLisp から導入可能です。
利用イメージは以下となります。
bordeaux-threads は処理系依存のスレッド処理をラップして、共通の記述が可能となる事を目的として開発されたライブラリです。bordeaux-threads は QuickLisp から導入可能です。
(ql:quickload :bordeaux-threads)
利用イメージは以下となります。
Helm から Hyerspec/CLtL2 を引く

** 2014/05/11 slime をバージョンアップ したらHyperSpec が引けなくなったので修正
HyperSpec と CLtL2 を Helm から引けるようにします。 anything とまったく一緒です。
HyperSpec は ANSI Common Lispのリファレンス、CLtL2 は Common Lisp the Language, 2nd Editionの略記で仕様書風の読み物。CLTL1 → ANSI と仕様がFIXするまでの経緯等にもついて記載されているらしいです。私はほぼ HyperSpec しか使っていません。
設定方法は以下
HyperSpec と CLtL2 を Helm から引けるようにします。 anything とまったく一緒です。
HyperSpec は ANSI Common Lispのリファレンス、CLtL2 は Common Lisp the Language, 2nd Editionの略記で仕様書風の読み物。CLTL1 → ANSI と仕様がFIXするまでの経緯等にもついて記載されているらしいです。私はほぼ HyperSpec しか使っていません。
設定方法は以下
Clack & Swank によるインタラクティブなWebシステム開発

以前にこんな記事 「実行中 Common Lisp アプリのホットディプロイ」 を書きましたがその続きです。
Swankを使って起動しているCommon Lisp処理系に接続して動的に実行環境を操作しましたが、それをもう少し実践的に使ってみます。
Swankを使って起動しているCommon Lisp処理系に接続して動的に実行環境を操作しましたが、それをもう少し実践的に使ってみます。
続:イブの夜はIaaSをCommon Lispでキめる!

2つのアドベントカレンダーの合同ネタです。
OpenStack Advent Calendar 2013 JP
Wakame Users Group Advent Calendar 2013
Common Lispの基礎に関しては2012年の OpenStack Advent Calendar 2012 JP 12/24 イヴの夜はOpenStackをCommon Lispでキメる!をご覧ください。
Common Lispを使って、OpenStackとWakame-VDCの操作を行いながら、Lispの世界を見ていきましょう。
OpenStack Advent Calendar 2013 JP
Wakame Users Group Advent Calendar 2013
Common Lispの基礎に関しては2012年の OpenStack Advent Calendar 2012 JP 12/24 イヴの夜はOpenStackをCommon Lispでキメる!をご覧ください。
Common Lispを使って、OpenStackとWakame-VDCの操作を行いながら、Lispの世界を見ていきましょう。
世の中の Common Lisp OpenStack Clients を眺めてみる

タイトルの通りです。気になったので調べて見ます。
github で 「openstack common lisp」で検索してみたところ・・・
2013/12/15
4つのリポジトリが見つかりました。
■russell/cl-openstack
とてもシンプルな実装でnovaに対して最低限の操作が実装されています。マクロを活用して実装されておりLISPっぽいつくりです。行数も少ないので、入門として読むのに適していると思います。
novaを操作するための関数をマクロによって定義しています。
■stackforge/cl-openstack-client
こちらも機能としてはシンプルですが、CLOSを活用した実装がなされています。
■AeroNotix/cl-stack
こちらは先の二つと違い、Novaではなくオブジェクトストアに対する基本的なファイルアップロードを実装しているようです。
■irixjp/cl-openstackclients
どっかでみたリポジトリですね。全然できていませんXD
この4つを眺めてみましたが、実装としてはどれも実験的、といった印象です。
Lispっぽい使い方をOpenStack上で実装しているものや、アイデアのある方はぜひ教えてください。
github で 「openstack common lisp」で検索してみたところ・・・
2013/12/15
4つのリポジトリが見つかりました。
■russell/cl-openstack
とてもシンプルな実装でnovaに対して最低限の操作が実装されています。マクロを活用して実装されておりLISPっぽいつくりです。行数も少ないので、入門として読むのに適していると思います。
novaを操作するための関数をマクロによって定義しています。
(defmacro nova-call (name args documentation lambda-list &body body) (let ((documentation (if (stringp documentation) documentation ""))) (destructuring-bind (&key url content (method :get)) lambda-list `(defun ,name ,args ,documentation (assert *token*) (assert *service-catalog*) (let* ((service-url (car (service-catalog-query "compute"))) (url (merge-uris ,url service-url))) (let ((data (restart-case (rpc-call url ,method ,content) (retry () :report "Retry Openstack Call." (rpc-call url ,method ,content))))) ,@body))))))
■stackforge/cl-openstack-client
こちらも機能としてはシンプルですが、CLOSを活用した実装がなされています。
(defclass resource () ((id :initarg :id :reader resource-id) (connection :initarg :connection :reader resource-connection) (attributes :initform (make-hash-table)))) (defmethod resource-error-class ((resource resource)) 'openstack-error) (defmethod print-object ((resource resource) stream) (if (slot-boundp resource 'id) (print-unreadable-object (resource stream :type t :identity t) (format stream "~A" (resource-id resource))) (print-unreadable-object (resource stream :type t :identity t)))) (defmethod decode-resource (resource parent type) ;; TODO (RS) currently extra keys are just ignored in all resources, ;; it would be best if they were saved somewhere. (apply #'make-instance type :connection (resource-connection parent) :parent parent (concatenate 'list (alist-plist resource) '(:allow-other-keys t)))) (defmethod decode-resource-list (resources parent type) (loop :for resource :in resources :collect (decode-resource resource parent type))) (defgeneric resource-authentication-headers (resource) (:documentation "Return a list of the authentication headers that should be added to the request."))
■AeroNotix/cl-stack
こちらは先の二つと違い、Novaではなくオブジェクトストアに対する基本的なファイルアップロードを実装しているようです。
(defmethod upload-file ((client openstack-client) (filename string) &key (container "/testainer") (content-type "application/text") headers) "Upload file will upload `filename' into the ObjectStore." (let* ((url (format nil "~a~a~a/~a" *computeurl* (slot-value client 'tenantid) container (pathname-name filename))) (md5-hash (md5-digest-file filename))) (base-request url :PUT :content-type content-type :content (pathname filename) :headers (base-headers client headers) :after-request #'(lambda (request) (let* ((recvdheaders (nth 2 request)) (etag (cdr (assoc :ETAG recvdheaders)))) (string= etag md5-hash))))))
■irixjp/cl-openstackclients
どっかでみたリポジトリですね。全然できていませんXD
この4つを眺めてみましたが、実装としてはどれも実験的、といった印象です。
Lispっぽい使い方をOpenStack上で実装しているものや、アイデアのある方はぜひ教えてください。
CL clack & cl-markup GET/POST/SESSION

Clackをもう少し。Webで必須なデータの受け渡し部分について試してみた。
cl-markupはcl-whoと挙動が違うので使うときは注意が必要。
cl-markupはcl-whoと挙動が違うので使うときは注意が必要。
CL clack & cl-markup

Common Lispで書かれたシンプルなWebサーバとタグビルダー(?)。試行錯誤しながらちょっと使ってみた。
http://e-arrows.sakura.ne.jp/2011/05/what-ive-created-in-ariel.html
http://e-arrows.sakura.ne.jp/2011/05/what-ive-created-in-ariel.html
Common Lisp で WSSE認証

Win7 64 + Clozure CL
Hatenaはうまくいくけど、Livedoorは上手くいかなかった・・・何でだろう?
間違ってたので修正。Livedoorも上手くいくようになった。
間違ってたので修正。Livedoorも上手くいくようになった。
時刻:
19:00
Hash Digest の算出

ironclad というパッケージを使う。quicklispから簡単にインストール可能。
文字列のハッシュ例
抜粋
文字列のハッシュ例
CL-USER> (ironclad:byte-array-to-hex-string (ironclad:digest-sequence :sha1 (ironclad:ascii-string-to-byte-array "password"))) "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8"
抜粋
・Supported ciphers: AES, DES, 3DES, Blowfish, Twofish, RC5, RC6, Arcfour (RC4)
・Supported hash functions: MD4, MD5, SHA1, SHA256, Tiger, Adler32, CRC32 (also supports tree hashes)
・RFC2104 HMACs and RFC4493 CMACs
・Public key schemes: DSA signing and verification
・Key derivation functions: PBKDF1, PBKDF2 (RFC 2898)
Hunchentoot で2chブラウザ その3

相変わらず試行錯誤しています。いくつか機能追加してみました。
・スレッド編集(2chまとめサイト作るノリのものです。ここを参考にしました)
強調ボタン、AAボタンはおいてあるだけ。これから作る予定・・・?
・アンカーリンクの削除(ホントはアンカーに基づいてスレ順を組み替えたい)
・自動リンク
・YouTubeリンクの展開
・画像リンクの展開
・ちゃんとセッションを使うようにしました(2chで教えて貰いました。ありがとうございます)
・編集したスレ&レスを記録して一覧で編集済みのマークが出るようにしました。
・相変わらずIEでトップページが動きません・・・
・正規表現がバックスラッシュ大杉で訳わからなくなってます。
・Win7 + CCL + Chrome で動作確認しています。
・一部の板で動きません。どうもURLの形式が通常と違う板があるようです(自分が見る板は問題ないので放置予定)
・:jpライブラリはこちらのものに、clozure対応パッチを当てたものを使っています。
・スレッド編集(2chまとめサイト作るノリのものです。ここを参考にしました)
強調ボタン、AAボタンはおいてあるだけ。これから作る予定・・・?
・アンカーリンクの削除(ホントはアンカーに基づいてスレ順を組み替えたい)
・自動リンク
・YouTubeリンクの展開
・画像リンクの展開
・ちゃんとセッションを使うようにしました(2chで教えて貰いました。ありがとうございます)
・編集したスレ&レスを記録して一覧で編集済みのマークが出るようにしました。
・相変わらずIEでトップページが動きません・・・
・正規表現がバックスラッシュ大杉で訳わからなくなってます。
・Win7 + CCL + Chrome で動作確認しています。
・一部の板で動きません。どうもURLの形式が通常と違う板があるようです(自分が見る板は問題ないので放置予定)
・:jpライブラリはこちらのものに、clozure対応パッチを当てたものを使っています。
Hunchentoot で2chブラウザ その2

すこし改良してみた。
javascriptをいじってたらIEで動かなくなってしまった。
Win7 64nit + CCL + Chrome で動作確認。
いまいちセッションの取り扱いがわからない。
一人用だし、グローバル変数にぶち込んで使うのもありかな?
parenscriptを使ってみようと呼び出してるけど使っていない。
*default-directory* を設定して、ファイルを配置して load したら、(2ch-editor:start-2ch-server)で localhost:8080で使用可能。
名前がeditorってなってるのは、まとめブログの支援ツールにしようと思ったんだけど、セッションがわからなかったので断念したから。。。
javascriptをいじってたらIEで動かなくなってしまった。
Win7 64nit + CCL + Chrome で動作確認。
いまいちセッションの取り扱いがわからない。
一人用だし、グローバル変数にぶち込んで使うのもありかな?
parenscriptを使ってみようと呼び出してるけど使っていない。
*default-directory* を設定して、ファイルを配置して load したら、(2ch-editor:start-2ch-server)で localhost:8080で使用可能。
名前がeditorってなってるのは、まとめブログの支援ツールにしようと思ったんだけど、セッションがわからなかったので断念したから。。。
Hunchentoot で2chブラウザを作ってみた

この程度でかなり苦労してしまった・・・
Win7 + CCL で動作してます。
参考>> HUNCHENTOOT - The Common Lisp web server formerly known as TBNL
参考>> CL-WHO - Yet another Lisp markup language
参考>> Common Lisp で Web アプリを作るためのブランクプロジェクト
参考>> (Lisperp sakuranbo) => t を目指す日記 会社から投稿テスト
Win7 + CCL で動作してます。
参考>> HUNCHENTOOT - The Common Lisp web server formerly known as TBNL
参考>> CL-WHO - Yet another Lisp markup language
参考>> Common Lisp で Web アプリを作るためのブランクプロジェクト
参考>> (Lisperp sakuranbo) => t を目指す日記 会社から投稿テスト
cl-twitter を使ったフォロワーを自動で増やすサンプルプログラム

Twitterのフォロワーを増え方を調査した時に見つけた、フォロワーを自動で増やすプログラムをまねて作ってみた。
1週間ほど動かしたところ、1000 → 3000までフォロワーが増えました。
勉強がてら作っているので、かなりコードはしょぼいです。エラー処理はコンディションが良く分からなかったので無視。リスト処理も集合処理を知らなかったので力技で処理してます。
1週間ほど動かしたところ、1000 → 3000までフォロワーが増えました。
勉強がてら作っているので、かなりコードはしょぼいです。エラー処理はコンディションが良く分からなかったので無視。リスト処理も集合処理を知らなかったので力技で処理してます。
Emacs anythig から hyperspec と cltl2 を引く

こちらを参考に、そのままで動きました。
http://d.hatena.ne.jp/kitokitoki/20100912/p1
私はCygwinを使っていないですが、w3m.exe を cygwin でコンパイルされたものを利用しているのでパスの与え方だけ注意。
cltl2.el http://www.uuhaus.de/software/cltl2.el
ドキュメント http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_ht.tgz
dot.emacs は以下
http://d.hatena.ne.jp/kitokitoki/20100912/p1
私はCygwinを使っていないですが、w3m.exe を cygwin でコンパイルされたものを利用しているのでパスの与え方だけ注意。
cltl2.el http://www.uuhaus.de/software/cltl2.el
ドキュメント http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_ht.tgz
dot.emacs は以下
時刻:
21:24
Emacs Slime で auto-complete

こちらを参考にやってみた。
http://dev.ariel-networks.com/wp/archives/462
NTEmacsではこのままじゃ旨く行かなかったので、以下を参考に修正。
http://calltopower.wordpress.com/2010/12/29/lisp-emacs-autocomplete/
いい感じだけど、もともとfuzzy補完を使ってて、一緒に動かすと癖のある動作をするから慣れるまでちょっとかかりそう。
修正した dot.emacs
http://dev.ariel-networks.com/wp/archives/462
NTEmacsではこのままじゃ旨く行かなかったので、以下を参考に修正。
http://calltopower.wordpress.com/2010/12/29/lisp-emacs-autocomplete/
いい感じだけど、もともとfuzzy補完を使ってて、一緒に動かすと癖のある動作をするから慣れるまでちょっとかかりそう。
修正した dot.emacs
登録:
投稿 (Atom)