K.Sasada's Home Page

Diary - 2006 June

研究日記

水無月

_30(Fri)

転送メールのspam対策を考えていたら、gmail でフィルタリングすればいい、と教えてもらった。おーー。素晴らしい。

これで、spam がぐっと減った。


http://journal.mycom.co.jp/articles/2006/05/18/javaone5/

JRuby のほうが扱いが大きい。

_29(Thu)

Rubyist Magazine - 日本 Ruby カンファレンス 2006 特別号 をリリースしました。

プレゼントが嫌に豪華です。7/7 までです。必見です。

でも、今回は担当じゃないから、俺も応募できるんだろうか。


宣伝ヨロ。


qmail に、理由があって送れないメールがキューにたまりまくりなんだけど、解決したので送れる様になったので、全部吐き出させたいんだが、一気に吐き出させる方法はあるんだろうか。


あった。

qmail-tcpok して、qmail-send プロセスに SIGALRM を投げるらしい。


みんな編集後記なんて読まないのね...。


qmail でサーバ側で spam をはじく方法を考えているんだけど、これは、というものが無い。なんとかならないかな。なんか、手軽で「絶対クロ」というようなものをはじく仕組みはないですかねぇ。


spam といえば、コメントspam対策、有効だったんだろうか。あれから一度も来ていない。ラッキー。


パッチが必要、と聞いてひいていた http://k2net.hakuba.jp/qgrey/ は、qmail にパッチをあてるんじゃない、ということに気づいて、導入してみた。

結構弾いてますね。いい感じだ。


namikilab.ac.jp のメールアドレスは、全部 atdot.net へ転送して読んでいるんだけど、こいつらは上記フィルタではひっかからない。どうしたもんかなぁ。

転送メールに対して、弾くにはなんか方法あるのかなぁ。


rubyconf どうしよう...。6/30 か。

_ma2(Thu Jun 29 10:15:21 JST 2006)

 私も応募したいです > プレゼント

_28(Wed)

結局、最後は仕事を引き受けてしまう / やってしまうダメな俺。


結局、自分の理想とすることを追い求めようとすると、自分が手を動かさないと出来なくて。で、それはある程度の規模で破綻するので、やっぱりダメなわけで。

すでに破綻している、とか言われたりして。まだ、そこまでは行っていないです。


マネージメントは C++ のテンプレートより困難。うぬ、まったく。


さて、(使う側、使われる側双方が)ボランティアの場合と、お仕事の場合、どちらがよりマネージメントが困難なんだろう。


void func1(void){}
void func2(int i){}
void func3(int i, int j){}

typedef struct {
    union {
	struct {
	    void (*func)(void);
	} s1;
	struct {
	    void (*func)(int i);
	    char *arg1;
	} s2;
	struct {
	    void (*func)(int i, int j);
	    char *arg1;
	    char *arg2;
	} s3;
    }u;
} type;

main(){
    type t[] = {
	{.u.s1 = func1},
	{.u.s2 = func2, "foo"},
	{.u.s3 = func3, "foo", "bar"},
    };
    return 0;
}

これだと怒られなかった(gcc 3.4.4)。


[ruby-dev:28875] について、どちらが読みやすいかアンケート。

明らかに読みづらい、とまではいかないと思うんだけどなぁ。


RubyKaigi2006 の音声切り出し作業。今週中、職場で終わった後3時間くらいで終わった。やっぱりデータがでかいととり回しが大変。

_なかむら(う)(Wed Jun 28 09:10:15 JST 2006)

 ボランティアを無償での労務提供とするなら、金でなだめすかすという手段が封じられてる分だけボランティアの方が困難なんじゃないでしょうか。

_arton(Wed Jun 28 14:59:34 JST 2006)

 おもしろい質問だ。もし、それが(楽しい、経験上有意義、必要など)の個人的な理由があればむしろボランティアのほうがマネージメントしやすい可能性が高いと思います。でもその一方、そういう目的意識のせいで発揮される自発性がマネージメント側の意向に沿わない場合には暴走する危険性が常に付いて回ります。……やっぱり金のほうが安定か。

_27(Tue)

LLのチケット買い忘れた。


BCDって未だに何に使うのかよくわからないんだよな。


LLのチケット買えた。


ふと、

T_ISTRING
  ->ptr :: allocated string buffer
  ->len :: length
  ->hash:: hash(self)

T_STRING
  ->ptr :: ImmutableStringBody
  ->len :: length
  ->val :: ptr to immutable string object (for GC/mark)

