Open Source WEB


今月の一行


2005-11-30 [Gauche] 遅延ストリーム

Gauche-0.8.6 には遅延ストリームのライブラリが追加されている. これをつかって,iterate という関数を定義するといろいろ楽しいことができ る.

(use util.stream)
(define (iterate f x)
  (stream-delay (stream-cons x (iterate f (f x)))))

たとえば,無限個(もちろん理屈の上でのはなし)の 1 を要素にもつストリー ム ones とか無限個の 2 を要素のもつストリームとか.

gosh> (define ones (iterate identity 1))
ones
gosh> (stream->list (stream-take ones 10))
(1 1 1 1 1 1 1 1 1 1)
gosh> (define twoes (stream-map + ones ones))
twoes
gosh> (stream->list (stream-take twoes 5))
(2 2 2 2 2)

(iota ∞ n) とか

gosh> (define (iota-oo n) (iterate (cut + 1 <>) n))
iota-oo
gosh> (stream->list (stream-take (iota-oo 0) 10))
(0 1 2 3 4 5 6 7 8 9)

iota-oo があれば,すべての素数を含むストリームなんてのも可能です.

(define (sieve pxs)
  (let ((p (stream-car pxs))
        (xs (stream-cdr pxs)))
    (stream-filter (lambda (x) (not (zero? (modulo x p)))) xs)))

(define prims
  (stream-map stream-car (iterate sieve (iota-oo 2))))

これで,100番目の素数はというと,(ちなみに 0 番目は 2 )

gosh> (stream-ref prims 0)
2
gosh> (stream-ref prims 1)
3
gosh> (stream-ref prims 100)
547

--nobsun


Name:
Comment:

There is no comment.


2005-11-29 [find] あれこれ

  • 10日以上更新されていないPerlファイルをリストアップ。
    $ find . -name "*.pl" -mtime +10 -print
    
  • カレントディレクトリから*.bakをみつけて,削除
    $ find . -name "*.bak" --exec rm {} \;
    
    -execは、かなり応用が利くので、マスターすべし!

--masq

find ってなかなか使い方がおぼえられないんですよねぇ. そんなあなたに(って儂のことか...orz) fuji さんからすばらしいサイト情報をいただいた.

http://www.gnu.org/software/findutils/manual/html_mono/find.html

--nobsun


Name:
Comment:
t15u: (Wed Nov 30 16:02:43 2005 )
最近のfindには-lsとか-deleteってあるんだ。
び: (Wed Nov 30 21:49:17 2005 )
-execは便利なのですが、見つけたパスひとつごとにコマンドが起動されるので、大量のファイルを処理したいときは遅かったりします。なので、xargsも使えるときっと幸せになれます。

$ find ~/ -name '*~' -print0|xargs -0 rm -f

とか。なぜ-print0かと言えば、Mac OS Xなどで空白を含んだパスがあると、-printでは思わぬパスが渡ってしまうことがあるからです。


2005-11-28 [JavaScript] <や>を&lt;や&ht;に変換する

標準でそのような関数はJavaScriptには存在しないが、 prototype.jsにはStringの拡張メソッドとしてescapeHTMLというメソッドがある。

  escapeHTML: function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
  },

JavaScriptでのDOMの仕様を知らないと皆目わからないコードだがちゃんと動く。

--yasuyuki


Name:
Comment:

There is no comment.


2005-11-25 [Gauche] 特定要素の上げ下げ

リスト内の特定の要素と,その前あるいは後ろにある要素と入れかえる.

(use srfi-1)
(use srfi-11)

(define (age p ls)
  (receive (xs ys) (break p ls)
    (cond ((null? xs) ls)
          ((null? ys) ls)
          (else (let-values (((z zs) (car+cdr ys))
                             ((w ws) (car+cdr (reverse xs))))
                  (append (reverse ws) (list z w) zs))))))

