星の贈り物

名言を書くという拘りだけに縛られてしまったら
その言葉は名言たりえない

2005年5月の日記

2005年5月03日

今日は圏論勉強会と今日から三日間連続で行われる GHC ソースコードハッキング(多言語化編)でした。ハッキングの方はもっと意見を言い合いながら協力して進めるのかと思ったら、各自勝手にやりながら気がついたことを言って成果をページ上に上げるという感じで、今日までどういう方針でやるか全く決まってなかったわけだし m17n-lib を見てこなかった身としては完全に観察状態だなぁ。


2005年5月04日

進歩と停滞と

[topic:Haskell]

同2日目。このスタイルならうーむ。もちろん、普段見てない GHC のソースを見ることは楽しいけど。帰ってから、CVS Head の方を覗いてみてタスクが1つ減ったらしいことを知る。Haskell 界の成果を手早くどんどん取り込んでいく、この貪欲さが GHC の魅力ですよね。

昨日 GHC 6.4 に対応した wxHaskell の新バージョンがようやく出てきました……とはいっても他のライブラリたちがまだなのを考えると早い方ですが。同時に wxWidgets の最新版にも対応していて、いつのまにか安定版の 2.60 がでていることを知ったり。Mac の方が最新安定板を使っていないけど、何か問題があるんでしょうか? 2.5.5 で wxHaskell に必要なオプションを全部つけて wxWidgets をビルドしていたら、最後に ODBC のリンクに失敗してましたし。Windows の方は前々からバージョン上がらないので明らかに問題があるんでしょうけど。このことと久しぶりに Mailing-list に復帰してきた作者がこの 2 週間で SOEgraphics (現在 HGL パッケージに含まれる Graphics.SOE) の wxHaskell 移植版のサポートを取り込む予定だというのは嬉しいニュースなんですが、彼もやはり Microsoft で 2,3 ヵ月働くことになったようでその後 9 月くらいまで開発を離れるとかHSQL の人も開発が中断しているのも 6 月ぐらいまで別のプロジェクトに参加していて手が出せないためだし、ちょっときついかも。


2005年5月05日

同3日目。Tiger では今の GHC はビルドできませんか……もちろん、bootstrap からなら darwin-ports から取ってくるという手がありますが。

今回の作業の関係で見に行った Hugs のサイトで、相変わらず Windows の最新版はありませんが Yale のチームが SOE 対応のものを少し前に出しているという情報があったのでさっそく帰ってダウンロードしてみました。今のライブラリの構成から考えると若干古いところもありますが、最新に近いバージョンで SOE を使えるのは魅力ですね。GHC の Windows の nightly build の方は HGL が反応してくれなくて相変わらず使えない(参照エラー自体は起こらなくなっていますが……)のですが、こっちはばっちり動くので学習やアピールには問題なさそうです。そうそう以前 HGL が使えなくなっているのは GreenCard の最新版が動かないためと書いてましたがそれは間違いで、HGL 3.0 以降では GreenCard を使わない普通の HS ファイルになっています。


2005年5月13日

相手の興味に対して興味を持つこと 
自分の興味の中から相手の興味を探り出すのは大切な一歩
それなくして会話は成り立たない。

色々と書こうと思ったけど、仕事まわりだけで手一杯だった……。

色々と試して見ました

[topic:Haskell]

先日言った HSQL の SQLite3 対応パッチはログを最後まできちんと読めば手に入ったようです。ああ見落としが……がくっ。ただしこちらの目的である HaskellDB と組み合わせて使うには SQLite 用の関数から obsolete になったファイルの書き込みに関するモードの設定の部分を取り除いてやる必要がありますが。外に見せる簡易インターフェースの法は書き換えなくていいかな? backward compatibility というか操作用の関数を書き換える手間が惜しいということで。

今日 darcs を初めて使ってみました。……いや、get はしょっちゅうしていますがそれは CVS の co と同じで使っているとは言いませんし。send に委譲されたメーラーによる送信がうまくいかないので、( darcs record によって生成された)レコードにある patch から darcs send -o /tmp/f で送信用の patch に変換してメールに添付するという形になりましたが。まあそれでもサーバーにアクセスする権限なしで手元にあるファイルへの変更をそのまま送れるのが嬉しい。darcs といえば最近、Haskell XML Toolkit が分離して依存するようにした HTTP Module が同じく分離させて依存するようになった Cryptographic Library が (Windows の?) GHCi 上で実行しようとするとこけるようなので darcs get --to-match "hash 20050413104916-6cdb2-73a45f9330b85b629c3e4a1ad2a5e8b26429b7bd.gz" http://cvs.haskell.org/darcs/http/ と指定してとってくるところで hash がいると思わなくてはまりました。まあ、どっちみち普通に Haskell XML Toolkit をロードした状態で GHCi を実行しようとすると確保したメモリから溢れちゃって変更後リロードしたときに落ちるのですが。Cabal の登場によっとライブラリの分割がうまく進むようになったのはいいけど、こうなると依存したモジュールを一括で更新できる仕組みがそろそろ欲しくなってきます。まあ現に HackageDB とか cabal-get とかが出てきてはいるようですが。