こんなのはどうだろう、と思った。

実装してみようかしらん。こうすれば、文字列操作にロックが不要になる。が、ゴミは増えるなあ。


自分のパネルディスカッションの映像を見る。うーむ。こういうのは初めてだが、やっぱり恥ずかしい。


実は未だに農工大に atdot.net マシンを置いているんですが、もって行く先を探しています。どっか無いですかねぇ。


宣伝:

              第39回情報科学若手の会開催のご案内

  情報科学若手の会は,情報科学に携わる学生,若手研究者,社会人の
ディスカッションと交流の会です.幅広い分野から参加者を募り,互い
の交流を深めることで新たな発想が生まれることを目指しています.
インフォーマルな雰囲気ですので.これから研究を始めるという方も是
非ご参加下さい.

  詳細は,情報科学若手の会のWeb ページをご覧ください.

        http://wakate.aitea.net/

  限られた時間ですが,この会が有意義なものになるよう,皆様のご参
加をお待ちしております.

 なお,今年度の招待講演は筑波大学の前田敦司先生をお迎えする予定
です.


    招待講演者:
        筑波大学 大学院
        システム情報工学研究科 コンピュータサイエンス専攻 助教授
        前田敦司先生

    日時:
        2006年9月16日(土)〜18日(月)
        二日間のみの参加も可能です.参加申込みの際に併せてご連絡
        ください.

    会場:
        富士CALM (山梨県富士吉田市)
        http://www.mfi.or.jp/fujicalm/index.htm
        (無線Lanなど利用可能です)

    定員:
        30 名

    参加費(食費・宿泊費込):
        学生15,000 円,社会人18,000 円
        (遠方からの参加者には交通費補助をする予定です)

    参加申込み:
        参加希望の方は下記の情報を参加申込みアドレスにお送り下さい.
            - 氏名,性別,所属(学生の場合学年も),メールアドレス,
              出発都道府県
            - 参加者として氏名・所属をWeb 上に掲載してもよいか
              (運営の都合,参加者に配布される名簿には名前・所属に
              関しては必ず掲載させていただきます.)
            - 宿泊の部屋割りにあたって,喫煙の考慮が必要な方はその旨
            - 食事にあたってアレルギー等がある方はその旨
            - 発表をしていただける方はその旨(可能であれば題目,要旨)

    参加申込み先アドレス:
        attend2006@wakate.aitea.net

    申込み締切り:
        2006年7月31日 (月)
        (締切り前でも定員になり次第,締切らせていただきます)

    主催:
        プログラミングシンポジウム委員会

    情報科学若手の会幹事:
        上坂明未(フェリス女学院大学)
        笹田耕一(東京大学)
        鈴木宏哉(慶應義塾大学)
        松浦知史(奈良先端科学技術大学院大学)
        松田耕史(東京工業大学)
        三輪誠(東京大学)

転載歓迎。

_arton(Tue Jun 27 12:26:26 JST 2006)

 ハードウェア(その頃はファームウェアになってたけど)でBCD演算するマシン使ったことあるけど、COBOL最適化と考えれば良いのだと思います。(のBCDで合ってるかな?)10進演算で誤差が出ない、桁数が無制限、表示文字に変換するのが高速(4ビット単位にばらして上位にF(EBCDIC)とか3(ASCII)とか入れれば良い)とかがメリットのはずです。

_shiro(Tue Jun 27 12:32:05 JST 2006)

 4bitチップとかで電卓作ってた頃も大事だったよ>BCD

_たま(Wed Jun 28 00:32:28 JST 2006)

 所属が東大になっとる!

_26(Mon)

定数は本当の定数には出来ないでしょう。

_25(Sun)

うーむ、やっぱり、手が冷たいときにストーブに手をあてて「手がつめてー」というのは変ではなかろうか、とか思いながら眠れない、というわけではないが、現実逃避中。


あぁ、そういえば RubyConf どうしよう。

ううむ、スライドさえ作ればまつもとさんが英語で発表してくれたりするんだろうか(しねーよ)。


OOP なれって何だ...。別の言語なれ、ではなかろうか。

_24(Sat)

たくさん眠れた。

_23(Fri)

むぅ。短いコメントがかけなくなってしまった。どうしたもんだか。

ちょっと工夫した。


世の中にはいろんな立場の人が居て、いろんな考え方があって、いろんな制限なりなんなりがあって。

