August 02, 2008
GaucheでYAML 00:01
- Permalink
- Comments (2386)
- Trackbacks (0)
Gauche
YAMLが読めるよ!! やったね たえちゃん!
lequeから Gauche-YAML-0.0.tgzを入手。バージョンがすごい……。ダブルオー。
$ sudo aptitude install libsyck-dev $ sudo gauche-package install Gauche-YAML-0.0.tgz
(use text.yaml)したらSEGVした。
GaucheのAPIが変わってるみたい。yaml.cを修正。
--- Gauche-YAML-0.0.orig/yaml.c 2006-09-03 00:04:40.000000000 +0900
+++ Gauche-YAML-0.0/yaml.c 2008-08-01 23:05:12.000000000 +0900
@@ -450,7 +450,7 @@
sym_merge = SCM_INTERN("merge");
sym_default = SCM_INTERN("default");
make_date_proc =
- Scm_EvalCString("make-date", SCM_OBJ(SCM_FIND_MODULE("srfi-19", 0)));
+ Scm_EvalCStringRec("make-date", SCM_OBJ(SCM_FIND_MODULE("srfi-19", 0)));
/* Register stub-generated procedures */
Scm_Init_yamllib(mod);
(use text.yaml)するとこんな関数が使える。おおお。
- yaml-parse-string yaml-string
- yaml-load port
- yaml-dump obj &optional port
- x->yaml obj
メールからtwitter 01:40
- Permalink
- Comments (1942)
- Trackbacks (0)
twitter, シェルスクリプト
きっと何人も同じことをやってるんだろうけど。
#!/bin/sh # # post_twitter # CONF=/path/to/twitter/username/password if [ -e $CONF ]; then . $CONF else echo "$CONF is not found." >&2 exit 1 fi BODY=`sed "0,/^$/d" | nkf -w` curl -u $USER:$PASSWORD -d status="$BODY" http://twitter.com/statuses/update.xml > /dev/null 2>&1
みたいにしておいて、$CONFのパスにこんなの置いて
USER=aaa PASSWORD=bbb
さらに/etc/aliasesに
name_to_post_twitter: | /path/to/post_twitter
んでメール送ったら本文に書いたやつがpostされる。キタコレ!
オレの携帯古すぎてm.twitter.com開けないってのもあるけど、メールのほうが手軽かなと。
最近読んだこの本がためになりました。シェルスクリプト++
ソフトバンククリエイティブ
売り上げランキング: 51446
August 07, 2008
属性リストへのアクセス 00:19
- Permalink
- Comments (320)
- Trackbacks (0)
Scheme, CommonLisp
調べるのに少し手間取ったのでメモ。
Common Lispだと
(getf (list :a 1 :b 2 :c 3) :a) ;;=> 1
これのScheme版はget-keyword。
(get-keyword :a (list :a 1 :b 2 :c 3)) ;;=> 1
属性リストって書くの楽でいいよなぁ。他の言語でこんなのやると罪悪感みたいのがわくけど、 こっちは関数があるおかげで「使っていいんだ」っていう雰囲気。
August 10, 2008
ディスプレイ買った 16:53
- Permalink
- Comments (316)
- Trackbacks (0)
日記
24インチワイド。今まで17インチだったのでとても大きく感じる。 テレビだよ、もうこのサイズは。
![]() | BenQ 24インチ ワイドTFTモニタ 1920x1020/D-Sub15Pin/DVI/ブラック G2400WD ベンキュージャパン 2008-05-09 売り上げランキング : 133 Amazonで詳しく見る by G-Tools |
August 12, 2008
gnome-terminalのウィンドウサイズ設定 23:22
- Permalink
- Comments (2394)
- Trackbacks (0)
Linux
- まずgnome-terminalを好きなサイズに変更する
- xwininfoでgnome-terminalのgeometryを調べる
- gnome-terminal起動するときに--geometry=<今調べたやつ>をつける
サイズくらい勝手に憶えておいてほしいなぁ。
--geometryの書き方は偽物雑記帳: gnome-terminalのサイズ変更参照。
August 19, 2008
PostgreSQL本 00:08
- Permalink
- Comments (328)
- Trackbacks (0)
book, PostgreSQL
PostgreSQLって今まで触ったことなかったので適当に入門本ぽいのを掴んでレジへ。
翔泳社
売り上げランキング: 191817
2000円しなくて安くていいんだけど、バージョン7.3てだいぶ古くなイカ。
August 20, 2008
timeout 02:29
- Permalink
- Comments (325)
- Trackbacks (0)
Gauche
RubyのTimeout.timeoutぽいのをGaucheで書いてみた。 こういうの結構必要な場面あると思うんだけど、毎回書くのかなぁ。 まあほんの数行だけどさ。それともなんかもっとイカすやつがあるのかなぁ。
(use gauche.threads)
(define (timeout sec proc)
(guard (e ((<uncaught-exception> e) (raise (uncaught-exception-reason e))))
(thread-join! (thread-start! (make-thread proc))
sec)))
;;--------------------------------
(print (timeout 5 (lambda ()
(sys-sleep 3)
"foo")))
;;=> foo
(guard (e (else (print e)))
(timeout 1 (lambda () (sys-sleep 5))))
;;=> #<join-timeout-exception #<thread #f runnable 0x80ec920>>
(timeout 10 (lambda () (error "error occured in proc")))
;;=> gosh: "error": error occured in proc
thread-join!は待ち時間が指定した秒数を越えると
join-timeout-exceptionを投げるらしいのでタイムアウトのエラーはそれをそのまま使ってる。
timeout用のエラーを作った方がいい気がするけどもう寝る。
どうせその次はモジュールにしたくなったりするんだ。
寝るべきだ。
いいこと思いついた。お前testのケツのところでapplyしろ 22:55
- Permalink
- Comments (2368)
- Trackbacks (0)
Gauche
述語を使ったテストって毎回こう……
(test* "3 is number" #t (number? 3))
expectに#tって書くのでめんどくさい。
(define-macro (test-true msg form) `(test* ,msg #t ,form))
という感じでマクロを書いてしまえば
(test-true "3 is number" (number? 3)) ;;=> test 3 is number, expects #t ==> ok
となるわけだけど、「expects #t」ってなんだかなぁと思ってちょっとこうしてみる。
(define-macro (test-pred msg pred form) `(test* ,msg ,pred (list ,form) apply))
(test* msg expect form compare)は中で(compare expect form)を評価してるので、
compareにapply渡してformをlistでくくると(apply pred (list form))つまり
(pred form)が#tならpassするテストが書ける。
すると
(test-pred "3 is number" number? 3) ;;=> test number, expects #<subr number?> ==> ok
てな具合にちょっとすっきり書けつつ、「expects #<sub number?>」ってあたりが惜しい感じ。 「expects number」とかになればいいんだけど、さすがにそれはgauche.testのメソッド上書き しないとダメっぽいなぁ。
ただまあ、処理とテストの式が分離できて見栄えはいい感じがする。ホントか?
(test-pred "returns number" (cut is-a? <> <number>) (do-something)) ;;=> test returns number, expects #<closure #f> ==> ok
表示はイケてない。
August 31, 2008
読んだ 00:09
- Permalink
- Comments (2315)
- Trackbacks (0)
book, Firefox
オライリージャパン
売り上げランキング: 2059
拡張作る人には良いんじゃないでしょうか。
timeoutのやつ 01:21
- Permalink
- Comments (325)
- Trackbacks (0)
Gauche
ググったらGaucheクックブックにあった (長時間かかる処理にタイムアウトをつける)。 リファレンスマニュアルしか探してなかったよ。 なるほどalarmってこういうふうに使うのか……。
ちなみにalarmだとうまく行かない正規表現のやつは、 スレッド版だとしっかりタイムアウトして返ってきました。 Rubyからパクったかいがあったよ。
(print (current-date))
(guard (e (else (print (current-date))))
(timeout 1
(lambda () (#/a+*$/ "aaaaaaaaaaaaaaaaaaaaaaaaaaaab"))))
% gosh timeout.scm #<date 2008/08/31 01:23:14.839329000 (32400)> #<date 2008/08/31 01:23:15.845366000 (32400)>
ところでクックブック再開キボン……(´・ω・`)