(define (sage p ls)
  (receive (xs ys) (break p ls)
    (if (null? ys)
        ls
        (receive (z zs) (car+cdr ys)
          (if (null? zs)
              ls
              (receive (w ws) (car+cdr zs)
                (append xs (list w z) ws)))))))

実行してみよう.

gosh> (age (cut = 5 <>) (iota 10))
(0 1 2 3 5 4 6 7 8 9)
gosh> (sage (cut = 5 <>) (iota 10))
(0 1 2 3 4 6 5 7 8 9)
gosh> 

効率をあまり気にしないなら(普通は気にするよなぁ^^;),sage の定義は

(define (sage p ls) (reverse (age p (reverse ls))))

で十分かな...

--nobsun


Name:
Comment:

There is no comment.


2005-11-24 [bzip2] 圧縮と展開

Unix系の環境ではアーカイブファイルは .tar.gz あるいは .tgz という 拡張子をもっていて,tar でまとめたものを gzip で圧縮するというのが 一般的だった.でも,最近では,.tar.bz2 というように,bzip2 で 圧縮してあるものも多くなってきた bzip2 は gzip で圧縮するのに 比較すると,60〜70%ほど圧縮率がよいらしい.

GNU tar と組合せてつかうときは j オプションを使う.

展開は

% tar jxvf hoge.tar.bz2

アーカイブ + 圧縮は

% tar jcvf hoge.tar.bz2 hoge

最後の引数 hoge はディレクトリ. デフォルトでカレントディレクトリにぶちまけるような行儀の悪いアーカイブ ファイルを作らないようにしようね.

--nobsun


Name:
Comment:

There is no comment.


2005-11-22 [php] コマンドライン実行

phpは、コマンドラインから実行できる。

phpコマンドから出力されたHTMLをファイルとしてリダイレクトして、 ブラウザで確認できます。ユニットテストをするだけなら、 Webサーバーは必要なく、phpコマンドとテスティングフレームワークだけで 十分です。

$ php runtest.php > result.html

こうやっといて,result.htmlをブラウザで見る.

--masq


Name:
Comment:

There is no comment.


2005-11-21 [Gauche] Vine Linux 3.2でのGauche-dbd-pgインストール

Vine Linuxで、 Gauche-0.8.6以降にGauche-dbd-pgをインストールする。

まずPostgreSQLをインストールする。

sudo apt-get install postgresql postgresql-devel postgresql-libs postgresql-server

/etc/init.d/postrgesql startでサーバーを起動する。

sudo /etc/inid.d/postgresql start

次にpostgresユーザー権限で、 ログイン名と同じ名前のPostgreSQLユーザー、 ログイン名と同じ名前のデータベースを作成する。

ログイン名がyasuyukiなら以下のようになる。

sudo su - postgres
createuser yasuyuki
createdb yasuyuki
exit

Gauche-dbd-pg最新版を以下からダウンロードする。

http://www.kahua.org/cgi-bin/kahua.fcgi/kahua-web/show/dev/DBI

gauche-packageを使ってインストールする。

sudo gauche-package install Gauche-dbd-pg-0.2.tgz

--yasuyuki


Name:
Comment:

There is no comment.


2005-11-18 [Gauche] Vine Linux 3.2でのGauche-dbd-mysqlインストール

Gauche-0.8.6以降にGauche-dbd-mysqlをインストールする。

まずMySQLをインストールする必要がある。

sudo apt-get install MySQL-client MySQL-devel MySQL-server MySQL-shared

Gauche-dbd-mysql最新版を以下からダウンロードする。

http://www.kahua.org/cgi-bin/kahua.fcgi/kahua-web/show/dev/DBI

gauche-packageを使ってインストールしようとすると、 リンクオプション-lzが使えないというエラー。

sudo gauche-package install Gauche-dbd-mysql-0.2.tgz 