どうにも、ゆるい、ゆるい世界に居たものだから、その辺の感覚が全然わからなくて、はまりすぎ。勉強勉強。リスク管理できてなさ杉。

あぁ、どうやって生きていこうかなあ。

_22(Thu)

spam 対策を考えないとなぁ。どうしたもんか。


checked な checkbox を用意してみた。これ、意味あるんだろうか。spam 屋さんは、テキトーにフォームに値を突っ込んでいるんではないかと想像してやってみたんだが。


IO#async_read は AsyncEvent オブジェクトを返すのはどうだろう、そういえば、今のRubyでもThread使えばできるよなぁ、とか思って書いてみたら、Threadのラッパーにしかならなかった。しょぼん。


http://www.loudthinking.com/arc/000592.html

おお。俺の名前が書いてある。なんでだろ。まぁ何はともあれアリガトー>david。

_sheepman(Thu Jun 22 21:28:45 JST 2006)

例えば、以下のコードをメインスレッドで呼ぶと

  f.asynch_read{|data|
    # data になんかする
  }

ブロックの部分もメインスレッドで実行されるという事ですか。 で、finalizer みたいにいつ実行されるかは分からないということでしょうか。

あるサイズ毎に与えられたブロックを実行するメソッドがあると便利だと思います。 aio だと while buf = f.read(1024) とか書けないので。

 f.aynch_each(1024){|data|
    # 1024byte読み込む毎に実行される。
 }
_ささだ(Fri Jun 23 01:55:34 JST 2006)

 main thread で呼ばれるかどうかは自明じゃないですよねぇ。でも、$_ とか考え出すと、同じスレッドじゃないとダメかも。あと、Thread#[] か。asynch_read_each かなぁ。メソッド名は。

_21(Wed)

お仕事をしているような、していないような。


Parrot IO の略で pio としているのは、IO の文脈としていかがなものか。


asynch io を使うとどうなるのか、ちょっと考えてみた。

open(...){|f|
  f.asynch_read{|data|
    # data になんかする
    done = true
  }
  # block が実行したとは限らない
  while done == false
    # busy loop
  end
}

busy loop は明らかに無駄。じゃぁ、なんか待つprimitiveを、ということかもしれないが、では何で待つんだろう。ううむ。


というわけで、Parrot を調査中なんだけど、いろいろ考えていたのが、うーむなるほど、という感じでいろいろやっている。考えていたインタプリタ(VM)の作り方をきちんとやってくれていた、という感じ。

たとえば、起動オプションで interpreter core の種類を変えられる。

http://www.parrotcode.org/docs/running.html より。

-b, --bounds-checks, --slow-core
slow core。bound check をする。
-f, --fast-core
fast core。bound checkをしない。

この両者は、コールスレッディングなんだよね。

-S, --switched-core
C の switch 文で命令を分岐。
-C, --CGP-core
Select the CGP (CGoto Predereferenced) core (if available).
-g, --computed-goto-core
Select the CGoto core (if available).

で、この3者は YARV が採用しているタイプ。-S がふつーの switch 文で、-g が表引きの computed gotoで、-C が先にアドレス解決しておくやつ。

CGP のほうは、アドレス表をどうやって関数の外側に出すのかという(些細な)問題があるんだけれど、Parrot ではグローバル変数に代入していた。なるほど!

で、ちょっと試してみると、fast-core が速いんだよねぇ。うむむ。

fast-core、つまり call threading の場合、関数を呼んでいくんだけど、そのとき PC は誰が計算するんだ、とかを悩んでいたんだけど、Parrot の場合、各関数が次の PC を返すんだね。

#  define DO_OP(PC,INTERP) (PC = ((INTERP->op_func_table)[*PC])(PC,INTERP))

こんなのがあって、これを繰り返すという仕組み。なるほどなぁ。YARV もこうしちゃおうかなぁ。

もうちょっと進めて、

pc = &iseq[0];
while (pc) {
  pc = (*pc)(args);
}

なんてやっちゃってもいいかも。

毎回 op_func_table を参照することで、このオペレータ表を変えれば独自のものが簡単にできる、というのは結構大きな利点ですねぇ。

ちなみに、args として何を渡すか、というのは結構難しい問題で、いっぱい渡すとコストがかかるし、渡さないとそれはそれでダメだし、と悩ましいわけです。YARV で call threading を嫌っているのは、渡す変数をどうしたもんかなぁ、というところで悩んでいるわけです。もうちょっと具体的にいうと、cfp をどうやって渡したもんかな、と悩むわけです。thread だけ渡すことにして、cfp は thread 経由で取得、ということにしてもいいけど、そうすると間接アクセスが一つ増えて嫌だなぁ、という感じ。しかし、現実問題そうするしかないよなぁ。