で今日 darcs を触ったのは hs-plugins 用のパッチを送るためだったのですが、Cygwin がダメだったからって MSYS にしてみたり色々と弄ってみても HSbase_cbits.o での __errno の参照エラーや一部でプログラムが止まるのが直らないということで大弱り。wxHaskell をインストールしていると lang パッケージ内のモジュールと同名のモジュールを作ったときにインポートされているモジュールと同名のモジュールがあると言う問題がでるという悪さをするので、同じような問題かなと思ってアンインストールして作業しているのですがやはりうまくいかない。SOEGraphics との兼ね合いで PanTheon や Fran の移植ともくっつけてやればかなり良い線にいくのじゃないかと思って hs-plugin に対して作業をやっているのですが。GHC 自体をインストールしなおしたり他のバージョンを使えばどうにかなるかなと思いつつ見ていたら home ディレクトリ以外では make check がやすやす動いてくれるような感じ。……が、表示が変だなと思ってわざと失敗するテストを入れたりしてみたところ、これはただ make check がきちんと働かないだけだった模様。Mac OS X Tiger でもこの表示なのでやはり……。

HaskellDirect (HDirect) も触ってみたけど、これはメンテナンス扱いなので ihc という IDL コンパイラに色々と不備がある模様。もっとも、GHC 6.2 でメンテナンスされているようだしきちんとうまく使えた頃を知らないのでなんとも言いがたい部分もあるけど。まあ、COM はどうでも良いので目的のものに対してうまく使えるかどうかが問題なのですが。やってみるとして、こちらとどちらが手間がかからないかも分からないのですが。


2005年5月14日

金欠だ……今月末まではいってこないし……

Software Factory って、オブジェクト指向技術の成熟によって昔の夢よ再びな話かと思っていたのですが、随分と関数型畑の人っぽいアプローチをしているんですね。まあ、日本の例のプロジェクトだって論理型で解決しようというアプローチだったのですが。そういう趨勢だったにも関わらず論理型が一般業務でこそ使えるものだということをアピールできなかったのが自分の力不足によるものだった、と当時の人が嘆いているわけですし。それにデザインパターンの自動生成という意味では Modern C++ Design の登場など C++ コミュニティ周りも寄与しているでしょうけど。

そういえば Gauche ATL (Gauche COM?) のソースなんて手に入らないかな。最新の VC 版のソースにマージできれば素晴らしいことになりそうって、昨日の日記を書いたあとふと思いついたんですが。……って Orbit 上でも動くようにしないとクロスプラットフォームなことをする私には使えないか。同様に Mac のみな Quarz Composer も使えないし。

この日記を書いた後 CGIKit について解説をしてもらう会でした。リーンソフトウェア開発の絡みでトヨタの労働者から見た問題点について話があったので、せっかくですので日本的経営とか日本社会の問題について熱く記述しました。


2005年5月15日

「仕事と恋人(家族)どっちが大事なの?」という問題は労働観を現す話として語ることもできるけど、経営者とか事業家とかの起業した人が事業が軌道に乗るまでに責められることとしても語ることができる。まあいくつかそういうことを語っている雑談をみただけなので、それが多いとは限らないけど直わかるような気がします。

……ということについて色々と書こうと思ったけど、結局気が乗らないので上の文だけで終わります。


2005年5月18日

まつもとさんに会いに IPAX に行って来ました。もとい、未踏関係者として IPA から招待されていたレセプションに参加してきました。