checking for gosh... /usr/local/bin/gosh
checking for gauche-config... /usr/local/bin/gauche-config
checking for gauche-package... /usr/local/bin/gauche-package
checking for gauche-install... /usr/local/bin/gauche-install
checking for gauche-cesconv... /usr/local/bin/gauche-cesconv
checking for mysql_config... /usr/bin/mysql_config
checking checking mysql client library... ok
configure: creating Gauche-dbd-mysql.gpd
configure: creating ./config.status
config.status: creating Makefile
/usr/local/bin/gauche-package compile --verbose \
   --cflags="-I/usr/include/mysql -pipe -march=i386 -mcpu=i686" \
   --libs="-L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm"     \
   dbd_mysql dbd_mysql.c dbd_mysqllib.stub 
'/usr/local/lib/gauche/0.8.6/i686-pc-linux-gnu/gauche-config' --fixup-extension 'dbd_mysql'
'gcc' -c  -I'/usr/local/lib/gauche/0.8.6/include' -I/usr/include/mysql -pipe -march=i386 -mcpu=i686 -fPIC -o 'dbd_mysql_head.o' 'dbd_mysql_head.c'
'gcc' -c  -I'/usr/local/lib/gauche/0.8.6/include' -I/usr/include/mysql -pipe -march=i386 -mcpu=i686 -fPIC -o 'dbd_mysql.o' 'dbd_mysql.c'
'/usr/local/lib/gauche/0.8.6/i686-pc-linux-gnu/gosh' genstub dbd_mysqllib.stub
'gcc' -c  -I'/usr/local/lib/gauche/0.8.6/include' -I/usr/include/mysql -pipe -march=i386 -mcpu=i686 -fPIC -o 'dbd_mysqllib.o' 'dbd_mysqllib.c'
'gcc' -c  -I'/usr/local/lib/gauche/0.8.6/include' -I/usr/include/mysql -pipe -march=i386 -mcpu=i686 -fPIC -o 'dbd_mysql_tail.o' 'dbd_mysql_tail.c'
'gcc'  -L'/usr/local/lib/gauche/0.8.6/i686-pc-linux-gnu' -shared -o dbd_mysql.so 'dbd_mysql_head.o' 'dbd_mysql.o' 'dbd_mysqllib.o' 'dbd_mysql_tail.o' -lgauche -ldl -lcrypt -lutil -lm -lpthread -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm
/usr/bin/ld: cannot find -lz
collect2: ld はステータス 1 で終了しました
/usr/local/bin/gauche-package compile --verbose \
   --cflags="-I/usr/include/mysql -pipe -march=i386 -mcpu=i686" \
   --libs="-L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm"     \
   dbd_mysql dbd_mysql.c dbd_mysqllib.stub 
'/usr/local/lib/gauche/0.8.6/i686-pc-linux-gnu/gauche-config' --fixup-extension 'dbd_mysql'
'gcc' -c  -I'/usr/local/lib/gauche/0.8.6/include' -I/usr/include/mysql -pipe -march=i386 -mcpu=i686 -fPIC -o 'dbd_mysql_head.o' 'dbd_mysql_head.c'
'gcc' -c  -I'/usr/local/lib/gauche/0.8.6/include' -I/usr/include/mysql -pipe -march=i386 -mcpu=i686 -fPIC -o 'dbd_mysql_tail.o' 'dbd_mysql_tail.c'
'gcc'  -L'/usr/local/lib/gauche/0.8.6/i686-pc-linux-gnu' -shared -o dbd_mysql.so 'dbd_mysql_head.o' 'dbd_mysql.o' 'dbd_mysqllib.o' 'dbd_mysql_tail.o' -lgauche -ldl -lcrypt -lutil -lm -lpthread -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm
/usr/bin/ld: cannot find -lz
collect2: ld はステータス 1 で終了しました
/usr/local/bin/gosh -I. test.scm > test.log
Testing dbd.mysql ...                                            *** ERROR: Compile Error: can't find dlopen-able module "dbd_mysql"
"./test.scm":12:(use dbd.mysql)