さて、どうしよ。

ちなみに、これらのファイルは、YARV と同じように(いや、誰でも考えるけど)全部自動生成されます。YARV ではコンパイル時のオプションでどれかを選ぶけど、Parrot の場合はいろんなバージョンのソースを出力して、全部リンクしているようです。富豪だ。

libparrot.so は 10MB 弱。でかいなー。

_usa(Wed Jun 21 19:11:53 JST 2006)

こう?

open(...){|f|
  m = Mutex.new.lock
  f.asynch_read{|data|
    # data になんかする
    m.unlock
  }
  m.lock
}

_20(Tue)

http://plas.fit.qut.edu.au/Ruby.NET/

おお。


さ、最高学府の自負...。ガクブル。


一度、「Rails はなぜ動くのか」という文章を書いてみたい(で、内容は YARV Maniacs)。


http://www.wgz.org/chromatic/talks/parrot_sdl/index.html おー。

_19(Mon)

Haskell 触りたくても chm がないとなぁ、と思ったら、あった。

http://park7.wakwak.com/~blackbox/

素晴らしい。これで Haskell 初心者になることが出来る。

_18(Sun)

風邪でダウン中。

_17(Sat)

Skypeで会議。うーん、色々課題が。


昨日職場に行くと、どでかいプラズマディスプレイが置いてあって、会議室の工事をしていた。うへー。

で、これ幸いと取り込み作業をするために借りてきたスゴ録でRubyKaigiの様子を見る。とりあえずLT見た。大画面でいい音で、素敵。俺、来年は映像見るだけでいいかも。


誰か「映像・音声」編集を無料で行うためのソフトウェアを知りませんかね。Mac OSX と Windows XP マシンがあります。


久々に timedia。

_淺川(Sun Jun 18 00:12:47 JST 2006)

 研究室のPremierが入っているマシンを使っては?というかRubyKaigiの映像みたいです.

_ささだ(Sun Jun 18 00:24:39 JST 2006)

 あ、そうか。Premierがあったか。

_16(Fri)

ruby-with-prof というコマンドをインストールしてしまうとか。

_15(Thu)

自分が欲しいものがないと、後先をあんまり考えないで作ってしまう(るびま、RubyKaigi、仮想化実装技術勉強会など)のは悪い癖だよなぁ。

_shiro(Fri Jun 16 06:26:49 JST 2006)

 それは良い癖だとおもいます。

_かくたに(Fri Jun 16 10:28:06 JST 2006)

 ささださんの悪い癖が世界を豊かにしているわけだ。be evil!

_なかお(Fri Jun 16 11:12:36 JST 2006)

 作ったものが成功したり持続できたり完成させられるのは才能ですよ

_rucila(Fri Jun 16 12:20:12 JST 2006)

 わたしなど自分が何を欲しいのか分らなかったりすることもままあるので、わたしにとっては嬉しい癖だと思います。

_ささだ(Fri Jun 16 16:36:58 JST 2006)

 後先考えていて、きちんとできるんならいいんでしょうが。今まで成功していたのはフォローしてくれる人たちのおかげです。

_M(Sat Jun 17 00:14:08 JST 2006)

 味方が揃う、ってのは絶対に運だけじゃないと思いますし、それを活かせてるんだから決して悪くはないのでは

_14(Wed)

そういえば、森田さんに昨日会ったとき、雰囲気変わりましたね、って言われたのだけれど、ひげを剃ってるからかなあ。

_森田(Sat Jun 17 21:53:24 JST 2006)

 その節はどうも。たぶん、久しぶりにお会いしたからだと思います。

_13(Tue)

VIP まつもとさんの講演を拝聴。

... ちょっと寝てしまった。


逆転裁判の新作が出るらしく、電車の中に宣伝がはってあったのだが、そこにクイズが。どう考えても明白な答えが出るので、あまりにまともすぎるはずがない、と一生懸命考えたが、しかしそのまんまな答えだったということで、竹内先生憤慨。

追記:新作じゃなくて、値下げだそうで。


そういえば、今更ながら、ハッカーと画家を買った。

_ma2(Wed Jun 14 10:05:45 JST 2006)

 一「所」懸命デスヨ。とか言ってみたり。今日もがんばるぞー。