IPAX は昼間にいったため最初展示者がいなくて困ったけど、何週かするうちに戻ってきたので色々と話を伺うことができました。POM が凄いというのは話を聞いていたし、XAA も中間報告会で話を聞いていたので、印象に残ったのは実際に見てみてインパクトのある Lamp かなぁ? あれだけ滑らかに動いて変な凝ったものを使わない分かりやすいコードにしているらしいし。OpenGL でも動かせるようにしないかという問い合わせが良くくるようですが、時間とか予算とかが確保できるかが問題になっているようなので port してくれるコミッター歓迎とのこと。そういうコミッターが現れることで本当の意味でのオープンソースになれればなぁ、という風に言ってました。ベイジアンネットワークを構築して確率的に問題の原因を探るソフトである BAYONET はなんとなく Dazzle を思い起こさせる……Dazzle の方が後ですが。それにしても数理システムにライセンシングしているのか……前の SICP 読書会後の飲み会で Lisper のところと思いきや受験者は東大や京大の数学科の人たちばかりで入社試験に行列の固有値をやらされたというあの数理システムか。BAYONET を使って問題の原因を探るためのモデル構築をやるという仕事は、確かに三ヵ月あれば新しい分野の統計パッケージが作れるという数理システムの人たちに確かに向いていますが。

レセプション会場では、関数型言語の人達が集まってきて話をするという展開に。Pugs の作者の Autrijus Tang が What's as fast as C++, as concise as Perl, as regular as Python, as flexible as Ruby, as typeful as Java, and has absolutely nothing in common with PHP? It's Haskell! なんて OSCON で言うつもりだってさとの言葉に、MinCaml の住井さんが私も OCaml に対して近いことを言ったしという反応で済ませていたのがその場ではちょっと残念でしたが……後で確かめてみたら本当に言ってますね。

その後未踏の仲間の人に関数型言語がどう嬉しいのかを説明することに。まあ、お決まりの説明なので詳しくは書きません。

さらに後の二次会と合わせて、他プラットフォーム対応の機能を実装する時の暗黒面についても結構話していて……よく考えたらまつもとさんとあまり話せなかったなぁ今回は。二次会は関数型言語卓に隔離されちゃったし。


2005年5月21日

hs-plugins が無事 Windows 2000 上でも動くようになりました。前にエラーになっていたコードが make check で ok の代わりにこう出るのが謎ですが。

=== testing examples/conf/simple ... failed with:	
-sh	
+sh	
=== testing examples/dynload/poly ... failed with:	
-True	
-True	
+True	
+True

Tiger の方で make check ができないのは sudo gcc_select 3.3 で gcc 3.3 を使わせるようにすればどうにかなります。いや、問題はむしろ Mac OS X で HSX をそのままではインストールできなくて Setup.hs をコンパイルしてから実行してやる必要があることですが。

hs-plugins は動いたけど、PanTheon がこの間 Windows の GHC 6.4 ではコンパイルできないことが分かったので微妙。PanTheon は Template Haskell に依存しないように書き直すと言っていたし、WxSOEGraphics はまだまだ搭載されないようだし、どうするかな? せめて金曜日の成果報告会までには何か目に見えるものをでっちあげないと。SOEGraphics も Pan もなしで Fran を移植するのは……大変だろうけどやっといた方が良いかな?

この間のお返事。オブジェクト指向的な部分も結構あるけど、それだけにこだわらずに結構色んな考えを持ってきているとのこと。技術を概観するものになっているというのは結構良さそうですね。 こないだコメントした命令型言語が関数型パラダイムを求めているという視点を踏まえた上で、宣言型パラダイムというものを眺めた論文をまとめあげようという試みと合わせて読んでおきたいなぁ、それは。

自動車業界に関しては十年循環説でしたっけ、その時々の原因によってアメリカの方が総生産台数で勝るのと日本の方が総生産台数で勝るのを繰り返していましたが、今回もその通り行くかどうかは不明なのでそれに期待してはいけないでしょうね。少なくともその兆候が現れるまでは。


2005年5月25日

遷移図記述言語

[topic:C++]

C++ Template Metaprogramming (Amazon) ようやく読了。(C++ Template Metaprogramming サポートサイト) やっぱり出かけるのが少なくなるとなかなか読めない……。まあ、洋書読むの自体そんなに早くないっていうのもあるけど。

というわけで、この本を先に読むのがいいかそれとも Modern C++ Design を読んだほうがいいかという話ですが、Template を使ったテクニックを学ぶということや Boost 使い養成講座といった意味的的にはこちらを読んだ方が良いと思いますが、policy による設計やデザインパターンを自動生成するという思想的な部分で Modern C++ Design も読んでおいてもらいたいと思います。少なくとも下手に class による設計とかデザインパターンを学ぶより前に。で、設計やデザインパターンよりも前に学んでおいて欲しいところは C++ Template Metaprogramming の中にもやはりあって最後の DSEL (DSL) に関する2章だったりするのですが……。やっぱり、理想的には2冊とも早めに読んでもらうことかな?

