ひ日誌
2004-12-03 ( ja -> en )
_ ロボットに教えられてリンク修正
<URL:http://www.fobj.com/rubycocoa/doc/trysamples.en.html> の中の 'Dr. Dobbs Journal, May 2002'のリンクがちゃうというメール(ロボットが送ったらしい)をスパムの山の中から発見。直した。 ひさしぶりに rubycocoa を cvs commit*1。緊張した(汗
*1 docsrcだが
2004-12-05 ( ja -> en )
_ VineLinux を 3.1 に更新
# /etc/apt/sources.list を編集 (3.0 -> 3.1) apt-get update apt-get dist-upgrade # /etc 下の設定をいくつか修正
emacs で aspell のエラー。/etc/emacs-21.3/site-start.d に aspell の設定があるのに aspell-el が入ってない。
apt-get install aspell-el
kernel 関連を更新。
なぜか emacs の日本語表示の行間が広くなってしまった。読みやすいのでよしとする。
2004-12-23 ( ja -> en )
_ [emacs][lisp] mapcar の引数の順を入れ換えるマクロを書いてみた
ついでに info の置き場所を整理。自分で拾ってきたりしたやつは ~/share/info 以下に置くことにした。Info-additional-directory-list にパスを追加。気分で:
(add-hook 'Info-mode-hook
(lambda ()
(setq Info-additional-directory-list
(append (mapcar (lambda (i)
(concat (getenv "HOME") i))
(list "/share/info/"
"/share/info/emacs/"))
Info-additional-directory-list))))
のように書いてみたがなんだか汚い。いまだに、リストにパスなどを追加するときの定石の書き方、というほどでもないが、確立できていない。そこで思い立ちマクロを書いてみた。初めての elisp マクロ:
(defmacro list-map (lst itm &rest body) `(mapcar (lambda ,itm ,@body) ,lst))
ちゃんと調べず Common Lisp のように書いてみたが:
(list-map '(1 2 3) (i) (message "hoge") (* 2 i)) => (2 4 6)
elisp でも動いた。ひょっとすると知らぬ間に (require 'cl) になってたのかもしれない。
(add-hook 'Info-mode-hook
(lambda ()
(setq Info-additional-directory-list
(append (list-map '("/share/info/"
"/share/info/emacs/") (i)
(concat (getenv "HOME") i))
Info-additional-directory-list))))
やはり。こっちの上っ面の方が先のものよりも好みのようだ。body部が少ないうちは、どっちでもそんなに違わないのだが...
_ [lisp] gauche の object-apply でメッセージ伝達モデル
(define-method object-apply ((rcv <object>)
(msg <generic>) . args)
(apply msg (cons rcv args)))
と定義しておく。
(define-class point ()
((x :init-value 0)
(y :init-value 0)))
(define-method move! ((@self point) dx dy)
(inc! (slot-ref @self 'x) dx)
(inc! (slot-ref @self 'y) dy))
(define-method move2! ((@self point) dx dy)
(move! @self dx dy)
(move! @self dx dy))
(define-method inspect ((@self point) . args)
(format (if (null? args) #f (car args))
"[point ~a ~a]"
(slot-ref @self 'x)
(slot-ref @self 'y)))
のように定義したクラスが:
(define o (point make)) (o inspect) (o move! 2 3) (o move2! 2 3)
のように使える。ついでに、上の point クラスの定義を:
(class point ()
(accessor (x :init-value 0)
(y :init-value 0))
(def move! (dx dy)
(inc! @x dx)
(inc! @y dy))
(def move2! (dx dy)
(move! @self dx dy)
(move! @self dx dy))
(def inspect args
(format (if (null? args) #f (car args))
"[point ~a ~a]" @x @y)))
のような雰囲気に書けるマクロが欲しい。書けるのだろうか?今のところ見当がつかん。「素直に Ruby 使え」という声が聞こえてきそう...
2004-12-28 ( ja -> en )
_ [lisp] MIT/GNU Scheme を入れてみた
入れたみただけ。ソースから作ろうとドキュメントどおりに作るができない。面倒なのでバイナリを入れた。それにしてもやたらとでかい。何か実用的なコードを書きたいのだが、単なるSchemeコレクタになりつつあるような。
次は「CやC++など従来からある言語との共存を念頭に置いた」という文言(プログラミング言語Schemeより)が気になる Bigloo でも試してみるかな。C++のおかげで生産性が1/100くらいに低下してるような気がしてるところを、一気に回復できないものか。既存のC++のコードの一部(修正・追加など)を Scheme などの LISP 族で書きたい。というのが目的。リンクすればシンプルに使えるようなものがいい。
2004-12-29 ( ja -> en )
_ [lisp] Bigloo のインストールメモ
きのうの続き。これは MIT/GNU Scheme 以上にでかい。spec ファイルがあったので RPM 化しようとしばしホゲった。が、うまくいかないので make install することに...
Bigloo本体を作って /usr/local/bigloo にインストール:
tar zxf bigloo2.6e.tar.gz cd bigloo2.6e ./configure --prefix=/usr/local/bigloo --bee=full make make DESTDIR=/tmp/bigloo install # インストールされる内容を確認 sudo make install # DESTDIR=/usr/local/bigloo
都合がいいようにリンクなど:
cd /usr/local/bin for i in ../bigloo/bin/*; do sudo ln -s $i; done cd /usr/local/lib for i in ../bigloo/lib/*.so; do sudo ln -s $i; done cd /usr/local/man/man1 sudo ln -s ../../bigloo/man/man1/bigloo.1 cd ~/share/info cp /usr/local/bigloo/info/bigloo* for i in bigloo*; do /sbin/install-info $i dir; done
BEE (Emacs用の開発環境らしい?)を作ってインストール:
cd src/bigloo2.6e make compile-bee make DESTDIR=/tmp/bigloo install-bee # インストール内容を確認 make install-bee # DESTDIR=/usr/local/bigloo
ふたたび都合がいいようにリンクなど:
cd /usr/local/bin for i in ../bigloo/bin/*; do \ test ! -f `basename $i` && sudo ln -s $i; done cd /usr/local/lib for i in ../bigloo/lib/*.so; do \ test ! -f `basename $i` && sudo ln -s $i; done
なんかでかいもんを入れてしまったが、さてどうやって使うんだろうか?
2004-12-30 ( ja -> en )
_ [lisp] 日本語ハンディースキーム
HandyScheme は Mini-scheme、TinyScheme をルーツとした、windows 98/SE/ME/XP で動作する超コンパクトな SCHEME言語(LISP方言,SJIS対応) 処理系です。 HandyScheme にはいわゆる対話環境はなく、GUIを備えたスクリプト言語として動作します。 (中略) また、完成した便利なツールは 単独の 【EXEファイル】 として自由に再配布することも可能です。
windows用だがこれもおもしろそう。TinyScheme はここからたどりついた。でもソースはないみたい。
Scheme コレクタ状態が加速してる。うーむ。
2004-12-31 ( ja -> en )
_ マツケンサンパ
FMを聴いてたらマツケン登場。マツケンサンバ作ったのは小西康陽か?と微妙に納得しつつ笑った。けど、どうも単にリミックスしただけらしい。そういうことならたいへん真っ当。残念。
_ [lisp] Chicken Scheme-to-C compiler
しばし tinyscheme をいじったりドキュメント眺めたり。ドキュメントはややわかりにくい。が、何しろこじんまりしてるので、適当にいじりやすいのはうれしい。
さて、きょうの Scheme コレクションは Chicken 1.86。これはでかい。configure すると chicken.spec ができるので RPM 化(VineLinux 3.1)してみることに。そのままだとエラーになるので以下のように修正:
$ ./configure
--- SPECS/chicken.spec.orig 2004-12-31 14:48:37.000000000 +0900
+++ SPECS/chicken.spec 2004-12-31 14:53:03.000000000 +0900
@@ -3,3 +3,3 @@
Version: 1.86
-Release: 1
+Release: 1_hisa
URL: http://www.call-with-current-continuation.org/chicken.html
@@ -21,3 +21,3 @@
%setup
-./configure --prefix=%{_prefix} --mandir=%{_mandir}
+./configure --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir}
@@ -28,3 +28,5 @@
rm -rf $RPM_BUILD_ROOT
-make prefix=$RPM_BUILD_ROOT%{_prefix} mandir=$RPM_BUILD_ROOT%{_mandir} install
+make prefix=$RPM_BUILD_ROOT%{_prefix} \
+ mandir=$RPM_BUILD_ROOT%{_mandir} \
+ infodir=$RPM_BUILD_ROOT%{_infodir} install
@@ -40,3 +42,2 @@
%dir %{_libdir}/chicken
-%(_libdir)/chicken/*
%dir %{_datadir}/chicken
@@ -44,4 +45,17 @@
%{_mandir}/*/*
+%{_infodir}/*
+%doc ChangeLog ChangeLog.0-20040412 LICENSE README INSTALL format.txt chicken.html FAQ.html
+
+%post
+/sbin/install-info --info-dir=%{_infodir} %{_infodir}/chicken.info
+
+%preun
+if [ $1 = 0 ] ;then
+ /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/chicken.info
+fi
%changelog
+* Fri Dec 31 2004 FUJIMOTO Hisa
+- modified for VineLinux
+
* Thu Aug 19 2004 Felix Winkelmann
_ Pink Floyd のライブ
FM で Pink Floyd の昔のライブやってる:
- IF
- ATOM HEART MOTHER
- ONE OF THESE DAYS
- ECHOES
選曲もいい。録音しておきたかった。初めて気づいたが ECHOES の歌のところハモってる。
_ kimuraw [知ってるかもしれませんが、野田さんという方が「On Lisp」の邦訳を公開していますね。http://user.ec..]
_ hisa [もちろん知ってまっせ。最初の方、ボトムアッププログラミングのあたりを読んだ感想としては、結局のところアジャイルと同じ..]