著作一覧 |
ビスケットでちょっと遊んでみた。本当にちょっとだが。
で、お絵描きツールのところで、「ペイントを呼び出す(Windowsのみ)」というのを見て、なんとなく寂しくなる。
そしてなんでrjbを作ったのかを思い出した。
BPELについて調査中に出会ったページ。
The open source workflow initiative。なんかいろいろあるが、ほとんどがプロプラエタリなプロセスモデル。
唯一のBPEL派がTwister。
WRさんがなぜかEssential COMを読んでいるのを見て、似て非なるEffective COMを読み返してみたり。
考えてみれば、ここからどれだけたくさんの事を学んだことだろう。
Effective *らしく、この本には50のプラクティスが出ているが、それを幾つか並べてみるだけで、わかる人にはわかるだろう。
1.Define your interface before you define your class.
(クラス定義の前にインターフェイスを定義せよ)
2.Design with distribution in mind.
(常に分散を念頭に置け)
3.Object should not have their own user interface.
(オブジェクトは独自のユーザーインターフェイスを持つべきではない。ここからCOMのオブジェクトはMVCに当てはめるところのモデルを想定しているということがわかるかも)
4.Beware the COM singleton.
(シングルトンには気をつけろ。――ただし、2.がからむので通常考えられるような意味ではないのだが)
6.Interfaces are syntax and loose semantics. Both are immutable.
(インターフェイスは文法―メソッドシグネチャ―であり……次の訳は難しいな、緩い意味というのは文書化されたメソッドの説明のことだ……は変えてはいけない)
これらの規則は、COMに限定されるものではない。すべてのインターフェイスセントリク(可能)なシステムの基本となるものだ。
もちろん、ほとんどの章はC++とCOM固有の問題が扱われている。たとえば、COMのメソッド境界をまたがったC++例外をスローするな(5.)、というのは一般論としては意味を持たないし、use flyweights where appropriate(25)などはCOMのオブジェクト寿命管理が参照カウンタによるからこそ可能なものだ(もちろん、closeやdestroyといったメソッドを規定すれば紳士協定としては可能であるが)。あるいは、MFCからATLへの移行期ということもあってか強型付けの推奨が随分たくさん出てきたりもする。
10.Don't provide more than one implementation of the same interface on a single object. に至ってはCOMを知らなければ意味不明だろう。これは文字通り「1つのオブジェクトが特定インターフェイスの複数の実装を提供してはならない」という意味だが、この規則が生まれるということは、1つのオブジェクトが特定インターフェイスの複数の実装を提供可能だということだ。これはある意味非常にトリッキーなのだが、実際には複数のカスタムインターフェイスをそれぞれデュアルインターフェイスとして実装するシナリオだと比較的簡単にできてしまう。そういうことはするな、ということが書いてあるのだが(COMの交換則が破壊されるからだが)、ちょっと技巧に走り過ぎてあまり意味がない章とも言える。
ちなみに、P.201〜2のエピローグに並べられた箴言を列挙しよう。
・Read the COM specification
仕様書を読め
・Read …… これはいいや。
・Be a skeptic
懐疑的であれ(MSの甘言を鵜呑みにするな)
・Distrust your tools
ツールを疑え
・Learn MTS……これもいいや
・Learn Java
Java may be the future of COM. ... (こいつら知ってたな……)
・Be a part of the COM community
これはそのまま他のインターフェイスセントリクなシステムにも流用できるものだ。たとえばJavaに置き換えてみれば
・Read the Java specification
・Be a skeptic
EJB?
・Learn .NET
・Be a part of the Java community
既に一昨日のことだが、NTTが防災の日を記念して毎月1日は171サービスデーとか始めたのを良い事に171を利用した伝言サービスを家人が試していた。やっぱりイナイということなんだろうか? でも不通時に使うわれるんだから22とか、輻輳時に使われるんだから293とかのほうがいいような気がする。でも1で始めるって決まりがありそうだから197とか。
なんで、contractという言葉を使わなかったんだろう?
Interfaces are syntax and contracts.
looseな必要性からかな? (ではなぜloose?)
ここになんとなく良くない匂いを感じるぞ。
どうもありがとうございました。インターフェイスの件についても書いておきました。
フリーのBPELエディターをいろいろ探したが見つからなかった。
結局、Oracle BPEL Designerを使ってみる。ついに、Eclipseか……
OracleのBPELサイトはチュートリアルが激しく充実しているのは良いし、BPEL ManagerがネイテヒブBPELツールなので、BPEL DesignerもBPELの生成だけ(ビルドしようとするといろいろManagerを探すのだが―TechNode#5に思わせぶりな記述があるが、以前は違ったようだ)にも利用できる。
単なる夜のドライブでも、主人公が「私は恒星間飛行をして……」とナレーションすればそれは恒星間飛行なのだ。
(サラ金のCMで引用していたな)
というのを思い出させてくれるのが、新湘南バイパスだ。
特に21時過ぎ。
真っ暗だ。藤沢のあたりにほんの申し訳程度に立っている他は道路灯がない。しかしカーブが多い(非常に妙な道路で、国道1号から入った瞬間はえんえんと直線なのだが、茅ヶ崎中央あたりから左へ左へカーブしていき、茅ヶ崎西でこんだ、右へ右へカーブしていく)。走行している車は非常に少ない。だから、リアランプを頼ってトレースすることもできないし、当然のように速度も上がる。だからか対向車はみんなハイビームで通り過ぎていき、目を射抜く。
街の明かりもほとんどないし、途中マンションを1個通り過ぎるほかは、道路を越えているのは煙突と妙な鉄骨群だけだ。この鉄骨が奇妙だ。クレーンでもなければ煙突でもなく、意味のある建築物とは思えない。一体なんなんだろう?
街明かりは遥か下に時々煌く程度で、空は黒い。
かくして独りごちる――恒星間飛行と。
「光のように速く弾くんだ、出来る限り速く、軽く弾けば、太陽にまで飛んで行ける」。(あいつとララバイの飛行場のシーンのようだな――おれのバイクは空を飛べるんだ)
Edit, ListBoxあたりから始まって、今ではProgressBarとかまである。
この調子で、UsecaseDiagramBoxとActorIcon、UsecaseIconとか、ClassDiagramPaneとClassBox,ClassDialog,AssociationLineとかそういったものも用意しておいて欲しいと思わないでもない。
25×32=800
を与えておいて
2.5×32=?
と出すと80と答える。というような問題を子供がやっていた。
80÷32=?
とかだと0にだまされて間違えていたりして。
でも、それなりにできるようになったので(というか、機械的に小数点以下の桁数を右辺に入れればすむだけの話だし)、
80÷3.2=?
を出してみた。同じように2.5とか答えるので、実はわかってないのかと不安になって(というか実際にわかってないわけだが)教えてみたり。
でつくづくと思ったが、加減乗除と1口に言っても減算と除算のほうが加算と乗算に比べて遥かに高等な概念を使っているな、ということだったり。負値というのは減算の持つ難しさを加算のそれに引きずり降ろすための仕組みなんだから、早めに教えたほうが良いのか? とか。(指では数えられないかも知れないが、貸し借りの概念があれば理解できるはずだし)
でも除算については、そのためには分数が必要になるよな、とか。でも分数そのものは一応教わったらしい(が、分母が同じ2つの数の加算のみとか)。
コンポーネントの10年と、Windowsスクリプティングの歴史があって、なぜ、UDAが無いんだ?
むしろ、UDAのセッションのほうが、なぜ、わざわざDAO(というのはJ2EE風の言い方)を作るのか(J2EEで通せばRowSetを生で使わずに)? についての説得力がある見解とかがあって、現実的だったのだが。O-Rマッピングによるインピーダンスミスマッチの解消ということよりも、抽象化による下位レイヤーの隠蔽というほうが僕も意味があるように思う。後、懐かしかったのはリモート転送の歴史という感じで、Variantの安全配列、UDT、MBV、ADO、XMLとかの変遷の条り。そういやUDTとかあったなぁ。UDTもMBVも使ったものだし。
ちなみに、スクリプティングのセッションは、ビジネスオブジェクトをビューに埋め込むのはダメダメだけど、楽だからついやっちゃうんだよね、いかんいかんという話(+ユーザビリティを考えたら、なんでもHTML、なんでもファットクライアントという、なんでも主義はだめですなとか)。で、ASP.NETはコードビハインドで一見ビューとモデルの分離に見えるけど、それは間違いだから気をつけろっていうように繋がる。確かに、コードビハインドのソースのほうはCだし、WebフォームのほうはVで、Mは別に外に置くのが正しい。というわけで、内容的には良いセッションだったのかも。
コンポーネントの10年については、導入部については我田引水(自分に都合が良いように引っ張る)が目立ち過ぎてたきらいがあった。(冗談交じりかな? と思うのは、抽象化の歴史とか言ってMDA,AOP……DSL,RUP,XPとか全然関係ないものをずらずら並べているところとか。知っててやってるのは間違いないし)
たとえば、MFCやATLは「呼ぶもの」か? いや違う。どちらも「呼ばれる」ものだ。継承ベースで利用するクラスライブラリはテンプレートメソッドに対するはめ込みだからね。当然、利用の仕方は「呼ばれる」となる。それをIoCに繋げるために「呼ぶもの」にしてしまうのは、いささか乱暴すぎる。というように考えてみると(セッション関係なく)なぜ、ファウラーがIoCではなくDIと言い出したかわからないでもない。IoCというと古き良きクラスライブラリと変わらないとも言えるからだ。新たな概念にふさわしい名前が必要であろうということでDIと付けたんだろうな。
とは言え、おもしろかったのは事実である。しかし、HttpModuleという言葉からFilterを想像するのは難しそうだなぁとか思ったけど。
うが、「おんちこしん」といくら入れても変換しないと思ったら「おんこちしん」だった。これまで口にしたことなかっただろうな……
というのはどうでも良く、「Common Lispオブジェクトシステム―CLOSとその周辺― bit1989年1月別冊 共立出版」の、井田昌之さんの概説から適宜抜き出してみる。
まず冒頭から
オブジェクトの概念の形成は、1960年代後半のSIMULAにさかのぼることができる。そしてSmalltalkを経て現在のオブジェクト指向言語へと流れている。このことを疑う余地はないが、それらすべてが必ずしも同一のオブジェクト指向概念に基づいているものではないことには留意する必要がある。
ということで、1980年代後半には、すでにいろんな考えがあることがうかがわれる。では、SIMULAとはどんな言語なのか? 既に1989年ですら過去のものとなっているのか、井田氏は丁寧に説明してくれている。
書棚の中のほこりをかぶったSIMULAのマニュアルを久しぶりに取り出してみた。SIMULAにはclass宣言があり、そこでは、ブロック構造の手続きを定義する。その手続きに属する局所データの宣言機構が付属する。SIMULAでのオブジェクト生成とは手続きの呼び出しそのものである。すなわち、オブジェクトというのは関数定義であり、それを生成するというのはその定義を実行させることだというイメージのほうが近い。Common Lispでたとえれば、クロージャの定義機構+単一継承がSIMULAのオブジェクト指向昨日の中心概念といえよう。
そう言えば、この本より前に多分bitを読んでいたら、おそらくCommon LISPのオブジェクト指向機能はクロージャを元にするのかと思ったらdefstructの延長みたいで驚いたというような記述があったのを思い出した(ちなみに、同書では、defclassをdefstructの延長と単純に考えるのは危険だと強調している)。
Smalltalkについては、
一般にはSmalltalkをもってオブジェクト指向の元祖としている。Smalltalkではすべてがオブジェクトであるという大きな特徴が評価されている。
とのことだ。
では、1989年、井田氏の概論ではオブジェクトとはどのようなものとして定義されているのだろうか?
従来、オブジェクトとは、
(1)それ自身のプライベートデータをもつ。
(2)そのデータの上で行われる操作の組みがある。
という認識をもとに、これら(1)、および(2)を包括するものとして考えられてきた。
そしてこれらをまとめて
(1)Encapsulation
(2)Integrity
(3)Operationality
(4)Modularity
という4つの概念を解説した後に結論として
「データと操作の定義に対して抽象データ型とuniform external interfaceが提供され、それを用いて、ソフトウェア開発者はモジュラーにプログラムを作成できる」
と、特徴付けるが、続けて、それだけならADAのパッケージやCLUクラスターもオブジェクト指向になってしまうがそうは呼ばない。なぜなら
オブジェクト指向を特徴付けるもう1つの重要な概念は、「継承」である。それがどんなものであっても、継承(もしくはその発展概念)がなければ意味が無い。上記の4つは「継承」の裏付けをもっているのである。
とまとめている。
では継承とは何か?
「データおよびそれらに対する操作の組みを再定義する手間を省き、それらを部分共有しながら新しいオブジェクトを定義する」概念である。
というように、共有と拡張のための機構と位置付けられている。
いやはや、1989年に読んだときはさーぱりわからなかったが、今読み返すと、なんてわかりやすいことか。
#多態が出て来ないことに注目。多態というのは以前ある方から「人それぞれの多態」のようなusenet上の抜書きみたいなニュース記事を紹介されたことがあるが(残念なことにどこだか忘れた。comp.なんとかだとは思うが)、多分、一意となる定義はなかったように覚えている。
Polymorphism is a ubiquitous concept in object-oriented programming and is
defined in many ways以降を1ページにまとめたのを見たのかな?
白書を読むと、なんかがっかりするんだが(どうもみみっちく見える)。
特に、DSIの白書。
抽象的な間は何か夢のように見えるのだが、具体化してくると途端に現実が見えてくるっていう現象なのかな? と、とりあえずの感想。
多分、Exchange2000でストレージ制覇ってのはフェーズアウトしているんだと思うのだが、Gmailってある意味では、こういったコンセプトの具体化なのかな?
三日連続で疑問で終結。多分、金曜まで続くだろう。
自動車の数が少ない頃は、多分、規制(たとえば駐車禁止とか速度制限とか)ってなくて、ユーザーが増えてきたら作られたんじゃないかなぁ。知らないし調べる気もないけど。
少なくても原付のヘルメットや、チャイルドシート、シートベルトについては法規制がなかったころを知ってるから、他のもそんなもんだとは思う。
こういうのって、合理的に判断してる人には大したインパクトはない(チャイルドシートなんて法規制があろうがなかろうが最初から使ってたし)もんだ。
でも、ものによっては妙に制限されたように感じる人や、こともあるだろうけど。たとえば、帯域制限とか、HTMLメールの画像が見られなくなるとか、インターネットバンキングのログイン画面がURLを見せないポップアップウィンドウなのでログインできなくなるとか。 というか、客単価が2500円以上のレストランが禁煙なのは非常に納得がいくのだが、たかだか800円くらいの店が禁煙なのはいかがなものかとか(というわけで、スターバックスには行ったことがない。嘘だけど。でも、ガストやマクドナルドではつい禁煙席を選ぶというTPOに応じやすいおいらであった)。
で、ASRも引っ掛かってるらしいので調べようかと思ったけど、明日は早いからやめた。
_ WR [>ガストやマクドナルドではつい禁煙席 (笑)茶髪のあんちゃんの近くで苦虫を噛み潰すartonさんの顔が目に浮かびまし..]
Indigo話は無かったが、露払いが、WSE2.0。
WebサービスといってもASP.NETとは独立してTcpChannelの上に乗っかっていて、オンメモリーとは言えキューイングして(非同期通信をサポートしてるってことだ)、必ずしもデシリアライズするわけではない(XMLをXMLとして取得可能)。
この本がネタ元らしい。と思ったら1989年か。違う……かな? (Wileyだし)
Japan's Software Factories: A Challenge to U.S. Management(Cusumano, Michael A.)
むむ、Japan As No1時代の本か? ナショナリズムをくすぐられそうな内容だが1991年。
と思ったら、これがホンモノだ。確かに、注文した人もいるし(売上ランキングに乗ってる)。とりあえず買っておくことにする。
アンナミラーズのボックス席で、店の外側を向く席に腰をおろすのは負け組み。ではなく、なんだっけな?
さて、miniSDカードが携帯の中に入っていて、そこにはそれなりの解像度で撮ったムービー(なんか慣れない言い方だ)がある。が、それはメールには添付できない。リフォーマットすれば添付できるのだが、リフォーマットするとなんか抜き出しみたくなってしまって嬉しくない。
で、ケーブル買って繋げば良いと思ったんだけど、ちょっと前に充電器の予備を買いに行ったときまだケーブルは無いとか言われて(でも取説読むと良かったみたい。機種よりケーブルのパッケージが古いから対応機種名に出てなかったってことのようだ)なんとなくケチがついていたってことと、SDカードを直接コンピュータで読めばいいじゃんと言われたってことから、そっち方面を見てみるかなと。
で、BICカメラに行ってみたが、無いな。USBメモリーみたくなっててminiSDカードが入るのがあるんじゃないかと思ったが無いし、せめてPCカードでもと思ったけど少なくても無い。で、携帯売場に言ってみるとIOデータのUSB接続のやつが見つかったけど約9000円もするよ。そりゃちょっと高いんじゃないか?
で、ネットのほうがリアルよりも(クリックのほうがブリックよりもってような言い回しもあったな)品揃えがあるんじゃないかと見てみたら、あった。
割と好きなバグなのだ。合わせ鏡みたいなもので、深淵が見えるからかも。
java.lang.Booleanをimportすると、Boolean.TRUEとBoolean.FALSEの2つの定数が引っ張って来れる。rjb-0.0.9から定数も保持しておくように変えたせいで、
・java.lang.Booleanをimport
・java.lang.Booleanのメタデータの読み込み
・定数発見
・定数の型がjava.lang.Booleanと認識→まだimportしていない型と判定
・最初に戻る
となって、死んでいた。
とりあえず、0.1.1では、定数のロードの直前にimport済みとマークするように変更したけど、考えてみたら戻り型がimport中のクラスと同じメソッドではなんで起きないんだ? 定数の場合、rb_define_constまで実行するからか……
#0.1.1はMacのメソッド並び順がLinuxやWin32と異なるのでテストが通らないorz。
Stringと同じでRubyの中ではtrue/falseに変換してしまうほうが幸せそうだな。
as is
$ ruby -rrjb -e 'p Rjb::import("java.lang.Boolean").FALSE'
#<#<Class:0x1bfeb0>:0x1bed44>
$ ruby -rrjb -e 'p Rjb::import("java.lang.Boolean").FALSE.toString'
"false"
to be
$ ruby -rrjb -e 'p Rjb::import("java.lang.Boolean").FALSE'
false
さて、どうなることか。
いや、会社が提供しているっていうか、MSが提供しているって言うかOutlook Web Access(OWA)ってのがあるんだけど(OutlookのようなUIをWebで提供するっていう多分ExchangeServerのアドオンか何か)、こいつと来たらSafariでも、Mac IEでも歯が立たないという難物。
・Safari ログインできるけど受信トレイを読もうとするとエラーになる。新規メールは作成できるけど日本語は?に置換されてしまう。
・Mac IE はなからログインできない
というわけで、仕事アクセス用に結局、Windowsノートパソコン買うしかないか……と考えてたんですね、これが。
でも、ふと思い立って試してみたらこれがばっちりだ。確かに、IEのかわりにどうぞと言うだけのことはある。
ちなみに0.9.3だけど。
#なぜかスラドに1.0prが出たとかのトピックが立ってるし、なんか同じように0.9.3入れた人がいたりとかするのが不思議ではある。
Safariに慣れたせいか、タブのクローズボタンはタブに欲しいな。
caminoなんてのもあるのか。まあ、いいや。
久々(arton.no-ip.infoにはFirebirdが仕込んであるから、そこを使ってる場合ってことだ)に天泣記も読めた。
聞いた内容を再構成:
ソフトウェアの工業化という言葉をみなさん、口にされますね。
工業製品と比べてソフトウェアはどうした……というようなやつです。
ブァカですか?
工業製品とソフトウェアを比較すれば、よっぽどソフトウェアのほうが不良品発生率は少ないですよ。
ソフトウェアが工場のラインに乗るという状態、これは、CDにプレスして箱に入れることに相当するんじゃないですか? CDという共通規格があり、CDケースのような汎用部品があるという意味でも工場のラインとの比較ではソフトウェア産業のほうがうまくやられているように感じますね。まあ、開発ー構成ー出荷ー納入というフェーズを考えてみても工業製品の工場での処理と比較するのであれば構成の段階ですね。
ソフトウェアの開発フェーズを工業と比較するのであれば、CAD/CAMで設計したり流体テストしたり、素材強度をテストしたりしている状態に相当すると考えるのが妥当でしょう。
再利用? CADエンジニアは図面を起こすときそんなことは考えません。デザインは常に進化することを顧客も望んでいますからね。
デスマーチ? キャンセル? もちろんあります。当然です。新車開発プロジェクトなんて、それは大変なものです。属人性の固まりのような作業ですからね。それに、Mさんみたく設計にバグがあるのを承知で納期に間に合わせるために出してしまうということもありますし、潜在バグもありますね。
したがって、ソフトウェアは工業化すべきだなんて寝言だと考えるべきでしょう。なぜなら、すでに完全なまでに工業化されているわけですから。
こいつが最悪なのは、デフォルトで
Test.java:8:25: Parameter t should be final.
みたいなくその役にも立たないメッセージを出すことだ。
引数にfinal付けて意味があるのは唯一無名インナークラスで参照する場合だけだ。
というのは、Javaは値渡しなんだからメソッド内でどういじろうと知ったことないし(プリミティブ型の場合)、クラスの場合代入できるかどうかは実は関係ない(メソッドシグネチャーでメソッドの内部実装について示す意味は無いだろう)。
public void safeMethod(final Foo foo) {
foo.destroy();
foo.close();
foo.blabla();
}
中身が破壊できるわけで、C++でのchar* strcpy(char* dst, const char* src);みたいなものとは全然異なるからだ。
というわけで、Javaの仕様がわかっていれば意味がないことはわかるし、そうでなければ逆に誤解を招きかねないことになる。constの意味で捉えられると、ミュータブルクラスにfinal付けるってのは逆に危険だからだ。
ただしフィールド宣言では意味がないわけではない。
final Foo foo = new Foo();
public void killFoo() {
foo.killYourself();
}
finalフィールドを実装したオブジェクトの生存期間中、同一のインスタンスを利用するというドキュメンテーションとしての意味が重要。(持続性の問題とも言える。メソッド内での持続なんて知ったことではないが、インスタンスの寿命と一致するというのはインパクトがある)
で、はじめに戻って、引数のfinalチェックなんてやめてくれ(ということからこのメッセージは日本語化されてないのかな?)
あと、デフォルトでは、privateやパッケージスコープのメソッドなんかにまでJavadoc書けとうるさいこととか。
importでクラス名を指定するのは基本的には正しいと思うけど、java.io.*とかjavax.sql.*みたいに使うとなったらimportだけで20行近く書かなきゃならないようなのもヤだね。でも、そういうクラスは少ないから例外規定をちゃんと作っとけば良いかな?
って言うか、lintといい、どうしてこういうツールを作りたがる連中っているんだろうか? どうせ作るんだったら
・有無を言わさぬ整形ツール(引数にfinalを付けなければ)
・FindBugsみたいに真に意味がある問題指摘ツール
にしたほうが良いだろう。
っていうか、デフォルトでは使い物にならないな。
/**
*/
public class Check extends Bla {
/** */
String str;
/**
* @param s aa
*/
public void setTest(String s) {
s = str;
}
}
ここまで妥協してやっても
Check.java:5:12: 変数 'str' は private とし、アクセッサメソッドを持つべきです。
Check.java:9:5: メソッド 'setTest' は拡張するように設計されていません - abstract か final か空である必要があります。
Check.java:9:25: Parameter s should be final.
Audit done.
とか言い出す。setTestが、Blaで実装されているメソッドだったらどうよ? abstractやfinalや空じゃまずいでしょ。
あと、なんでもprivateって厨房じゃあるまいし(publicやprotectedならわからんでも無いが)。つーか、パッケージスコープがデフォルトでしょう(もっとも、C++みたくデフォルトのスコープは違うかもみたいな言語もあるけど)。
#こういうソフトウェアは嫌いだから文句をつけるだけ。建設な方向は整形ツールにするかFindBugsみたいにすることだけだからだ。
写真だと横っちょに(良く見たら分離してたな)ケーブルがあるからちょっとやだなと思ってたが、実際には本体だけで充分だった。多分、縦挿しのノートパソコンなんかだと引っ掛かるだろうからケーブルも付けてるんだろう。
で、使い心地は良かった。っていうか早いし。USBメモリーと同じように挿すだけでWindows2000でもMacでもすぐに使えたし。
で、これなら、CDーRとか使うより、1GBのSDカード(miniは128MBくらいみたいだし)を使えばコンパクトでよいなとか一瞬考えたけど値段見てただの誤解だとわかった。1GBで100円くらいにならないかなぁ。
kn……答えを書いてはいかんだろう、安くなったな。
でも、ワードナーの4番目のやつはやりかけだし、Cosmic ForgeはAmigaの中で眠ってるし(終らせたけど。ラムの神殿1000回くらい回って無敵状態だったり)、Crusadersは1回コンプリートして(サイと一緒に旅に出る方法)2回目をやってるとこだし(で、中断して既に4年以上)、最新は買ったはずだけど見当たらないし(というか、Crusaders終らせてからやりたいし)、とぶつぶつ言いながら、買いそうな予感。
それにしても忠実に再現で315円か……。
って言うか、実際に買ってやったのは、MSX版ですごく素敵な絵だったけど、これはオリジナルのおおざっぱな絵なんだろうか? というか、既にアクセスしてたりして。ばかですな。
しかし、お使いの機種ではだめですな、と断られてしまったのだ。これで良いのだ。
ヨタ話。
国鉄の順法闘争ってのがあった。職場放棄はせずにダラダラ仕事をするってやりかたのストなんだが、プロ野球の人たちもこういうのやればどうかな。
ピッチャーはいつも、いい球だけを投げる。バッターの人はいつも見送る。捕手は常に後逸、野手は絶対に走らない(って言うか、相手選手がきちんと決まりを守れば走る必要はありえない)。当然、チェンジの場合も牛歩で返るしとか。
職場放棄的なストと違って、これは相当強力な気がするぞ。まさかそんな試合を見せられるなんて客席の連中も思っても居ないからすげーブーイングとか剣山がグラウンドに降り注ぐんじゃなかろうか。
テレビだって中継するよな、試合自体はやってるわけだから。これ、強力だよな、死ぬほどつまらないと思うぞ。
でも、体が反応するってのはあるから、ついバッターは振ってしまったり。当然のように快音残してスタンドに吸い込まれていったり。当然走ったらだめだから牛歩で行くんだけど、それでもスト破りと非難ごうごう。ホームに返ればタコ殴りとか。
追記:順法闘争って言葉があってるか、一応グーグルにかけてみたら、同じネタを考えてた人がいるな。まあ、順法闘争世代ってことだろうか。
この場合は本義はどうでも良くて字面遵守なんですね、これが。記憶の中のストライキっていうと、たいてい新聞の一面にでかく「順法闘争」ってように出てるわけで、もう「順法」=「のろのろ」というのがイメージとして出来上がっているわけだから、ここを「遵法」と書いてはもうだだめぽ。っていうか、60〜70年代ネタだから順法って書かなけりゃ当時の雰囲気が出ないじゃん。
と書いてから、ふと気付く。「順法闘争って言葉があってるか」に反応してくれたのかな? だとしたら微妙に外れていて、意味的に遵法は先に出ていたからだったりして。で、でも違う書き方してたよな……確か順法だと思ったけど……というふうに進んだわけだったり。(でも、これって上の段落と矛盾してるよね。でもイメージとして残っているのって誤って記憶している場合があるから、文字としてあらためて書く場合には気になったりするわけ)
#死語ですか? 死語ですね。
ってto brothers(兄弟たちよ立ち上がれ)みたいな感じがするんだけど、なんでこういう題を付けるかな?
って言うのはどうでも良くて、ジャンジャックアノー(これが初見)か、よくまあこんな大時代な作家が生き残っていたものだとびっくりした。まるでセシルBデミルとかみたいだ。あるいはリチャードフライシャーのコナンとか思い出したり。典型的な2流の大監督だな。
出だしは、くっきりはっきりメリハリがあって、いんちきな異国情緒満載のクメール文化風の遺跡(これが森の中に突き出してるシーンが何度も出て来るんだが、その嘘くささはある意味良い映画なのだが)。言葉による余分な説明は排して、なんちゃらピアスがどうしてアフリカを捨ててアジアに行くのか簡潔に示した後は、虎と人間が交互に出てくる。交尾のシーンとかなんとも不思議な感じだ。大監督ではある。
で、脚本がこれまた大時代で、典型的な村長と開明的な娘、自分の行動に悩むなんちゃらピアス、悪徳でも悪党でもないがせせこましい領事、その妻、イヤな犬(わんわん物語りのシャム猫の役回り)とか。偉大なる父(でも買弁なんだろう?)の印象に押しつぶされかけながら威厳を保とうとしてうまく果たせない太守(ジョンイルでつか)をコケにしたり悩みを描いたり。耳の穴とかいろいろネタは仕込んであるんだけど(脱走した後、サーカスの檻に戻るとこもそうだし、ファイアーウォールを越えるところもそうだな)、だからといって映画がおもしろくなるわけでもないし。テーブルの下で虎の子が靴にじゃれついて領事の妻が勘違いするとか、いつの時代の映画なのだろうか。しかし二流の悲しさ、位置関係が明確ではないし動きがきちんと追えてないから今ひとつおもしろくない。
でも、そんなことは吹っ飛ぶくらい、兄弟が再開して格闘を開始してからお互いを認識してじゃれ合うにいたるところのシーンは美しい。猫科のケモノって、どうしてああも美しいんだろうか。あの部分には感動した。動物園じゃ寝っころがってるとこしかほとんど見えないからまさに映画ならではのシーンでもある。
あと、老いたサーカスの虎が子虎が弱っているのを見て、それまでの無関心ぶりをあらためて尻尾で遊んでやるシーンとか。ネコですな。ねこじゃらしで遊んでやると手を出してくるのと同じだ(というように見ているこっちが子虎に感情移入をしやすくするためのシーンなんだろうが)、それと同時に老いた虎を皮にすることの伏線だったり、つまるところ脚本自体も大時代なのだが。
アナグマが子虎を威嚇して追い払うシーンとかあるけど、偉大なる王で親が子にアナグマを使って狩を教える条りとかを思い出した。アナグマは強いのだ。そういったものを出してくるのはすべてきちんとあるべき物語を踏まえているからなのだろうが、そういった点まで含めて、古臭さがぷんぷんしてくる。
それにしても、ああいう映画が撮れるということは、虎って本当に訓致しやすい動物なんだろう。猛獣だから怖いけど。
で、あれだけ大騒ぎして死んだのは父虎、犬、サーカスの老虎だけっていうところがよくも悪くもこの映画の特徴を表している。
#本編上映前の広告が動物看護士専門学校の広告というところがうけたんですが。普通の映画じゃあんなニッチな広告は流さないだろうな。
動的にrb_define_classして例外を自動移入するようにした。
しかし、問題がある。int = Rjb::import('java.lnag.Integer') begin n = int.parseInt("foobar") puts n # never here rescue NumberFormatException => e puts 'だめに決まってるだろ' end
は期待通りに動作する。この場合、NumberFormatExceptionを移入する必要はないしそもそもRjb::importで移入したJavaクラスはRubyのT_DATAでクラスではないのだが、NumberFormatExceptionは仕様に従いStandardErrorを継承したRubyのクラスとなる(し、rescueするためにはそうでなければならない)。
問題1:テストassert_raise(NumberFormatException) { int = Rjb::import('java.lnag.Integer') n = int.parseInt("foobar") }とは記述できない。
この場合、NumberFormatExceptionが実行時にまず評価されるため、parseInt呼び出しの結果はじめて定義する動作と合わない。
これについては制限とする。
問題2:名前案1)Rjb::Java_lang_NumberFormatException => いやかも
案2)NumberFormatException => 当面これでいくけど、衝突する可能性はある
案3)Rjb::NumberFormatException => あまり意義を感じない
問題3:rb_define_classを動的によぶのであればRjb::importの結果もクラスにしてしまうというのはどうだ? (これは内部構造がちょいと複雑なのでやらないつもりではある)
問題4:GCで死ぬので、まだ調査中。 (追記:インスタンスフィールドの呼び出しに誤ってクラスインスタンスを与えていたのを修正したら直ったよ。因果関係が謎めき系なんだが……。 というわけで、0.1.2をリリース)rjbのために久々にいじってるわけだが、ポインタポインタとかも出てきたりするわけだが、正直なところ面倒くさいな今となっては。
なお、rjbを殺すにはパッケージ名を含めたFQDNじゃないだろうな、FQCNかなが255文字を越えたクラスを引数に取るメソッドか、フィールドを定義してimportすればOK。さすがに、malloc/freeをこのレベルではやりたくはない。しかし、Javaだと何も考えずにStringBufferのインスタンスをメソッドに送り込んでappendさせたりしているわけで、実行効率という面では恐ろしいくらいのろまなことをやっているのだな、としみじみと感じる秋の夜。
気付けば富豪か。で、ときどき貧乏生活をしてみて、遠くへ来たもんだと振り返るということだ。
思い出したのでメモ。
どうしてMSはVMWareVirtualPCが必要だったか?
アプリケーションのテストをするためにマルチブート環境を作るのはかったるい。だいたい、ベータ版のOSのために1台使ったりするのも嬉しくはない。
場合によっては、Windows9x、NT4、2K、XP、それにそれぞれのSPの幾つかの組み合わせなんかでのテストも必要だ。
マシンは高速になったしメモリも山ほど詰めるし、HDDの容量も死ぬほどあるんだから、MSDNにVMWareVirtualPCが付いてくるとハッピーだよね、ということなんだろうな。
list-39169前後の話(中田さんのやつ)は、まとめて残しておいたほうが良いだろうな、と始めたけど中断。(番号だけここにメモ)
だかどうだか忘れてしまったが、どんどろどんどろというようなリズムにのって、小さいころから悪ガキでぇ〜とか歌っていたころしか知らないし、全然興味もないのだが、
祭りと聞いて見に行ってみた。確かに祭りのようだ。
優雅な生活が最高の復讐であるを見て。でも、そこへ行ったのはunoさんのところが元。
追記:5人じゃなくて7人か。
62回も参照してくるとは面倒なやつだな。しかも、つい見に行ってしまったが亜細亜女性じゃないように見えるぞ。というわけで(と書くと看板に偽りがなければ保持しておくように取れるな)削除。
追記:今度は129回か。面倒な連中だな。
コストが劇的に下がったことで RDBMS をファイルシステムに代わる単なるストレージとして利用するようなシステム形態が可能になった
というのを読むと、いつになるやらのWinFSより先にこっちがきちゃうのかな? という気もしないでもないけど、SQL叩かなければならない間はそうもいかないだろうとも思う。
RDBをファイルシステムとして利用する場合のExplorerとかFinderとかはどういったGUIと操作体系を持つと利用しやすいのだろうか。QBEってことはないだろう。意外とHTMLみたく埋め込んで展開とかかな。とか考えてみるとExplorerっていうのはうまいことを考えてあるのかも知れないな、とかいろいろ。
ゴミのようでもIDE-RAIDでRAID5とかがそこらのPCにくっつくようになれば(でもその時は3.5インチじゃだめだろうな)、どちらにしてもファイルシステムのサルベージはほぼ不可能になるんじゃなかろうか。ならばRDBにしてしまうってのも筋は悪くないだろうし。
しまった、asianとteenも含めときゃ良かった。
もしかして、カナダのblogに対してはカナディアン、インドのblogに対してはインディアン、ガーナのblogに対してはラティーナとか使い分けてるのかな?
いやー、マジで神戸って進んでるな(そういや、無人電車も関西が最初で、ゆりかもめのほうが後だもんな)、と思ってしまいました。
static final int COUNT_OF_FIRE = 128 #きりが良い数 ... void fire(site_name) { for (int i = 0; i < COUNT_OF_FIRE; i++) { // これはOK ... } }ではなく
Const COUNT_OF_FIRE As Integer = 128 'きりが良い数 ... Public Sub fire(byref site_name as String) Dim i As Integer For i = 0 To COUNT_OF_FIRE ... Next End Subなのに違いない。
リファラspamあるところにツッコミspamあり。
気付かなかった……orz
#自分で考えるの億劫なのでtdiaryへのコメントspamを一括削除をありがたく再利用させていただく。
ここのコメントspmaにはhrefは入ってなかったのでallohaで削除。
tdiaryu-comment-cleanみたいなのをまとめて、tdiary-fullにbinディレクトリとして入れておくのも良いかも知れないなぁ。
ユーザーの10%はbinを見もせずに自分でスクリプト書きそうだが、残りの人には役立つんじゃなかろうか。
思わず、本屋で手にして年譜を立ち読み。
中学生のころ、図書館で手にした幻想博物館に驚愕して次々と読んでいったものだ。確か司修の手になると思ったが必ずしも陰惨なだけではない装丁と合わさって何かいろいろなものをここから教えてもらったような気がする。
当時、虚無への供物が講談社文庫にちょうどなったころでもあったので、当然のようにそれも購入したのだが、何か読むのをためらわせるところがあったので、それだけは読まずじまいで今でも家のどこか奥の方にに隠れているのではないだろうか。
当時、図書館で手に入るものはその時すべて読み、そのまま忘れてしまっていたというのが正解なのかも知れない。
音にすればしょせん1つの言葉に過ぎないものが、漢字を使い分けることで複数の意味を持ち、それによって同じ音で綴られた文がまったく異なった意味を表すことは、多分、中井英夫の作品から学んだことなんだろう、と思い出した。
時代の雰囲気として、片方に鈴木いずみがいて(新宿、Jazz)、もう片方に戸川昌子がいる(青山、シャンソン)とすれば、中井英夫は明らかに後者の側の作家であったと思う(が、なんの関連性もないのだが)。
(上では「いずみ」と書いているが「いづみ」が正しいようだ)
あるクラスが他のクラスと等しいかどう判断するか?
jclass jc1 = (*jenv)->FindClass(jenv, "foo/bar/Baz");
で得たクラスの参照は、次の機会に
jclass jc2 = (*jenv)->FindClass(jenv, "foo/bar/Baz");
とやったり、
jclass jc2 = (*jenv)->GetObjectClass(jenv, obj);
とやったものとは異なる参照となる。ほぼ100発100中。
したがって、jc1 == jc2という比較はできない。つまり参照の先を見なければならない。
このためには、jni.h上の定義ではjclassとjobjectというように異なる型とされているが
jboolean IsSameObject(JNIEnv *env, jobject ref1, jobject ref2);
を利用する。jobject ⊃ jclass 。jclassはjava.lang.Classのインスタンスなので(追記:これは間違いだな。Javaのリフレクションにとってのクラスの型であるjava.lang.Classとは異なるJNIにとってのクラスの型の何かがあって、jclassはそれのインスタンスだからjava.lang.Classのインスタンスとは異なるものだ)したがってjobjectでもある。
これは、JNI Functionsを見てもわかりにくい。
iPodのおかげで忘却の彼方から引っ張り出されてきた。
赤ちゃんが燃えている。そら、水をかけろ。(嘘訳)
写真立てにはきりりとした良い男のイーノ、でも鏡には朝寝坊した年増のあいまい宿の女将みたいなイーノ。
伊能輝彦っていう日本語名をかってにつけたのを思い出してみたり。
きたー
kshとRubyを比較して、Rubyを使うとこんなにいいことありますよ、ってのをまさかおいらが書くことになるなんて、予想もしてなかったよ(自分の手だけでは決められないとこだし)。
・Win32でも各種Unix(Linux含む)でも、基本的には共通のプログラムが利用できる(Win32でkshを使うには、SFUの導入が必須かつすべてが利用できるわけではない)
→うちはWin32使いませんからな、といわれると弱いね。
・スクリプトとしての生産性が高い
#これ、事実だと思うけど([]の中の空白の置き方次第でエラーになる言語とは比べてはいかんだろう)数値化できないよね。
・開発時に覚えること(調べること)が少なくてすむ(学習曲線がなだらかと言うんだっけ)
#これ、kshですべてまかなえるはずはありえないから、まともに使うにはkshだけではなく各種コマンド(sort、grep、catあたりからsedとかawkとかまで含む)にも通暁する必要があるのに対して、RubyならRubyと一部拡張ライブラリまででまかなえるという意味なんだが、このへんってわからない人にはわからないのはUnixの各種コマンド自体というか仕組みを知らなくてkshってのがプログラミング言語だと勘違いしているということなんだろうか?
#こういったことをあまり言い出すと、Cで開発すれば良いというとんでもない方向へ話が進む可能性があったり。
・おいら、サポートできるんですけど。でもksh(+コマンド群)はソースが無いからベンダーのサポートに問い合わせなければだめですな。だから、問題が発生した場合の解決までのターンアラウンドはRubyのほうが早いですよ。
#coreになります、な使い方するわけないし、その範囲ではね。とは言え、それこそ属人性というやつでそんなことを言えるはずがない。
なんか、ガツンとした理由ってないかな? 助けて紅い人!
ちなみに、Perl,Pyあたりはどうよ? ってのは有り得ないので考慮不要。USL正統のシェルスクリプトとそれ以外という比較であり、それ以外についてはpyな人やPerlな人はいないので。
#DBIの存在ってのはあるな。シェルスクリプトならRjbもある(っていうかそのための準備でもあったりして)し。とは言え、PL*SQLをkshで包むって方法もあるわけだし。
手書き。これはどうにもならんな、今のところ。
本は一応読める。そう言えば青空文庫を見てないけどHTML版は読めるかな?
スケジューラも一応はあるし、アラームはPDAより強力だから移行できそうだ。
電話帳もある。
ゲームもある。つい、ぴちょん君の四川省とか買ってしまったが。
MP3プレイヤーと思ったけどその気になればFMラジオもあるし、iPodがあるからこれは不要。
TODOもあることはある。
操作性は低い。でもコギャル打ち込みをマスターすればどうにかなるんだろう、きっと。
それでもメモ帳もあることはある。
バックアップもSDカードへできる。
バイザーを持ち運ぶのをやめることはできそうな気がしてきた。購入後今月で丸3年かな。想像以上に役に立ったがガジェットを3個も持ち歩くのはちょっとごめんになってきたし。
あとは、MySyncか。自分で作れるかな? インターフェイス次第だな。結局、SDカードリーダライタだけではだめで、USBケーブルは必要ということのようだ。
PCとの連動を考えなければ手書きメモ+カメラで撮影という方法もありかも。
FAQを読むといかにも買わなきゃだめに見える。でも、コード例はこちらと書いたリンクをたどるとどうも全文らしきPDFがダウンロードできる。って言うかHTML版もある。
ってことは、もしかしてEffective Javaもか? と思うと(持ってはいるが拠点は3ヶ所、本は1冊)、こちらは3章と5章だけだった。
スタックを参照するGCがまずいというRuby側の問題はおいておくとして(いざとなれば、コールバック中――Rjbでメインスレッド以外の呼び出しが発生するのはインターフェイス経由で他のスレッドからのイベント通知の場合だけのはずだ――はGCを停止すれば良い)(追記:大甘。jumpバッファのこと忘れてるジャン)、わかっているのは次の2点。
1. メインスレッド用JNIEnvポインタを使用。この動作を変更するのは難しい。Win32専門とすればTLSの使い方くらいはわかるが、一応、他のOSのことも(AWT利用以外でメインスレッド以外からのコールバックがあるかという点はおいておくとして)考える必要があり、かつ現時点ではpthreadのAPIについて見る気はしない。
ただし、コールバック関数にJVMがJNIEnvポインタを与えるからこれを利用するという手段はある。ただし、相当制限を付けなければだめだが。
仮にマルチスレッディングでもシーケンシャルに動作すると前提すれば
メイン ワーカ | +------> + (コールバックの実行) | −JNIEnvの摩り替え | + <----------+ JNIEnvの復元 | (復元されたJNIEnv) |
とできる。しかし、複数のイベントが入れ子になるような状況では(ワーカスレッドBとCが同時にコールバックされると仮定すれば)、-B(A)…… -C(B) ----- +A() --- +B() となりえるからだ。()がスタックに保持された元のJNIEnv。かつ、Cが入り込んだ時点でグローバルなJNIEnvはCとなるため、Bの動作に問題が起きる。
結局、グローバル変数としてJNIEnvを保持するのは無理がある。すると、すべてのJNIEnvを利用する関数に引数としてJNIEnvを与える必要が出てくる。わっ、かったるい。だったらTLSを(#ifdefで切り替えて)使うほうがましだ。
問題はそれだけではなく、
2. Rjbデータとして保存したJavaオブジェクトのローカル参照がだめ。
ということもある。たまに動作することがあるから、常にダメというわけではないようだが、使えるとは前提できない仕様なんだからだめはだめなわけだ。これも問題だ。同様にjclassのキャッシュが使えない前提となるからだ。
だったら、コールバックされた時点でグローバルのJNIEnvと異なれば(この判定方法が正しいかどうかは不明。とりあえずそうだと仮定)メインスレッドに対してシグナルを送って、メインスレッドで動かすという手段もありそうだ(ASRの手法)。ところがどっこい、ここで大前提となっているのはAWT/Swingでの利用なのだから、メインスレッドからAWTスレッドを触ること自体が禁じ手だからお話にならない。と思ったけど、Runnableを起動するスタブを作ればどうか? と思ったがその場合はRuby側のコードは動かせないから(元の条件と同じになる)結局これもだめ。
うむ、良くJNIの仕様を読んだら、ちゃんと書いてあった。
すべてのJNI関数はローカル参照を返すが、グローバル参照も受け付ける。
したがって、その場で解放する必要がない、というかキャッシュすべきオブジェクトはすべてグローバル参照として保持すれば良いということだ。多分(と微妙に自信がなかったり)。(オーバーヘッドの問題か、GCの阻害要因になるかでローカル参照を主としてるのかな)
というわけで、とりあえず、コールバックではJNIEnvの摩り替え、rjb内でのキャッシュにはグローバル参照を利用、というように変えてみる。
本屋に寄ったら平積みになってたので購入。というか以前フラワーコミックスで出た時にも買った気がするが今は手元に無いんだからしょうがない。
なんか、主人公(というか語り手というか、ワトソン博士の役回りなのだが)の水野というのが、友人の永野というのに見えたりするってのもあったり、そんなに絵はうまいとは思えないのだがなぜか印象に残っているとか、まあいろいろ強力なインパクトを受けたらしい。真っ黒なページの上3/4を使ったコマの中に小さく主人公(ホームズのほうだ)が震えたりしていて絵はうまくないかも知れないが表現は巧妙ではある。
作者自身も何をどうすれば良いのかわからずに外部の声によって主役を変えていったようでもあり、必然的にそうなったようでもあり、奇妙なブレをする連作中篇というとこかな。さらに後に続くおんなのこ物語
では、録茶夢の最初に戻ってやり直しをしている感じがした。
最初、どうでも良さそうなコミックバンドのギグから物語が始まる。フロアの後ろに黒メガネの連中が立っている。客席の中がざわつく。黒メガネの連中は結構知られたバンドで、名前はスラン。
ここでヴォクトのスラン(1940年)を思い出すのはやはり正解なのかも知れない。Xメンのような受け入れられずに苦悩するミュータントもののハシリの作品だ。次々とイベントが起き続けるローラーコースタースタイルの小説であり、状況設定も卓抜(人間対スランとすると、読者がスラン側に感情移入しにくくなることを回避するために、さらにスランをミューテーションした新スランという敵を作って物語を回すというようなことをしている)だ。
母の思念が、考え込んでいた彼の心をつらぬいた。
「前からもやってきたわ。ジョミー。別の何人かが通りを横切ってくる。さあ、あなたは逃げてちょうだい。おかあさんの話したことを忘れずにね。いい? 生きる目的はただ1つなのですよ。スランがあたりまえの生活を送れるような世界を作り上げること。
―― 世界SF全集17 P.8から
デビルマンのようでもあり、ハリーポッターのようでもある。
スランの連中がここに来たのはドラマーの八神を借りるためだ。
この時点のスランは黒メガネのギター、ベース、キーボード(めんたんぴんのキーボードがモデルじゃないかな? 今ではハイロウズ)のその他大勢に、見るからに主役顔のマネージャとボーカルの5人組で、ドラマーは怪我のために抜けたという設定だ。この設定が妙に現実的でおもしろい。クラッシュやPILのようにドラマーが不定というのはありえるパターンだからだ。
かくして、主人公が3人という状態になる。八神、マネージャの水野、ボーカルの安部。他のメンバーはホンダ、スズキ、トヨタなので全然、物語とは関係なさそうだ(が、後続の話でだんだん重要になってくるため、最初の設定がいい加減だったことがわかる)。
で、誰がスランかと言えば、当然のようにボーカルということになる。しかし、あまりに度が過ぎて読んでいて痛々しい(ボーカルが、ではない。作者の物語の動かし方がだ)。女性はコミックバンドのキーボード(確か、おんなのこ物語の主人公)が出てくるだけなので、おそらく読者がついていけないだろうという編集者の入れ知恵か、八神が抜けた後の(だが、このエピソードは結構いいのだ。抜けた後の八神と安部の関係が、お互いに無関係なままに意識しあうという状態を両者が持っているということが示される)ドラマーとして水野のイトコが出てくる。で、2編目の主役をやる。彼女はうまく笑うことができず、いつもおどおどしている。ただでさえ、ぴりぴりしているボーカリストをもてあましているところにこれではうまくいかないだろう。と気付いたのかいつの間にか彼女はスターリンモリソンのように後ろに隠れた女性ドラマーの役回りとなってしまう。
ここには少女漫画の文脈はまるでないのではないか? 水野と安部は一緒に暮らしているが、それは確かに安部が行く当てがなくて水野のところに居候をしているだけの関係でしかなく、安部があまりに異常なために水野が引っ張り回されてもまったく物語としては機能していない。
では何があるかというと、ただただ安部の疎外感があるだけだ。最初は単なる頭合わせだったに過ぎないトヨタ、ホンダ、スズキがそれぞれ人間として振る舞いはじめ、背後に生活を持ち動き始め(しかもそれぞれが妙にリアリティがある魅力的な人物たちである)るのだが、彼等がどれだけ安部に親身になろうとも、水野が(バンド活動が好きだが才能がないことに気付き、しかも安部というとんでもない才能の持ち主を見出してしまったために、自分自身の居場所を失ってしまい)困惑しようが、安部はたった1人で真っ黒なコマの中で頭を壁にガンガン打ち付けているだけだ。
この暗闇を晴らすために意外なことにどうでも良さそうだった最初の作品のコミックバンドのボーカルがひょうひょうとした味を入れる。だが、物語の中心が疎外感の固まりなために、物語にひねりを入れることはできても、作品の方向を変えることはできない。
そこで梶山登場。頭が切れ、ビジネスとバンドを切り離して考えられるイヤなヤツだ。物語は急激に動き始める。梶山は印税収入がどこへ流れるかまで計算して曲作りとバンドの主導権を握ろうとする。だが、最後は安部の才能に打ち負かされてしまい逃げてしまうのだが。
かくして、物語はただただ安部の疎外感を表現するという方向にだけ進まざるを得なくなる。再度、梶山が三流テクノバンドをプロデュースして敵対的ギグを仕掛けてくる。話はいくらでもおもしろくなりそうになってくる。しかし、作者はそれを自ら拒絶してしまう。
いまのスランをマネたいならいくらでもするがいい
半年後にはスランは変わってるからね
……
あと追っかけてマネしたってモンクはいわないさ
ネタ切れを心配せずともおれたちが
いつだって1歩先を歩いてやる!!
それでは物語はなりたたないだろう。
八神助けてくれ、テクニックはある、ロックスピリットも充分だ、しかも人柄が良く友達づきあいもできる、そんなお前だけが頼りなんだ。
かくして、おんなのこ物語(しかし、なぜこんな題名にしたのか想像すると興味深い)に続く。
ちなみに、スランの音を想像すると初期のXTCあたりではないかと思うのだがどうかな?
少女漫画の文脈がないのではないか、と考えるのはまったく恋愛感情が存在しない世界だからだ(水野のいとこの水野に寄せる思いとかはあるのだが、なんか違う)。それどころかすべての感情がうまく相互作用せずに相手の前で屹立している。
しかし、そう考えるのは間違いなのだろう。この作品の中心は確かに安部の疎外感とバンドの中で時々感じる居心地の良さといったすごく自分勝手な世界で、その周りの人々もそれぞればらばらに相手が何を考えているか探り合い分析し論評し行動を予見しているのに、いざ自分のことになると実は何をしたいのかは誰もわかっていない。逆に言えば、すべての登場人物が正しく自分の生を生きている。これは、モデリングされた世界の中をロールにしたがって登場人物が機械として動かされていく作品とは異なる世界の物語だ。そしてこれこそは少女漫画が最初に獲得した手法ではなかったか。
ギタリストはギターをひき、ベーシストはベースをひく。そしてマネージャはマネージメントしてボーカリストは歌う。確かにロールは明らかなのだが、彼らはそれだけで生きているのではない。
たとえばギタリストは普段は郵便配達をし、既に10数回も職を変え、今度ツアーのために欠勤すればまた新しい職探しをしなければならない。ピアニストは自分の家を持ち一見安定した生活をしているが、家庭では満たされない何かを抱えてキーボードを弾き続けている。おしゃべりしかしないロックミニコミの編集室で黙々と作業を続け1人で雑誌を仕上げてしまうマネージャ。だから、単純なロックバンドのサクセスストーリーになるはずはなく、そこに描かれるのは彼らの淡々とした日常と、シャープに描かれるステージ、適度に散りばめられた固有名詞によって浮かび上がる音。それを支える細かなリアリティ。たとえばベースのトヨタに頼まれて水野のいとこがギターケースを受け取る。ギターはギターでもベースなのでケースには錘が仕込まれていてずしりと重く思わずよろけてしまい、ひーひー言いながら運んで行くシーン。梶山が連れてきたテクノバンドの衣装と髪型と喋り方、とその後に続く韜晦。
こういった細部の積み上げがこの作品に強烈なリアリティを与えている。その結果、あたかも自分自身が作品の中にあるような共感を得ることができる。いくら、ボーカルがいかれていてもだ(いや、このねじくれた精神の持ち主が主人公たりえるのも本来は少女漫画だからからだと言えるのかも知れないーーたとえば鉄鍋のジャンの主人公ですら、スランのボーカルに比べればよっぽど社交的だ)。
akonさんの日記から間接参照で。
JDOQL that would work with the new POJO persistence model
POJOに対するQL?
確かOSのほうで、Intuiton(AmigaのWindowシステム)ではなかったと思うが、最初にa4レジスタ(68000マシンだから)にベースアドレスを設定するcallを行った後は、すべてa4に対するオフセットとしてシステムコールを呼ぶというような仕組みだったと思った。(確かa4〜a6はシステムコール内で保存するということと、a5とa6はメタコムコのBCPL(AmigaOSの記述言語はなぜかBCPL)がスタックポインタ(a7だったかな?)とフレームポインタに使うってのが理由でa4だったような気がするが書いているうちにa7をスタックポインタとして利用していたような気がしてきたから、もしかしたら1個ずれてるかも)
というのを、JNIをいじってて思い出したといっても、今だけど。
だからAmigaOS(Intuitionのほうかも)は、最初からマルチタスクシステムとしてできていたような気がする。
つまり、コンテキスト(この場合はプロセス)を同時に複数共存させるには、それぞれを異なる位置に配置しなければならないし、そのためにはそのコンテキストのポインタとオフセットという形でアクセスできるように用意しておくということだ。
#何を最初に考えていたか思い出しているうちに忘れてしまった。
ジェズイットを見習え |
_ WR [>loose semantics 邦訳では「ゆるやかなセマンティクス」になってました。]
_ arton [まったく意味不明な翻訳のような……でもそれで良いのかも。別に厳密に定義しているわけじゃなさそうだから。]