Gauche > Archives > 2009/05/14

2009/05/14 00:00:17 UTCとおる。
#
ぼくも Ajax でにたようなのをまえにつくりました。ttp://ej.torus.jp/
#
英●郎の辞書をいれているので、おおっぴらにはできませんが(笑)。
2009/05/14 00:01:35 UTCshiro
#
すげ。これインクリメンタルな絞り込みって、単に一文字タイプされる度に辞書に問い合わせてるだけ?
2009/05/14 00:01:46 UTCとおる。
#
そうです。
#
サーバ側は sary をつかっています。めちゃはやいです。
2009/05/14 00:02:50 UTC(び)
#
saryって、Suffix Arrayのライブラリだっけ?
2009/05/14 00:02:59 UTCとおる。
#
http://sary.sourceforge.net/
#
そうそう。
2009/05/14 02:30:41 UTC(び)
#
うりゃ
#
一撃で再接続できる時と、しばらく(10分くらい)待っても全く再接続されない時とがあるみたい
2009/05/14 02:36:07 UTCshiro
#
10分待った時って、Connecting ... -> Connected 繰り替えしてた? それともConnectedのままだった?
#
経路途中でタイムアウトした場合は前者の症状になるけど、本来のコネクションが生きてればサーバからping backするタイミングで戻るはず (最長6分)
#
接続切れがブラウザで検知されない場合は後者の症状になって、8分でwatchdog timerが吠えて再接続するはず
#
8分すぎても何も変化が無い場合は想定外の何かが起きている
2009/05/14 02:47:32 UTCshiro
#
XHRの同時接続制限に引っかかってる可能性はあるかな? iframeのリロードかけた後、元のajaxがgcされるまで新しいページのajaxの実行が待たされることがあるとすれば、8分+α のディレイが発生するか。その場合、iframeは一旦ブランクになりそうだけど、描画のタイミング次第では元の内容が残っているかもしれない。
2009/05/14 02:53:41 UTC(び)
#
Retryingのままになってました
#
昨夜会社から帰宅した時ですね
#
ただその時は、自席で有線切断、会議室で無線接続(この時はchatonの接続状況確認せず)、帰宅後有線で接続して放置、10分後に見たらRetryingのまま、という流れなので、実際にどの時点でRetryingに変わったかは定かではありません
2009/05/14 02:56:31 UTCshiro
#
ふーむ。もう少し条件がわかるまで様子見しましょう。また起きたら教えてください。
2009/05/14 03:03:31 UTC(び)
#
了解です
#
候補が確定すると、inputに入力した文字列クリアしちゃうのね >とおる。
#
いきなり消えたんでビックラした
2009/05/14 03:10:09 UTCとおる。
#
あ、何もタイプしない状態で 5 秒くらいたつと、自動的に消えるようになってます。新しい語を入れるときにいちいち前のを消すのが面倒だったので。
2009/05/14 03:12:42 UTC(び)
#
おおなるほど、そういうことか
#
個人的には、消えないで全選択状態になってくれた方が嬉しいかも
#
そうすれば、消さんでも新しい単語タイプできるし
#
再利用したければそれもできる
#
と、思いました
2009/05/14 03:31:19 UTCとおる。
#
あーなるほど。それはおもいつきませんでした。たぶん簡単にできるのでやってみます。
2009/05/14 04:16:52 UTCえんどう
#
(use gauche.parameter)