Modern C++ Design 同様、後半の DSEL に関する記述はこれまでそうした世界は知らなかった人にとっては感激しっぱなしだと思います。最後にこれの作り方を解説していますし。

// concrete FSM implementation 
class player : public state_machine<player>
{
 private:
    // the list of FSM states
    enum states {
        Empty, Open, Stopped, Playing, Paused
      , initial_state = Empty
    };

    
    #ifdef __MWERKS__
     public: // Codewarrior bug workaround.  Tested at 0x3202
    #endif
    
    void start_playback(play const&);
    void open_drawer(open_close const&);
    void close_drawer(open_close const&);
    void store_cd_info(cd_detected const&);
    void stop_playback(stop const&);
    void pause_playback(pause const&);
    void resume_playback(play const&);
    void stop_and_open(open_close const&);

    
    #ifdef __MWERKS__
       private:
    #endif 
          friend class state_machine<player>;
    typedef player p; // makes transition table cleaner

    // transition table
    struct transition_table : mpl::vector11<

    //    Start     Event         Next      Action
    //  +---------+-------------+---------+---------------------+
    row < Stopped , play        , Playing , &p::start_playback  >,
    row < Stopped , open_close  , Open    , &p::open_drawer     >,
    //  +---------+-------------+---------+---------------------+
    row < Open    , open_close  , Empty   , &p::close_drawer    >,
    //  +---------+-------------+---------+---------------------+
    row < Empty   , open_close  , Open    , &p::open_drawer     >,
    row < Empty   , cd_detected , Stopped , &p::store_cd_info   >,
    //  +---------+-------------+---------+---------------------+
    row < Playing , stop        , Stopped , &p::stop_playback   >,
    row < Playing , pause       , Paused  , &p::pause_playback  >,
    row < Playing , open_close  , Open    , &p::stop_and_open   >,
    //  +---------+-------------+---------+---------------------+
    row < Paused  , play        , Playing , &p::resume_playback >,
    row < Paused  , stop        , Stopped , &p::stop_playback   >,
    row < Paused  , open_close  , Open    , &p::stop_and_open   >
    //  +---------+-------------+---------+---------------------+

    > {};
typedef
 
event_dispatcher<
    row<Stopped, play, Playing, &player::start_playback>
  , event_dispatcher<
        row<Paused, play, Playing, &player::resume_playback>
      , default_event_dispatcher
    >
>
 dummy;
};


int main()
{
    player p;                      // An instance of the FSM

    p.process_event(open_close()); // user opens CD player
    p.process_event(open_close()); // inserts CD and closes
    p.process_event(               // CD is detected
        cd_detected(
             "louie, louie"
           , std::vector<std::clock_t>( /* track lengths */ )
        )
    );
    p.process_event(play());       // etc.
    p.process_event(pause());
    p.process_event(play());
    p.process_event(stop());
    return 0;
}

