トップ «前の日記(2007-10-27) 最新 次の日記(2007-10-29)» 編集

日々の破片

著作一覧

2007-10-28

_ エッセンシャルクォリティ

マイクロソフトの関連本には、以前はインサイドものってのもあったけど(で、それを一蹴したのが、Windowsプログラミングの極意なのかも知れないけど)、それとは別にエッセンシャルものってのがある。別名、ドンボックスと愉快な仲間たちシリーズと言っても良いかも。エフェクティブってのもあるから、嘘かも。

というようなことを思い出したのは、エッシェンシャルWFの序文をドンボックスが、また随分アオリ気味(ワイドにフロシキを広げたってこと)に書いているからだ。

何か大きなことが今まさに起きようとしているのです。

まあ、それについては後で。

というわけで、エッセンシャルWFを(アスキーのドットネットの本とか共著してる)新丈径さんからいただいたわけだが、難しい位置づけの本だなぁ。

エッセンシャルWF : Windows Workflow Foundation (Programmer’s SELECTION)(Dharma Shukla)

もし、これが.NETではなく、Javaのフレームワークからみだったらもっと遥かに注目を集めてそこら中でコンファレンスやセミナーなんかでネタにされただろうけど(というと多分正しくなくて、IBMとかBEAとかが笛吹き鳴らして太鼓を叩けば、というのが付くのだろう。だって、Javaのフレームワークにだってあるじゃん。でもWFとアプローチが同じかどうかはわからないのでそれ以上は何も言えないけど)、あいにくマイクロソフトテクノロジーだ。だから、大きなことが起きても誰も知らないうちに終わってしまいかねないね。

マイクロソフトテクノロジーには2つの問題がある。1つはマイクロソフトそのものに起因して、もう1つは開発者側に起因する。

前者は彼ら固有の大げさな再発見にある。あの連中は、wordを再発見してWordにしたり、window systemを再発見してWindowsにしたり、transactionを再発見してTransaction Serverにしたり、SQLを再発見してSQL Serverにしたり、componentとobjectとmodelを再発見してCOMにしたり(いや、多分、componentは彼らも別ルートから発見したといっても良い気もするけど)、BASICを再発見してVisual Basicにしたりとか、そんなのばかりだ(だから、Excel(外様のMacチーム由来)とかPowerPoint(買収した会社の製品)とかの再発見が名前に含まれない製品のほうが、ソフトウェア価値と用途がすんなり理解されて誰からでも人気がある)。歴史が浅い会社だからということなんだろうなぁとMTSの時は思いながら眺めてたわけだが、どうもそうじゃなくて、そのコアになるテクノロジーをマイクロソフトの製品として融合することそのものが、大発見ということになるようだ。

でも、それだけじゃない。MTSの時(これはおれにとっては、TPモニタの知識をベースにして眺めていたので印象深い)思ったのは、開発者がマイクロソフトと同じくらいに若いから(それに、彼らはPC革命――って言っても過言じゃないよ――の前線に立った同志だから)同じくそれが再発見だと考えてもみなかったってことじゃないかな。もちろん、新しい皮袋に入れれば、酒も一緒に新しくなるんだが、トランザクションのように本当にコアなテクノロジーの根本の部分は変わるはずもなければ変えようもないのであった(ということはもちろんないはずで、もっと革命的な何かがが起きても良いはずなんだけど、少なくてもマイクロソフトがそこまでの革命を起こしたことは、おれの知識の範囲ではない。PC革命というのは間違いなくあるにしても)。つまりトランザクションにどういうテクノロジーを追加しようが新たな概念を付け加えようがACIDはACIDだ。それはWindowsがwindow systemだったりWordがwordの集合を扱うのと同じことだ。それをあたかも、それまでの歴史にはそんなものがなかったかのように振舞うので、相手にされないような印象を与えるのであった(それまでの歴史=DOSからの歴史なんだから、確かにそんなものはなかったは一面の真実ではあるところが、PCの王様ならではの立ち位置の取り方が難しいところだ)。そのマイクロソフト自身とその仲間の開発者たちの歴史の浅さをすばやく埋めるために、いろいろな仕掛け、特に重要なのがつまりこないだJavaが再発見してたEoDというやつを上に乗っけるせいで、一番コアなところが見えにくくなる(っていうのは、そこはマイクロソフト固有テクノロジーじゃないからウリにならないからだろうけど)。で、そのまま良からぬ方向へ突っ走ってしまうというのが、良く見られた風景だった。

つまり、TechEDで、「こんなすごいのが簡単楽勝」と吹かしまくる。それを見たテクノロジー採用者が、「ほうすごいですね。ではそれで一丁よろしく」、でその仕事を請けた開発者が「良くわからんけど、こうやってこうやって、おや簡単にできますた」、という図式である。コモンセンスはどこで学ぶんだ? そうやってデッドロックやリソースリークやその他もろもろのライトスタッフがコンピュータに搭載されれば、そりゃ月へ向かって飛んでくだろう。