(define-class <growl-setting> ()
  ((appname :init-keyword :appname
		     :accessor appname-of :init-value #f)
   (title            :init-keyword :title
		     :accessor title-of :init-value #f)
   (notifyer-path    :init-keyword :notifyer-path
		     :accessor notifiyer-path-of :init-value #f)
   (icon-path        :init-keyword :icon-path
		     :accessor icon-path-of :init-value #f)))

(define *growl-setting*
  (make-parameter
   (make <growl-setting> :appname "ChatonRader"
	 :title "Chaton Gauche"
	 :notifyer-path "/usr/local/bin/growlnotify"
	 :icon-path "/Users/yasuyuki/Public/Archives/chaton-room-gauche.gif")))

(define (growl-notify message . rest)
  (let ((appname (appname-of (*growl-setting*)))
	(title (title-of (*growl-setting*)))
	(npath (notifiyer-path-of (*growl-setting*)))
	(ipath (iconpath-of (*growl-setting*))))
    (sys-fork-and-exec npath
		       (list npath "-a" appname "-t" title "--image" ipath "-m" message))))

(define (main args)
  (growl-notify (cadr args)))
2009/05/14 04:27:05 UTCえんどう
#
Linuxではlibnotifyを使うと良いらしい
#
http://blog.x28.jp/archives/53
#
$ notify-send こんにちは! こんにちは!
#
おお
#
$ notify-send --help
Usage:
  notify-send [OPTION...] <SUMMARY> [BODY] - create a notification

Help Options:
  -?, --help                        Show help options

Application Options:
  -u, --urgency=LEVEL               Specifies the urgency level (low, normal, critical).
  -t, --expire-time=TIME            Specifies the timeout in milliseconds at which to expire the notification.
  -i, --icon=ICON[,ICON...]         Specifies an icon filename or stock icon to display.
  -c, --category=TYPE[,TYPE...]     Specifies the notification category.
  -h, --hint=TYPE:NAME:VALUE        Specifies basic extra data to pass. Valid types are int, double, string and byte.
  -v, --version                     Version of the package.
#
$ notify-send -i /home/yasuyuki/archives/chaton-room-gauche.gif こんにちは! こんにちは!
#
アイコンもおけー
2009/05/14 04:33:54 UTCshiro
#
べんりなよのなかだ
2009/05/14 04:40:41 UTCとおる。
#
すげー。Linux のデスクトップ環境がはじめて便利に思えました。
2009/05/14 04:45:45 UTCとおる。
#
あ、べつに GNOME と連動しているわけじゃないのか。
2009/05/14 05:37:23 UTCnobsun
#
_______________________________________
  0  (kahua-error-string exc (kahua-current-user))
        At line 1284 of "/home/karetta/daemontools/site/app/karetta/karetta.kahua"
  1  (make-error-page "Error: program error" `(,@(use-page "/$admin/pro ...
        At line 1282 of "/home/karetta/daemontools/site/app/karetta/karetta.kahua"
  2  kahua-default-error-proc

  3  (assoc key alist eq)
        At line 170 of "/usr/local/share/gauche/0.8.14/lib/util/list.scm"
  4  (assoc-ref (ref n 'property-list) nlang)
        At line 3244 of "/home/karetta/daemontools/site/app/karetta/book.kahua"
  5  (book-node-property book-node nlang)
        At line 3253 of "/home/karetta/daemontools/site/app/karetta/book.kahua"
  6  (book-node-title node)
        At line 593 of "/home/karetta/daemontools/site/app/karetta/book.kahua"
  7  (make <page> :title (book-name the-book) :key "/" :extra-head-elem ...
        At line 562 of "/home/karetta/daemontools/site/app/karetta/book.kahua"
  8  thunk

  9  (%reset (lambda () (handler)))
        [unknown location]
 10  (dynamic-wind (lambda () (set! tmp2a (kahua-current-context tmp1a) ...
        [unknown location]
 11  (kahua-default-handler header body reply-cont default-handler :err ...
        At line 116 of "/usr/local/lib/kahua/kahua-server.scm"
 12  proc

 13  (with-error-handler (lambda (e) (let ((e e)) (%guard-rec e e (else ...
        [unknown location]
 14  (for-each (lambda (h) (apply (car h) (cdr h))) (append (pick-handl ...
        At line 130 of "/usr/local/share/gauche/0.8.14/lib/gauche/selector.scm"
 15  (selector-select selector)
        At line 165 of "/usr/local/lib/kahua/kahua-server.scm"
 16  (do ((limit 100) (_ 0 (+ _ 1))) ((>= _ limit)) (selector-select se ...
        [unknown location]
 17  proc

 18  (run-server worker-id sockaddr profile)
        At line 241 of "/usr/local/lib/kahua/kahua-server.scm"
 19  (call/cc (lambda (bye) (define (finish-server sig) (log-format "[~ ...
        At line 227 of "/usr/local/lib/kahua/kahua-server.scm"
2009/05/14 05:38:06 UTChigepon
#
Mosh の並行モデルは Termite モデルが良さそうに思えてきた。
2009/05/14 05:38:25 UTCnobsun
#
エラーになっちゃった > yasuyuki
2009/05/14 05:38:38 UTC(び)
#
Termiteいいっすよね(眺めただけだけど) >higepon
#
Erlang的なメッセージングシステム欲しいなぁと思う
#
ブロック付きキューみたいなもん
2009/05/14 05:39:30 UTChigepon
#
ですです>メッセージ。
2009/05/14 05:39:38 UTC(び)
#
ブロッキングキューとでもいうのかな
2009/05/14 05:39:44 UTChigepon
#
spawn が環境を親から継承しないのも良いかなと。
2009/05/14 05:39:49 UTC(び)
#
キューが空だったらブロックしてくれるのがいい
2009/05/14 05:40:13 UTChigepon
#
パターンマッチで receive できるのが柔軟で良いですよね。
2009/05/14 05:40:30 UTC(び)
#
全部がちゃんとメッセージングベースでできるなら、それがすっきりしてていいですよね >環境を継承しない
2009/05/14 05:41:12 UTChigepon
#
全部ができるかどうかってのは怪しくて、Erlang の ETS のような key value store が別に要るんじゃないかなと
#
思っています。
2009/05/14 05:41:35 UTC(び)
#
ETSって同期はどうしてるんですっけ?(よく知らない)
2009/05/14 05:42:41 UTChigepon
#
僕も詳しくないのですが、少なくともアクセス権とかはつけられたような。read-only とか。同期はメッセージでの notify なんですかね。
2009/05/14 05:42:43 UTC(び)
#
Termiteの実装そのものは、だいぶ前に遊んでみた時、いきなりSEGV喰らったのでそれ以降は触ってないんですが(笑)
2009/05/14 05:43:19 UTCえんどう
#
なにをしたときのエラーでしょう>nobsun
2009/05/14 05:43:21 UTC(び)
#
ああなるほど、重いデータはETSに書き込んで、メッセージではnotifyだけするのか
2009/05/14 05:43:33 UTChigepon
#
Termite は論文を読む限り、実験実装っぽいですよね。Gambit の上にのっけたみたいな。
2009/05/14 05:43:50 UTC(び)
#
そう、Gambit上にかぶせたみたい
2009/05/14 05:44:14 UTCえんどう
#
あれ、エラーを表示しようとしてエラーになっているのか?>karetta
2009/05/14 05:45:07 UTC(び)
#
ライブラリでかぶせるってのは難しそうな気がしたけど、ruiさんが年末にGauche用にいろいろ作ってたのは、そういう方向への布石かなとちょっと思った
2009/05/14 05:45:11 UTCshiro
#
ブロックキューはいくつかの仕事で使っている実装があるんですが
#
仕様がうまく固まらなくてGaucheに標準搭載するまでに至ってません。
2009/05/14 05:45:47 UTC(び)
#
ブロックには何を使ったんですか?
2009/05/14 05:45:47 UTChigepon
#
おお。>ブロックキュー
2009/05/14 05:45:51 UTC(び)
#
mutex?
2009/05/14 05:46:00 UTCnobsun
#
インポートしました という表示はでたよ > yasuyuki
2009/05/14 05:46:02 UTCshiro
#
短にmutexしてるだけです。
2009/05/14 05:46:14 UTCえんどう
#
4  (assoc-ref (ref n 'property-list) nlang)
        At line 3244 of "/home/karetta/daemontools/site/app/karetta/book.kahua"
#
これか
2009/05/14 05:46:21 UTCshiro
#
で、dequeueでブロック、タイムアウトつき、くらいまでは素直なんですが、
#
enqueueでもブロックすべきか、とか
2009/05/14 05:46:44 UTCえんどう
#
インポート後の状態は空っぽのまま?>nobsun
2009/05/14 05:47:00 UTC(び)
#
mutexだと、キューをいっぱい作ると資源が足りなくなりそうな気がするけど、そこまでばかすか作るのはアプリの設計が間違ってるのかな(笑)
2009/05/14 05:47:03 UTChigepon
#
queue が満タンのときのブロックですか? enqueue
2009/05/14 05:47:20 UTCshiro
#
enqueueでも、というのは、一定数以上にキューが長くなったらブロックさせるということです。producerの方が速い場合。
2009/05/14 05:47:35 UTCnobsun
#
インポートしたあとになにかを表示しようとしたみたいだけど、それでエラー > yasuyuki
2009/05/14 05:47:49 UTChigepon
#
ああ。それは開発時には絶対必要ですね。
2009/05/14 05:47:59 UTC(び)
#
それやると、双方向で使った時にデッドロックが起き得ますね >enqueueでブロック
2009/05/14 05:47:59 UTCえんどう
#
windows messengerつかえますか?>nobsun
2009/05/14 05:48:06 UTCshiro
#
そうそう> (び)
#
で、結局実用コードではenqueueでブロックしそうになったらnotifyを呼ぶとか
#
あとgraduallyにスレッド間のペースを合わせるために
#
high-watermark low-watermarkを設定して
#
それぞれnotifyが飛ぶとか、
2009/05/14 05:49:02 UTC(び)
#
なるほど
2009/05/14 05:49:06 UTCshiro
#
結構インタフェースがごっちゃりしちゃったので見直してるところです。
2009/05/14 05:49:10 UTChigepon
#
なるほど。なるほど。
2009/05/14 05:49:43 UTC(び)
#
わたしもブロッキングキューをすこし検討したとき、そのあたりでメゲて投げ出したのでした(弱)
2009/05/14 05:49:56 UTCshiro
#
実行モデルとしては、スレッド間同期をメッセージキューで待たせるモデルはとてもシンプルです。
2009/05/14 05:50:03 UTC(び)
#
ブロッキングキューのためのselectが欲しくなった(笑)
2009/05/14 05:50:27 UTCshiro
#
そう、そのへんイベントライブラリとして統一したいですね。
2009/05/14 05:50:37 UTChigepon
#
producer/consumer パターンは分かりやすいですよね。
#
Mosh では send/recv はコピー渡しにするかもしれません。
2009/05/14 05:51:50 UTCshiro
#
Erlangみたいな?
2009/05/14 05:52:15 UTChigepon
#
そうです。ネットワーク上の Mosh とローカル Mosh が同じような動きになる世に。
2009/05/14 05:52:25 UTCshiro
#
Lisp/Schemeの場合、「コピー」の意味がはっきり決めにくいという問題があります。
2009/05/14 05:52:25 UTChigepon
#
ように。
2009/05/14 05:52:39 UTCshiro
#
どこまでdeep copyすればいいのかが、コード書いた人にしか判断できない。
2009/05/14 05:52:45 UTC(び)
#
ディープコピーかシャローコピーかってはなしですか? >shiro
2009/05/14 05:53:06 UTCshiro
#
immutableなデータ構造というのがはっきり決まってればわかりやすいんですが。
2009/05/14 05:53:52 UTC(び)
#
sendにコピーの実処理をするクロージャがわたせればOK?
2009/05/14 05:53:53 UTCshiro
#
(全部immutableの場合、プログラム自身にはそれがコピーかどうかなんてわからないので、処理系の都合の良いように共有/コピーできる)
2009/05/14 05:54:02 UTChigepon
#
そうですね。頭の痛い問題です。
2009/05/14 05:54:31 UTCshiro
#
Schemerの一部にpairを原則immutableにしようという勢力があるのも、うなずける部分はあります。
2009/05/14 05:54:46 UTChigepon
#
まあでも、実際のデータのやり取りはシンプルなリストが大半だろうと予測していて
#
そこまで心配してないのですが、心配すべきだろうか。
2009/05/14 05:55:44 UTC(び)
#
実際に使ってみないとわからない部分な気もしますが
2009/05/14 05:55:45 UTCshiro
#
コンベンションを決めて運用で何とかするっていうのはありだと思います。
#
リストはspineしかコピーしないよ、と決めとくとか。
2009/05/14 05:56:36 UTChigepon
#
spine: 脊柱{せきちゅう}、脊椎{せきつい}、背骨
#
なるほど。
#
そういえば Gauche の thread で
#
あそんでいたのですが。
#
(define b (make-thread (lambda () a)))
#
この a は thread-start! ではじめて評価されるという理解で合っていますでしょうか?
2009/05/14 05:58:43 UTCshiro
#
はい。thread-start!でthunkの評価が始まります。
2009/05/14 05:59:35 UTChigepon
#
(define b (let ([x a]) (make-thread (lambda () x))))
#
gosh> a
101
gosh> (set! a 50)
50
gosh> (thread-start! b)
#<thread #f runnable 0x41e7f8>
#
gosh> (thread-join! b)
101
#
ああ。そうか。これは。define 時に評価されているのか。
#
失礼しました。
2009/05/14 06:01:05 UTCshiro
#
ですね。
#
環境は共有されてるので、スレッドの中で(set! x ..)したらスレッドの外からも見えます。
#
これも、Erlangモデルのように環境がimmutableだと話は簡単なんですけどね…
2009/05/14 06:02:24 UTChigepon
#
確かに。R7RS で完全 immutable になったら面白いだろうな。
2009/05/14 06:03:03 UTCshiro
#
ただ、お互いに見えるmutableな変数を使って同期を取ったりするコードは私は良く書きます。スレッド内のループでキューのタイムアウトの度にフラグをチェックして、フラグが立ってたら終了、とか。
#
書く人と読む人がちゃんと分かれていたらmutableな変数もそんなに悪いものじゃないです。
2009/05/14 06:04:25 UTCnobsun
#
互換性の問題なの?immutableにしないのは
2009/05/14 06:04:38 UTChigepon
#
そうですね。問題はそういう単純な使い方以外に、使ってしまう人が多い事でしょうね。
2009/05/14 06:04:45 UTCshiro
#
それも大きいですね。セマンティクスがかなり変わるので>nobsun
2009/05/14 06:04:54 UTChigepon
#
デフォルトでたくさんの世界を共有しているので。
2009/05/14 06:05:46 UTCnobsun
#
そらそうか、immutableにしちゃったら、別の言語だもんねぇ。
2009/05/14 06:05:56 UTCshiro
#
あと、処理のタスクを構造体にパックしておいて、別々のスレッドが別々の箇所を触るってのも良く書きます。このタスクが100万個くらいある場合、処理がまわり出したらアロケーション無しでいけるので便利。
#
immutable中心でもかけなくはないけど、アロケーション無しにするのは面倒くさそうです。
2009/05/14 06:06:46 UTChigepon
#
それは何だかロックストライピングに似てますね。
2009/05/14 06:07:03 UTCshiro
#
結局、今動いているコードがぐんと遅くなってしまうような変更というのは入れにくいんですよねー。
#
ちょっと出かけてきます。
2009/05/14 06:07:36 UTChigepon
#
いってらっしゃい〜。
2009/05/14 06:18:20 UTC(び)
#
ClojureがCLでもSchemeでもなくClojureじゃなきゃならなかったのはその辺なんだろうな
2009/05/14 06:23:35 UTCとおる。
#
Perl 5.8 のスレッドは、環境丸ごとコピーしてたのですごく遅かったなぁ。
2009/05/14 06:24:01 UTChigepon
#
fork をエミュレートみたいな感じでしょうか。
2009/05/14 06:24:40 UTC(び)
#
Linuxのclone(2)とか?
2009/05/14 06:25:49 UTCとおる。
#
ああ、fork とほとんど変わらない感じ。で、共有するデータは shared というアノテーションをつけて指定してました。
#
あと、スレッド間の通信は、ベルトコンベアみたいな名前のキューを使ってやるんですが、
#
データはすべてシリアライズしてから載せないといけないので、大変でした。
#
スレッドは Perl のダメな部分が目白押しなので、それ以降 Perl でスレッド使うのはやめました。
2009/05/14 06:27:15 UTChigepon
#
なるほどなるほど。
#
(
2009/05/14 06:27:23 UTCえんどう
#
##(link2sicpマクロあった方がよい?>nobsun
2009/05/14 06:27:39 UTChigepon
#
楽しげなマクロ名だw。
2009/05/14 06:28:03 UTCとおる。
#
Perl 5.6 は、割と低レベルのスレッド API に近かったんですが、たぶん、プログラムが複雑になりすぎるのを嫌ったんだと思います。
2009/05/14 06:28:09 UTC(び)
#
全部シリアライズ...
#
じゃあ、手続きは渡瀬内の?
#
わたせないの?
2009/05/14 06:28:31 UTCとおる。
#
Data::Storeable だったかな。
#
わたせないです。
#
だから、手続きの名前と引数の組を渡してたような。
2009/05/14 06:28:53 UTC(び)
#
げー、それスレッド使う意味ない(極論)
2009/05/14 06:29:03 UTChigepon
#
な、名前!
2009/05/14 06:29:25 UTCえんどう
#
##(sicp-answer-code か。マクロだらけだな。
2009/05/14 06:29:36 UTC(び)
#
やって欲しい仕事をクロージャにして他のスレッドに渡してあとはよろしく、というのをよくやります
#
Gaucheでの話ですが
#
Cでは無理(笑)
2009/05/14 06:30:06 UTCとおる。
#
C++ なら OK。
2009/05/14 06:30:49 UTC(び)
#
それって、Boost?
2009/05/14 06:30:58 UTCとおる。
#
std::tr1::function とかかくと、関数オブジェクトになるので便利です。
2009/05/14 06:30:59 UTC(び)
#
別にBoostじゃなくてもいいのか
#
ああなるほど
2009/05/14 06:31:19 UTCとおる。
#
あ、はい。TR1 はいまは Boost に入っているのが良く使われていると思います。
2009/05/14 06:31:27 UTC(び)
#
C++のテンプレートは挫折してほっぽらかしのままだ
2009/05/14 06:31:38 UTCとおる。
#
VC++ 2008 には TR1 が標準で入ってる。
2009/05/14 06:32:07 UTC(び)
#
使うのはいいんだけど、コンパイルエラーが起きたとき、原因がどこにあるのかわからなくて涙目
2009/05/14 06:32:22 UTCとおる。
#
慣れれば読めるようになります :)
2009/05/14 06:32:28 UTC(び)
#
うはー
2009/05/14 06:32:32 UTCとおる。
#
たぶん Lisp の括弧と同じだと思います。
2009/05/14 06:32:39 UTC(び)
#
そういうもんですか
#
精進精進
2009/05/14 06:32:59 UTCとおる。
#
あ、でも、エラーメッセージをわかりやすくする工夫もいろいろあるみたいですよ。
#
Loki とかはそういうの意識してるみたい。つかったことないけど。
2009/05/14 06:34:45 UTCえんどう
#
http://oss.timedia.co.jp/show/SICP/ex-1.2
#
展開されてない。
2009/05/14 06:45:53 UTCえんどう
#
$ cat sicp.kahua 
;;-*-Scheme-*-
;; Kahua website macro for SICP
;;
;;  Copyright (c) 2004 Scheme Arts, L.L.C., All rights reserved.
;;  Copyright (c) 2004 Time Intermedia Corporation, All rights reserved.
;;  See COPYING for terms and conditions of using this software
;;
;; $Id: macro.kahua,v 1.17 2004/11/05 13:21:16 nobsun Exp $

;;---------------------------------------------------------
;; Link to SICP page at MIT Press
;;
(define sicp-book "http://mitpress.mit.edu/sicp/full-text/book/")
(define sicp-code "http://www.kahua.org/download/sicp/")

(define-wiki-macro (link2sicp pos str)
  `((a (@ (href ,(string-append sicp-book pos))
          (target "_NEW_"))
       ,str)))

(define-wiki-macro (sicp-answer-code fn)
  `((a (@ (href ,(string-append sicp-code fn)))
       ,fn)))
#
みつけた
#
kahua-web trunkに入れてしまうのはまずいだろうか?
2009/05/14 06:52:38 UTCえんどう
#
http://karetta.jp/book-node/YetAnotherSICPAnswerBook/250797
#
karettaには反映した。
2009/05/14 07:01:43 UTCshiro
#
戻ってきた
#
もし、moshで特定のデータ構造をimmutableとマークする手段があるなら、
#
「スレッド間で共有されるデータ構造はデフォルトで自動的にimmutableになる」としてしまう手はあるかもしれません。
#
そうすると、プロセス内スレッドではデータ本体が共有できます。
#
あーでも環境からいくらでも手繰ってゆける可能性があるから、「スレッド間で共有されるデータ構造」の範囲が決めにくいのか。
#
むしろグローバルから手繰れる可能性のあるデータは全部copy on writeにしちゃう?
#
となるとセマンティクスが変わっちゃうな。
2009/05/14 07:05:33 UTChigepon
#
>「スレッド間で共有されるデータ構造はデフォルトで自動的にimmutableになる」
#
この発想はなかったです。
2009/05/14 07:06:23 UTCshiro
#
綺麗なモデルを作ろうとおもったら、やっぱり互換性は捨ててground upでつくらないとダメかも。
#
つまりclojure路線。
2009/05/14 07:07:47 UTChigepon
#
最初はコンベンションベースでやってみて、いろんなケースを見てみないと、最適なモデルは中々分からなそうですね。
2009/05/14 07:09:16 UTCshiro
#
モデルの有効性というのは、実装を使ってかなり色々アプリを書いてみないとわからないけれど、
#
かなり色々アプリを書いた後で根本的なセマンティクスの変更をしようとすると全部書き直しになっちゃう
#
というのがこのへんのデザインの難しさですね。
#
Gaucheでは、利点欠点含めて既にかなりわかっているモデル (具体的にはpthread) を一つのレイヤとして実装しておいて、その上に抽象レイヤを積んでゆき、
#
うまく動く抽象レイヤが出てきたら、徐々に下層レイヤをフェードアウトさせてゆく
#
という狙いでやっていますが、どうなることか。
2009/05/14 07:12:53 UTChigepon
#
そうですね。自分もきちんと下層のプリミティブを見きわめて、あとはScheme 抽象レイヤを積み上げて、コストを下げたいと思っています。Gauche の並列化への解は楽しみです。早く見てみたい。
2009/05/14 07:17:28 UTChigepon
#
http://groups.google.com/group/comp.lang.scheme/browse_thread/thread/5beb71bdba96d122?hl=en
#
確かに R6RS 用の match はデファクトスタンダードが欲しいなあ。
#
match は知らないと損をするライブラリの1つだよなあ。
2009/05/14 07:18:20 UTCshiro
#
そのうち誰かがsrfiにするんじゃない?
2009/05/14 07:18:22 UTC(び)
#
でも、使い始めると何でも釘に見えちゃう(笑) >match
2009/05/14 07:18:58 UTCshiro
#
告白するけど、util.matchの機能はbuiltinにしちゃおうかと思ってる。
2009/05/14 07:18:58 UTChigepon
#
そうなると良いですね>srfi
2009/05/14 07:19:14 UTCshiro
#
自分が書くほとんどのコードで使ってるから。
2009/05/14 07:19:17 UTChigepon
#
おお>builtin 。
2009/05/14 07:19:46 UTC(び)
#
autoloadではなく、builtinになるのですか?
2009/05/14 07:20:45 UTCshiro
#
その区別はあんまり考えてない。
2009/05/14 07:20:48 UTC(び)
#
確かにある規模以上のコードで、util.matchを使わないことはあんまりないかも
2009/05/14 07:21:03 UTCshiro
#
実装はautoloadになると思うけど、見掛け上は何もしないでも使える、ということ。
2009/05/14 07:21:11 UTC(び)
#
なるほど
2009/05/14 07:21:42 UTChigepon
#
matcher の実装に詳しくないんですが、高速な実装とかあるんでしょうか。
2009/05/14 07:22:13 UTCshiro
#
展開の高速性ってこと?
2009/05/14 07:22:30 UTChigepon
#
はい。
2009/05/14 07:22:44 UTCshiro
#
matcherは一種のコンパイラみたいなもんなんで、「展開後の高速性」と「展開の高速性」はあるていどトレードオフになる気がする。
2009/05/14 07:23:26 UTChigepon
#
ああ。ごめんなさい。展開後の高速性でした。
2009/05/14 07:23:31 UTCshiro
#
特に同一の部分構造のマッチを実行時に一回で済まそうとするなら、パターン数nに対してn^2かかりそうな。nlognga
#
nlognがあるかもしれないけど。
#
展開後の高速性ならwrightのmatchでも結構いけてると思うけれど。
#
wrightのmatchはトップダウンで見た時の同一部分構造の検査は一回だけやるようになっている。
2009/05/14 07:25:26 UTChigepon
#
全く根拠はないんですが inner loop で match を使うと速度が若干不安になるという。気持ちがあります。
#
おお>同一部分構造
2009/05/14 07:26:03 UTCshiro
#
その不安は何か体験があるの? matchの展開結果を見ると、手で速度を気にして書いた場合とほとんど変わらないと思うよ。
#
(=> fail) を使うとcall/cc呼ぶから遅くなるけど。
2009/05/14 07:26:50 UTChigepon
#
体験はないです。展開結果をちゃんと見た事がないので見てみます。
2009/05/14 07:26:56 UTCshiro
#
あとすごく複雑なmatch条件 (n回マッチ、とか) の場合はどうかわからない。
#
でもリスト構造にマッチかけるような場合なら、手で書くのと同じ。
#
あ、あと、たとえばcadrとcddrを検査する場合に、 (let ([tmp (cdr x)]) (and (test1 (car tmp)) (test2 (cdr tmp)))) のように途中を一時変数にすることはやらないで、
#
(and (test1 (cadr x)) (test2 (cddr x))) みたいな展開結果にはなってたと思う。
#
Gaucheの場合cadr,cddrなど使った方が速いし、賢いコンパイラなら後者を前者に最適化することは可能だと思うけど。
2009/05/14 07:31:32 UTChigepon
#
(%macroexpand
(match x
  [(a b)
   (list a b)]
  [(a b . c)
   (list a b c)]))

(if (and (pair? x) (pair? (cdr x)))
    (if (null? (cddr x))
        ((lambda (a b) (list a b)) (car x) (cadr x))
        ((lambda (a b c) (list a b c)) (car x) (cadr x) (cddr x)))
    (match:error x))
#
おおお。面白いな。
2009/05/14 07:33:10 UTCshiro
#
ちゃんと先頭2要素のテスト部分がまとめてあるでしょ。
2009/05/14 07:33:50 UTChigepon
#
はい。
2009/05/14 07:34:07 UTCnobsun
#
ふと思いだした グラフ還元 って graph reduction のこと? > び
2009/05/14 07:36:02 UTChigepon
#
美しいなあ。
2009/05/14 07:45:42 UTC(び)
#
はい >nobsun
#
何か変だと思ったが、どっかの論文にその語が出てたんでそのまま使った
#
元は英辞郎
2009/05/14 07:46:57 UTCnobsun
#
reduction には 簡約 をあてるのが定訳だと思う
2009/05/14 07:46:58 UTC(び)
#
graph reductionって定訳あるの?
#
ほう
2009/05/14 07:47:08 UTCnobsun
#
グラフ簡約
2009/05/14 07:47:12 UTC(び)
#
graph簡約
#
なるほど
#
校正時に直します
2009/05/14 08:50:22 UTC(び)
#
http://cruel.org/freeware/hack.html
#
今ちょっとこの文章読んでて思ったんだけど、cruftって言葉は、craftの1文字を変えて生み出された単語なのかしら
2009/05/14 08:51:11 UTCshiro
#
なつかしい文章だ
2009/05/14 08:51:20 UTC(び)
#
はい、今さら読んでます(笑)
#
「あれはhackというよりcraft」という下りを読んでふとcruftのことを思い出したねすが
#
んですが
2009/05/14 08:52:30 UTCshiro
#
cruftの語源は気にしたことなかったけど、今wikipedia見たら、
#
The origin of the term is uncertain, but it may be derived from Harvard University Cruft Laboratory, which was the Harvard Physics Department's radar lab during World War II.
#
As late as the early 1990s, unused technical equipment could be seen stacked in front of Cruft Hall's windows. According to the student body, if the place filled with useless machinery is called Cruft Hall, the machinery itself must be cruft.
#
とか
#
Another possible origin is that the word evokes the words crust, fluff and scruffy.
#
toiu
2009/05/14 08:53:47 UTC(び)
#
ほほぉ
2009/05/14 08:53:48 UTCshiro
#
という説もあるようだ。
2009/05/14 08:54:42 UTC(び)
#
craftは関係なさそうですねぇ
2009/05/14 08:55:20 UTCshiro
#
英語ネイティブの語感というのは想像するしかないのだけれど、母音の違いって結構大きな違いとして認識されてるような気がする。
#
「ちょっと変える」なら子音の方がありそうな。
#
あ、でもそうでもないか。母音の違いの語呂合わせとかあるな。
2009/05/14 08:56:19 UTC(び)
#
ふむ
#
もう何だったか忘れちゃいましたが、何かの単語のrをlに置き換えた言葉を使ってるのを本で読んで
#
「あれ、ネイティブから見ても、lとrの発音は紛らわしいものなのかな?」と思ったことがあったのでした
#
最近、こういうのがすごく気になる
2009/05/14 08:58:31 UTCshiro
#
lとrの距離は近い気がする。craftのaとcruftのuよりも少し。
2009/05/14 08:58:49 UTC(び)
#
なるほど
2009/05/14 08:59:05 UTCshiro
#
To sit in solemn silence in a dull, dark dock,
In a pestilential prison, with a life-long lock,
Awaiting the sensation of a short, sharp shock,
From a cheap and chippy chopper on a big black block!
#
芝居のクラスで発音練習に使った
#
母音の使い分け。
2009/05/14 08:59:38 UTC(び)
#
おお
2009/05/14 09:00:23 UTCshiro
#
でもこれは明らかに違うことをわかっててリズムを楽しむって感じなのかなあ。
2009/05/14 09:01:12 UTC(び)
#
英語は等拍言語じゃないですからね
#
日本語にも子音だけの発音、ってないわけじゃないと思うんだけど、拍は等拍ですもんね
#
小泉文夫の受け売りですが(笑)
2009/05/14 10:03:28 UTCとおる@ファイヤーフォックス。
#
普段からスペルを意識してないとぜんぜん使い分けられないですねぇ。
2009/05/14 11:11:43 UTC(び)
#
Retrying出っぱなしになりました
#
リロードして回復
2009/05/14 11:13:12 UTCshiro
#
さんくす。こっちのログには特に重複リクエストha来てないから、
#
ha
#
は来てなかったので、もっと下のレイヤでつなげなかったのかな。
#
だがwatchdogが吠えなかったのは変だなあ。
2009/05/14 11:14:45 UTC(び)
#
common-lisp部屋はRetryingのままにしてあるんですが、何か出来ることはありますか?
2009/05/14 11:16:29 UTCshiro
#
うーん、
#
思いつかないや。
#
setTimeoutされてるprocedureの一覧、とかを見る手段なんて無いよね。
#
そもそも吠えてないんだからsetTimeoutされてないってことだろうなあ。
2009/05/14 11:19:15 UTC(び)
#
今「開発」メニュー項目を漁っているところです
2009/05/14 11:19:30 UTCshiro
#
Safari?
2009/05/14 11:19:30 UTC(び)
#
SafariでJavaScriptのデバッグなんてやったことないんで(笑)
#
そうですSafari3.2.3
2009/05/14 11:20:49 UTCshiro
#
Develop > Start Debugging Javascript でなんかふぁんしーな画面は出てくる養田が
#
ようだが
2009/05/14 11:21:15 UTC(び)
#
Web Inspectorですかね?
2009/05/14 11:21:36 UTCshiro
#
お、すごい。各ドキュメントのロード時間とか出るんだ。
#
そうそう。
2009/05/14 11:22:09 UTC(び)
#
Console見てるんですが何も出ないですね
#
seqって何じゃらほい
2009/05/14 11:22:55 UTCshiro
#
Resourcesのタブで、XHRリクエストは何度もリトライされてる? それともひとつがずっとつながりっぱなし?
#
seqはですね。未読件数をpollしてるんです(ださい)
#
iframeの中は未読件数わかるんですが、それを外に伝える手段をまだ見つけてないので
2009/05/14 11:24:24 UTC(び)
#
Web InspectorにResourcesってタブなないみたい
2009/05/14 11:24:40 UTCshiro
#
あ、じゃあSafari 4からの新機能なのかな。
#
横軸が時間で、縦軸にurlがあって、どのurlをどの時点にリクエストしてどの時点までにフェッチしたかが出るんですよ。
2009/05/14 11:28:26 UTC(び)
#
一番下に「Network」ってのがあって、それがメニュー項目のネットワークタイムラインに対応してるんですが
#
たぶんそれのことだな
2009/05/14 11:28:32 UTCshiro
#
今XHRでアクセス中のリクエストのURLってわかる?
#
ポート番号がついてる方。
#
それのGETリクエストのパラメータに、c=114451395 ってのがないかな。
#
あ、まてよ最後に切れたのがいつかわからないからこれとは限らないか…
2009/05/14 11:30:08 UTC(び)
#
各項目にポインタ当てないとURIが出ないってのが何とも調べにくい...
2009/05/14 11:31:20 UTCshiro
#
すまん、上のc=なんとか、は忘れて。
#
たぶん違う。
2009/05/14 11:33:23 UTC(び)
#
common-lisp部屋はseqが延々と並んでる
#
発言がないせいなのかな
2009/05/14 11:33:39 UTCshiro
#
いや、違わないか? それまでオフィスにいた? これ(び)さんのオフィスのIPだもんな。
#
ああ、「これ」っていうのは私が見てるログのIPね。上のc=の数字とは関係ないです。
2009/05/14 11:35:00 UTC(び)
#
リロード前はオフィス
#
リロードする前に自宅に帰って来て
#
今支度
#
自宅
2009/05/14 11:35:33 UTCshiro
#
04:12 PDTだから01:12HSTってことは20:12JST。この時にheartbeatが届かなくてこっちは諦めてる。
2009/05/14 11:36:13 UTC(び)
#
そして今面白いことがわかった
2009/05/14 11:36:33 UTCshiro
#
で、以降はそのパラメータでのアクセスが届いてないから、cometへの再接続がどっかで止まってるってことだな
#
え、なになに
2009/05/14 11:37:26 UTC(び)
#
common-lisp部屋、Retryingが出てる状態で「テスト」って3回発言したのだけど、その度に、seqじゃないところからレスポンスがある
#
って、あーこれはあれだ
#
posterだ
#
だから当然か
2009/05/14 11:38:11 UTCshiro
#
発言は chaton-poster-commonlispjp というcgiを叩いてる
2009/05/14 11:38:27 UTC(び)
#
んで、その後もseqへのリクエストは飛び続けている
2009/05/14 11:38:38 UTCshiro
#
へい。seqは別。
2009/05/14 11:38:42 UTC(び)
#
ということは、ポーリングしているループはまわり続けている、と
2009/05/14 11:39:03 UTCshiro
#
ほんとはマウスがその画面に当たってるときはポーリング止めてるはずなんだけど、
2009/05/14 11:39:05 UTC(び)
#
cometサーバへの接続は切れているけど、watchdog吠えない、と
2009/05/14 11:39:24 UTCshiro
#
そのコードが動いてないのかも。いずれにせよcometサーバの方はiframeの中なんで別の世界。
#
えーっと、Connecting... にもならずにRetrying...のままなんだよね?
2009/05/14 11:40:34 UTC(び)
#
うん
#
Connection Lost. Retrying...
2009/05/14 11:41:20 UTCshiro
#
あ、確かにそこで止まってたら番犬吠えないわ。
#
番犬黙らす→"Retrying..."→10秒くらい待つ→"Connecting..."→番犬起こす→XHR
#
という手順なので、「10秒くらい待つ」のところで何か起きてたら番犬は黙ったままだ
2009/05/14 11:42:38 UTC(び)
#
10秒くらい、ってのはsleepしてるだけですか?
2009/05/14 11:42:40 UTCshiro
#
んー、でもエラーコンソールには何も出ていない、と。
2009/05/14 11:42:49 UTC(び)
#
出てないですね
2009/05/14 11:42:51 UTCshiro
#
いえ、setTimeout(function () { resumeFetch(cid); }, 5000 + irandom(10000));
2009/05/14 11:43:16 UTC(び)
#
あ、そっちか
2009/05/14 11:43:31 UTCshiro
#
として5〜15秒後にresumeFetchが起動され、そいつが"Connecting..."を表示してから再フェッチにいきます。
#
たぶんそこで止まってる。
2009/05/14 11:44:37 UTC(び)
#
このコンソールちゃんと機能してるんだろうな...
2009/05/14 11:45:07 UTCshiro
#
seqが動いてるってことは、setTimeoutのままOSがsleepしてもtimeout自体はちゃんと動きつづけるってことだよな…
2009/05/14 11:45:25 UTC(び)
#
そうだと思います
#
次回はsleepする前にWeb Inspector起動しっぱなしにしてやってみます
#
コンソール出しといたら、何かわかるかもしれないし
2009/05/14 11:47:59 UTCshiro
#
あーありがとうございます。
2009/05/14 11:50:13 UTC(び)
#
common-lisp部屋リロード
#
ちょと食事を
2009/05/14 13:48:26 UTCkiyoka
#
15日なので、Lingrの過去ログはもうすぐ手に入るでしょう。
#
過去ログは、chatonの過去ログとして復元するほうがいいでしょうか?
#
XMLでデータがもらえるようなので、何にでも変換できると思いますが。
#
私のほうがあまり時間が取れないので、とりあえずもらったXMLをどこかに置きますね。
#
時間があれば、その後、OlDTypeにでも変換してGoogle検索できるようにしようかなと思っています。
2009/05/14 14:00:58 UTCshiro
#
15日ってJST?
#
西海岸はまだ14日の朝
#
もう一日あるかも。
#
Chaton形式に素直に変換できるかどうかもわからないので、当面はXMLのままどこかに置いておくのでいいんじゃないでしょうか。
2009/05/14 14:11:27 UTC(び)
#
うぉ、信越で100kmのトレイルレースがっ...
#
あのコースで100kmなら走りたいなー
2009/05/14 14:12:08 UTCshiro
#
百キロ〜 何時間くらい?
2009/05/14 14:12:18 UTC(び)
#
制限時間は22時間
2009/05/14 14:12:24 UTCshiro
#
鉄人
2009/05/14 14:12:50 UTC(び)
#
去年参加した斑尾の50kmレースは制限時間9時間でした
#
コースがかぶってることを考えると、まあそんなもんかと
2009/05/14 14:13:44 UTCshiro
#
速い人だと100kmどのくらい? マラソンと同じペースなら5時間台だろうけど、そんなことは可能なの?
#
トレイルだから走り方も違いそうな。
2009/05/14 14:14:54 UTC(び)
#
8時間くらいじゃないっすかね
#
トレイルだと
#
もちろんコースにもよりますが
#
いわゆる舗装路を走るウルトラだと、5時間切るんじゃないかな
#
と思ったらそんなこともないや
#
去年のサロマ湖100km(舗装路)は、男子の優勝タイムが6時間42分5秒だって
2009/05/14 14:17:57 UTCshiro
#
さすがに20km/hをキープするのは無理ですか。
#
それでも平均15km/hか。すごいな。
2009/05/14 14:19:12 UTC(び)
#
去年のおんたけウルトラトレイル100kmは優勝タイムが8時間26分44秒
#
トレイルというよりは林道に近いジープ道だったそうだけど
2009/05/14 14:20:55 UTCshiro
#
そういえば痛めた足はもう大丈夫なの?
2009/05/14 14:21:29 UTC(び)
#
まぁ、100kmクラスのウルトラは、陸連参加選手みたいな有力選手はあまり参加しませんからね
#
陸連公認の大会じゃないし
#
あー、スネはもう大丈夫です
#
ハムストリング(1ヶ月前に筋膜炎起こした)は、微妙です
#
日曜日はレースなんですけどね(笑)
2009/05/14 14:22:52 UTCshiro
#
おだいじにー
2009/05/14 14:23:27 UTC(び)
#
ありがとうございます
#
http://doshi-kanko.com/torair/doshi_kosu.pdf
#
こんなところを走ってきます
2009/05/14 14:24:26 UTCshiro
#
私は2回やったぎっくり腰の遠因が、10年以上前にインラインホッケーで壁に激突した時の古傷なんじゃないかと疑ってます。だましだまし付き合ってくしかなさそう。
2009/05/14 14:25:16 UTC(び)
#
ああ、古傷の可能性はあると思いますよ
2009/05/14 14:25:41 UTCshiro
#
ほぇ、高低差1000mもあるの? 登山じゃん!
2009/05/14 14:25:41 UTC(び)
#
あと、腰に限らずどこかに故障があると、そこをかばって腰に来るってのはあります
#
道志山塊ってのは、丹沢山塊の西にある、れっきとした山岳地帯です(笑)
2009/05/14 14:26:30 UTCshiro
#
気をつけて。そんでは落ちます。
2009/05/14 14:26:57 UTC(び)
#
おやすみなさいー
#
朝じゃん(笑)
2009/05/14 16:30:13 UTCsaki
#
rubyのchatonクライアントを書いてみました。
#
http://coderepos.org/share/browser/lang/ruby/misc/chaton/chaton_client.rb
#
あ、コミットログ変になってる。しまった
2009/05/14 17:50:36 UTCshiro
#
おー。
#
近いうちにAPI出しますが、roomの下のapi用のログインcgiを叩いてもらうと
#
そのroomのpost url、comet serverのurl、cid が取れるようになります
#
そしたらcomet serverのurlを個別に持つ必要もなくなるし、
#
initViewFrameを探してcidを見つける必要もなくなります。
2009/05/14 18:14:37 UTCllibra
#
Gauche.spec見てて気になったんですが、i386だけに-fomit-frame-pointerを指定しているのには理由があるんですか?
2009/05/14 19:41:38 UTCえんどう
#
そうか、JSONをパーズしなきゃいけないのか。
2009/05/14 21:23:47 UTCshiro
#
apiはS式を返します。
#
@libra うーん、もう覚えてないです。i386限定にする理由はなさそうですね。
2009/05/14 21:29:23 UTCshiro
#
http://gauche.svn.sourceforge.net/viewvc/gauche/Gauche/trunk/Gauche.spec?view=diff&r1=3264&r2=3265
#
なんか妙な変更をしているな。なぜだろう。
2009/05/14 22:48:54 UTCえんどう
#
S式期待アゲ
2009/05/14 23:01:32 UTCshiro
#
@libra 多分この時、OPTFLAGSはconfigureが適切に設定するようにしたんじゃないかと思います。で、0.6リリース時に何かの問題にあたってi386だけ緊急にOPTFLAGSをオーバライドした、というのがありそうなシナリオのように思えます。
#
他のアーキテクチャの場合、-fomit-frame-pointerを含むOPTFAGSはconfigureが設定してくれるので、無指定になるわけではありません。