Stack Trace:
_______________________________________
  0  (dynamic-load "dbd_mysql")
        At line 42 of "./dbd/mysql.scm"
gmake: *** [check] エラー 70
*** ERROR: command execution failed: cd "./Gauche-dbd-mysql-0.2"; "/usr/bin/gmake" check
Stack Trace:
_______________________________________
  0  (make-check config dir)
        At line 159 of "/usr/local/share/gauche/0.8.6/lib/gauche/package/build.scm"
  1  (usage)
        At line 99 of "/usr/local/bin/gauche-package"
  2  (usage)
        At line 99 of "/usr/local/bin/gauche-package"

エラーの原因はzlib-develがインストールされていないから。

sudo apt-get install zlib-devel

これでインストールできるようになる。

--yasuyuki


Name:
Comment:

There is no comment.


2005-11-17 [Firefox] 子ウインドウに表示されたエラーメッセージを読む

JavaScriptなどでリサイズできない子ウインドウを表示したとき、 サーバーエラーが発生してもエラーメッセージは一部しか表示できない。

こんなときは子ウインドウ上で右クリックし、 コンテキストメニューから[ページのソースを表示]を選ぶとすべてのエラーメッセージが読める。

--yasuyuki


Name:
Comment:

There is no comment.


2005-11-16 [Emacs] Syntax Highlight

Emacsでプログラムコードのキーワードなどに色をつけるのは、 Options->Syntax HighlightingをONにする。

NetBSDだとデフォルトでOffになってる。 知らなかった。orz

--cut-sea


Name:
Comment:

There is no comment.


2005-11-15 [linux] メモリの使用状況

/proc/meminfo 現在のメモリー使用量やキャシュ使用量などのデータがリアルタイムに 書き込まれている。

        total:    used:    free:  shared: buffers:  cached:
Mem:  658882560 651014144  7868416        0 84017152 68845568
Swap: 1339260928  1978368 1337282560
MemTotal:       643440 kB
MemFree:          7684 kB
MemShared:           0 kB
Buffers:         82048 kB
Cached:          66420 kB
SwapCached:        812 kB
Active:          90296 kB
Inactive:        59168 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       643440 kB
LowFree:          7684 kB
SwapTotal:     1307872 kB
SwapFree:      1305940 kB

--masq


Name:
Comment:
び: (Tue Nov 15 14:59:25 2005 )
ノーマルファイルじゃないので、書き込まれていると言うと語弊があるような。透けて見えるって感じかしら。
ますく: (Wed Nov 16 12:43:26 2005 )
なるほど。透けて見えるって表現はいいですね。


2005-11-14 [kahua-admin] ワーカープロセスの再起動

kahua-admin restart 【KahuaプロセスID】 でワーカープロセスを再起動できる。

% kahua-admin restart 9
("jg9:19e99")

--masq


Name:
Comment:

There is no comment.


2005-11-11 [kahua-admin] ワーカープロセスの表示

kahua-admin ls で Kahuaプロセスがリストされる。

$ kahua-admin ls
wno   pid type           since        wid
  3 21033 kamehameha     Nov  2 22:39 g89:59ovs
  9 25209 kagoiri-musume Nov  3 21:52 jg9:19e99

--masq


Name:
Comment:

There is no comment.


2005-11-10 [gosh] バージョンの表示

gosh -V でバージョンが確認できる

% gosh -V
Gauche scheme interpreter, version 0.8.6_pre4 [euc-jp,pthreads]

--masq


Name:
Comment:
nobsun: (Thu Nov 10 05:25:56 2005 )
バージョン番号だけがほしければ、
% gauche-config -V
0.8.6
shibata: (Thu Nov 10 14:20:21 2005 )
ちょっと無理矢理だけど
gosh -E'print (gauche-version)' -Eexit
とか…
gosh -E'print (gauche-character-encoding)' -Eexit
は使えるかも


2005-11-09 [debian] キーボードマップの変更

kbdconfigでキーボードマップが変更できる。