で、WFにも同じ香りがぷんぷんしてるのだ。でも、大丈夫。WFを必要とする人は、適用から導かれるコアにあるテクノロジーを知っているに違いない。なぜなら、ワークフローだけに断絶があるからだ。

で、エッセンシャルが題につく本は、そのコアの部分をきちんと説明するから重要なわけで、この本もエッセンシャルクォリティーなのであった。その代わりリファレンス性はほとんどない(サンプルコードはたくさんあるけど、サンプルクォリティーなコンセプトコードだし)。

だから、この本は、ワークフローを知り抜いた人にはあまり意味がない(WFを知るのには役に立つけど)。そうではなく、たとえば、行ったきり返ってくるまでにタイムアウトしてしまうようなアプリケーションを設計したり作ったりしたことがあったり、大きな単位での複雑な処理をどうシステム化するかについて学びたかったり、あるいは純然たる知的好奇心からワークフローってなんだ? と疑問を持ってる人のための本だ。

一言でいうと、ワークフローの根底にあるのは、システムワイドな継続という考え方、とまとめて良いかな(とちょっと自信なさげなのは継続をちゃんと理解してないからだ)。

ある特定時点での処理が、それ以上その時点では先に進めなくなったら、の状態をそのまま固めて永続化する。システムの状態が他の処理の実行によって変化することで、その固めた処理が実行を再開できるようになる。そこで、その固めた処理をほぐして続きから処理を再開する。これをまずは「再開可能なプログラムステートメント」と呼ぼう(この言葉はわかりやすい。その後、本題が始まる時点で、WFではこれを「アクティビティ」と呼ぶ、と用語化するんだけど、おれにはうまいやり方に思える)。この再開可能なプログラムステートメントを組み合わせてプログラムを作れば、実行に時間がかかったり、再開時に追加された条件から異なるプログラムステートメントへ分岐したりしても、混乱することなく処理を記述できるはずだ。

言ってしまえば、それだけのことだ。でも、これを実現するのはそんなに簡単ではない。ということを最初に説明するところから、エッセンシャルWFは始まる。

ruby -e 'printf "#{a=gets.strip} * #{b=gets.strip} = #{a.to_i * b.to_i}\n"

は、一筆で書ける(ここではワンライナーで書きたかったからRubyを出しただけで、当然、本書はC#で書いてある)。

というのは、1つのプロセスで閉じてgetsが呼べるからだ。では、getsで停めずにプロセスを回すにはどうするか? イベントドリブンという方法がある。でも、そうすると中央のポンプとそのディストリビューションのせいで処理がばらけてしまって、プロシージャの連続性がプログラムからは読めなくなる。難しいプログラムのできあがりだ。

これを避けるには、ブロックIOはそのまま使って、スレッドを複数作れば良いね。そうすれば、個々のスレッドは元のプロシージャを実行すれば良い。でも、それってスケーラビリティとかどうなの? いくら待機状態にあったって、スレッドってヘビーなリソースで、そいつを占有するのってばかだよね。

ということは非同期IOの出番だ。つまり非同期IOを使えば次の処理を次のメソッドというように並べると、プロシージャの連続性はそれほどは失われない(というようなことが書いてあるんだけど、おれはこれにはちょっと疑問を感じた。誤読かな? でも、イベントドリブンの非連続性が読めない人に、非同期IOを利用した非連続なプロウグラムが読みやすいとは思えないんだけど)

もし、ここで非同期IOの呼び出しをシステム側がうまく裏側に隠すことに成功したら、個々の処理を宣言的に並べるだけで済むじゃん。つまりそういうプログラミングモデルをシステムのレベルでサポートするのがワークフローエンジン(ここではWFランタイム)だ。

という具合に、この本は断続性があるプログラムから始めて、大きな処理をどのように可視状態を保ったままでシステム化するか、というワークフローの考え方とプログラミングモデル、WFというマイクロソフトテクノロジーでの実現方法を解説する。

ソースプログラムを使って解説するスタイルなので読みやすいし、ワークフロー一般について始めるにも良い出発点なんじゃないかな。

_ わからない

Essential COM (ASCII Addison Wesley Programming Series)(ドン ボックス)

インターネットのおかげで、それまでは「これ、おれの知識が不足してるんだろうなぁ」とか、「もっと勉強しなきゃなぁ」とか猛省と奮起のネタになってしかるべきものが、「わかりにくい。星1つ」で済むようになってよかったね。(なんか皮肉に取られるかも知れないが、そうじゃなく、これはこれで読者のレベルに対する的確な評なわけなんだろうから、価値があるわけだ。つまり、難しい本だから、おれのような素人は手を出すなという評にはそれなりの意義ある。それまでは猛省と……だったものを、価値ある情報として堂々と放言できるんだから、良かったね、ということ)

本日のツッコミ(全3件) [ツッコミを入れる]
_ まこたん (2007-10-28 12:06)

個人的にはあんまり比較されたくないかなぁ・・・WFとぶり<br>理由は今度あったときにでも(笑)

_ arton (2007-10-28 12:10)

それはぜひ、聞きたいです。よろしく。

_ masayh (2007-10-29 13:47)

mixiで感想を書いておきました。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え