トップ 最新 追記

日々の破片

Subscribe with livedoor Reader
著作一覧

2006-06-01

_ Appleって車ビジネスなのか

うだうだとしていたら、職場のMac使いが浮かない顔してやってくる。

さっさとMacBook買えよと言えば、そちらこそどうです?

いや、おれは10.5が出て、ATOKが対応するまで買わねぇよ。それにつるぴかはいまいちだ。でもキーボードはちょっと好きかも。でも買わねぇよ。

でも、ATOKは7月には対応するみたいですよ、それに今なら下取り15%。

下取り? 初めて耳にする単語なのだが、それは何のことだ?

PowerBook15"持ってるでしょ。きっと15万くらいになるはずですよ。

とかなんとか囁いてくる。

へぇ? と言われて調べてみると15万はでたらめだが1.5G G4 PowerBook 15"は最高10万とか書いてある。こいつは何かい? まだ使えるうちから新しいモデルが出たら下取りに出させて新車を購入させるっていうビジネスモデルかい?

だって、1台あれば十分でしょ。

そうか、それがAppleのビジネスなのか、となんとなく腑につかえながら落ちた。今まで、コンピュータはバラで買ってたからそういう買い方があるってことは気づかなかった。それで信者はすぐに新しいのを手に入れるってわけなのか。

さあ、どうですMacBook。

いやでも、つるぴかはいまいち好きではないし。

だったらどうですMacBook Pro。

いや、それは今は無いだろう。

でも、決断を伸ばすとどんどん下取り価格が落ちますよ。

なんか語るに落ちてる気もするが。そうか、それがAppleのエコシステムなのか。

やっぱ、黒いいですよね、黒。

見てくれに15000も払う気はねぇよ。

だから下取り15%アップの今なら、その分が出るじゃないですか。

わけわからねぇな。っていうか5/31までだし。

ああ、それはでたらめ。すぐ6/30までってなるから。

詐欺じゃねぇか、それ。

いや、いつでもキャンペーン。それに10000円以上お買い上げかってOR条件になってるし。それに、黒なら、Thinkpadいらなくなるじゃないっすか。

Apple MacBook 13" 2GHz Intel Core Duo/512MB/ HD80GB/ SD/ Black [MA472J/A]

そりゃだめだろ。でも、ブートキャンプがスタンバイじゃなくて休止モードに対応してるんならデュアルブートでも相当使いでがあるな、と思うが違うんだよな。っていうか、OS Xも休止モード相当のはないような気がするが。

つべこべ言わずにさっさと買ったらどうですか?

それより、そっちのiMac G5は下取りに出さないの?

いや、それは17"。

Core Duo版にすりゃいいじゃん。

B000B9PTAQ

いや、そうなんですよ。いや、いかんいかん、それはだめですよ。それにいまさら1.83GなんてMacBookに負けてるじゃないっすか。

じゃあ、MacBookでいいじゃん。

いや、そうなんですよ。いや、いかんいかん、それはだめですよ。

という調子で時間が過ぎていった。

_ 予言+2ヶ月

※2006年8月31日(木)までにApple StoreでMacをご注文するか、1万円以上のお買い物をされたお客様が対象です。

やつの言うとおりだ。

(さらに査定額が最高9万円と1/10も下落している。なるほどなぁ)

_ お、生きてたのか

そりゃよかった

_ 口笛

今、外をうろついてたら、向こうからブランデンブルク協奏曲の5番を口笛で吹きながらタオルで鉢巻した労務者のおっさんが通りかかった。

そういえば、最近は、街から口笛が聞こえなくなったな。

以前は、新大久保とか歩いていれば、錆びたナイフを口笛で吹きながら白いスーツのおっさんが通りかかったりしたもんだ。

あと良くあったのが、口笛対決。

僕は口笛が好きなので、良く吹きまくったものだが、というか、それも数10年吹いてないような気がする。たぶん、奥さんに、夜口笛を吹くと悪魔が来ると吹き込まれたからだろう、ってどういう物語がオリジンなんだろうか。

で、こちらが気持ちよくリストのピアノ協奏曲を吹きながら歩いてくると、通りすがった懐手の男、負けずとタールベールのピアノ協奏曲を吹いて邪魔をしてくる(なんでなんだろうね? 誰かが吹いているとそれまで遊ばせてた口を突然使い始めるってのは)、負けじとこっちが華麗にカデンツァに入れば、向こうも負けじと3本手を再現する、これはかなわないかと思うまもなく、別の方角から来たおっさんが道化師の朝の歌のすばらしいグリッサンドを吹かせて聞かせるもんで、お互い顔を見合わせて参りましたとか。

あの音楽に満ち溢れていた幸福な時代はどこへ行ってしまったものか、と通り過ぎるブランデンブルクの労務者(もしかしたら遠藤って名前で、息子の名前は完とかかな?)を見ながら思い出した(っていうか、そんなにあの頃が良ければ、負けじと得意のイタリア協奏曲でも吹かせば良いのにそうしないってのは、やはり一つの時代が去ったということなんだろう)。

本日のツッコミ(全2件) [ツッコミを入れる]