たとえば、106に変更したい場合は、「Select keymap from full list」を選択して、 「pc / qwerty / Japanese / Standard / Standard」を選択すればOK。

--masq


Name:
Comment:
えんどう: (Wed Nov 9 11:54:21 2005 )
loadkeysも便利です。
loadkeys dvorak
とか。

bash_loginとbash_logoutにloadkeysを仕掛けておくと、
ユーザーごとにキー配列を違うものにできます。
shibata: (Thu Nov 10 14:05:36 2005 )
.Xmodmapもお勧めです。
keycode 208 = Super_R
clear mod4
add mod4 = Super_R
で「カタカナ」がSuper修飾キーに。

keycode調べるにはxevですね。
ますく: (Tue Nov 15 13:22:35 2005 )
ふむふむ。
クライアント側のセッティングは、いろいろな方法があって、悩みますなぁ。


2005-11-08 [df] サイズの概算表示

dfも-hを付けると、サイズが概算形式になる。

$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda1               255912     53374    188885  23% /
tmpfs                   128428         0    128428   0% /dev/shm
/dev/hda9              3557744    113660   3263356   4% /home
/dev/hda8               286026      8242    262524   4% /tmp
/dev/hda5              3470776    413456   2881012  13% /usr
/dev/hda6              1663524    315572   1259195  21% /var
$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1             250M   53M  185M  23% /
tmpfs                 126M     0  126M   0% /dev/shm
/dev/hda9             3.4G  111M  3.2G   4% /home
/dev/hda8             280M  8.1M  257M   4% /tmp
/dev/hda5             3.4G  404M  2.8G  13% /usr
/dev/hda6             1.6G  309M  1.3G  21% /var

--masq


Name:
Comment:

There is no comment.


2005-11-07 [ls] 概算のファイルサイズ

-h オプションを追加すると、ファイルサイズが概算形式になる。

% ls -l
drwxr-xr-x   5 root root     4096 2005-07-31 01:18 xoops-2.0.11-JP
-rw-r--r--   1 root staff 1349219 2005-08-02 17:35 xoops-2.0.11-JP.tar.gz
% ls -lh
drwxr-xr-x   5 root root     4.0K 2005-07-31 01:18 xoops-2.0.11-JP
-rw-r--r--   1 root staff    1.3M 2005-08-02 17:35 xoops-2.0.11-JP.tar.gz

--masq


Name:
Comment:

There is no comment.


2005-11-04 [CVS] ChangeLogの自動生成

ChangeLogを全く書いていなくてCVSのコミットログから自動生成したいとき、 cvs2cl.plというツールが公開されている。

http://www.red-bean.com/cvs2cl/

--yasuyuki


Name:
Comment:
nobsun: (Fri Nov 4 14:56:45 2005 )
とはいえ。ChangeLogは自分のためにも、共同開発者のためにも、commit時に書くようにしましょう。


2005-11-02 [CVS] ブランチ

project 開発のメインストリームから離れて実験的な実装を試したいときには, ブランチを作成するとよい.メインストリームで新しいバージョンを リリース(リリースタグは release1_0 とする)したタイミングがいいだろう.

% cvs rtag -r release1_0 -b branch1_0 project

--nobsun


Name:
Comment:

There is no comment.


2005-11-01 [misc] --full-timeを指定すると...

$ ls -l xxx
-rw-r--r--    1 fuji     user         2047 10月  9 17:42 xxx

と時刻が hh:mm までしか出ないのだが、--full-time を指定すると

$ ls --full-time xxx
-rw-r--r--    1 fuji     user         2047 2005-10-09 17:42:57.000000000 +0900 xxx

となって、秒以下まで分かる。

--fuji


Name:
Comment:
び: (Wed Nov 2 16:26:40 2005 )
BSD系のlsだと--full-timeというのはなくて、-Tで秒まで表示できます。
$ls -lT
-rw-r--r--   1 user group  0 Nov  2 16:25:52 2005 hoge


このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us