これを見てしまうと、開発中の boost::statechart (旧称 boost::fsm) (現在リンク先の boost.org ではなく http://boost-sandbox.sourceforge.net/ に置いてあります)がこういう風に書けないのが惜しく感じられてしまいますね。UML をソースコード上で表現したいっていうように、そちらは focus している部分が違うからですが……うーん、あまりいい策だとは思わないなぁ。こういうのはここぞというところに適用することで宣言的に書けるのに価値があると思いますし。もちろん、そういう要求 (Executable UML) があるのは分かりますが。


2005年5月26日

陰陽大戦記 第34話 龍虎、再び

[topic:アニメ、感想]

もう一人の主人公ユーマが出てくると、やっぱり燃え展開になりますね。最近は話の意図は理解できるしところどころで萌えとかギャグとかのの狙い通りにはできているんだろうけど、いまいち感情移入しにくい回が続いてましたが三クール目後半の盛り上がりに向けてきちっとやってくれました。……まあ、ギャグとシリアス両方で出てくる、株で儲けたただの先物取引で立身出世だの企業の収益だのサービス残業だの妙に大人向けなネタは媚びてない分これまでもうまく回っていましたが。

ユーマの成長物語は良いんだけど、リクが成長から遠ざかっているだけにこれをどう回帰させて再びリクという主人公に感情移入させることができるようにするのか……リクがあんな主人公なだけに楽しみ半分うまくいかない怖さ半分。

視聴者にうすうすそうだろうなと思わせていた地流宗家がユーマであることを明らかにしたり、散々ほのめかしていたタイザンが地流内の神流であることを正式に明かしてくれたり、そして彼らにとって天流・地流ともに宗家というものが(封印を解くなどの)重要な存在であるというこれまでの伏線の続きを見せてくれたり、陰陽大戦記の手堅い作りが戻ってきてとても嬉しい。さーて地流側のミカヅチも神流の意図を知ってかうまく罠を避けている強かな男としても描かれているし、ただの悪役の親玉ではないという面が描かれ始めているのでこれをどう料理するのかがとても楽しみです。今回は完全に悪役だったけど前回裏で暗躍するだけの人物ではないという一端が明らかになった 雅臣 ( まさおみ、がしん ) のことも同じく楽しみ。


2005年5月27日

未踏の中間報告会。プロジェクトが遅れ気味で自分的にこれがあれもこれもまだまだだしと思っていてぼろぼろ。プレゼンテーションをきちんと用意していなくて練習不足っていうのもあったけど、できていないなくてもできている部分を強調してうまく言えるテクニックが必要ですね。Haskell の生産力のおかげかライブラリの充実度のおかげか私が思っているほどに進んでいないという印象は他の方は受けなかったようですし。もちろんきちんとできているのが一番ですが……。

もう1つの失敗。DVI-AVI 変換コネクターを持っていくか、Mac でなぜか思ったように動いてないというのなら Windows でビルドしたものの CD を持っていくべきだった……。USB のプロジェクターをキーボードだと思ってインストーラーが動き出したのを無視して切ったためか、wxHaskell 上で DB ファイルを出力しなくなったし。その後、wxHaskell で出力される2つの app のうち1つしか DB ファイルににアクセスできるバイナリがないという謎の症状が発生。うーむ、念のため再インストールするべきでしょうか? ……いや、するなら今のうちでしょうね。実は何も問題がなくて、ただの徒労かもしれませんが。ただでさえ GHC 6.4 には不備があるのに、不安要素を残すわけにはいかないし。 2005-05-28T05:11:00+09:00追記:(最初の外付けキーボードやタブレットを抜き差ししていたところから)そこまで原因を絞り込んだ時点で多分違うだろうなと思っていましたが、やっぱり関係ありませんでした。めでたく徒労でした。……すると間違った方のバイナリを削除したのか……それにしてもちょっとしたことですぐに再インストールし過ぎだ。この癖は Windows の悪しき風習なので直さなきゃと思ってはいるんですが……。


2005年5月28日

さて、電車代が危うい。

買っていなかった本で図書券のお釣りを作って WOMeeting に参加した後、終了ぎりぎりでつくから言ってみようかなということで『計算機プログラムの構造と解釈第二版』を読む会II第二七回に出席してくる。もともとお金があれば午前中は出席するつもりだったし、ほぼ毎回途中から行って途中で抜けるなんて気まずいと思わなければ最後の方の時間にはいくつもりだったし。Higher-order Perl (Amazon) とか Higher-Order JavaScript の話に対抗してこちらも負けじと C++ Template Metaprogramming の話を振ったり。C++ Template Metaprogramming の場合 Higer Order したいものが Template なので functional programming についての解説になっているそれらとは内容はかなり違うとか、Template のエラーメッセージおよびその改善の話に一章さいているとか、Appendix で Metaprogramming な Template のコードをコンパイルするためのコンパイラごとのパフォーマンスを計っているんだけど、C++ コンパイラは Template Metaprogramming のためにチューニングされてはいないのでこの点に関して Intel コンパイラのパフォーマンスはかなり悪いという話をしたり。


2005年5月30日

ようやくお金が入ったので LL Day & Night のチケットを買ってくる。今度ローソンに遊びに行ったときでも良かったんだけど、夜の部のチケットが非常に限られていて手に入らないかもしれなかったので今日の内に。


2005年5月31日

なんか結構 Haskell で書いたグラディウスで遊んでしまった。私が見ないといけないのはコードだというのに。コードについては……確かに作者さまのおっしゃる通りでした。基本的には規模のせいか無性にリファクタリングしたくなる他は、前のシューティングゲームと同じですね。これでは参考にならない……あうー。まあ、ゲームオブジェクトをどう表現すべきかというのはかろうじて State Machine やコルーチンが手続き型の世界で使えると言われていて、関数型の世界では Reactive Programming なんかが使えるんじゃないかなというような手探り状態なのでいたしかたないことではありますが。

というわけでとりあえず解凍したものは削除して圧縮したファイルだけ残しておいたので、これでもうついついゲームをはじめてしまうことはないはず。きっと。


声なき言葉へ