_12(Mon)

無事、終わった。本当に、無事で、本当に、本当に、本当によかった。

関係者の皆様、参加者の皆様、本当に、本当に、本当にありがとうございました。


終わった後、ちょっと泣きそうになった。


アンケート にご協力くださいませ。


連帯感みたいなものがあるというのは、やっぱりマイノリティだから?


貴社って何処だろ。


planet なんとかに補足されない、中の人。


せっかくなので、目に付いた人にマイミク申請をしてみる。見落としもたくさんあると思うので、良かったらマイミクになってください。


RubyKaigi ばかりにかかずらって仕事をしていなかったのがばれたのか、「お前暇してるだろう」ということで、新しいプロジェクトに投入される予感。そして萩谷(はぎゃ)先生とミーティング。

DHH と会うよりも緊張した。

_nobsun(Mon Jun 12 07:33:07 JST 2006)

 おつかれさまでした。

_きむら(Tue Jun 13 01:36:14 JST 2006)

 あ、mixiにアカウントあるんですか?

_きむら(Tue Jun 13 01:43:00 JST 2006)

 あ、そうそう。http://blog.uievolution.co.jp/2006/06/ruby2.html ではささださんが発表したことになってますよ(笑) コメントすると蹴られるし、blog持っていないのでトラバも打てません。

_ささだ(Tue Jun 13 01:52:38 JST 2006)

 ありますよー。ko1 です。その blog の件、気づいてたんだけど、同様にコメントできずに指摘できず。どうしたもんだか。

_きむら(Tue Jun 13 03:12:02 JST 2006)

 ういうい。ではマイミク申請出しますのでよろしければ受け取ってください。

_11(Sun)

二日目。

_きむら(Sun Jun 11 23:17:11 JST 2006)

 ささださんはじめ皆様お疲れ様です。ありがとうございました。

_10(Sat)

1日目。

_9(Fri)

準備。

_8(Thu)

生アランケイだった。名刺が日本語。


そういえば、本業の名刺100枚がなくなってしまった。100枚も作ってどうしよう、とか思ってたんだけど。どうしようかな。

_7(Wed)

FreeBSD で、シグナルの扱いが違うらしく、きちんと動いてくれない。どうしてくれよう。


FreeBSD で、-lpthread つければ十分かと思ったんだけど、-lc_r って必要なんだろうか?

man を見る限り、-lpthread で足りているように見える。


うーん、やっぱり -lc_r が必要な気がする。うーん。

libc_r と libpthread の違いはなんなんだろう。libthr は 1:1 モデル、ということはわかったんだけど。

man pthread には、

INSTALLATION
     The current FreeBSD POSIX thread implementation is built in three
     libraries, Reentrant C Library (libc_r, -lc_r), POSIX Threads Library
     (libpthread, -lpthread), and 1:1 Threading Library (libthr, -lthr).  They
     contain both thread-safe versions of Standard C Library (libc, -lc) func-
     tions and the thread functions.  Threaded applications are linked with
     one of these libraries.

とあるから、-lpthread か -lc_r のどちらかでよさそうだな。じゃあ、なんでほかのスレッドで printf するだけで abort するのか ...。


ふむぅ。-lpthread じゃなくて -lthr だと普通に動くな。

KSE が ...?


やっぱりよくわからないので VMware に入れてみた。64bit/SMP でやっていたんだけど、32bit/single だと、また事情が変わるかもしれない。

_6(Tue)

NetBSDとFreeBSDを体験中。

_5(Mon)

MLといいながら、ただの alias なのは止めて欲しい ...。いや、フォルダ振り分けが自動で行かないので。


http://www.osdl.jp/seminar0613/ を今日知ったんだけれど、さくっと満員だった。ガーン。

_4(Sun)

また財布の中に小銭だけになってしまった。

使いすぎだよ。

_3(Sat)

今日も今日とて秋葉原。

_2(Fri)

あんまりJavaっぽくなかったなぁ。

_arton(Sat Jun 03 17:37:55 JST 2006)

 だってJavaっぽくないとこに陣取るんだもん。

_1(Thu)

Perlish Magazine では、代名詞に全部 $ を付けるくらいやってもよかったのかもなぁ。

_nishio(Wed Jun 07 16:22:45 JST 2006)

 もしPythonic Magazineを作る場合にはインデントをお忘れなく(笑)

Sasada Koichi / sasada@namikilab.tuat.ac.jp
$Date: 2003/04/28 10:27:51 $