_ ムムリク [とてもよいらしいですよ。 http://d.hatena.ne.jp/TOBI/20060525#p1]

_ なかだ [昔は来るのは蛇だったような気がしますが、横溝正史と混じってるような悪寒。]


2006-06-02

_ VC++でWindows Forms

^か。^ね。^……。

_ GParted

パーティションを操作できるフリーソフト「GParted Live CD」

(以下、ちょっと数字は全体的に2Gの壁以外はいいかげん)

NT4の2GBの壁のため、40Gのハードディスクを2G+18G+18Gくらいにちょん切って使うこと早数年。さすがに、NT4は不要になってWindows2000をインストールしたのは良いけれど、SPのたびに古$ぅぅ瓠璽犬麓茲辰討Ⅳ蓮▲轡好謄爛侫.ぅ詈欷遒里燭瓩離轡礇疋Δ呂△襪蓮燭鬚匹Δ靴茲Δ:\Program Files\Sharedみたいなところにインストールしてくれるふざけたプログラムはあるはで、C:\の空きは早くも数10K程度。ばっさばっさと消しまくってもすぐに気づけばあと数10K。(追記:こないだ「わ」が正解ではという話になったが、指は「は」だと言い張るようだははは)

そんな快適な環境なのに、VS2005のインストールが必要になった。

当然、D:にインストールを選択する。

しかし、VS2005、おまえもか。C:に10MBの空きが必要だと抜かしてくれるわ。(追記:ここでは自然に「わ」と打っている)

さらに、圧縮したり、ヘルプを消したり涙ぐましい努力をしたがもう限界だー。

しかし、ビジネス上の理由から完全な再インストールはできない。

しかし、D:をE:に移し、D:を削除してC:にくっつければ良いのでは? と気づく。気づいたけどパーティションマジックとか持ってないし、買いに行くのも面倒だし、購入手続きがまたうんざりするほど面倒と来たものだ。

そこにとってもタイムリーなGPartedの記事。

というわけで、イーソーヤキヤキ、イーソーヤキヤキと歌いながら作業に取り掛かるところなのだ。

_ 続き

Linuxなのか。というか、KNOPPIXの成果をそのまま利用したツールなのだな。

で、ポイントして削除して、ポイントして拡張して、close、quit、右クリックreboot。これは楽チン(ただし、時間がかかるので、そんなに早く終わるわけではない)。

_ だえもんさんがんばれ

しかしばかばか言う人多杉


2006-06-03

_ ついにこっちにも来た

NGワードにいくつかのキーワードと、buy\sを追加。

_ ううむ甘かった

全体がアンカータグならfalse。っていうか、人間が書くときはアンカータグ使わないね、考えてみたら。

本日のツッコミ(全2件) [ツッコミを入れる]

_ arton [You have a very interesting site...]

_ arton [しくった]


2006-06-04

_ RailsはJavaの10倍の生産性か?

もちろん、そんなのはケースバイケースかつ人によるのだが、実感として結構、良い線をついているように思う。

5種類の開発方法を考える。

1. JSPタイプ1(1つのJSPで全部書く)

2. JSPタイプ0(JSPはまだリリースされていないので全部Servletで書く)

3. JSPタイプ2(MVCマルチレイヤで作る)

4. JSPタイプ2(MVCマルチレイヤで作る)のプロジェクトを組む

5. Sun Java CreatorとかWebSphere StudioとかでJSFで書く

1と2、5であれば、それほどRailsと変わらないと思う(特に1と5)。しかし、Railsの場合は、マルチレイヤでできている。したがって、後のメンテから、途中のやり直しから、要するに上から下まで一気通貫で書けない場合には、圧倒的に有利になる。そこまで含めれば4倍くらいの感じじゃなかろうか。どちらにしても5ならBookmark程度なら同じく10分(マシンが高速ならもっと早いかも)でWebアプリケーションができるね。打ち込む行数比較なら5のほうが少ない可能性も高そうだ。

でも意味ある比較の対象は、3と4だ。

しかし、4は既に異なる次元の話になっているから、結局は3の比較ということになる。

この時点で、気分的に既にRailsが1/10だなぁと思うよな、と思う。

行数よりもMとVとCの行き来の頭の切り替えコストが少ないと思うからだ。

そんな感じ。

別の見方をすると5って圧倒的なんだが(1,2,3との比較)なんかブレークしていないように見える。なんでだ? もちろんこっちが知らないだけってことはあるとは思うけど。

_ 思う思うに過ぎないけれど

行数の比較は無意味だし、本気で定量化するなら、同一上位仕様のアプリケーションを条件を揃えて作って、最終的にバグが取れるまで+1回は数ページ規模の改訂まで含めて数値化しなきゃだめだろうから、思うかどうかにしか頼らないデカルト流儀。

で、いろいろ試すことで見えてきたのだが、開発者をマスで考えると(塊のマスなのだが、枡で量っての枡でも同じことになるのが実に皮肉だ)どうもJSPタイプ2のMVCは粒度に手ごろ感がある。それに比べるとIDE+JSFというのは危なげというのはありそうに思える。Railsにしてもそういう感は拭えない。たとえば、5人のチームで、2人がモデル担当、1人がコントローラ、1人がビュー、残り1で全体進行って可能か? すくなくてもそういう作業分担は不可能だ。(もちろん、人間なのだから可能なわけだが、それはあまりにばかげていて何の意味もない)

JSFもそちらに近い。もちろん、コントロール担当と、IDE担当と……と分担してできなくはないはずだが、やはりそういう分担には向かないと思える。Railsと同じように、1人の作業の中でクラスを分割していくことになるだろう。RowSetからアクティブレコード作ってモデルにして、ビューとコントローラをIDEの上では密結合という感じ(コントローラを2層に分けるというとより正確かな)。

1つには、JSPタイプ2のMVCに向くシステムでは、コントローラとモデルの間に非常に分厚いアプリケーションロジックが入るということがあるかも知れない。たぶん、ここの抜き出し易さが肝になるのではなかろうか。誰が抜き出すのかと言えば、実際にプログラムしない人ということになるんだろうけど。

そのあたりを乱暴に一言で片付けると、先日、豆ナイトでいがぴょんさんとかに話したわけだけど、MVCひっくるめて1〜2人で作っていくのに向いている方法と、MだけVだけC(というのはあまり無いわけだけど)だけ横に複数人で作っていくのに向いている方法の差では無いかと思う。つまり1人とか2人でStruts使うのはかったるいが、RailsやIDE+JSFをクラスで開発者分けたらやってられないだろうということ。キャッチーで誤解を招く言い方だがイメージしやすく言えば、セル対ラインだし、ユースケース対フローチャート(モジュール相関図)だ。多品種少量生産対少品種大量生産と言っても良い。ああ、おれは80年代の人だから(ちょっとさばを読んでいるけど)多品種少量生産万歳だし。で10倍というのは1人にとってのオーバーヘッドではあるけれど10人にとっては緩衝材の役割を担うからむしろ必要不可欠なものであると。

で、さらに進めると、IDEというのはセルであるべき(パソコンで花開いたのは偶然じゃないだろう)なのに、Eclipseにはその香りがまったくしないのが、本能的に嫌悪感を覚える理由のようだというところにまで進むけどそれは余談だし蛇足だな(オリジンについて考えればそんなはずは無いわけだろうから)。でもそう感じるわけだし、ここまですべて印象論だからそれで良いのだ。

MとVとCとすべてこなせるのが本来の開発者というものだと思う。そしてやはり多品種少量生産ってのが付加価値を付けるためには重要な点ではないか? Railsがフルスタックかどうかより前に、開発者がフルスタックでなくてどうすんだ? とすれば、Javaより10倍生産性が高いものをいじくるのはやはり重要なわけだし(ただし、別にいろんな言語をつまみ食いする必要もないので、IDE+JSFでも良いのではないかと。いずれにしても上から下までJSPタイプ1ってことは今更ないよね)、Strutsも実際には後ろに隠してコンポーネントをばらばら作ってコンテナでくっつけるという方法だって良かったりするわけで、とりあえず手を動かすのが一番重要なわけだが、そう言えば、Strutsの何が良いのか? と聞かれて「Strutsタグ!」と答える人間と「MVC!」と答える人間に分かれるよな、と思い出したり(忘れてた。で、思い出したがStrutsタグは好きだ。STL使えない環境でもStrutsタグは使えたわけだし)。で、結局、ビューをいかにプログラムとHTMLの融合としてきれいに書けるかどうかが、一番のストレスだという点に思い当たったり(今この瞬間の思いつきなのでそれがアーハなのか、たわごとなのかは今この瞬間にはわからない)。その部分で、ActionViewが実に良いのだということも言えるな。


2006-06-05

_ 良く考えよう名前は大事だよ

ああ、まったく。

これからブログを始める人達への重要なアドバイス:無難なペンネームをおさえ、それをプロフィールに書いておけ

というわけで安田一郎でした(嘘)。

逆に「名乗って死にたくなる感覚」を味わえるというのも、それなりに楽しいものかも知れないが。本名が住友太郎とか、三菱一郎とかだったら。富士山太郎はもうみずぽだが。どっちにしても死にたくなるか。

で、思い出したが泉昌之のまんがで、ハードボイルドに決めたおっさんが銀行に来て、さんざん窓口ですかし風を吹かしたあげく最後の最後で「住友太郎」と記名して恥ずかしくて死にたくなるという住友銀行の広告があった。同じデンで瞬間芸としてufjと名乗るってのがありえたのだな。りそなと埼玉りそな。千葉りそな、関東りそな、亜細亜りそな。

ところで、子供の名前に「大勲位」ってつけることは可能なのだろうか? と、中曽根の呼ばれ方を見てふと思う。小学校で名前を呼ばれる。「中曽根大勲位くん」「はーい」間違いなくつけた親は意味を知らないように思えるが。

さらに話は飛ぶ。今でもつけてはだめな名前ってあるのだろうか? 祖父は子供が娘なら「幸子」という名前をつけるつもりで準備してたらしい(子供の頃、祖母から戦地から送られてきた手紙を見せてもらったことがある)。ところがどっこい生まれるちょっと前にある結婚式が挙げられて(追記:違った。別の原因だった)、その結果、娘に「幸子」とつけることができなくなってしまった。しょうがないので、次善の策として男子用に考えていた名前の「男」を「子」に変えるということにした。しかし、あまり嬉しいことではなかろう。が、そういう手紙だから私情は読めないように書かれていたようだ。


2006-06-06

_ VS2005

C#はうまくできてる。っていうか、VC++は使うなというメッセージなのかな?


2006-06-07

_ 新しいマシンの魂

The Soul of A New Machine(Tracy Kidder)

というわけで、読み終わった(古本屋で300円で買った翻訳版だけど)。

実に興味深い。1980年の本だけどそれほど古びているわけでもなかった。

というのは、とても多面的な本だからだ。

動機は次のあたりと読めた。

・でまあ、ギルバートってのはあれは一体なんなんだ?

ということで、これは確かにビジネス書であり、ダイヤモンド社から出版されるのにふさわしい。いわゆる髪が尖った上司がギルバートを理解し、どうすればうまく働かせることができるかを考えるために読む本のようだ。

そこで、筆者は社長も技術者(DECからスピンアウトした)、割と新興企業32ビットミニコン開発の現場に入り込んで(潜入じゃなくて堂々と)ルポルタった。

主役は30半ばのプロマネに意識的に転進した技術者で、自分が手を出したいのを抑えに抑えてプロジェクトを成功させる(実際には小人さんをしていたんではないかと思わせる記述もあるが実際のところ最後までハードは触っていないんじゃないかな)。この人、Wikipediaを見ると、AViiONオープンスタンダード化にするのにも影響を与えたんだな。

定性的に、なぜ技術者が仕事をするのかを追っかけたルポなので、最終的な結論として次のような若手の言葉の引用が結論となるんだろう。

胸の躍るような喜びの98パーセントは、自分の設計したものが立派な働きをしているんだ、自分の予期通りの働きをしているんだという自覚から生ずるものなんだ。そういうふうにマシンが働いているとしたら、その中に、僕という人間の分身がいるってことになるんだよ

そして、このプロジェクトが成功した(ただし市場ではVAXには勝てなかったので最終的には失敗というべきではないか?)理由として筆者は次のように語る。アメリカの技術者は相当多数が自分の仕事に満足していない。その理由は仕事そのものと管理体制にある。彼らの言葉を借りるなら

専門上のチャレンジの減少、当を失した(技術者の)利用、活動の自由の制限、作業形態の硬直的管理
ということだ。でも、このプロジェクトは違った。
産業労働者にやる気を起こさせるにはどうしたらよいか、という問題については多くのことが書かれてきた。……(中略)……マネジメント手法だけでは、この問題はまず解決がつくまい。どんなに面白そうな仕事でもそれが有意義な仕事になるためには、明らかに(後略)

明らかかな? たぶん、明らかだろう。でも、それは一般化可能なものなのかな? たぶん、違うだろう。

それはともかくハードウェアの開発というのは知らない分野だけにとても興味深かった。謎のバグがなかなか再現せずに困っているところに副社長が見物に来る。副社長はしばらく考えた末、マシンのむき出しのボードをゆする。すると見事に再現した。で、ソケットを交換して解決するとか。

#読み返す本でもないので、読みたい人にあげるけど、いますか?

_ each派

ぎょぎょ

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

_ arton [どなたかわからないけど日本Rubyカンファレンス2006に行かれますか?]

_ きむら [すいません。ruby-list/devにも投稿してるメールアドレスなんですが(^^;、それはさておき。行きます>カン..]

_ arton [ああ、メールアドレスか……(これまで考えてみたことも無かった)すみません。 では、カンファレンス会場か、懇親会あたり..]


2006-06-08

_ Rubyで何も考えないステート

state = {
 :idle => Proc.new { |x| x != 0 ? :eat(x) : :idle },
 :get_eod => Proc.new { |x| some_func(); :idle },
 :read_char => Proc.new { |x| return :get_eod x == EOD; eat(x); },
 ...
}
x = :idle
while s = stm.read(1)
  x = state[x].call(s[0])
end

簡単だな。

_ えむえすー

In Windows Explorer, right-click the script component .wsc file, and then choose Generate Type Library.

A .tlb file is generated for the script component with the same name as the script component file, written to the folder where the .wsc file is, and registered in the Windows registry.

太字はおれだが、元ネタはms-help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.WEBDEV.v10.en/script56/html/letcreatetypelib.htm

だ。

でも、GoogleでScriptlet.tlbを検索すると、見ているのと同じことが起きるようだ。というか、そこらじゅうにscriptlet.tlbができまくるんだが、1つのディレクトリに複数のwscを入れるのはだめということなのか?

追記:いろいろ試していたら、GUIDを自動生成しているもんでHKCR\TYPELIBの下が極度に汚染されてしまってやっかいなのなんのって。結局自分で作れというのが答えのようだ。

_ えむえす〜

WSCの自動生成TypeLibも半自動生成(自分でScriptlet.TypeLib呼ぶやつ)も、どっちもメソッドの引数をparameter要素で指定したやつに、OptionalArgsを付ける。付けるのは良いかも知れないが、問題は.NETのInteropがこいつを読むと、誰にも扱えない値型の配列にしてしまうことだ。本当は扱えるかも知れないけど(と譲歩)。

このためVB.NETからはWSCコンポーネントを呼べない。何をしようがパラメータの型違いでコンパイルできないからだ。一方のC#はnullを使えばごまかせたのだが、その後がだめだ、というか無理矢理どうにかしようとしたら、QIエラーを返してくれている。IDispatchは使わないと決め込んでいるらしい。むむ(ちょっと手を考え付いたが、それはいやだな)。

ってことは、何かするにはVS6をインストールしなきゃならないということか? それは今更っぽ過ぎてとてもやだ。

などとやってるうちに、早くも木曜の朝ではないか。どうしよう?

本日のツッコミ(全1件) [ツッコミを入れる]

_ なひ [早くも木曜の朝。そうなんですよ。どうしよう?]


2006-06-09

_ 熟睡

あー、良く寝た。というわけで今日は仕事を休みます。

_ あきれるほどいつも退屈な世間話ばかり

What,Me Worry?(高橋幸宏)

おれにもとても信じられない。

などと20数年ぶりに聴いてみたり(結局、買ったのだった)。

それにしてもポップってなんなんだろう? それはポップスじゃない。Jもつかない。

どこかのデパートのポップコーンの自動販売機ロボット。前を通ると低い声でうなる「ポ

ップコーン、ポップコーン」。

でもそれは僕には、こう聞こえる。「ポップ君、ポップ君」

でも、ポップは間違いなく人を堕落させる。なぜなら魂が融けて流れて下水道。

そこで、一緒に買った古い高橋悠治で口直し。

プレイズ・バッハ(高橋悠治/バッハ)

あ、これもポップだ。どろんどろん。

追記:うはー、ト短調フーガの最後のところで目が覚めた。やっぱりユージは悠治だ。か

くありたいな。

_ うわ、大きな修正きた

大きな修正だけど、とりあえずまずは明日に向かって(足を)撃て。

(さすがに自分で読み返してもわけがわからなそうなので番号をメモ。1.6.0……良く読んだらとりあえずセーフらしい)


2006-06-10

_ Rjb

なぜ、今なのかというほどのグッドタイミングで興味深いメールをもらう。

テストを書いて再現させて、さあ、と思ったら2時じゃないか。

ばかですな。というわけで中断。


2006-06-11

_ 発表資料

パワポとHTA

追記:start.htaにバグを見つけた。~(WScriptではEnterキーを示す)が2箇所にある。フルパス名の後の~を削除すると、想定していたリズムで実行できる(と思う——未検証)。

_ amrita2

僕はCDATAセクションは好きだが、実際のところ受け入れやすさってどうなんだろう? (DHHは、eRuby使わなきゃいいじゃんみたいに言ってた(ように聞き取れた))

プレゼンテーションロジックをコントローラに入れるというところでは正直なところ目が点になったが、これについては分離する(renderにテンプレートとエンジンを別に与えるとか)解決方法をDHHが言ってた(ように聞き取れた)。

っていうか、ひさびさにこのての話を聞けて楽しかった(dRubyのRWikiの中の話はやっぱり好きだな)。

_ MIMEタイプ重要

before_filterを使えば、MIMEタイプを自由に設定できるよ。

1箇所で複数の要素を見るのではなく、あらかじめ1つの要素に情報を集めることでその要素のみを見れば済むようにする。

#追記:RSSリーダで読むと、日記上で読むのと異なって均質化されるから(コンテキストがRSSリーダのそれになってしまうからだろう)、まるで個人的見解(おれがそう思う)のように読める。でも、これは引用メモなのだ(で、レクラ側で読むと確かにそう読める)。ちなみに引用元は(聞き取りが正しければ)DHHのコントローラに追加予定のrespond_toメソッドについての言葉。respond_toはContent-TypeAcceptにしたがってrenderを分岐させる。respond_whenのほうが良いのじゃないかと思ったが(選択動作に見えないので)思っただけで終わってしまったおれであった。

_ 問題解決野郎

世の中には、たぶん2種類の人間がいる(と始まれば、そういうことを言い出すばかものと、それ以外のまともな人の2種類ですね、と返すのが正しいと思う)。

問題解決野郎とそれ以外だ。問題解決野郎は、何かを聞くと、その問題点を先回りして嗅ぎ取ってしまう。そしてそれに対する解決案を考える。思いつきのどうでも良いアイディアの場合もあるし、深く鋭いそれ以外に確かに案はなさそうな解決案の場合もある。つまりその解決案そのものはそれほどには重要ではない(この場合)。重要なのは、とにかく問題解決案を考え、かつそれを元の話者に対して示したくてしょうがなくなるということだ。

っていうか、id="オブジェクト名|メソッド名" とか。:logic => 'foobar.logic" とか、良くまあその場で思いつくもんだな。で言った後から、|はsafeだっけ? とか。まあ、セーフじゃなければドットでよいかもとか。

でも、まあ、そういうのは、やっぱりあるべきひとつの姿ではあるよな、と横から見ていて思った。

_ やっぱりJavaは

(っていうか、あくまでもネタですよ。僕は、Java好きだし)

akrさんの発表はだいたいの部分においてすごく同意するし、あれは間違いなくプログラムを作る人はライブラリの中の人も外の人も誰もが知っておくべきことだと思う。

思うんだからちゃんと資料へもリンクしておくわけで『使いやすいライブラリAPIデザイン』。

で、その中に適度に短い名前が重要というテーゼがある。

つまり、今、あるライブラリFooがある。それに対して、基本のみんなに安心して使わせられるやつと、奥が深い症候群の患者用のやつの両方のメソッドを提供する場合、人間が持つ怠惰な性質に則って、短く簡略なやつを主として提供しろ、つまり次のようにしておけということ。

class Foo
  def open(path)
    ..
  end
  def open_for_asynchronous_access(path, &done)
   ..
  end
  def write(v)
   ..
  end
  def write_with_non_quoted_value(v, len)
   ..
  end
  ..
end

ちょっと例が良くないな。次のほうがわかりやすそうだ。

class VrString
  def len
    .. # 長さが欲しければこちらからどうぞ
  end
  def val
   .. # 値が欲しければこちらからどうぞ
  end
  def get_length
   .. # 素人は手を出すなよ
  end
  def get_value
   .. # 素人は手を出すなよ
  end
end

つまり、JavaはAPIのレベルや入門書のレベルや、その他のあらゆるハウツー本やらヒント本やらのたぐいが、すべてにおいて、そろいもそろって、「プログラム書くな」「素人は引っ込んでろ」「使いにくいぞ」「さっさと帰って寝てろ」と言ってるようなものですな、ということだ。ってのは、

良いクラスとメソッドのお手本
public final class ThisIsAPen {
  public boolean isThisAPen() { 
    ...
  }
  public void pleaseUseThisPenBecauseThePenIsVerySafeAndCheapForYouDear() {
   ...
  }
  public void writeAsSoonAsPossible() {
    ...
   }
}
悪いクラスとメソッドのお手本
public class Pen {
  public boolean isOk() { // OKでは何がOKかわかりません違反
    ...
  }
  public void useIt() { // 曖昧になりやすい指示代名詞itは使わないようにしましょう違反
   ...
  }
  public void asapWirte() { // ジャーゴンや省略形は使わないようにしましょう違反
    ..
  }
}

ということになっているから、誰もが上のように書くし、誰もが上のクラスのほうを好んで利用するというように決められているからだ。

そういえば、kitajさんとお会いできたのだった。

追記:アーハ。つまり、そのくらい高踏的で、素人に対して高い高い障壁をもうけている言語なのに、素人に毛がはえかけたまま抜け落ちてしまったような人たちが使ってしまっていることが問題なのですな。君たちは、Cを使ってstrlenとかを呼んでおきなさいと。

っていうか、sprintfではなくsnprintfを使わせたいとするのなら、長くするよりも、sprintfではなく、これからはspfを使えというようにすれば良かったのかも。あるいは、strcpyではなくscp(長さを取るのはあたりまえなので、strではないs族ではnはそもそも不要)とか。

_ LTメモ

(追記:以下は細部で印象的だった点であって、それぞれの発表そのものについてではない)

待魂。モニター越しで感じ取る会場の雰囲気では受けていなかったように見えたが、

・元ネタを知らない

・元ネタが過去の遺物化しているため忘却している

・別におもしろくない

のどれだろうか。字面駄洒落というのは嫌いじゃないのでおもしろかったが確かに笑い声をたてるほどでもないかな、というのが印象的だった。

etoさんはおもしろい。くそまじめな顔して16:30までで終わりですとか言うのは意識してやってるんだろうなあ、と。キートンみたいだ。

コンソールらせん。

無脳の言葉の赤がモニターだと潰れてまるで伏字みたい(というかまったく読めない)なので、想像力を非常に刺激する。

学生:どう思うよ?

無脳:XXXXXXXX

学生:すげー。

学生:神認定。

という感じ。

本日のツッコミ(全3件) [ツッコミを入れる]

_ 名無しさん [> sprintfではなく、これからはspfを使えというように や、それはCではキツイんじゃないかと。 名前空間がた..]

_ arton [それもそうですね。]

_ yadokarielectric [侍魂ということはわかったんですが、なんとなく反応しづらい感じでした。プレゼン自体はおもしろかったですけど]


2006-06-12

_ 日本Rubyカンファレンス2006

終わってしまえばあっというまの2日間だったけど、スタッフの皆様、お疲れ様でした。

#初日のカンファレンス会場から懇親会会場への通り道の要所要所にまで道案内のスタッフが居るのにはびっくりした。どうもありがとうございました。

_ 本物のプログラマーはB5ノートは使わない

なんといっても印象的だったのは、中田さんと中村さんのハックぶりだったり。そこにわたなべさんとakrさんとmputさんがからみながらminirubyが作れる状態からテストに通る状態へ持っていくわけで。で、わかったことは本物のハッカーはPC工房の黒テカリするでっかなノートPCを使うということ。やっぱりB5ノートみたいなちゃちなのじゃだめなんだろうな(という印象$鮗韻拭法靴泙辰拭命燭鮖辰討Ⅳ韻侘匹㎠辰拭

テンプレートとエンジン(essaさんのセッションの肝の部分とそれから考えたこと)

テンプレート中心主義では、データによってドリブンされる。

エンジン中心主義では、データはドリブンされる対象に過ぎない。

言い方を変えると前者は(穴埋め問題)、後者はオペレータである。

テンプレート中心主義では、具体的には、<%= foo %> のfoo重要なので、テンプレートエンジンにできることは、それを言われたとおりに埋め込むことだけだ。

たとえば、foo = params[:item][:name] と書いて<%= foo %>とくれば、そこにはparams[:item][:name]の内容が入る。それ以外のものは入れようがない。

ところが、エンジン中心主義では、<span id="foo">と来た場合、spanの中がテキストであることをエンジンは知っている。知っているからfooの内容をテキスト化できる。プログラマは余分なことをせずに、出力したいオブジェクトをそのまま突っ込めば良い。コンテキストにあわせて変形するのはエンジンの役割である。

正しい。

気になったのは、でもそれではエンジンは永遠に完成しないんじゃないかということ。まずタグは増え続けるだろう(少なくても増えてもおかしくはない)。オペレータの追加にどう追従するかというのがまず問題に見える。属性についても同じだ。特に属性について気になる。style属性のような方法のほうが良いのではなかろうか。たとえばAオペレータについてはLINKという属性値を与えられるようにしていたが、あれではHTMLの構文と別にそのオペレータと2重に覚える必要があるように見える。問題は、その属性を生では書かせたくはないということだ。となれば、デザイン時の属性と実行時の属性を同名で共存させるべきではなかろうか?

たとえば、

<A href="http://example.com/foo" title="fou is an enemy" runtime="id: :real_id; name: :real_name; href: @link; title: @title">

というように、テンプレート上に書かれた属性を実行時にはruntime属性に記述された名前/値ペアでオーバーライドするという方法だ。この場合、@linkはエンコード不可、@titleはエンコード必須という差がある。しかしそれについては、エンジンに容易にパッチが可能なようにテーブルを持てば済むはずだ。たとえば{ :A => { :href => false, :title => true } …… (正確には、falseのものだけを定義すれば良く、デフォルトは常にエンコーディングするで良いはず)。

次に、それが属性値かテキスト要素かの区別というものがある。その場合はelementというようなキーワードを利用すればよいかな?

<INPUT id="foo" type="button" value="push me" runtime="value: @button_title"> という場合のvalueと、<textarea id="foo" runtime="element: @default_content;">という場合のelement。しかし、elementはここではエンコードしてはならないが、<A id="foo" runtime="href: @link; element: @link_for_display">の場合のelementはエンコードが必要だ。これについてもデフォルトはエンコードするということにすればよいのかも。でもまて、spanの場合は、elementではなくvalueとして書きたいのではないか? とか。でもHTMLの記法は知っている前提なら、タグの子要素はelementというキーワードを利用するという規約でいいじゃん。つまりvalueはinputオペレータでしか利用しないということでどうだろうか? とか。

さらにスタイルシートと同様な手法で置換定義の外部ファイルへの切り出しも可能だ。

<div id="temporary_id" class="foo_div" runtime_class="foo_div">

で、rcdファイル(runtime class definition)に、foo_div { id : :real_id; onclick: "$('X').foo(); $('Y').bar();" ... } とか。

Webブラウザーは未知の属性runtimeを表示時に解釈しない。したがって、テンプレートの見た目はデザイン時と実行時で一致する(行数や字数の差による変化を除く)。

ただS2JSFのように同様にデザイン時と実行時の表示の一致を目指すテンプレートが結果的に思ったほど効果的ではないのは、現実にはパーシャルHTMLとしての利用が主で一枚ペラものHTMLは無いということだ。パーシャルHTMLをデザイン時にうまく組み合わせるための仕組みは別に考えなければならない。IEならbehaviourを使えばどうにかなるような気が今、一瞬したが、汎用性には欠けるな。JavaScript+XMLHttpRequestでパーシャルHTMLを自分のページ上に組み合わせるような仕組みを用意することは可能かも。

_ IDEとメソッド誘導

よく使うメソッドは先頭文字をaからfまでにまとめる。長さはどうでも良い。

絶対に使ってほしくないメソッドは先頭文字をzから始める。

後からの改善のためにa〜cは最初は使わない。

アルファベットの組み合わせに意味は不要(IDEがメソッド一覧とともにヘルプメッセージを表示する。日本語のヘルプが出ているのに誰がアルファベットのメソッド名を見るというのだ)。

最初:file_read(name, mode) → modeは基本的にrbが多い → メソッド名としてa0を割り当て。

File. ここまで打つと先頭に「a0:バイナリーモードでファイルを読み込んだ結果のバイト配列を返す」と出るのでEnterを押す。すぐ下には「a1:テキストモードでファイルを読み込み行単位の文字列配列を返す」と表示されている。

基本的に、.とカーソルキー0から1回とEnterキーで呼び出せる。

#無料のコンパイラと高価なIDEの両方を提供する。メソッド名そのものに有意味な名前はなく、意味はヘルプファイル上に存在するため、まともに利用しようとするとIDEの購入は必要。がんばれば無料コンパイラと使いにくいオンラインヘルプでもプログラム可能というエクスキューズ付き。

#長さとか名前はともかく、実際問題としてアルファベット順はばかばかしく重要ですな。と昨日からcollect!派のおれ(これはどうでも良いけど)は思った。実際、ヘルプメッセージまで出すIDEの場合、a〜fにめったに使わないメソッドが並ぶより、たとえば名前がa0、a1、a2であっても利用頻度が高いメソッドが並んでいるほうが重要。

#というか、ソートするのではなく使ってほしい+良く使われると推測可能な順序で表示すれば良いわけだが。

#どうでも良いことばかり思いつくのだが、するとソースにはFile.a0とか残っているだけなので、これでは後から修正できないだろうとか言い出す貧者のともしびが出現するのは目に見えている。しかし、なんのことはなく、IDEがヘルプメッセージを属性としてソースへ埋め込むから問題ないわけだ。

b = File.a0$バイナリーモードでファイルを読み込んだ結果のバイト配列を返す$

(属性の埋め込みに$を使うとか勝手に決めたわけだが)

これって、昔々の毎行コメントだな。したがって、昔の人のウケもばっちり。

_ メモ

http://www.codeguru.com/csharp/.net/net_general/article.php/c4671/

http://www.codeguru.com/Cpp/COM-Tech/atl/misc/article.php/c3619

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebgen/html/bho.asp

本日のツッコミ(全6件) [ツッコミを入れる]

Before...

_ arton [確かに属性にクラス名を入れるという方法も取れますね。 ただ、ここで言及しているamritaというテンプレートエンジン..]

_ mumurik [ふむ、元のテンプレートエンジン知らずに適当にコメントしたのではずしてしまったようで。 htmlをパースする気があれ..]

_ arton [ああ、なるほど。>htmlのパース それは確かにいきなりは考えませんね。 ここで言及しているエンジンの場合は、自力で..]


2006-06-13

_ Ruby-GetText 1.6.0

バージョンアップしたら、モデルに入れたN_がエラーになるようになった。
 NoMethodError
 
undefined method `N_' for User:Class
 
This error occured while loading the following files:
   application.rb
   => model user.rb
   user.rb
ツッコミできなかったのでここに書いてみたり。というか、助けて。

追記:わかった(のは再現手段)
application.rbの中でmodel :modelClass として指定しているのを削除すると動いた。

したがって、通常の利用方法では、問題はまったくありません(というか、問題あるものをリリースすることは考えにくいのでそれは当然というか)。

1.6.0にしてそれまで動いていたgettextのメソッドがNoMethodErrorになる場合は、そのあたりをチェックすると良いでしょう。

_ 荒野の白袴

ガンマンみたいだな。実は正しい変換候補も出たけどおもしろいのでこのまんま。荒野の白拍子というのもいかしてる。

木村さんの日記を読んでいて、ああそうかぁと得心してから、そういえばWho's Whoってあったなぁと思い出して読んでたら、

Ruby Who's Who maintainer
が404になってた。

というかあのページはあのままのタイムカプセルみたいな状態のほうがおもしろいのかも。ちょうど(う)さんの登場前ということなのかな?(よく読んだら最終更新が2002年だった)

#ブチキレという昨日あたりのホットな言葉が出ていたり

#つい検索したら、なるほど、芋づるが好きなんだなとか。

_

本日のツッコミ(全2件) [ツッコミを入れる]

_ むとう [手元でRuby-GetTextのサンプルのモデル(Articleクラス)でN_()を使ってみたんですが動作しました。..]

_ arton [了解しました。メールします。]


2006-06-14

_ C++やばい

コンストラクタでインスタンス変数のNULL化とかしなきゃならないことをすっかり忘れきっていた(きっていたは嘘だな。思い出して直せたわけだし)。

_ なんとなくビンビン

蛭子能収コレクション (動物編)(蛭子 能収) 蛭子能収コレクション (映画編)(蛭子 能収)
やっぱりブロックでしょう。
IO.binmode do
  bindata = IO.read('file')
end
if bindata == "\x0d\x0a" # NameError
はまる人はどうやってもはまる。

_ C++

コンストラクタで例外を上げるのはもしかしてすごくまずいのか?
class Test
{
    FILE* opened;
public:
    Test(char* pf)
    {
        opened = fopen(pf, "w");
        ...
        if (bad_condition)
        {
            throw "bad condition";
        }
    }
    virtual ~Test() // bad_conditionが真だと呼ばれない
    {
        fclose(opened);
    }
    ...
};
#Javaに慣れきったせいもあってC++でも例外を投げたくなったわけだが。

_ もちろん無理なわけだが

バイナリーで扱いたいということを心理学的に考察すれば次のようにプログラマは振舞うのではないか?
hex_data = IO.read('file', 0x08, 0x10)
# or
octet_data = IO.read('file', 010, 020)
#
text = IO.read('file', 8, 16)
本日のツッコミ(全5件) [ツッコミを入れる]

Before...

_ るいも [コンストラクタで例外を投げたら、newしている側はインスタンスを受け取れないから、そもそもdeleteできないような..]

_ arton [その通りです>インスタンスを受け取れない。 で、スタックに直接作れば平気だろうと思ったらやっぱり呼ばれない(一貫性が..]

_ mumurik [virtual呼び出しとか例外とかコンストラクタは罠がいっぱい(懐かしいな…)]


2006-06-15

_ パニック

おそろしいなぁ。

#おそろしいのは原因を究明しないことなのだが。

_ でまあ

今日は一日「ヒューマンエラーはなぜ起こる」を読んで過ごす。


2006-06-16

_ ふつける

今回も歯医者だ。

_ 今日聞いた言葉

Yusukeさんから「派遣言語」という呼ばれ方をすることがあるという話を聞く。すげぇ、いやな言い方だ。でもなぁ、それもわかるんだよな。

_ JavaScriptの未来

GoogleがJavaからJavaScriptを作るのを出したとこあたりから、JavaScriptって難しいよねとかを経由して、未来はJavaScriptの上に分厚いラッパーが乗って(今も結構厚みがある気がするけど)その上でJavaScriptとは思えぬような書き方をすることになるのではなかろうか、とか。

その状態になると、手でJavaScriptを書いたり読んだりする人は尊敬されるようになる。「先輩、どうもイベントが正しく処理されないタイミングがあるみたいなんですよ」「しょうがないな。ちょっとデバッガを起動して直接JavaScriptのソースを追ってみるか」「すげぇ、先輩、JavaScriptのソースを読めるんですか? 」「そりゃそうだよ、2005〜6年あたりじゃ直接prototype.jsを呼ぶコードを書いてたんだぜ、みんな。」「えーまじっすか〜。信じられな〜い」「お前も、プログラマーだったらJavaScriptを生でゴリゴリ書けるようにならなきゃな、はっはっは。」とか。いや、でも実際、難しいわけだが。

_ JavaScriptの未来(非ネタ編、ラップバージョン)

なんとなくジョークのほうだけメモしたが、その裏にはそれなりの考察もあるわけだったり。

Developer's Loungeが終わったあと、るいもさん、Yusukeさん、はっしーさんと茶のみモードに移行したわけだが、そこでYusukeさんからいろいろな最新技術動向を教えてもらっているうちに、将来のWebクライアント話に移行した。以下は4人のクラウドなんで僕のラウドかどうかとってもダウト(おれは語呂合わせが好きなんだよ。孤高の韻文家と小洒落て呼んでくれ。語呂合わせや韻のタップダンス(それはラップじゃないざんす)は、決して親父のギャグじゃない。だってそれは笑いで息をつまらせるこた目的にしてないんだから。つまりそもそもギャグじゃないのだ、まじめきわまるレトリック、リトミック)。

.NETスマートクライアントはそれでも個人的には業務システムには重要なんじゃないかと思うが、主流にはなれないだろう、というのはインターネット重要それ重要。

フラッシュ? あるいはCarl、それとも別のリッチクライアントな何か? あるいはスクイークプラグイン?

おれはそうとは思わない。なぜならグーグルが見ているからだ。彼らがテキストを離れることはちょっとやそっとじゃ考え付かない、思わない。

もちろん、JavaScriptには限界がある。セキュリティ境界を越えられない。

いや最近はそうでもないんですよ、とYusukeさん。フラッシュを媒介にしてローカルリソースをさわるという手法が出てきています。

すげー、良くそんなことを考え付くな、とびっくりうっかり驚いたものだが、言われてみればたしかにそれほど無茶じゃない。もともと元をただせばLiveConnect、JavaアプレットとDOMとWebクライアントをコネクトしたわけで、そこのローカルリソース側のブリッジがフラッシュになったということだろう。不可視フラッシュというのは(もしそう実装しているとして)それは逆転の発想だけどしかし筋が良い。

というように、JavaScript陣営は多士済々、他のバイナリーでは太刀打ちできないんじゃなかろうか。

Javaと同じくJavaScriptも10年たって生まれ変わったわけじゃんか。

いまやYouTubeで映像がネットワークを飛び交っているし、サーバーはナイアガラだったりCoreDuo4だったり、CPUもぶいんぶいん、メモリーてんこ盛り。っていうか、高速の人が高速なのがJavaScript、10年前ならありえない、でも確かに高速神速、JavaScript新世代が始まってるのは間違いない。

いずれにしてもテキスト重要。

と考えれば、やはり最終的にはJavaScript+DOM+アルファ(それがフラッシュかどうかはわからないけど)ではないだろうか?

いや、それにしてもJavaScriptは難しい。あれは、派遣言語にはなりえない。

それだ、それがGoogleのJava−JavaScriptのねらい目か。静的型チェックした後でコンパイルエラーをつぶしたJavaScript。

それに、JavaScriptのプロトタイプベース(というよりも、インスタンスをどんどん変形していくことができる能力と、クロージャそのもの)は、あれを作るにもってこい、つまりDSL。

そこに高速化されたネットワークがものを言う。DSLエンジン(これもJavaScriptの塊)をincludeさせることは余裕だ。(しかも、いざとなればaccept-encoding: gzip、zipがききまくるのがテキストだ)

プログラミング言語を真ん中において、VMを作る仮想化の時代はJVMと.NET Framework(CLR、Mono含む)の2強と、それに対するYARV(オウム系があったようだけど僕は良く知らないのでパス)みたいなカウンター系で大体インフラはおさまったように見える。

次のインフラは、プログラミング言語の上じゃなかろうか。

というか、Cはそういう言語だったね思い返してみれば。言語を作る言語だった。

Javaの場合、実はその上にXMLを載せられる言語だった(で、JRubyとかRhinoとかに続く)。

Ruby、なぜRuby、もその文脈で読める。マーティンファウラーとかドンボックスとかはそう読んでいるわけだろう。

(だから、Haskellもその文脈でなぜ注目を集めているかは読めるのだ、Pugs)

JavaScriptも同じではなかろうか?

すると、どうなるこうなる、リッチクライアントの記述言語はJavaScript上のDSLで、これは当分の間、フレームワークの形でいろいろなグループから百花繚乱して、最終的に有力なやつに収斂していく。

というわけで、JavaScriptがとっても重要。

etoさんが考えてるとおり、という結論だな。でも、etoさんはライブラリ/テスト重要のところまでだ。グーグルはJavaからJavaScript。もう一声(一超え)どうぞ。

_ 渋谷川

おい、それは隠田川だぞ。

河骨川—宇多川のほうを選ばなかったのはどういう理由だろうか?

#ところが、千駄ヶ谷小学校で習った記憶では、隠田川が「春の小川」(はさらさらいくよ〜)のモデルだということだったのだが、あれは単なる地元贔屓だったのかな?

東京都は、河骨川を春の小川認定しているようだ。


2006-06-17

_ CLR Hosting

以前、.NETアプリケーションに与えるヒープの総量規制(違)のことを書いて(で、ちょっと教えていただいたあたりを読んでちょっと試して面倒になって)そのまま忘れていたわけです。

で、NyaRuRuさんが「CLR Hosting 仮想メモリ編(1)」というエントリーを書かれていた。とりあえずサンプルをダウンロード。NyaRuRuさん、どうもありがとうございます。

_ 自戒したいこと

ここは日本で、大多数の人には日本語の慣用的な言い回しや文脈を読ませるのは構わないが、そんな英語は中学で習うみたいな言いかたはしないこと。

その程度の文意を汲むのは小学校の国語の時間に習うと反されかねない。

もちろん国語のほうが日本では重要。


2006-06-18

_ 青山学院の南西

奇妙な区画だ。


2006-06-19

_ キングスとクイーン

5年ぶりのデプレシャン。

シネスコに車。電子音を利用したムーンリバー。扉が開き女性が降りてナレーション。(このあたりでチラシのトリュフォーがどうしたとかになるのかな。というか口がファニーアルダンみたいだし)

印象的なシーン。最初の夫が出てきて消えてそのまま看護婦が出てきて画面右端に腕。父親のアパート(アパルトマン)のバルコニーの重ね合わせ。扉のこちらと向かい側に続けて机の前の広い空間。僕は恋してるでも出てきたような記憶があるけど階段を昇って目当ての人を探す移動(というかフランス人ってこういうパーティを必ずやるもんなんだろうか)。階段の下で待機する(イスマエルからは見えないところにいる)警官。最初の夫が登場するシーンでのだぶだぶの服。婚姻届けのシーンでは夫側の家族がいない(葬式のときはいる)。フードの白い丸で囲まれた不在の母親とノラが写っている写真—アパルトマンの訪問時、死亡時の2回(多分)。病院でのイスマエルのダンス。アリエルと巻いたやつを吸うシーン。

さり気ないフォローの数々。ジムでのイスマエルと親父がプレスをするところ。ノラの左腹部の痣。待っている間にシモンが聴く音楽。看護人に金を借りようとするところ、ウェーベルンの演奏後に口をきくところ。養子と実子の掛け合いの連鎖で祖母まで持ち出す。手荷物を取りに行く(川の次のシーンでは既に車に乗っていたように覚えているから初出は学校のシーンかな)。ベゼとクシェという言葉の差(ジャンジャックとイスマエル)。リストカッターのアリエル(中国女)の存在。女性には魂がない/理解できない(ダムとラーム)なぜならば神父や牧師に女性はいないという指摘。ノラはジャンジャックを数に含めていない。男性/女性に階段を上がったところで分かれるところでの間。薬品庫の鍵を返すために弁護士が窓口の女性と会話する右手でイスマエルが移動。最初は弁護士のため、次にはアリエルのために薬を取りに行く。

2幕目のサスペンス。事故の原因と第3入院の原因。父親のメッセージ(編集者による破れ目の指摘と、レダの絵の中に隠しているという行為)。

長いエピローグ(イスマエルと子供の対話というか説教というか)が博物館。故郷での木登りのフラッシュバック。

緻密な脚本と演出。

WHYNOTと言えばワイルドバンチを最初に想起するのだが当たりかどうか。

_ CodeZine

DbgHelpを利用してDLLがエクスポートしている関数を列挙する」が公開されました。

3回にわたってWin32バイナリーいじりをする予定。1回目は準備編です。

あと、まったくの偶然ですが、山本大祐さんという方の「Windows実行ファイルのバイナリ概要」というPEファイルの仕様詳細についての記事が最近公開されたので、そちらも参照すると良いと思います。


2006-06-20

_ VC++.NET

すっかり^やgcnewにも慣れてしまった今日この頃ではあるが、釈然としない。

むしろC^^という名前にしたらどうだろうか? 読みはCフォーンか、Cデビルイヤーとかになるわけだが、知らない人はCアクサンシルコンフレックスアクサンシルコンフレックスと読み、たかだかスですら省略する人はCアクアクと呼ぶ。

で、アク禁(マネージドを書く場合はC#かVB.NETのマネージドネイティブな言語を使うこと)という言葉が生まれたり。

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

_ arton [ヒヤリハットり君。]

_ babie [解析する暇がないでござる の巻]

_ arton [報告するも地獄しないも地獄でござる の巻。 というか、Cにこれほどふさわしいポストフィクス(後始末)がほかにあるでご..]


2006-06-21

_ Rjb

rjb-0.2.7

Javaのメソッドで配列の配列(の配列の……)を引数に取るものをサポート。

_ まだイルカ

kkkkkkkkさんの「Excel VBAで素数 featuring イルカ」を見て、Agentを生で使うのではなく、Office::Assistantとして使えばアニメーションを妙なことをしなくても使えることを知った。

知ったのは良いけど、この方法だとアニメーションで指定した動作を行う前にAgent::sayの呼び出しに入ってしまうように見える(というか、VBAのデバッガで止めて確認できたわけだけど)。

多分、こうじゃないかな(もちろん知ってて簡略化して書いている可能性もあるけど)。

Public Sub PrimeNumbersCalmMeDown()
  ' pgクラスは呼べないからとりあえず削除
  Dim str As String
  'ここでは篩わない。先に考え中の動作に入らせる。
  With Assistant
    .On = True
    .Visible = True
    .Animation = msoAnimationThinking
  End With
  '篩う代わりにビジーループ。1980年代のプログラムみたいだ。
  For i = 1 To 100000000
  Next i
  'もちろん、本来は死ぬほど篩えば良い。
  '多分100までだと瞬時なのでビジーループも併用したほうが良いかも。
  'そのへんの篩う最大数とビジーループの回数の調整が肝かも。
  str = "1,2,3" 'ここで篩う
  str = str + Chr(10) + "落ち着け… 素数を数えて落ち着くんだ…"
  str = str + "4,5,6" 'さらに篩う
  '
  With Assistant.NewBalloon
    .Text = str
    .Show
  End With
  
End Sub

Agentを実行するプロセスはOfficeのようなAgentのホストアプリケーションではなく、AgentSvrというWindowsサービスなので、ビジーループをしていてもジェスチャーは止まらないことを利用する。

実際に篩って求めてるのかどうかは知らないけど。

_ またイルカ

Excel使っていたら、またもや(以前Wordでもあった)イルカが機転をきかせてくれた。

セル間のコピペをしまくっていたら、ウィンドウの右に醜く邪魔でこれっぽっちも役に立たないオフィスクリップボードが出てきて、出てはクローズを死ぬほど繰り返していたら、ボワワーンとイルカが登場。

「この機能の表示はお嫌いのようですね。再表示したければ(忘れたし思い出す気もない)を選択してください。」(うろ覚え)

これで静かにフォーカスも奪われずに集中して作業ができるというものだ。ありがとうイルカ。

#それにしても、オフィスクリップボードって機能的な意味はわかるのだが喜んで利用している人っているのかな?

本日のツッコミ(全1件) [ツッコミを入れる]

_ kitaj [オフィスのクリップボード,ウザイので私はレジストリいじっておとなしくさせてます. HKCU\Software\Mic..]


2006-06-22

_ spamcop

意義はわかるが自分が利用しているISPのSMTPサーバが登録されてしまうと、たまらん。

しょうがないのでISPに問い合わせたが今は解除されたし、多分また登録されるかも知れないけど勘弁な、みたいな返事が来た。

たしかに、すごく大量に送信しているというところまでは掴まえられてもそれ以上のことはできないから(中見てどうこうはできないだろう)、ネットワーク内にspammer自身やspammer botがいてもISPとしてもどうにもならないんだろうな、とも思う。

とすると取れる手段は

1. 殺してしまえほととぎす(ISPを変える)

2. 鳴かしてみせようほととぎす(自前でSMTPサーバー立てるとか、GMailに移してしまうとか)

3. 鳴くまで待とうほととぎす(解除されるまで待つというかどんどん悪化しているように見えるのだが)

か。信長はやっかいだし、家康では目前の処理が滞る。で、しょうがないのでGMail併用なのだが、送信済みメールが一元管理できないのが面倒だ(自分にCCすれば良いのだろうな)。no-ipのオプションに何かあったような気もしてきたが、自前系も避けたいところだし。

それはそれとしてspamcopって申告制みたいだが誣告もできるんだろうか。もしそれが可能だと意図的に対外送信できない(もちろん送り先がspamcopでガードしている必要はあるわけだが)状態を作り出せることになってとても困った感じでもあるのだが。

というか、SMTPサーバーのIPアドレスでブロックされているわけだが最初の発信元のアドレスでブロックというわけにはいかんのかな?

_ 増えるイルカノウハウ

バルーン表示の最大文字数

そうだったのか!


2006-06-23

_ イルカが何をしてくれるか

kitajさんからツッコミで、レジストリをいじってオフィスクリップボードを無効化する方法を教えてもらった。

で、レジストリを見るとすでに設定されている。

ということは、イルカがレジストリをいじったと考えるのが素直だろう。

というわけで該当値を削除してやりなおしてみた。

最初に複数のセルに適当に入力してから、おもむろにコピーしては隣のカラムへペースト。コピーしてペーストとやっていくとあの邪魔なやつが出てくる。出たらクローズ。

しばらく繰り返しているとイルカが出てきた。

イルカの吹き出し

(イルカ自体はキャプチャできなかったorz)

で、OKをクリックしてレジストリを覗く。設定されてるぞ。

というわけで、イルカも意外と役に立つのであった。

レジストリを直接いじらせずに、不要だと判断可能な行動を取る人に設定してやる賢いイルカ(逆に無効をデフォルトにして有効にするように判断するのは難しそうだな)。

本日のツッコミ(全2件) [ツッコミを入れる]

_ kitaj [なんと! 最近のイルカはそこまでやってくれるんですね. 恥ずかしながら知りませんでした.次回からはイルカにやらせるこ..]

_ arton [いや、そこにいたるまで多分3回(数えればよかったorz)は出たらクローズを繰り返さなければならないので、知っていれば..]


2006-06-24

_ 諸君、わたしは買ってしまったよ

HELLSING 4 (ヤングキングコミックス)(平野 耕太)

あれだけそこら中で目にして、かつオリジナルを見たこともないというのも妙な気がするという感覚から、買おうと思ったら、7冊もあるのな。というか少年画報社ってまだ生き残っていたとは驚きだ。バンダーから恐竜王子、横山まさみちの漫画とか黒べえ経由でワイルド7あたりまでは見たことあったけど。

大人なんだから全部買えばいいじゃんと思わないでもないけど、どう見ても好みの絵じゃないし。

で、いかにも知ってそうなやつから聞いたら4巻だとか教えてもらう。知らんと言っているのに、7巻では婦警さんがかっこよくなるとかぺらぺら喋るんだが、この人の都合や事情を無視して話したくなるマンガなのか、そういうタイプのやつが好むマンガなのか、いずれにしたってそういうことだろう。だから正直言って読む気は失せたんだが、わざわざ調べて4巻だとか教えてくれたんで今更逃げるわけにもいかないし。

で、買ってきた。

おもしれぇじゃん。

というわけで、もう一度行ったら1と3と5しかなかったから、とりあえずそれ全部買い。

で、読み終わったもんで別の本屋で2と6と7を買い。

それが4巻買ってから3時間くらいのできごと。

ようは、おもしろかったってことだ。とりあえず。

追記:落ちを書き忘れてた。というわけでおれに聞いてくれたら7巻で婦警さんがかっこよくなる話をしまくることになります。

_ ささ

笹のつく言葉。笹枕、笹蹴鞠、笹矢来、笹垣、笹くれない(紅ではないと思うのだが、ではなんだろう?)、笹達磨、笹団子、笹地蔵、笹更紗、笹縅、あたりまではわかるが、まさか笹塚じゃなかろうし。

_ おもしろい

裸の王様現象

王様は裸だと言えるのは子供の特権かと言えばさにあらず(あるいは子供まで呑み込まれてしまったと言うか)で、おやじだけが「王様は裸じゃないか」、と言う。


2006-06-25

_ データとメタデータの境界

そこにブランクがあるでよ。
段落の先頭の空白は、データなのか? それとも段落が始まるというメタデータなのか?
その答えを出すことなく、HTMLのPタグの次に全角空白を入れるのはどうたらみたいなことは言えないんじゃないかな、と思う。

で、どうもメタデータだと思っているから、インデントの一種と考えてしまうのだろう。

でも、それは違う。

というのは、段落は一部の特殊な分野の書き物を除けば、きわめて恣意的に決まるものだからだ。その恣意性によって先頭の空白はデータとなる。つまり、そこには行間ならぬ段落間の意図というデータが含まれているからだ。

つまるところ、叙述というものはそういうものだ。空白もまたデータであり意味を持つ。

すると、一部の特殊な分野の書き物のひとつであるプログラムにおけるインデントに奇妙な逆転現象が起きているように思われる。もちろん前段があっての上でのことで、しょせん砂上の楼閣だから大波が来れば崩れるわけだけど。

if a
 foo
end
のfooの前の空白はデータではない。条件節のブロックを示すメタデータだ。したがって、データから切り離すことができる。
if a
foo
end

問題なし。

しかし、改行はそれと異なりデータ(終端記号は有意だからデータ)である。if a foo endとはできないからだ。
すると、PythonやHaskellの場合、その有意性から空白はデータだということになる。これは直観的ではない。コードを直観的に読めるように強制したインデントによって逆に直観性が損なわれているということだ。

というようなことを考えたが結局、制約を自発的に守るのは好きだが、制約を強制されるのはいやだ、というだけのことであるな。

_ アルプス

あるぷすいちまんじゃーく、こやりのうーえで、あるぺんおどりをさあおどりましょ。

の「あるぷす」の母音に注目すると「AUUU」だ。そこで同じく「AUUU」の「まるくす」とか「たるくす」とか「あすくる」とかに変えてみる。

しっくりこない。

とくに、「あすくる」は最悪だ。3個目の子音が破裂音だというのがむしろ母音よりも重要に思える。

そこでちょっと母音は変わるが「かんぶつ」とか「こうぶつ」とか「さんぱつ」とか「かるぴす」とかにしてみる。

「かるぴす」が一番しっくりくる。ラ行の舌で撥ねる音とパ行の唇による破裂音の連携が気持ち良いみたいだ。バ行じゃだめみたいだな。少し粘性があるからかも。

そういう音を持つ言葉をさがしてみる。

がらぱごすがそうだな。でも、この歌には乗らない。あらばまだとやはりうまくないのはバ行だからかも。あるぱかはいいぞ。

つんどらも意外といける。全然、上の考察とは関係ないけど。さらえぼはだめだな。さらとがはわりと良い。せびりあはだめだ。あれ、せりびあだっけな? せるぴこはわりと良いがちょっと悲しい。

セルピコ デジタルニューマスター版 [DVD](ウォルド・ソルト)

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

_ babie [精を吸うエロイ夢魔です。 http://ja.wikipedia.org/wiki/%E3%82%B5%E3%82%..]

_ arton [そうか、ディアブロやったことないのか。死ぬと車輪を挟むのにちょうど具合が良いかっこうにorzするんだよね、サッキュバ..]

_ arton [あれだな、あまりに印象が強すぎてかつ周りでやってるやつが多いと、他の人もやってるつもりになるっていうことですな。 で..]


2006-06-26

_ LL Ring

買った。

_ まとめ

良くわからなくなったのでまとめてみた。わかる粒度が名前を知ってるだけ、概念を理解している、実際に利用したまでばらけているので、嘘八百のような気もする(というか、嘘は確実にある)。

こういうときにマインドマップってのを使うんだろうか?
EA(全体統合)
 BA …… プロセス
 DA …… データ
 AA …… 制約
 TA …… 実装
 
DOA(AS IS重視)—フラット—物理モデル—ボトムアップ
まずモノ(エンティティとリレーション)
 検証手段:エンティティの整合性
 思考法:join

抽象的  T字型派……純粋抽象派(ここに含めるべきではないのでは)
 ↑   伝統派……業務分析
 ↓   TH派……帳票上のエンティティ
具象的  はぶ派……UI(Webのページ、帳票など)上のエンティティ+業務フロー

(頂いたコメントを元に修正:7/1)
伝統派……業務分析
TH派……帳票上のエンティティ
T字型派……UI上のエンティティ+自然キー
 (マスター重視↑ / イベント重視↓ −という印象を受けたけどどちらも必要なのは共通のはず)
はぶ派(T字型改)……UI上のエンティティ+システムキー+業務フロー
 
OOA(TO BE重視)—レイヤリング—概念モデル—トップダウン
まずプロセス(ユースケース)
 検証手段:ユースケース
 思考法:継承
いろいろ
 いろいろある(BCEとか)
TFP分割
 データモデル+ビジネスフィーチャ+SOA
述語駆動
 DOAと一線を画す。良くわからない
アーティファクト複合化(注目)
 矛盾を許容。最終段階で工学的に解消(良くわからないが、これは開発プロセス含めて実装手段のような)
 
その他の現時点での周縁技術
メタモデル(独立)
アスペクト指向
状態遷移機械(FSM)
DSL

で、さらにAで終わり、Dまで含む、I(implementation)まで進める(はぶ派)まで分かれる(ということは、Aの対象粒度も千差万別ということだ)。が、ここでは、Iは含まない(AAとDAのボーダーラインまで)と考えるのが吉だろう。

なお、おれの主となる立ち位置はTAとAAのボーダーラインなので、特にOOAの百家争鳴ぶりは半分(理解できる点もあるので半分)不思議に見える。

本日のツッコミ(全11件) [ツッコミを入れる]

Before...

_ arton [どうもありがとうございます。>まこたん(名前にたんが付いてる人にはさんは付けない)、はぶさん。 ここまでのまとめ:T..]

_ はぶあきひろ [シュレイアー&メラー法です。これとか。 http://www.amazon.co.jp/exec/obidos/AS..]

_ arton [おお、どうもありがとうございます。 #そうか(全然関係ないところにとぶけど)、ルーツ本というのはおもしろいな。]


2006-06-27

_ ちょっと続き

WRさんのツッコミを読んで、伝統的DOAというのはRDBMSが普及する前からあるわけだから、確かにRDBの概念(特徴的なのは交差エンティティだろうな。リレーションシップそのものは無いわけではないから)を持つはずないわけか、と気づく(ただJOINで発想するというのは一貫して存在しているのではないかと思う)。

したがって、分析時点でモデルが、正規化されていたり、レコードID(そのレコードそのもののID)を持っていることは、期待できないだろう。すると、T字型もはぶさん型も、そこから踏み出していると考えたほうが素直なわけだな。つまり、実装にRDBを利用することを前提するということだ。

それはOOAが実装にOOPLを利用することを(おそらく)前提していることと同じで、OOAではいくらモデルは抽象と言ってもFORTRANを実装に利用して(も大丈夫と言うかも知れないが)問題ないとは思えない。

#しばらく塩漬けにする予定。

追記:OOAって実装に落とすのがDOAよりはるかに難易度が高いように見える。そのあたりからアーキテクトがどうしたみたいな話が出てくるのかな? であれば、もしDOAを利用してOOA以上の成果が上がるのであればばかな話だ。でも、具体例を考えてみるとTO BE重視/AS IS重視という(思いつきで書いたわけだが)切り口が正当に見える。とすれば、OOAの使いどころはあるはずだから、いずれにしろモデルと実装のギャップを埋める必要はあるはずだ。とか、いろいろ考えることはあるわけだが、そこに周縁技術が結びついていくんだろう。

Railsのmigrationというのは、DBの都度払いを推進するために組み込んであるんだと思う、と突然書いてみたり(イテレーションでカラムが増える例)。

_ SQL* Server2005メモ

階層化セキュリティ テーブル分けるのとどっちがお得かな?

_ 謎サイト

ttps://www.netscum.dkってMS SQL Serverサイトのデッドコピー(サイト証明書まで)に見える。scumだし。

_ 落ちた

上でくだらんことを書いたので撥が当たったらしいのシャレなんだろうな、罰が当たるってのは。

_ ちょっとくさいのは

落ちた原因はプロセスの作り過ぎなんだが(httpd.confの設定が矛盾してる可能性が高いので調査中)、ちょうどその直前あたりにはてなスクリーンショットをユーザーエージェントに持つやつがrobots.txtをすさまじいいきおいで404をものともせずに2分間にわたってアクセスしているのが、とてもくさい。ばらけてはいるが最大で秒20回近くアクセスしている(もちろんこっちが固まったのでそうなったという可能性もある—多分、そっちだな。ちょっと重たいのが動いていたみたいだ)。

とりあえず、robots.txtを置くことにするけど。

#行儀良くrobots.txtを見ようとロボットががんばるのは良いが、頑張り具合がいまいち行儀良くない。という感じ。多分、ロボットは巻き添えくさいが。


2006-06-28

_ ハッピー

モンキー

_ クローム

反応ビンビン

クロームか、クローム。うーむ、クローム、クローネンバーグ。

本物のクロームだ。すげーすげー。すばらしー。

2人組のノイズバンドだけどスイサイドともソフトセルともヤズーとも(関係ないけど2人というとこ)ティアーズフォーフィアーズ(これはノイズじゃないな)とも違う、全然違うクローム。モノクロームセットじゃないよ。

突然思い出した宝島に出てたスージー甘金の

スージー甘金のキャラクターハンドブック+Bomb KAT100(スージー甘金)

当然のようにBIG1と書いた帽子(わかんねーだろうな)をかぶったやつが、向こうからやって来た友達に声をかける。

「スロッビングリッスル」

向こうも負けじと「アサータンレイシオ」

こちらも「キャバレーボルテール」

向こうは真っ赤になって「レジデンツ、ポップグループ、ドゥラッティコラム」

こちらも負けじと両手を振りながら「ペルユビュ、バウハウス、スリッツ、スクリッティポリッティ」

向こうも負けじと「チェリーレッド、ラフトレード、ファクトリー」

こちらはちょっとびびるが「4AD、ベガーズバンケット、クレプスキュール」

(と延々と続く)

という愚かなマンガを思い出した。もちろん愚かなのは、そういうくその役にも立たない固有名詞を覚えちまってしかもまだ覚えているおれだ。

ちぇ、キャバレーボルテールはないのか。

しょうがないからポップグループ。

ウィ・アー・オール・プロスティテューツ(最後の聖戦)(ポップ・グループ)

もちろん持ってるわけだが(っていうか、トリオから出てたシングルすら持ってるわけだが)、このグループはとっても好きだ。それにしても、この日本題付けたやつはどっかネジが抜けてるんじゃないか?

#しかし、見事に無いな。クロームは確か西海岸のバンドだからあるのかも。レジデンツも西海岸。だいたいラフトレードだのチェリーレッドだのにプロモーションビデオを撮れるだけの金があるはずがない。ファクトリーは例外なんだろうな(それにしてもラブウィルティアアスアパートの安さというのは)。USは広いからビデオによるプロモーションが発達したけどUKは狭いから自分達でバスに乗ってギグしに行くから必要ないみたいな感じじゃないかな。US市場に進出を目論だところを除けば。

冬のノフラージュ(MIKADO)

クレプスキュールで思い出したがミカドを聴きたい(レコードはあるんだが)。

_ 内側を外側にさらけだすということ

以前、mumurikさんがBlogに書かれていたITemplateについてをCodeZine化されています。

関数を引数に取る関数が高階関数なら、コントロールをHTML上で内包させられるコントロールなんだから高階コントロール(higher order controlうそ臭いな)のASP.NETにおける実装手段ですね。UIが付いているところが難易度が高い(それをHTMLによって抽象化しているとか言ってみる)。

で、さらに、内部にコントロールをDIされるコントロール、でもコントロールということは自分はページにDIされるというネスト構造とか、お腹の中に直接ユーザーがコントロールを埋め込むという外側が内側で内側が外側というクラインの壷とか、実行時(*)オブジェクト結合ならではのおもしろさ満載です。(*)デザイン時も実行時。コンポーネントユーザーによる利用時というべきか。

#現実問題として、本気でASP.NET 2.0を見る必要が出てきたので参考になる。

#で、CodeZineのコードと説明を読んでから、あらためて『WebControlが全て。それがASP.NET』に戻ると(もうちょっとステップがあるかな。その場合は、『ASP.NETの基礎』を読み返す。するとCodeZineには出てこない思想的な側面がちゃんと書かれている)。

#が、そういうおれが今はSQL Server 2005のおさらいをしていてASP.NETにはまだ数週間の距離があるのがあれだが。


2006-06-29

_ るびまの特別号

日本 Ruby カンファレンス 2006 特別号

表紙のシルエットの絵だけみると、これが何かはわからないよな(というか、セーフとしか見えない)。

えと、突っ込みますが

COM」同じようなものじゃなくて、同じものの別の言い方。なぜならどれもIUnknownを継承しているから。たぶん、多態ですらない。

WSC」はXMLにパッケージングしてコンポーネントとして扱えるようにしたWindows Scriptのこと。「スクリプト技術の総称」というとそれは違うということになると思います。

ASR」はブリッジの実装+MSWin32版Ruby+僕が使いそうな外部ライブラリ+Exerbのパッケージ。パッケージの開発という意味では合ってるけど。合ってるな。すみません。

#(自分のための行間)

で、自分のことはともかく、読むべきなのは関心ごとによるのは当然としても、何はおいても、akrさんの「使いやすいライブラリ API デザイン」と、essaさんの「Amrita2 の紹介」

_ どきどき

渡辺さんの日記を読んでてびっくり。

かんたんRuby on RailsでWebアプリケーション開発(arton)

もうアマゾンに出てるよ(なぜ「もう」なのか、と未来の自分のために注)。

個人の楽しみ←アカデミズム→ビジネスのツール

という絵を描いた場合の、左に振り切った入門書です。最近はウヨでやってたので、256倍以来のサヨとも(政治の話じゃなくて上の絵のこと)。でも、256倍とは違うんだよな。ギークやハッカーのことは別に考えてない。

究極のWeb2.0は(ああ、無意味なダボラを書こうとしていると気づいたが止められない)、ブロードバンドルータの向こう側にうじゃらうじゃらとおれさまWebアプリケーションの車輪の大発明大会なんじゃないか(そしてその中から3.0だの4.0だのが生まれてくるんじゃないか)、つまり、おれさまホームページを作ろうというのがあった、お仕着せブログを使おうがある、そしておれさまブログ(例であって、もちろんブログの必然性はない)を作ろうってのがくるんじゃないか? ということ。

そのための元ネタの提供というのが第一です。で、終わったら元ネタを元に自分で膨らませてくれ、ということですね。

と書いちゃうと、ここを読む人の大半はビジネス人だったりしそうなので、これでクリックしなくなりそうだな。でも、いい本ですよ。お子様や奥様へのプレゼント、リタイアしたお父さんやお母さんにもどうぞ、もちろん、ご自分のためにもどうぞよろしくお願いします。

本日のツッコミ(全2件) [ツッコミを入れる]

_ ma2 [いい加減な注を書いた張本人です。ASRでHTAなGnutellaクライアントまで書いたのに情けない。修正しておきます..]

_ arton [すみません、よろしくお願いします。>HTAなGnutellaクライアント(それはおもしろそうですね……winnytp..]


2006-06-30

_ C++のすごくいやなところ

includeしなきゃいけないのはイヤなんです

同感。すごく同意。 っていうか、こないだstdの範囲だけをincludeするコンソールアプリケーションを作ろうと思ったのだが、そこでWin32にべったり依存する部分をDLLとして切り出すことにした。

でも、どんなに、publicなメソッドを汎用にしようとしても

class Foo {
public:
    Foo(const char* p);
    virutal void useful(int&, char*&);
private:
    HANDLE search(HMODULE, HINSTANCE); // ←ああああああ!!
};

という具合にヘッダファイルを作ってしまったら、利用先もwindows.hをincludeしなければならないことに気づいて悲しくなってしまった。

そこでvoid* search(unsigned int, unsigned int);などとする方法は無いわけではない(ソースで直接キャストしまくるか、呼び出し頻度が高ければstaticなキャストしまくるフィルター関数をinlineとかで作って(マクロでも良いけど)それにラップさせて呼び出すとか)。あるいは

#if !defined(HANDLE)
#define HANDLE void*
#endif
class Foo {

とか書くという方法もないわけではない。でも、積極的にやりたい方法ではない。というか、#defineではなくtypedefだった場合はどうするかとか。

こっちでincludeしておくという方法は無いわけではないのだが

#include <windows.h>
class Foo {

これがいやなのは、DLLとそのDLLのヘッダだけ、SDK無しの環境へ持っていってもコンパイルできないことだ(というのはDLLのヘッダがSDKを要求することになるからだ。だったら、直接アプリケーション側でincludeするのと同じことだ)。

そこで、分離することを考えてみる。

公開するヘッダ
class Foo {
public:
    Foo(const char* p);
    virutal void useful(int&, char*&);
private:
    void* psearcher;
};
公開しないヘッダ
inline Seacher& searcher(void* p) { return *(Searcher*)p; }
class Searcher {
public:
    HANDLE search(HMODULE, HINSTANCE);
}
ソース(公開しない)
#include "foo.h"
#include "searcher.h"
Foo::Foo(const char* p) 
{
   ...
   psearcher = new Searcher();
}
void Foo::useful(...)
{
    ...
    searcher(psearch).search(...);
    ...
}

しかしどうにもばかばかしい感じがする。というか結局void*かとか。

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

_ arton [その方法は、virtualなprotectedメソッドが存在すると破綻すると思います(そのへんよろしくしてくれるかも..]

_ mumurik [void* 最強! 32ビットとポインタのサイズとハンドルとを考えると夜も眠れないので昼寝るのがお勧め。]

_ arton [64ビットポインターも現実的に視野に入ってきましたしね。おそるべきtime_tとかもあるし。]


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|

ジェズイットを見習え