トップ 最新 追記

日々の破片

Subscribe with livedoor Reader
著作一覧

2006-11-01

_ 繊細という言葉

バチが当たったんじゃないかと頭を抱えるぐらいに繊細なシステムに苦しんでる。

どのくらい繊細かというと、電源タップのアースに三叉ソケットで差し込むと30%でも、ゲタを履かせて2叉にしてアースに差し込まないと90%というくらいに、繊細。逆じゃないのがミソ。

本当に、世の中はアナログで満ち溢れている。デジタルの結晶みたいにみえるシステムでもこのありさまだ。理屈じゃないよ、ヤマカンだよ。

Swithing-Hubでも、つい三叉ソケットを使ったせいでパケットロスが増えまくりとか、いやはや恐ろしい。ネットワークってこんなに繊細だったんだなぁ、と10年以上昔のLANを思い出したり。ああ、おっかない。

_ 三叉ソケット

意味違うな。三叉ソケットって、電球のソケットが3つに分かれていて、2つはタップ(この言葉も怪しい)になってるやつだ。

なんて言えばいいんだろうか? 三叉コンセントかな?

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

Before...

_ arton [お、どうもありがと。2P+Eが正式な名前でコンセントかプラグと呼ぶのか。三叉ってのは無しということで。]

_ ムムリク [松下さんの大ヒット商品かな。あのコンセント部分もアダプタ式だったような。スイッチは回転式でカチカチいうやつだったし。]

_ arton [そうそう、カチカチいうやつ。それにしても、昔は壁に埋め込むタイプって少なかったのかな?]


2006-11-02

_ ロンメイルが好きな映画監督

答え――鈴木清順

お、おれも好きだ。

オペレッタ 狸御殿 デラックス版 [DVD]

たぶん、こっちだろうけど。

東京流れ者 [DVD]

おれも、こっちも好きだけど。


2006-11-03

_ ASR

ActiveScriptインターフェイスがらみで幾つか修正依頼が来たので、これを機会にSubversionに入れた。

ASR。現在配布している1.1.0.0でタグを切っている。

_ TortoiseSVN 1.4.0 + Windows XP

 *  $Date: 2006-11-03 04:23:11 +0900 (金, 03 11 2006) $ 

あああああ、「金」の文字がソースに埋め込まれちゃったい……。

どうしてTZ名といい、Windowsはやっかいなことをしてくれるんだろう。

_ ここんとこがノーベル

もしかすると、ここんとこがノーヘルかも。

で、そのノーベルじゃなくてノベルだけど、いつの間にか「リナックス企業」というものになっていたらしい。ネットワーク企業じゃなかったのか。(そういえば、一時期オフィスソフト企業になってたこともあったなぁ)

追記:

誅天罰研究会 世紀末研究所 (小林よしのり異常傑作選 (2))(小林 よしのり)

なんとなく作者にとっては消したい過去なんじゃないかという気もするが。ちなみに「ここんとこがのーべる」と平仮名だった(徳間版。これ、少年マガジンに連載されてたような気がするけど)。

一番おもしろいのは最初の話で、連載が進むにつれてだんだんやる気が失せてくのが読めてちょっと悲しい。

博士が原子力を平和利用する発明をしたと聞きつけた電力会社の社長が訪れる。原子力のイメージアップのために、ぜひその発明品を量産しましょう。で、どれですか?

博士は、自分が発明したインベーダーゲームを紹介する。

おお、これがそうですか、と社長。どれどれ、おもしろそうですな。

さっそくゲームを開始する。ザッザッザッと、インベーダーが蟹歩きをする。というか、普通のインベーダーゲームなんだが。で、どのへんに原子力を使っているのですか? と顔を上げて博士に聞く社長。

と、目を離した隙に自機がインベーダーにやられた。その瞬間にきのこ雲がゲームコンソールから湧き上る。も、もしや。

そう、本物の原子爆弾を利用しています。と博士。

えー、と目を剥く社長。

子供のおもちゃという平和利用です。というか、ゲームを続けてください、と冷静に社長を促す博士。自機が全滅して侵略されると実物大の原子爆弾が爆発する仕組みです。

必死にインベーダーと戦う社長。「危ないじゃないか」とか言えば、「原子力発電所くらいに絶対安全です」と博士。

「お、やっとクリアした」と社長。当然のように一段下からインベーダーが降ってくる。「……やっぱり」と休む間もない。

かくして昼も夜もえんえんと地球の平和を守るためにゲームをやり続けるはめになった社長(やめればリアルタイムゲームだからインベーダーが基地を破壊して爆発するわけだから)を横目に、ブリーフケースを抱えた眼鏡の優秀そうな秘書が「原子力を操っていた社長が原子力に操られている……」と独り言。

そして、ついに力尽き、ついに社長がインベーダーに打ち負かされそうになった瞬間に「制御装置を発明したぞ」と部屋に押し入る博士。つかつか大股で壁際に近付くと手にした巨大なトンカチでコンセントを叩き壊す。と、電源供給が絶たれてインベーダーが止まる。涙を流して感動する社長が博士を見上げる。博士、両の拳で胸を乱打する、とナレーションのト書き。「原始の力を持つ人だった」

流行言葉や他の作品のセリフをぐちゃぐちゃに混ぜ合わせて主義も主張もなく、そのコマそのコマで無意味に完結してつながりは偶然まかせの言葉まかせというスタイルで無理やり15ページを埋めていく伝統的な破滅型ギャグマンガのスタイルの極限みたいなものだ。しかし「制御装置」という言葉とトンカチ、コンセントを叩き壊すといった思いつきそうで誰もやらない組み合わせはやっぱりおもしろい。


2006-11-04

_ Windows CE

MASの作者がCE版Rubyの話を振ってくるのだが、今はメンテが止まっているとか、別に需要は無いんじゃないとしか答えられないんだが、CEってヨーロッパじゃ利用されてるのかな? と誰とも無く聞いてみたり。

_ ASR

久々に読むとおもしろい、と思った。

_ ドイツの子供は恐怖に震えて成長する

もじゃもじゃペーター (ほるぷクラシック絵本)(ハインリッヒ・ホフマン/ささき たづこ)

残念なことに絵が出ないので、英語版のほうも。

Struwwelpeter(Heinrich Hoffmann)

恐怖の教訓話がこれでもかこれでもか、と恐ろしい挿絵と共に繰り広げられる子供のための絵本だ。

もじゃもじゃペーターは風呂が嫌い、爪を切るのも嫌い、髪を切るのも嫌い。そこで表紙の絵のような素敵な姿になる。そしてある日、恐ろしい運命が彼を待ち受ける。そのほかにも指しゃぶりをやめない子供や、火遊びをする子供や、好き嫌いをする子供、そんな日常的な躾がまだ身につかない子供たちが巻き込まれる恐るべき日常が美しくも楽しいポエムに乗せられて淡々と描かれる。ヨーロッパから遠く離れたイングランドでマザーグースを子供たちが楽しんでいる同じころ、ドイツではもじゃもじゃペーターが猛威を振るっていたのだ。

作者(絵も)は19世紀のまじめで子供好きなお医者さんらしい。待合室で退屈している子供たちを慰めようと伝承話をネタに自ら絵本を作るナイスガイだ。その本の効き目は評判に評判を呼び、ついに出版され、ドイツ中の家庭に1冊という大ベストセラーとなり、日本でも翻訳出版され、誰もが知ってるもじゃもじゃペーターとなった。

(なんとなくティルに触発されて、ドイツもので)

_ メモ:ASRにデフォルトオブジェクトを組み込む

ActiveScriptにはデフォルトオブジェクトというフィーチャがある。

具体的には、IActiveScript::AddNamedItemをSCRIPTITEM_GLOBALMEMBERSフラグ付きで呼ばれた場合に、該当オブジェクトのメソッドをグローバルな名前空間内で探索可能とするというものだ。

例)IE内でのwindowオブジェクト。alert('hello'); が実行可能なのは、JScriptの組み込み関数としてalertが用意されているからではない。windowオブジェクトがグローバルな名前空間内に含まれているため、windowオブジェクトのalertメソッドがオブジェクトの指定を省略しても呼び出せるからだ。

これを、ASRが実装することを検討する。

問題は、named itemがモジュールではなく、クラスのインスタンスだという点。モジュールであれば、簡単。

_ メモ:ASRはtest/unitと相性が悪いというか使えない

test/unitが実行されるのは、exit時。この時点で、named itemは解放され、SCRIPTSTATEはUNINITIALIZEDへ遷移している。したがって、ホスト提供オブジェクトはすでに切断されている。

追記:むとうさんから教わった方法で回避。

<package>
<job>
<script language="GlobalRubyScript">
  require 'test/unit'
  class TestGRscript < Test::Unit::TestCase
    def setup
    end
 
    def test_constantiate
      assert_equal('Windows Script Host', Globals.wsh.Name)
    end
 
    def test_globalize
      assert(/^\d+\.\d+$/.match($WSH.Version))
    end
  end
  exit Test::Unit::AutoRunner.run
 
</script>
</job>
</package>

_ デフォルトオブジェクト

いい加減だけど、こんなんでいいかな。
class B
  def bar()
    puts 'bar'
  end
end
 
@b = B.new # ASRがインポートしたオブジェクトと想定
 
def self.method_missing(s, *args)
  begin
    @b.send(s, *args) # とりあえず委譲
  rescue NoMethodError
    super             # 既定動作
  end
end
 
bar                   # グローバルオブジェクトが処理する
xz                    # 本当にエラー

_ 定数化

上のほうで、constantiateなんて言葉をでっちあげたが、正しい言葉がわからない。

Googleで検索したら同じような問いが

でも、concatenateは違うような(これは、単なる書き間違えみたいだな)。

communication as a reference to constantiate the variable

この用例は定数化みたいだが。

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

Before...

_ arton [そうですか。確かにW-ZERO3はありますね。 とりあえずruby-talkの購読を勧めとこうかな。]

_ むとう [test/unitとの相性ですが、Ruby-GNOME2でも同様の問題がありました。Ruby-GNOME2の場合はt..]

_ arton [どうもありがとうございます。無事、動作しました。 しかし、これはこの手のライブラリ作ってる人に共通のトピックでしょう..]


2006-11-05

_ ASR 1.8.5.2

ASR 1.8.5.2

にゃすさんのVRuby061102の他、lhalib 0.8.1 とか rjb 1.0.2 とかも更新。

RScript/GRScriptは両方とも1.2.0.0にした。修正内容はいろいろ。Global memberとか、ISEXPRESSIONとか、GRscriptのバグ(WSFでちゃんと動かなかった)とか。

Exerbは4.0のままなので、安全に利用するには1.8.4系列を使ってください。

_ super

間違えた。オーバーライドしてるわけじゃないからsuper呼んでもだめじゃん。
alias :asr_method_missing :method_missing
def self.method_missing(s, *args)
  begin
    @b.send(s, *args)
  rescue NoMethodError
    asr_method_missing(s, *args)
  end
end
という感じか。 追記:RScriptはModuleを継承しているから、superで良い。

_ Vistaのだめなところ

なんといっても、エクスプローラが使いにくい。OS XのFinderといい勝負だ。とにかく、こっちが使いたいように使わせてくれない。

たとえば、

・「送る」の動作を変えられない。というか、sendtoはどこへ行ったんだろう? ヘルプで「送る」「send to」「sendto」のいずれを調べてもショートカットの追加方法が出ていない。

・「お気に入りリンク」が邪魔。で、消せない。しょうがないのでフォルダーペインを持ち上げたら、今度は戻せなくなった(だったらクローズできるほうがよっぽど楽なんだが)。

・エクスプローラのサイズを覚えていない(Finderは覚えていてくれる)。

・検索が遅い。というか、SendToというディレクトリはなくなったのかな? (とは思えないので、結果が正しくない。高度設定でなんでもアリにしたはずだが)

・とか、文句を書きながらいじってたら見つけた。C:\Users\おれ\AppData\Roaming\Microsoft\Windows\SendTo なぜ検索できないんだ? フォルダ名はファイル名じゃないという発想なのかなぁ。――やり直したらできた。なんか誤操作してたみたいだ(ってことは、直観的に操作できないってことだな)。

・ミュージック(これは使うからいいか)、保存したゲームとか連絡先とか使い道がないでっかなアイコンは非表示にできるようになっているといい。邪魔だ。(あるいは最後に表示したサイズを覚えておいてくれればそれでもいいけど)

#もっとも、XPと違って日本語のディレクトリ名とか空白入りディレクトリが減ったみたいなんで、コマンドラインを使う分にはむしろ楽になったから、これはこれで良いのかも。


2006-11-06

_ メキシコのマトリックス

近所のメキシコ料理屋にファヒータを食いに行ったのだが、そこに置いてあるテレビというかモニターでバンドデシネみたいな絵柄のアニメをやっていて、思わず見とれる。

メキシコ万歳 [DVD] (というか、メキシコと言えばグランカジノや昇天峠や賭博師の娘がまた見たいな)

スカイネットが支配する世界に似てるがちょっと違うような気もするけど、どっちにしても機械が人間を追っかけて殺しまくっている。

なんだろうなんだろうと見ててもさっぱりわからん。しばらくして絵柄が変わったタイミングでKIDSがどうしたという字幕が入る。

というか、英語字幕なんだがわかりやすいのなんのって、おれは英語字幕だったら映画を見られるんじゃないかと思わず勘違いするくらい。

#クレールの膝かコレクション女をアテネで見たとき、英語字幕を見るより言葉を聴くほうがまだましだと思い知ったはずだが……と思ったけどあれから幾星霜、英語は結構読めるようになってるから、今だったら違うのかも。

#うわ、コレクション女のあさまし貼ろうと思って、DVDを「コレクション女」で検索したらとんでもないことになった。

エリック・ロメール コレクション DVD-BOX 1 (獅子座/モンソーのパン屋の女の子/シュザンヌの生き方/パリのナジャ/コレクションする女 他)(クロード・シャブロル/バーベイ・シュローダー) (これ。邦題が変わってるなぁ。いや確かにコレクション女じゃ意味がわからな過ぎだが、「コレクションする女」と「する」を付けるとコレクターの女性形ならではの雰囲気が失われる気がするが、かといって女コレクターじゃ映画史的にはテレンススタンプの顔がちらつくから望ましくはないわけだし)

で、帰ってからアマゾンでDVD検索しても、バンドデシネじゃ何もヒットしないし(まあ、ヒットするわけないと言えばないけど、バンドデシネの連中のオムニバスアニメということもあるわけだし)、唯一利用できそうなKIDSを入れてもだめだし……

そこで、外国映画+アニメ+検索語なしでやったらしょっぱなに次のが出てきた。

アニマトリックス 特別版 [DVD](渡辺信一郎/川尻善昭/森本晃司/ピーター・チョン/ラリー・ウォシャウスキー/アンディ・ウォシャウスキー)

安いな。というか、これじゃさっぱりわからない。そこで出演のアニマトリックスをクリックすると同じのがいーっぱーい出てきた。で、2番目のを選択。

アニマトリックス 特別版 [DVD](渡辺信一郎/川尻善昭/森本晃司/ピーター・チョン/ラリー・ウォシャウスキー/アンディ・ウォシャウスキー)

やっぱりわからんが、マトリックスにからんだ何かだというのは見えてきた。だとすれば、スカイネットみたいな風景もわからないでもない。

で、3番目。

アニマトリックス 特別版 [DVD](渡辺信一郎/川尻善昭/森本晃司/ピーター・チョン/ラリー・ウォシャウスキー/アンディ・ウォシャウスキー)

すると、商品の説明が妙に充実してるもんで、「Kid's Story」という作品が入っていることが確認できた。ってことは、これだ。全然バンドデシネは関係ないじゃん。でもいいや。

一番安い先頭のやつをクリック。でも安過ぎて送料がかかるので、しばらくカートの中で寝かして置こう。

#そういえばバンドデシネってなんだ? とふと思って調べたら出版社の名前じゃなくて(セリヌワールみたいなもんで、同傾向のマンガを集めたシリーズというかセリがあるのかと思ってた)、マンガそのものに相当する言葉なのか。するとおれのイメージするバンドデシネっていうのは、非常に狭い範囲の作家だけに通用するイメージで、きっとマンガを描いてますと親戚に言うと、「あらあら、それじゃドラエモンを描いてもらわなくっちゃね」とか言われる(唐沢兄弟から引用)みたいなもんなんだろう。


2006-11-07

_ GSオプション

そう言えば、はるか昔、「真のインターネット対応機能とは」というタイトルでGSオプションの解説を書いたのを思い出した。

今だったら別の書き方をするだろうな(リンクはほとんど切れて無くなってる。文中に出てくるStackguardはカナリアを利用する方式としてはGSオプションより早くに発表されている)。

ちなみにVS2005でも、プロジェクトのプロパティの「コード生成」の「バッファセキュリティチェック」がそれに当たる。規定値は「はい」で、/GSの指定は不要。逆に「いいえ」にすると/GS- が付く。というわけで、黙ってコンパイルすればカナリアは歌を歌うはず。

カナリアって、炭鉱にもぐるときに連れて行くと最初に酸欠で死ぬというあたりから取られた名前のはず。

さらに付け加えるとトゥイーティーは、子供のカナリアでヒヨコじゃない。

アイ・ラブ・トゥイーティー Vol.3 [DVD](こおろぎさとみ/江原正士/京田尚子)

アイ・ラブ・トゥイーティー Vol.1 [DVD](こおろぎさとみ/江原正士/京田尚子/梅津秀行)

性格悪いんだよな、このカナリア(カナリヤかもと思った)は。


2006-11-08

_ BINARY HACKS

いただきました。ありがとうございます。(おれもそういうカテゴリーなのかな? カンファレンス参加者かつ感想書いた人特典なのかと思ったりもしたけど)

Binary Hacks ―ハッカー秘伝のテクニック100選(高林 哲/鵜飼 文敏/佐藤 祐介/浜地 慎一郎/首藤 一幸)

実は書名だけ見て、Binary2.0のセッション内容を集めたような本だと思ってたわけだけど、全然違った。むしろ、あの場に出てセッションをできるような人になるために知っておくべきポイント集という感じかな。

というか、個人的にはこれは手元に置いておくべき本だと思うし、実際のところ相当、ありがたい。

というのは、たとえばodの引数って全然覚えられなくて(odやtcpdumpとかみたいに重要なツールは、わざと狙ったんじゃないかと疑ってしまうくらい、引数がわかりにくい。manページ見ながらでもしくじることがあるくらいだ)しょうがなく、8進−16進変換しながらエンディアン引っくり返ししながらASCIIコード−文字変換をするというような、無駄な作業を何10回となく繰り返してるからだ。僕の場合だと主となる開発環境のWindowsだとbzが手軽に使えるから、利用頻度が少なく本気で覚える気にならないという面があるけど。

というodのコマンドライン引数を#4で6ページ使って説明してある。#は1から100まであるわけで、これが#4、#3がfileの使い方と何してるかの解説(単にmagic見るだけじゃなかったのか、とこれは初めて知った)、#2が用語解説、#1が概要説明で、全部合わせてイントロダクション。#3と#4をイントロダクションに含めてるってことは、要するにそういう本だということだ。では、バイナリーファイルを追っかけよう。

そういえば、#82はstraceだけど個人的には一番良く使う-pの説明がなかったりするけど、重要なのは、こういったコマンドがあるということを示していることと、何をするコマンドで、どうやってるのかについて書いてあることだ。

で、それなりの厚さだが、100個のパートに分かれているということは、頭から順に読む必要はなく、どこに何が書いてあるか大雑把に目次を頭に入れておいて、後は必要に応じて拾ったり、ときどき開いて読めばよい。たとえば、#94のプロセッサのメモリーオーダリングみたいに、ちょっと空いた時間にショートショートみたく読むと楽しそうだ。というか読んでしまったが。

その一方で、6章のプロファイラとデバッガの章とかはごちごちのプログラムを作る前にまず読んでおいたほうが良さそうだ。

という具合に現実に役に立つし、かつ読み物でもあるという意味で、おもしろい立ち位置の本だ。そうか、実用書と読み物のバイナリーをハックしているのかも。

それにしても、こういう本って貴重だな、となんとなく感慨深くもある。ソフトウェアはハードウェアじゃないのだが、それだけにいくらでも試せるし試しやすいというすごい美点があるのだ。本当に、こういうおもしろいものが世の中にあるっていうのは幸運だ(たとえば孫子だったら自らの理論を実験するには、戦争しなきゃならないわけだし)。


2006-11-09

_ 携帯のアドレス変えまくりとか

後ろの席のおっさんが、また変えやがったよ、とか叫んでるんで何かと思ったら、女子高校生な娘がメールアドレス変えましたのお知らせメールを送ってきたそうだ。

どうも、1週間とかいうような単位より遥かに短い頻度で変えてるらしい。それも1人じゃなくて2人いる娘の2人とも。どうもそういうのがはやってるんじゃないかという見解。不便じゃないんかなぁ、とか訊かれてもおれにはわからんが(知り合いが多けりゃ不便そうだが、ビジネスで使ってるんじゃなけりゃどうでも良いのかも)、そういうもんなのかな?

で、どんなアドレスなんですか? と聞くと当たり障りがなさそうなお知らせメールを幾つか見せてくれた。

oyatsu_ha_banana*@* とか、honto_yannachau*@* とか、kyouha_gokigen*@* とか、そんな感じ。

まるでmixiのニックネーム変えるみたいなノリだな、と思ったわけだが、そういうのと比較してる時点でおれもおっさんなんだろう。

#このあと、識別子としてのメールアドレスとか、唯一性とか、匿名性とか、若者論とか、メディア論とか、ケータイ対コンピュータとか、いろいろやりたければやれそうだが、それには興味ないのであった。

#いやでも何か一言はほざきたくなるよね、たとえば、でもメールアドレスって実際には世界でももっともオープンで広い空間における識別子のはずだと思うんだけど、それにしても、了見が狭いのか、それとも逆に広い広い視野から見ると狭い狭い裏庭みたいな空間なのか、というか、何も考えてないに100ガバチョ。

_ どうして、こう脇が甘いというか、なんというか

で、どっちを信じろと?

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

Before...

_ tsune [こっちだとうまくいきます。 http://www.microsoft.com/downloads/details.a..]

_ shinchan55 [私も同じ状況になりましたね。 あと、Proxy越えでうまくいかなかったりとか…再頒布版を使うのが今のところ正解みたい..]

_ arton [おお、情報どうもありがとうございます。それにしても、日本語版リリースノートまで出しているにもかかわらず、なんでこうな..]


2006-11-10

_ インストールできる.NET Framework 3.0

tsuneさんが教えてくれた再頒布可能パッケージをインストールしたら、修復インストールになって本当に「完了」したようだ。

_ Joelの影響力

ソフトウエア開発者の危うい「更地主義」

Joel on Software(Joel Spolsky/青木 靖)

どこかで読んだようなネットスケープの凋落の物語が語られているが、歴史に学ぶ方法の問題点は、ほとんどの場合、反例が見つかり、しかもそのどちらが正しいかを検証する手段がないことだ。成功したものは成功したために検証のためにそれをやり直す必要はなく、そのために別の方法を取った場合にそれがどうなるかがわからないからだ。

反例1: マイクロソフトの市場シェアのほとんどを占めるExcelという表計算ソフトは、そこそこ成功したマルチプランとは独立して更地に作られた。(Mac版が)

反例2: OS Xは、OS9を捨てて更地に作られた。

反例3: Unixは、Multixとは全然無関係に更地に作られた。

反例4: SQL Server7は、それまでのSybaseのコードベースを捨てて更地に作られた(らしい)

反例5: (憶測)大成功をおさめたNetscape Navigatorは、Mosaicに見切りをつけて更地に作られた(アンドリューセンがコードを盗まなかったと仮定して)。

別意見:Netscape凋落の原因は、更地に開発ではなく、モチベーションの欠如による

なぜか? 会社がイノベーションを止めてしまったからだ。会社は大きくなり、そして大会社はどうしても創造性がなくなる。例外はもちろんある。しかし一般的に、すごいことをやるのは、動機づけが高く、目的を一つにした人たちの小集団だ。関わる人たちが増えれば増えるほど、その集団はグズでまぬけになる。

(辞職そして追悼。)。

(ただし、公平を期すならば「6 ヶ月から 10 ヶ月の手戻りとなった。」という更地主義のもたらしたマイナス面を見ておく必要がある)

何が言いたいかというと,アプリケーション開発者の多くが「既存コードベースを拡張/修正する」ことを一番良いと信じていることを問題視しているのだ。最初からやり直さなければもっとうまくできるだろうという考えが間違いであることは再三証明されてきた。間違わないでもらいたいが,ビジネスの状況や技術的な理由によって,アプリケーションを捨てないですませなければならないこともある。しかし,その方がいいと思ったからといって,(最初から書き直すのではなく)アプリケーションの既存の機能を書き換えるのは,十中八九間違っている。

どちらにしても、最初のリリースから幾度か待つ必要があるのは当たり前の話だ。

良く読めばすぐにわかるが、最初に挙げた2番目の「認識」が不適切だからだ。「Microsoft製品「XXX』の次期バージョン」のほとんどが、既存コードベースの修正/拡張だからだ。たとえばVistaはXPのコードをまったく使わずに更地に作った? まさか。にもかかわらず、最初のサービスパックを待つつもりだよ(実運用については)。次期Officeが更地に作られた? 誰もそうは思わない。

2番目の認識はリリース直後の製品は、それが更地に作られようが、修正/拡張であれ、キャズムを超えるには人柱(アーリーアダプター)をソフトウェアのモロク神に捧げる必要があるということを示しているに過ぎない。

というか、まさかパッチレベルで済むような修正に対してまで更地主義で挑む愚か者がいるということを書いているのかね? そうは読めないのだが。

結局のところ、本人が書いているとおり、新築と増築のどっちを選ぶかは「ビジネスの状況や技術的な理由」に依存している。したがって、タイトルはミスリードを招くため極めて危うい。

_ 再帰のバグ

新人の作ったプログラムにバグがあった。
実際にはC#だったのだが、面倒なんでRuby。
複数のデータをDBにinsertする。すでに登録済みならdeleteしてからinsert(なぜupdateを使わないのかは別の問題)。
class DupError < RuntimeError
end
class Database
  def add(key)
    unless @data[key].nil?
      raise DupError
    end
    @called += 1
    @data[key] = true
  end
  def remove(key)
    @data[key] = nil
  end
  def renew
    @data = Hash.new
    @called = 0
  end
  attr_reader :called
end
 
Storage = Database.new
 
#複数のデータを登録する処理
def create(args)
  args.each do |x|
    begin
      Storage.add(x)
      return
    rescue DupError
    end
    Storage.remove(x)
    create(args)
  end
end
 
#データの数を1から16まで増やしながらテストしてみる 
(1..16).each do |x|
  Storage.renew
  args = Array.new(x) {|i| i}
  args.each do |val| #全データが登録済みという状態をテスト用に作る
    Storage.add(val)
  end
  create(args)
  puts "#{x} by #{Storage.called} times"
end
その破壊力にはすごいものがあった。それにしてもなんでちゃんと停止するのか、最初わけがわからなかった。
#この再現コードからはまったくわからないが、実際には再帰を使おうと発想したことはプログラム的にはすごく慧眼だったので、そこはむしろポイントがとても高い。
本日のツッコミ(全6件) [ツッコミを入れる]

Before...

_ ogijun [技術的にはMac OS XはNeXTからものすごくスムーズに連続していると感じますね。 あと、更地主義(という言葉を..]

_ Typo [>それまでのCybaseのコードベース Sybase ですよね?]

_ arton [ですね。]


2006-11-11

_ 1111

ハハの日と読むのは無理がある。

_ 無駄な時間が減った

カーステレオで最近聴いてるのは、ほとんど高橋悠治のゴルトベルク変奏曲(最初の録音のほう)とブーレーズの大地の唄、OMDベスト、デキシーズミッドナイトランナーズのベスト、ルチアポップのボエーム、そしてボウイのリアリティー(6連奏なのだ)なんだが、もっといろいろ聴きたいなとか思わないでもない。

一時期はiPod+FMトランスミッターを使ったんだが、FMトランスミッターはどうもやっぱり音が良くないし、時たますさまじいノイズが入ったり、演説が入ったり、いろいろ不快なんでやめてしまった。電池がここぞというときに切れると交換がまた面倒。(すごいノイズの嵐が出るのでボリュームを落として、トランスミッターの電池蓋を開けて、電池を探して、ビニールを剥いて位置を確かめて交換して……とか運転中にやることじゃないよな)

で、ふと思いついてiTunesでプレイリストを作って、適当に70分程度にまとめてCD-Rに焼いてみたり。まあ、Same Old Sceneになってしまうのだが。

で、最初3時間分ほどまとめてからつまみ聞きしては70分程度に落としていったりしてたわけだが、思い起こせば20年以上前には、これをカセットテープとLP(CD時代前のような気がする)でやってたわけで、どれだけ無駄な時間をかけていたことだかと愕然とするばかりだ。ランダムアクセスと光メディアはすばらしい。

しかし、さらに考えてみれば、iPod+FMトランスミッターにしろ、iTunes+CD-Rにしろ、わざわざ母艦のPowerBookから転送しているわけでくだらない時間のようにも思う。PowerBookのバッテリーの保ちやそもそもが車での移動ということを考えると、単にカーステレオがAirMacステーションになっていてスピーカーに出力してくれりゃいいだけじゃん。で、ついでにPowerBook用の電源端子を出しといてくれればもっとよろしい。

というか、車庫にAPを用意しておいて車の中からちょっと操作すると家の中で共有設定しといた母艦のプレイリストを取り込んでくれるとか(しかも瞬時に。イグニッションキー回した瞬間に、とか)。

どうしてこう有機的に繋がらないんだかなぁと思うのであった。

_ 円盤投げの人

軽蔑《デジタルニューマスター版》 [DVD](ジャン=リュック・ゴダール)

ジャックパランスと言えば、なかなか完成しない映画に怒り狂い会議の席上で大暴れしてフィルム缶で円盤投げしたりするシーンが思い浮かぶ。

この映画は4人の物語だ。プロデューサと監督の間で、現実と芸術の間で彷徨い愛を失うミシェルピコリと、野蛮で何も知ろうとせずしかし金と自信を持つジャックパランス、何が自分にとっての魅力なのかを嗅ぎ出して逃げていくブリジットバルドー、そしてただひたすらに映画を作るフリッツラング。

その裏には何か大きな勘違いをしたメルロポンティと多分底意地悪く逆を行ったゴダールと、非常に複雑な内面を持つモラヴィアがいる。モラヴィアを使った映画は多いみたいだが、これと暗殺の森しか意識的に見たのは無い。

それにしても、ジャックパランスのフィルモグラフィは特徴的だ(もしかしたら赤かったのかも知れない)。

最初は、リチャードウィドマークなんかと共演していたのがヨーロッパに舞台を移す。明日なき夕陽はおもしろそうだが見たこたない。ワイルドバンチだとロバートライアンの役回りだ。

いつもリバティバランスを撃った男とごっちゃにしてしまうが、そちらはジェームズスチュワートで顔も役柄もまったく違う。

_ 更地主義の続き

というわけで、あのヨタ話を読んだとき不快感を覚えたのは、あれが、一見開発者に対して忠告をしているようでいて、実はマネージメントに対して、このチャンスにおたくの技術者たちはアプリケーションの作り直しを要求するはずでっせ、でもそれを聞き入れたらあきまへんで、もっと正確に言うと、.NETへの移行にコストがかかると考えているのならそれは技術者連中にだまされているからでっせ、お安くできまっせ、と言っている点にある。

実際にためせば移行ツールはそれほど役に立たず、クラスライブラリは別物、コードベースをへたにつまみ食いで残すなら更地のほうが(おれの経験からは)良いにも関わらず、.NETへ移行を促すという崇高な理念のもとに地獄への道を囁きかけてるからだ。

そこで、ストアドプロシージャでVB6アプリケーションを作れとWindows DNA 2000ではメッセージを発していたのかな、とも思う。ビジネスロジックがSQL Server内にあれば更地と言ってもそれはプレゼンテーションがVB FormからWindows Formに変わるだけの問題にまで小さくできる(ASPであればほとんどそのまま移行できるーーこの場合であれば追加機能のみをASP.NET化というのは現実的なシナリオだ)。SQL7から2000や2005に対応するほうが、VB6やMFCアプリケーションをWindows Formsに直す=マルチスレッドとControl#Invokeの世界へようこそ(というかこれはもしかしたら必要なわけだが)、より手数は少なく障害も少なそうだ。

いずれにしろ、楽しいのは更地だ。でも、移植は勉強になるので無駄ではない。


2006-11-12

_ script moniker

全然知らなかったが、regsvr抜きにWSCをインスタンス化するためのscriptモニカというのがあるらしい。

scriptmkは関係あるのかな?)

このあたりに出てくるのがそうらしい。Windows Script Components Have a COM-ing Effect

これは後で読む。GetObject and LinkDemands


2006-11-13

_ ローカル変数は強い

irb(main):002:0> def global_setter=(x)
irb(main):003:1>   $x = x
irb(main):004:1> end
=> nil
irb(main):005:0> global_setter=32
=> 32
irb(main):006:0> $x
=> nil
irb(main):007:0> global_setter
=> 32
irb(main):008:0>
ってことは、グローバルオブジェクトに対するアトリビュートライタメソッドは定義できないということだ。rb_define_virtual_variableを使ってグローバル変数に見せかけるが正解なのかな。

_ Seasarカンファレンス

チュラすげぇな、と思った反面、IDEが出てくるとVisual Studio 2005(今はここ)と比較して見てしまうんだよな。すると、それほどはすごくないような(Webアプリケーション開発フルセットとしては)、すごいような(Java限定なら)。

するとやはり、Java限定というのが肝なのかも。そして、その限りにおいては、修正の即時反映とか確かにかってないデベロッパーエクスペリエンスと言えるように思う。

というような僕個人の感想とは別に、HTMLドリブンのコード生成(HTMLを元にビーンを生成する)というのは、デザイナーが先行してHTMLを作って納める形態だと、すごい強みなんだろうなぁというのもわかる(そういった開発方法だとVisual Studio 2005を使うよりも効率が良さそうに思える。あれはやはり自分でペタポトしていく場合に強みを発揮するからだ。もちろん、デザイナーがサーバーコントロールをペタポトしてくれるのなら話は別)。

それ以外の点については後で書く予定。

とは別に、スターロジックさんのブースの籤引きでなんと当たりを引いた。Pingkingの時といい、むちゃくちゃついているではないか。

というわけで、羽生さんのサイン入り『楽々ERDレッスン』をゲット。どうもありがとうございます。

楽々ERDレッスン (CodeZine BOOKS)((株)スターロジック 羽生 章洋)

とりあえず、第4章を読んでSQLの集合演算のあたりを勉強。

#高井さんと、マジカのシート群について話し合ったり。あれ受け取らなかった人ってもったいないことしてるよね、とか。

_ ザザ

ダスク(THE THE/マット・ジョンソン)

いや、まさか「The 2007 Office System」という名前だとは思わなかった。すごく気持ち悪い。ザザザザザ。ざざ虫。

いよいよThe 2007 Office System(以下Office 2007)の日本語版の開発が完了したことを受け、MSDNサブスクライバーダウンロードサイトからの提供を開始いたします。


2006-11-14

_ Tuigwaa + Buri

いつもクール(というかぶっきらぼうというか)なまこたんが熱い

ただ、会場内はそれほどの熱気はなかったかも知れない。

まず、Buriというかワークフロー(と言わずにワークステートと呼ぶんだっけ)がどう適用されるのか良くわからないと「はあそれで」にはなっちゃうだろう。

次に、BPELエディター(たとえばOracle BPEL Designerとか)を見てたりしてるとしょぼさに目が行くかも知れない。っていうか、一瞬、えーしょぼいなぁ、と思いましたです。すみません。

でも、そりゃ違うなぁ、と考え直した。大体において「しょぼい」と思えたら、破壊的イノベーションを疑うべきだ。まして端倪すべからざるまこたんが熱くなってるんだから。

というのも、あれが全部ブラウザー上で、つまりWebサーバー+クライアントで動いてるのだ。ってことは、ノートPCを持って出かけるとして、ノートの中に作っておいてもデモするのは普通だが、お客さんのところで稼動しはじめていてそこのサーバーで動いているのも普通だが、別のところにあっても良いわけだな。運用とかサポートとかいろいろあるわけだし。

あるいはこういうことも考えられる。仕様をきちんと詰めてかつ堅牢に作ることを考えるとプロトタイピングはとても重要なはずだ。しかし、プロトタイピングで完全に最終的な動きをシミュレートできるとしたら(というかそうでなくてはきちんと詰めたとは言えないし、漏れがあることになる)、それは2重開発でそれほど俊敏とは言えない。アジャイルプロセスではお客さんをチームに組み込んでジャッジを常時行えるようにすることもプラクティスの1つだけど、そうそう手が空いているとは限らないというか、破壊的なイノベーションならそういう方向を採用するのは難しそうだ。

でも、ヒアリング+開発+実行が同時にできたらどうだろうか? (極論だな、と書いてて思ったけど。ヒアリング=開発=実行)

S2 2.4風に言えば、BPELがEnterpriseならば、Tweega+BuriはSuper Aの方向なんだろう。しょぼいかも知れないが、必要十分であれば、破壊的なIには十分以上のはずだ。

つまるところ羽生さんの考える方向へ進むための最終兵器として着々と完成しつつあるということなんだろう。

思いつき。最小公倍数と最大公約数は、字面から最大公約数のほうが大きい値に見間違える。よってたかって決めた仕様は最小公倍数ルールに基づくことになる。みんなの要求を最小にまとめる必要があるからだ。しかし、おれさまが決めた仕様は最大公約数ルールに基づける。本当に必要なものが入っていれば十分だ。しかも最大化されている。外側にはみだしてしかも最小なものより、内側で最大化するほうが実は効率も効果も大きいかも知れない。少なくても最大を名乗ることができる。

いずれにしろ微妙にかぶる部分があるので、注目度を上げることにしようと思った。

_ 人質

ピエール以来音沙汰がないレオスカラックスの映画で最初に見たのは汚れた血だ。ユーロスペースがまだ桜ヶ丘の坂道にあった頃のことである(とか書いてみたり)。

汚れた血 [DVD]

HIVみたいな奇病が蔓延する近未来のパリ、ピーターと狼を口笛で吹きながら蟹みたいな顔をした主人公が謎の組織と謎のジュリエットビノシェに取り込まれて特効薬を盗むために動き出す。ロシュフォールの恋人たちよりもしかしたら長いワンショットの路上パフォーマンスとか。美しい映画だった(が、ちょっと冗長かも。僕はポンヌフやピエールのほうが好きだ。というのは余談ではある)。ジュリエットビノシェの美しい横顔にどきどきする様子とかが映画としてきちんと表現されていたのを覚えている。

が、犯罪物語ではある。万事快調といくはずはない。ついに、警察隊に包囲されていよいよ絶体絶命の危機がやってくる。このまま捕まってしまうのか。

主人公は警察隊の親分に対して言い放つ。「人質がいるんだ。人質を殺すぞ。人質は子供だぞ」

いや、いないんだけど。

そして、自分のこめかみに拳銃を突き立ててゆっくりと逃げ出すのだ。

構わず撃ち殺そうとする部下に、中年の警部だかが「子供の命はわれわれの未来だ」とかなんとか言って包囲を解かせる。

というのを思い出した最近のあれこれ。

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

_ habuakihiro [あそこの興奮のしどころは、再起動なしにランタイム中に動的にフロー(XPDL)やモデル(DBの列)を変更できるってとこ..]

_ arton [>特にモデルが変わっても平気ってのは、そっち系の人が見たら嫉妬 そこだったのか! それはぜんぜん理解してませんでした..]

_ まこたん [あのデモは見た目で判断しちゃダメです(笑)]


2006-11-15

_ String#==

ちゃんと型をコンパイラに認識させないと、C#のstring比較でもEqualsが必要になるという話。
ちゃんと警告を見ていなかったのでつまらないバグに引っかかった(ドキュメンテーションコメントをインターフェイスの実装側に書いてないので山のように警告がでるのだ。pragmaで止めればいいんだけど)。
public class Foo
{
    public static void Main()
    {
        object o = "test";
        System.Console.WriteLine("test" == o);
        System.Console.WriteLine(string.Format("test") == o);
    }
}
実行すると
True
False
警告は、どちらかがstringならば、もう一方のobjectのほうをstringにキャストしろと出る。o == strなら左辺、str == oなら右辺。正しい指摘だが読まなきゃしょうがない。
実際には次のようなコード。
Session["foo"] == "bar"
==がオーバーロードされているわけだから、
((string)Session["foo"]) == "bar"
と書けばOK。でもなんとなくキャストはいやんなので、
"bar".Equals(Session["foo"])
として解決(Session["foo"]がnullの場合があるので)。

_ 教えてRubyのバイナリな人(書いてたら解決したけど)

ASR鋭意修正中なのだけど、次のスクリプト相当なことをASRでやりたい。
具体的には、TypeLibをwsfのreference要素で指定された場合の定数の取り込み(WIN32OLE::ole_const_load相当)。で、GlobalRubyScriptの場合は直接グローバルな定数として組み込めばよいから困ってないんだけど、RubyScriptのほうは無名モジュール内の定数として取り込まなければならなくてちょっと混乱してます。
やりたいことをRubyで書くと
module A
end
A.module_eval("Foo = 'foo'")
なので、現在はCで
VALUE mod_a = rb_module_new();
rb_define_const(mod_a, "Foo", rb_str_new2("foo"));
とやっているんですが、結果としては
module A
end
A.instance_eval("Foo = 'foo'")
としてしまったように見えます。module_evalを呼ばないのは(例では単なる文字列だけど)設定値をCからでしか取得できないからです。
-----いろいろ試行錯誤-----
というか、ASRのCloneの処理で、rb_extend_objectを呼んでるのは何か違うような気がしてきた……。rb_include_moduleじゃないかなぁ、とそのあたりを追っかけてeval.cとかclass.cとかを眺める……rb_singleton_classか!(Cloneはやっぱりrb_extend_objectで良いような気がしてきたけど)
VALUE mod_a = rb_module_new();
rb_define_const(rb_singleton_class(mod_a), "Foo", rb_str_new2("foo"));
で、解決。
動作は解決したけど、なんかわからなくなってきた……
以下の理解は正しいでしょうか? >識者の方。
  • rb_module_newから返るのは、無名モジュールのインスタンス
  • したがって、それを第1引数にしてrb_define_constを呼べば、それはそのインスタンスに定義されるのでinstance_evalに相当
  • ここでやりたいのはmodule_evalなので、rb_singleton_class()にモジュールのインスタンスを与えてモジュールのメタクラスを取り出して(作って)与える必要がある

_ Office 2007(のうちのExcel 2007)

うわー、なんでこんなバカなことをしたんだ?

クラシックメニューへの切り替えってできるんだろうか? (XPではクラシック表示はしないけど、これはひどい、ひど過ぎる)

しかも、こういう困ったときに、実はものすごく役に立つイルカも出てこない。これまで見たことがあるGUIアプリケーションとしては、GNOMEが作るツールバーよりも不格好だ。つまり最悪だ。おれは1600×1200のモニターを使ってるから辛うじて作業領域が表示されるけど、これ、800×600だったらツールバーで画面が占有されちゃうだろうな、それにしても。

しかもヘルプメニューが無い、無い、無い!

と思っていろいろ突いていたら目に入らないところに薄くて青くてタイトルバーに保護色で隠された小さなクエスチョンが目に入った。

検索に「アシスタント」……出るっかな、出るっかな……おお、出てきた。

新しいデザインには、Microsoft Office アシスタントは含まれません。

だめだ。2003に戻そう。アクティベーションしちゃったけど。

#追記:でも、OneNote 2007のツールバーはあんなには不格好じゃなかった。このWema+Tab付きWikiみたいなアプリケーションはもうちょっと何かよくわからないものが付け加われば、相当好きなんだけどな(でも、そのよくわからない何かが足りないので実際にはタスクバーで無駄にメモリーを食っているだけなのだが)……

#IME2007は、IME2003とか2000とかのナチュラルどうした系よりは遙かにまし――少なくてもキーアサイン能力は標準IME並のまともさになった――学習能力がゼロみたいに見える。というか、全然学習してくれてないのだが。設定もされてるけど。どうして、有償のもののほうがデフォルトバンドルよりだめなんだろう? (アイコンは中間色使いまくりでそれなりにきれいではあるが)


2006-11-16

_ Office2007をさらにいじる

リボンちゃん、くるってるー、リボンちゃん、くるってるー というコマーシャルソングか、コマーシャルソングの替え歌があったな。それにつけても、ファイル、編集、表示、……という15年にも及ぶ成果を無にしちゃう思いきりの良さは大したものだ。

#最小にするという設定は見つけたけど、これも下へ向けてにょきにょきはえてくるという不思議な動き(すごく不自然なんだが、従来のメニューも下へ延びるのでそんなにおかしいわけではない。巨大だから不気味なんだろう)。

ただ、考えてもみれば全世界で利用されているんだから、字だけじゃ何のメニューかまったく判別不能な言語を利用している国のユーザーとか、まったく文字の読み書きができない人とかもユーザーだと想像すれば、非常に画期的で優れたユーザーインターフェイスなのかも知れないな、と思い直した。もうちょっと我慢してれば、すっかりあのばかでかいリボンちゃんのトリコになれるかも知れないし。というか、IME2007がまったく学習しないのは、学習能力の問題じゃなくて、予測入力ってやつが原因なのかな? (……を「てんてん」に名詞として登録しているんだが、どうやっても「転々」を最初に出してくれる)

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

Before...

_ Kazz [一昨日まで、私もOffice2007に上げようとやる気満々だったのですが、ここの一連のエントリ見て、延期してしまいま..]

_ arton [いやー、でもいずれやって来ることなら、さっさとそれに慣れるってのも悪くないかなとか(全然、慣れないけど。Vista上..]

_ Kazzz [他にやることの無い夜長に奇抜なUIに七転八倒するのも良いかと思ってたんですが、こうも書かれているのを見ると、逆に怖い..]


2006-11-17

_ なんか次々に来る時は来るなと

CodeZineに掲載したプログラムにバグがあったので、修正

みごとなまでに、ユニットテストでテストしていない項目はバグがあるの法則が発動していた。

で、RScript18-1.2.0.1.zip(RScript.dll/GRScript.dll)1.2.0.1ソース。AddTypeLibの実装とか、デフォルトオブジェクトの実装とか、なかなかおもしろかった。が、これをメンテしている傍らでPowerShellをダウンロード/インストールしてたりするところがなんとも。

さらにRjbがらみで幾つか。でも、バグじゃなさそう(=再現しない)なんで投げ返し。

で、残りが2つあって、そのうち1つは予定を過ぎているので今から猛然とやる。

_ Monoミーティング

4th Mono Meeting in Tokyo 11/29が開かれるそうです。

Demo by Alex: java+JDBC+postgresqlとcsharp+Npgsql+postgresqlの簡単な比較とか、いろいろおもしろそうなので、行ける人は行かれるといいかも。

ほかにも、アジェンダを見ると、Boston Mono Meetingレポートとして、「JIT最適化の設計と今後の計画」「NUnit」「Mono Debugger」(の設計とからしい)とか、いろいろ盛りだくさん。

というか、今回は僕も参加したいです。トラックバックするのでよろしくお願いします。

_ 夢見る魔獣戦線

真説魔獣戦線 4 (チャンピオンREDコミックス)(石川 賢)

スタージョンの夢見る宝石と並ぶ、矮美少女ものと思っている。なぜ、矮美少女と当時は思わなかったでもないけど(これ、リアルタイムで読みかけていた――途中で雑誌自体を買わなくなったので「読みかけていた」)、石川賢名義を意識して読んだ最初の作品でもある。

ハレンチ学園(これをリアルタイムで読んでたところがなんとも)には結構な頻度で石川賢というアシスタントが落語家の格好をした永井豪と並んでメタに登場していたけど、なんとなく今にして思うと、十兵衛が永井豪で、鮎ちゃんが石川賢だったのではないかとか。

(と、突然特定個人が出てくるエントリーは先日のジャックパランスと同じく、大体において追悼もの。絶対、後で読み返すとわからなくなると思うのでメモ)

_ マルチスレッド対マルチプロセス

スレッド間の排他制御のややこしさまで考えれば、プロセス間通信のシンプルさのほうが上かも知れない。あとは、リソースのオーバーヘッド(スレッドのほうがたとえばプロセスディスクリプタは不要となるはず。スレッドディスクリプタがどれほど小さいかは別)だけで、そこは高速化とハードウェアのコストダウンでまかなえるような。

もしそうなら、グリーンスレッドというのが、スレッドの望ましい実装になるかも知れないとか、いろいろ考えるが、こういうのってどこかでちゃんと研究してるだろうから、その成果待ちとなるんだろうな。

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

Before...

_ arton [スクリプト書く分には、volatileとかキャッシュのフラッシュのための同期とか考えなくても良い点。]

_ arton [かと言って、自分で非同期IOをがんばる必要もない点。]

_  [YARVが現在のRubyと同じ挙動なら、重いか軽いかの違いなのかなあ。YARVって並列に動くんじゃないよね?動くんだ..]


2006-11-18

_ 何を今頃東京ピープー

WikipediaのことをWikiと省略する人がいるというのは話には聞いてたけど、スラドのデベロッパーセクションでコメントに使われるくらい一般的(というか、逆方向だけど)とまでは思ってもいなかった。

シープラプラとかみたいなもんか(違うな。HTTPのクライアントサーバシステムをインターネットと呼ぶのに近いな)。

追記:今、まさに気づいたが、XPのスタートメニューに『インターネット』という項目が『電子メール』と並んであるのか。これじゃ、インターネットがWebシステムを指すと思い込む人がいてもしょうがないよな。

_ MAS

Majerus.net Active Shell

自由なソフトウェアというわけじゃないけど、そこそこ使いやすいWin32スクリプティングシェル(ヒストリーとか編集のためのキーアサインがカーソルとかなのはそんなもんなんだろう)。前回から、いろいろASRを対応させたので、VBScript、JScriptと合わせてRubyASRに対応したシェル(ASRの別途インストールが必要)もデフォルトで組み込まれた(ヘルプにもWin32OLEの使い方がCreateObjectとかActiveXObject.newなんかと並んで書かれている)。

irbではなくMASを利用するモティベーションがあるとしたら、MASが提供するオブジェクトかな。

_ ASR 1.8.5.3

ASR 1.8.5.3

RScript/GRScriptの更新。

_ いいこと言った

オブジェクト指向っていうのは、現実世界をマネる

ためじゃなくって、考えをまとめる、考えを構造化する

ためにあるでしょう。

――バカが往く

(譲歩:そうじゃない人もいそうな気もするけど)(おれにとっては)確かにそれは言えてる。

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

Before...

_ arton [このてもインプラですねぇ。僕がなんとなく考えたのはソイヤーの原人シリーズのやつだったんだけど。]

_ 桑島 [ほとんど最近のSFしか読んでないのでようわからんです。 身体機能の拡張というかサイボーグをうまく使った話だとMatr..]

_ arton [>海馬をフックして記憶のミラーリング おもしろい。]


2006-11-19

_ iBook

ふと思い立って、ホワイトボード用マーカでiBookに絵を描いてみた(裏の致命的じゃない箇所にだけど)。3分後くらいにティッシュで軽く拭くだけできれいに落ちた。

MacBookの白だとどうなるかは知らんけど、もし同じような材質なら単にマーカを持ち歩けばいいんじゃなかろうか。でもリンゴの部分にはみ出したら悲しいとは思うけど。

で、仮にiBookと同様にMacBookの白もホワイトボード用マーカで書いたものを消せる材質なら、17インチ版は相当使い途がありそうに思うが、現行サイズだってそれほどせせこましいわけじゃない。リンゴの部分をどうするかは考えどころだけど(裏は裏でバッテリーの留め金とかのクリティカルセクションがあるし、いろいろ溝というか切断部があるので辛そうではある)。

_ 略す

2種類+2種類の理由がありそうだ。おれが考え付くとこでは。

1. 一種の符牒。モツレクとかフルベンとかヘビメとか、知らなきゃ話に加われない。おれは、こういうの嫌いだけど、割とポジティブ系。嫌いなのはなんとなく知ったかぶり臭さがぷんぷんするからだろう。ということは口に出す人次第の属人的な性質がありそうだ。というか俗人しか使わないような気も。

2. 軽く見ているということを示す。アベシンとか、(そのものずばりの差別系の呼称がいくつもここに入るけどさすがに明示する気にもならん。アメ公とかいう言い方もこのあたりだろうが死語みたいに思う)、シンちゃんとか、コンサルとか、サルタンとか、タンキヨとか。ただ必ずしもネガティブ系とは言えないのは、軽く見ている=見下すとは限らず、親愛感の表明という意味合いがある場合もあるからだ。これが嫌いなのはプライベートな場でのみ許されるとか、不快語であるとか、無神経な印象を受けるからだろう。

3. 舌が回らない。しーぷらぷらとか。1とも2とも思えないから、ここだろう。どうでもいいんだけど、多分、2と同じような印象を受けるようだ。

4. 面倒くさい。でも、ある言葉を面倒くさいから省略するってのは、結局は2と根底では通じているように受け取れる。あまり品が良いとは言えない。

というわけで、今日もfor (int i = 0; i < len; i++)とか書いてるわけだ。おれは、本当にindexだかiteratorだかやlengthに親しみの情を感じてるんだよな。別にfor (int index = 0; index < length; index++)と書くのが面倒なわけじゃないんだから、2に違いない。というか読みにくいな。ってことは

5. くどさを解消するため。というのもあるのかも知れない。でもくどいかどうかなんてのは感覚的な問題だから客観的に見れば3か4経由で2の仲間だろう。

6. 恥ずかしいから ってツンデレで実体は2だろ(というか賞味期限がきれたものを口にしても良いのは青木さんだけ)。

でだ、親愛感の表明色が濃いのは多くの場合、マーケティングによるところがある。ケータイとかマーケとか。コークと呼ぼうコカコーラとか(自分から押し付けてるのだな)。1.の符牒も元々はこのあたりが進化の袋小路に迷い込んだものだと考えることができそうだ。

内田春菊のマンガに、つきあってよいロッカーとだめなロッカーってのがあった。たしか、こんな感じ。

「ねぇねぇ、わたしの彼、ちょっとやばそうなんだ。別れるべきかな?」

「どうしてそう思うの?」

「だって、ヘビーメタルのことをヘビメっていうの」

「ああ、それは絶対だめよ。ちゃんと就職するロッカーはヘビメタって呼ぶものよ。ヘビメって呼ぶのは絶対に就職しないから」

ヘビメタは2で、ヘビメは1という分類であるな。どうも1は廃人用語ということなのかも知れない。しかし就職するかしないかという切り口は強烈だな。

で、ヘビーとかメタルとかの意味を知らないやつは、ヘビーメタルを合成語だとは思わないんだろう。しかもヘビーメタルと呼ぶのを面倒くさがるものぐさぶりは一人前にあったりする。そこでわけもわからずヘビーと略すわけだ。でもそれには、より一般的な意味がある。だから本来は通じるはずがない。何が重いんだ? いや長いもののことを言ってるのか? となるのは当然のことだ。ばかと言われてもしょうがないだろう。そりゃレコード屋の洋楽コーナーをうろついて店員にヘビーはどのへんに置いてある? と聞けばヘビメタコーナーに連れてってもらえるとは思うが、それは通じてるんじゃない。察してもらってるだけのことだ。でも、知らない者の集落ではそれが立派に通用することになる。名前をつけるものは神だ。かくして、誤った言葉が神託となり人々に信託される。それをたしなめるものは罰当たり扱いだ。素敵だ。やはり人間は素晴らしい。

_ 合成語の省略

わりと各語の頭の連結が多くないか? ポケベルとかパソコンとかモツレクとかモツナベとかナベツネ(これは先頭の語の下半分だから語呂の良さが優先されるようだ)とかツンデレとか。ヘビメタもそうか。なぜケーデンになんなかったんだ? やっぱり停電を想像させていやんな感じだからかな? (電車っぽいからかも)

昔―ラジオ(先頭語。おかげでRFIDをラジオとか言わなくて済む)、近代―テレビ(合成語の各語頭と思ったけどtelevisionで一語か? TVと書くけど)、現代―ビデオ(先頭語。テープかレコーダかどっちだ? おかげでヴィデオディスクのことをビデオとは略せないような気も)とかね。

_ 英辞郎

速くて軽くて語数も豊富。しかし

【名】《コ》リナックス、リヌクス、ライナックス◆ボランティア(ヘルシンキ大学の Linus B. Torvalds 等)が開発推進した無料 OS。Redhat、Slackware、Debian、Yggdrasil などの名前でも配布。UNIX 系。

なんてのを見つけてしまうと、どこまで本気にしてよいのか不安にもなるな……(リヌクスというのが併記されているのは良いのだが、ボランティアですか、無料 OSですか、名前で配布ですか――間違いと言い切ることもできないのだが。無料なのは事実、そういう名前で配布されているのも事実、多くの人がそこから直接収入を得ずに参加しているんだから労力を寄付してるって意味じゃボランティアだけど。あとヘルンシキ大学ってのは古過ぎるような。元だな)

英辞郎 第二版(EDP)

#でも、もともとLinusの綴りを知りたくて引いたのだから、目的は達成できたわけで、やっぱり役に立つ。

_ パワポ2007

リボンが使いやすい(挿入とホーム)。ワークスペースがExcelやWordほど必要ないからとかかも知れない。

一方、IME2007は時々引っ掛かりやだんまりを覚えるようになって来たので許しがたくなりつつある。転々は相変わらずだし。先読み制御を殺すしかないのか? でもそれでもっと愚かな変換をするようになったらどうすりゃいいんだろう?

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

_ babie [6. 恥ずかしいので別のを当てた 私の学生時代は、「ヘビメタ」の消費期限が過ぎていたので「メタル」と呼んでいました。..]

_ arton [確か、それは就職しないほうに分類されてたような……(その呼び方は省略したけど内田春菊のマンガには出てた)]


2006-11-20

_ 11/20

籠るのですでにして11/20にしてしまう。

籠ると言えば

クマムシ?!―小さな怪物 (岩波 科学ライブラリー)(鈴木 忠)

釣られてしまったくまー。安いと思ったら112ページなのか。まさに小さな怪物。

_ RjbとInternalError

Linux Am64版(2.6)でRailsをrequire後にInternalError(J2SEの例外クラス)でメッセージ:unknown exception がJVMのロード時かクラスのロード時にスローされるらしいのですが、手元のWin32およびLinux x86(2.4)では再現しません。 何か関連しそうな情報をお持ちの方、おいででしたらご教示して頂けませんか?

問題はRailsのrequireにあるのではないかと思われています。が、仮にRailsがいろいろ変えたとしても、Rjb::importで影響を受けそうなメソッドは無さそうなので皆目見当が付きません。たとえばdlに影響するとは思えないです(と書いてからちょっと気になる点もでてきたので、TODOしとこう。ずっと暗黙に呼ばれるjvm_loadの問題だと思っていたけどimportの過程かも知れない)。

#うまく動く例: Win32(x86)
 irb(main):001:0> require 'rubygems'
 => true
 irb(main):002:0> require_gem 'rails'
 => true
 irb(main):003:0> require_gem 'rjb'
 => true
 irb(main):004:0> require 'rjb'
 => true
 irb(main):005:0> Rjb::import
 'junit.framework.Assert'
 => #<Rjb::Junit_framework_Assert:0x38b042c>
#だめな例 
$ ruby -v
ruby 1.8.5 (2006-08-25) [x86_64-linux-gnu]
...
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require_gem 'rails'
=> true
irb(main):003:0> require_gem 'rjb'
=> true
irb(main):004:0> require 'rjb'
=> true
irb(main):005:0> Rjb::import 'junit.framework.Assert'
InternalError: unknown exception
        from (irb):5:in `import'
        from (irb):5
irb(main):006:0> Rjb::import 'junit.framework.Assert'
NoClassDefFoundError: junit/framework/Assert
        from (irb):6:in `import'
        from (irb):6
        from :0

なおこの時のJavaは以下の通りです。

Win32 (OKな方)
C:\>java -version
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b01)
Java HotSpot(TM) Client VM (build 1.5.0_09-b01, mixed mode, sharing)
 
Linux(だめな方)
$ java -version
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b01)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_09-b01, mixed mode)

ただし、同じ環境でも、rqeuire_gem 'rails'抜きだと期待通りの動作となるようです。とはいえ、RailsあってのRjbという側面があるので、対応可能なら対応したいというのがこちらの考えです。

#Amd64マシンをサーバー用途に買おうかなとはさすがに言えない。Vista実験マシンをデュアルブートにするべきか……(いつ?)

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

Before...

_ arton [>I was able to change the error quite a bit. Now it fails ..]

_ odz [こちらでも unjar して無圧縮でjarを作成してみたところ例外が出なくなりました。 で、他にもこんなことすればい..]

_ arton [どうも追試ありがとうございます。 LD_*の設定についても元のレポートを送ってくれた人に知らせます。 情報が錯綜して..]


2006-11-21

_ RjbとInternalError(続)

odzさんのおかげで一応解決した(らしい。元のレポートしてくれた人も解決したとメールを寄越して来た)。どうもありがとうございました。 でも、コメントを読むと結構、僕自身が間違えてる点があるのでまとめておく。

  1. 問題となった現象はAmd64版Linux + Java 5 で発生する
  2. RjbでjarからimportしようとするとInternalErrorがスローされる。
  3. このjarを普通にJavaコマンドで利用することは可能。
  4. (環境によっては)Railsを先にロードすると発生する。
回避策
  1. jarの圧縮を解除すれば発生しない。したがって、圧縮なしでjarし直せば回避できる
  2. Java5に含まれるlibzip.soをLD_PRELOADすれば回避できる

LD_PRELOADは、指定された共用オブジェクトを先にロードする。「リンクと同名のシンボル」参照。

どうも、rubyの実行過程でロードする共用オブジェクトの中にAmd64版Java5付属のlibzip.soと同名のシンボルを持つものがあるようだ。(バージョン違いとか書いているけどそれはだから的外れでした。SunのJava実装でx86-64とia64版ではシンボルを内部化してないというような指摘をしている投稿を誤読してた)

で、どのあたりが衝突してるのかとstraceで調べると、requireすべてについてsoを調べてE_NOENTになるもので、すさまじい量だ……でも、Ruby の共用オブジェクトが外部に出しているシンボルってInit_*しか無いように思うのだが。……rjbを作る時、ついCはフラットなネームスペースというのを忘れてcreate_jvmみたいな名前をexternにしてるな、とその行為の意味を思い出してぞっとしたり。とういかso化前提のプログラムならリンケージが不要な関数とかはすべてstaticにしなきゃならない。rjb自身が犯人かも。

$ nm -D rjbcore.so|grep T
0000875c T Init_rjbcore
000089f0 T Java_jp_co_infoseek_hp_arton_rjb_RBridge_call
0000aa18 A _GLOBAL_OFFSET_TABLE_
00008cfc T _fini
00001a88 T _init
00002e00 T attach_current_thread
00002c8c T check_exception
00002470 T create_jvm
000029b8 T exticonv_cc
00002938 T exticonv_local_to_utf8
00002978 T exticonv_utf8_to_local
00002a00 T exticonv_vv
0000731c T find_class
00002a90 T get_exception_class
0000229c T load_bridge
00002e38 T release_string
00002b78 T rjb_s_throw

1.0.2の次は1.1.0にして(どうせrjb内部でしかリンケージを取ってないんだから1.0.3でも問題ないか)不要な関数はstaticを付けて、リンケージが必要な関数にはrjbあたりをprefixしよう。というかすぐにしておくか。

あとjava-linuxの投稿で結局解決せず、別のエラーとなったというのは、利用しているシンボルが今度はlibzip.soのものに変わったのが原因でしょう。

追記:rjb-1.0.3をリリースしました(exticonvは十分分離されてると思うので取りあえず現状維持)。(これでAmd64問題が解決するかどうかは別問題)

00007cfc T Init_rjbcore
00007fb4 T Java_jp_co_infoseek_hp_arton_rjb_RBridge_call
0000a914 A _GLOBAL_OFFSET_TABLE_
00008bfc T _fini
00001974 T _init
000022d8 T exticonv_cc
00002258 T exticonv_local_to_utf8
00002298 T exticonv_utf8_to_local
00002320 T exticonv_vv
000023b0 T rjb_attach_current_thread
0000846c T rjb_check_exception
00008980 T rjb_create_jvm
000068bc T rjb_find_class
00008270 T rjb_get_exception_class
000023e8 T rjb_release_string
00008358 T rjb_s_throw

2006-11-22

_ ノンブロッキングIO

AsyncIOについて(その1)

AsyncIOについて(その2)

yamazさんによるread/writeで待ち状態にならずにIOを発行することを何気なく非同期IOと呼ぶけれど、プログラミングモデルとしての非同期IOJ(async io)とselectを使ったマルチプレキシングは違うという話。先日僕がささださんとRailsChatでこのあたりについて聞いた話とか、そのあたりがからんできているのだと思う。

で、読んでいてはっと思いだしたのは、Win32APIの非同期(overlappedの略語としてMSDNでは非同期を当てている)は、これとは異なる意味だということだ。(.NET Frameworkでは、yamazさんが書いている意味になる)

オーバーラップ I/O(非同期 I/O)を指定してファイルのハンドルを作成した場合は、読み取り操作が完了した後、アプリケーション側でファイルポインタを調整してください。
(ReadFile APIの説明から)

(英語版とは現在内容がちょっと変わってきている。英語版にはこの文に相当するのはないが、

You can use this function for both synchronous and asynchronous operation.
(ReadFile [Files])とasynchronous operationという言葉は利用している)

Windowsでは、ノンブロッキングと呼ばずに、オーバーラップと呼ぶのだが、具体的にはCreateFile APIでファイルハンドルを作成するときにFILE_FLAG_OVERLAPPED を指定したものは、当然オーバーラップIOの対象となり訳語からは非同期IOということになる。ハンドルのオープン時点にどのようなIOを行うかが決定されるということである。

FILE_FLAG_OVELAPPEDを指定したハンドルに対して利用できるAPIは、ReadFileとReadFileEx(とWriteFile、WriteFileExだが、以後はReadFile*だけに絞る)の両方だが、どちらを使うかでプログラミングモデルが変わることになる。でも、どちらもオーバーラップ指定したハンドルに対するIOであり、オーバーラップに非同期を訳語として割り当ててあるため、どちらにしても非同期IOとなるわけだ。

実際、ReadFileEx(このAPIは、aioのようにコールバックルーチンを指定する)の説明には

ReadFile 関数は同期と非同期の両方の操作を想定して設計されていますが、ReadFileEx 関数は非同期の操作だけを想定して設計されています。

のように、ReadFileでも非同期なIOを利用できるという書き方になる。しかしReadFileの場合、コールバックルーチンは指定できず、hEventというイベントハンドルを指定する。プログラムは、WaitForMultipleObjects APIなどにこのイベントハンドルを与えてシグナル状態かどうかでIO完了を判定する。(Win32には、POSIXの意味でのシグナルは存在しないので――バギーだと評されるエミュレートはないわけではないけど――シグナルというのは、モニターのロック状態を意味するというか、要するにWin32のシグナルなんだけど)

このReadFileによる非同期IO処理(ということにWin32のAPIの定義からは当然なる)の意味は、yamazさんのところでselect(2)について説明しているIO多重化と同じプログラミングモデルだ。

僕が、selectやpollを使ったIOについても非同期と呼ぶのは、Windowsプログラマとしての観点からだったのだな、と思い出した次第。

#あと、POSIXのselectでは、最初にターミネーションしたディスクリプタが取れるように思ったけど、Win32の場合はWaitForMultipleObjects APIに与えた順となるので、完了順が 5 4 3 2 1 に配列に並んでいると最後に完了した5のハンドルが取れてとても困ることになったりする。僕はFreePeekを実装するとき、しょうがないので完了待ちに利用するハンドルを最古にIOを発行した1つに絞ってWaitForSingleObject APIを利用したなぁとか思い出した。

#世の中POSIXだけじゃなくてWin32も大きな勢力だから、まあ、どっちでもいいや。readやwriteの操作が同期されないIOをWin32では非同期(オーバーラップト、でも英語版でもasynchronousと書いてたりするわけだし)と呼び、POSIXではnon blockingと呼ぶ。重要な点は、マルチプレクサを利用するか、コールバックを利用するか、シグナルを利用するかといったプログラミングモデルのどれをどう使うとプログラミングが楽か、あるいは高速化できるか、という点だ。で、そのへんのバランスによって実装方法を決定し実装する。

あと、Win32でプログラミングをする場合には、Webサーバー限定で利用するのでも無い限りパフォーマンスを理由としてスケールさせることはそれほど無いから(例:ATM。それほどどころかスケールさせられるわけもなく)、同期を使うか非同期を使うかコールバックさせるかイベントを使うかとかは、すごく重要な問題で、どれを使ってもプログラミングできたほうが良かったりするので、当然、すごく気にする。

#そう言えばIO complation portを利用するっていう方法もあった(かつ一番効率が良いらしい(追記:ワーカスレッドのプールを使いやすいというのが理由なんじゃないかな? ReadFileExとかだと呼び出したスレッドが待ち状態にならないと呼ばれないから))。

Writing Windows NT Server Applications in MFC Using I/O Completion Ports。古い資料だが良い資料だ(9xのサポートがあるので利用できなかったような記憶が)。

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

_ yamaz [こんにちは.Windows文化はさっぱりなので,非常に興味深いです. > #世の中POSIXだけじゃなくてWin3..]

_ yamaz [あとNonBlock+多重化とNonBlock+シグナルを区別しようってのはそうなんですが,今回のAsyncIOって..]

_ arton [まあ、そういう感じを受けないでもないですが、MS自身も.NET Framework上では非同期(asynchrono..]


2006-11-23

_ ポパイのおっさん

ああ、結局、実写版ポパイは見られなかったままだ。中学生の頃、少年マガジンの巻頭グラビアに出てて、なんじゃこりゃと思ったのは覚えてる。

シェリーデュバルがオリーブオイルの役をやってるはずだが、なんでこんなわけのわからんものを巻頭に載せるんだ? と大きく疑問を感じたが、世界中の人達がみんなでそう思ったことだろう。

しかも、それとは全然別の号でも記事のほうで淀川長治がボウイとキーチを取り上げてたし、もしかするとナッシュビルだって取り上げてたかも知れない。そのころは、唯一のアメリカ人の映画作家だったということだ。

ボウイ&キーチ [DVD](エドワード・アンダーソン)

ナッシュビルはたぶん、中学の頃、一人で映画を見に行くようになって、全線座あたりで見たような気がする。なんじゃいと思ったはずなのに割とおもしろかったのも覚えてる。

だけど実際のところ、後になって三人の女(観光旅行でニューヨークへ行ったときに、どっかの美術館(カーネギーホールじゃないよな、多分。映画館ではなく特別上映だったことは覚えているのだが、会場はまったく記憶にない)で見た)を見た頃から、見かけなくなった。プールの底で絵を描く女が、バラードの短編みたいだなと思ったのが印象的で、シェリーデュバルが車に乗るたびにコートをドアに挟んでいるのは後から思い出して気付いた程度だ。だから見かけなくなっても特に気にはしてない。でも、3シーンほど鮮明に覚えているから映画作家なのは間違いはないだろう。

つまり、そんなには好きではなかったのだ。

ボウイとキーチより、彼らは夜生きる(ニコラスレイ)のほうがもっと好きだ。

ナッシュビルより、トラブルインマインド(アランルドルフ)のほうが好だ。

ザプレイヤーより、ボブロバーツ(ティムロビンス)のほうが好きだ。

師匠と弟子の間に挟まれて、でもそう考えると映画史的には重要な人物である(というか、あの弟子たちはおもしろい映画を撮るのにそんなに評価は高くないような)。

#なんか最近、立て続けに訃報エントリを書いてるな。

アランルドルフはいっぱいあってな。でも4作目あたりで失速したような気もする(双子の運命を描いた映画)。

モダーンズ [DVD](このあたりでうんざりしてきた記憶がある。師匠の息の長さに比べて……というよりも師匠の高評価低収入――だと思う――を見て売れ線路線の重要さを知ったばかりに、ということなのかも知れないが)

坂本龍一がラベルに乗り移られたかの如く時代に合った曲を提供してたように記憶しているけど違ったかな?追記:マーク・アイシャムが正しいそうです。

_ 教科書そのもの

教科書になるということなんじゃないか? (ノートにもなるよな) 絵本にもなる。アフリカとかアジアの山の中だの砂漠の中だのに本屋があるとでも? そもそも本を買えるとでも? 本の重さと物流コストとかは? と不思議になる。それにしても子供が毎年小学校から持ってくる教科書の量にはびっくりするが、こんなことが可能な国とそうじゃない国はあるだろう。日本の豊かさを実感するときでもある。これだけの量を全国の小学生に配布しているのだ。すごいことだ。

書物に囲まれるというのは豊かさの象徴だろう。僕の小さな恋人の少年は本を読みたいけど本が買えない。アジアの映画で家の中のシーンが出てきて書物が並んでいた試しがない(クーリャン街ではエンジェルはたった一冊の戦争と平和をぼろぼろになるまで読んでいる。でも大佐の息子の家にはでっかな書棚がある。イラン映画で見かけた本は子供が手にする教科書だけだ。それでイランは先進国に近いのだなと思ったり。アゼルバジャンは内戦中なので本が無い、山の燠火はアルプスの山の中で暮らす家族の話だ。月に1度荷物が届く。本が入っていると子供は大喜びだ)。一方、フランス映画なら、ギャングものでもない限り(ギャングものではないが僕の小さな恋人もそうだが)、家の中には書棚がある。大人はわかってくれないですら、本棚を持ちバルザックを読んでいる。

_ 予定調和ではない

結論としては,できませんでした \(^o^)/

だからプログラミングはおもしろいんだよん。

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

Before...

_ マル季 [モダーンズ、大好きです。DVD買いました。 音楽は坂本じゃなくて、マーク・アイシャム。 「聞かせてよ、愛の言葉を」と..]

_ arton [あれ、そうなんですか。じゃあ、僕の勘違いか記憶違いみたいですね。でも「聞かせてよ、愛の言葉を」とは思えないような(ア..]

_ arton [ジョンローンつながりでラストエンペラーとごっちゃになってるのかも。]


2006-11-24

_ インナークラスのパーシャルクラス化

たくさんストラテジを抱え込むクラスを作ってるのだが、自分を操作させたいし、独立したエンティティってわけでもないからインナークラスとして実装する。

で、各インナークラスがたかだか40行としても5クラス作れば200行、エンクロージングクラス側にはメソッドが200行程度あれば、あっというまに400行。

Javaの1ファイルで400行というと、なんかどでかいなぁ、という感じがする。

では、インナークラスを外に出せるかっていうと、メソッドのアクセス設定が……どっちにしてもパッケージプライベートだから変わらないけど、やはり気分はちょっと違う(たとえば白血球は、移動する(人間の血管の中の場所)ってな具合にエンクロージングしている人間というオブジェクトは意識する必要はないはず。単に血管の中を移動するで十分だ)。ってわけで、C#みたく

partial class Enclosing {
    class Inner1 implements Strategy {
        ...
    }
    class Inner2 implements Strategy  {
        ...
    }
    ...
}
みたくファイルを分離できるといいなぁ、とか思った。無理やりやるとすれば、
class DerivedEnclosing extends Enclosing {
    class Inner1 implements Strategy {
        ...
    }
    class Inner2 implements Strategy  {
        ...
    }
    ...
}
とすれば、ファイルは分離できるけど、これはあまりに方便が過ぎて気分が悪い。

_ 明日へのチケット

あー、実に満足した。

オルミは、現在進行形の中で見たり聴いたりするものに反応して、あり得たかも知れない過去を見る爺さんの話。アジア人の後ろの頭からピアノを弾いていると(暗いから窓の中は見えないと語っているから想像上の)少女とか、もらった名刺からそのもらうシチュエーションとか。

でもテロ対策部隊だか多国籍軍だかの隊長の野蛮な行動で現実に戻り、ミルクを差し出す。

新聞を細かく切るおっさん、ショパンを振るあんちゃん、ミルクを欲しがる子供(赤ん坊なのか?)、物乞いする負傷兵、でっかなラップトップ、孫が行くなと渡したコイン。

豊かな映画話法。

で、列車がいなかに着いたとこからキアロスタミ。

傍若無人な太ったレディとフィリッポフロッポ。トイレの前でポップスを聞く女の子。幼馴染の歯医者。公園で子供をかくれんぼうさせて捜さない。

トイレで入れ替わる男の携帯電話は、実際にはレディのもの。

過去の話。どこまでが事実か。

入れ替わる女の子。黒くてでかい目。かっこうはカジュアルだけど顔がゴス。矯正のワイアの交換に幼馴染の歯医者。5年前くらい、今は14。フィリッポは25歳と途中の会話。

コーヒーを注文に行き、兵役義務と去年亡くなった将軍の妻という話。

途中から乗り込む2人の男。席を変わらない。車掌が個室をくれる。着替えを手伝う、あとをつけるゴス。左へ飛び出すフィリッポ、後を追うレディ。走る取的の恐怖。トイレに最初に目をつけた美人、あら失礼。最後尾。連結している別車両。裸で着替える運転士。携帯を間違えた男に荷物を運ばせる。

すべてが虚構じみていて、実際に虚構というように撮っていて、位置も時間もまっすぐ進むが、地に足が着かないのは列車は走り続けているから。

出てくる人間はすべてが変。

で、ミルクを隊長にこぼされた家族を追ってケンローチ。

セルティとか書いたシャツの3人組。スーパーの店員。休暇を取ってローマへサッカーを見に来た。アルバニアから来た子供へチケットを見せる。

サンドウィッチに鶏肉がなくなったので、デブが子供へ残りをやる。

席へ戻るとサンドウィッチを家族で分け合っているのが目に入る。わけてやる。隣の席の女の子の集団。ローマで泊めてくれとか。ギブスへ電話番号を書く。

車掌が来る。マジメのチケットが無い。罰金を含めて62ユーロ。プールした金を出そうとするとデブの靴に化けている。怒る。

途中で降りる女の子の集団。出迎えに来てる男集団と抱き合う。窓からブーイング。

あと40ユーロ足りない。デブへそくりを靴の中から出す。20ユーロ。臭さに耐えかねてノッポ、脱いだ靴を窓から投げ捨てる。皮靴を履け。

ノッポが小僧を疑う。それはないと言い張るマジメ。結局、小僧を問い詰める。姉が出てくる。やはり盗んでいた。物語るアルバニアからの苦労。おやじはボートで単身ローマ。トラックで連れて行かれた場所はローマじゃなく、母親の指輪を売ってお金を作ったがチケットは3枚しか買えなかった。身につまされるマジメとデブ。冷淡なノッポ。取り返す。

最後の最後で、マジメも切符を返せないことを悟る。家族へ渡せないことを告げに行く。家族を見ていたノッポ、突然、尻ポケットからチケットを出す。

ローマへ着く。降りるフィリッポ。

車掌につかまっているノッポ。懇願するデブとマジメ。

水を飲む。警官が間違ったホーム(1番に着いたのに12番)にいることを知り、困る車掌。一瞬の隙をついて逃げる。

ゲームだ。駅にいたサッカー集団が鉄道警官をブロック。駅の外に出る。サッカー万歳。(デブはちゃんと皮靴履いてたかな)

濃密なオルミ、異様で圧倒的なキアロスタミ、誠実なローチ。おもしろい組み合わせだ。比較的退屈、一瞬たりとも気を抜けない、普通に楽しいと言っても良さそうだ。

たとえば80年代にシベリア鉄道(東ヨーロッパ鉄道でもいいや)だったら、タルコフスキー、ゲルマン、カネフスキーとかこの順番で(あるいは、ゲルマン、ソクロフ、カネフスキーの順番で)。

ヌーベルバーグだったら、ロメール、ゴダール、トリュフォーの順番。今だったらカラックス(ミレールでもいいか)、デプレシャン、ドワイヤン(リモザンでもいいや)の順。

ドイツの3人組なら、ヘルツォーク、ジーバーバーグ、ファスビンダーの順。というか、ファスビンダーは少しも誠実じゃないが。それにオルミに失礼だ。退屈なのはテンポの問題で、映画は美しい(ファサードから窓の向こうへ、突然鼻歌がピアノに変わる)。

日活アクションだったら中平康、鈴木清純、舛田利雄の順番。

ハリウッドだったら、、オルドリッチ、ニコラスレイ、ロージーといった感じだな。

_ FOSSとは限らんだろうけど

FOSSプログラマを統率する7つのヒント

まあ、実感としてもそんなもんかな。おもしろい。


2006-11-25

_ XPマシンの調子が悪い

どう悪いかというと、突然、←が押しっぱなし状態となる。

キー入力はほとんど不可能(ダイアログのテキストボックスとかだと逆に綴って入れられるけど)。マウスクリックでフォーカスが当たるとさあ大変。Firefoxでタブを強くクリックしてフォーカスが移動するとトランプをパラパラシャッフルしてるみたいに、順番に最左端のタブまで戻っていく。当然、スタートメニューというか、メニュー系は全滅。ドロップダウンリストは最初のアイテム以外選択できない。

キーボードはREALFORCEで、マウスはロジテックのレーザーマウス(MX610)でどちらもUSB。

思い当たる節が3個。

・ELECOMのUSBパソコン自動切替機を導入した(でも安定して2か月くらいは動いてたけど)

・ロジクールのSetPoint(これの導入も比較的最近。上のUSB切替機を導入したらもともと使っていたPS2-USBマウスがうまく動かないことがあってしばらくしてから買った。でも、昨日バージョンアップしたりしてるからソフトウェアとしては落ち着き感はないわけではない。

・IME2700 くさいよ、こいつは。

で、環境としてCPUが2個。(スリープの復帰時にロジクールのKHALMNPR.EXEというのが100%張り付きの刑になることがあるけど、おそらくこのあたりにバグがあるんじゃないかとか。ただし上で書いたバージョンアップ後は発生してない。というか、CoreDuo時代なんだからスレッドのレースコンディションは発生前提でプログラム作ってほすい)

切替機で別のマシンに切り替えると全然元気なので、キーボードやマウスが←を送りまくっているというわけではなさそうだ。USBケーブルの抜き差しもしているけど、そんなんじゃ治らない。スリープさせて復帰とかでもだめ。どこかに←送信プログラムが動いているとしか思えない(と考えると、SetPointが一番臭いのだが、IME2700インストール後だし、っていうか相性とか? IME2700は……(ついに覚えた)というわけで最初アンインストールしようとしたけど方法がわからなくて気づいたらそれなりに賢いし辞書もそこそこ充実しているので気にならなくなってきたんだが)。なお、言語切り替えツールバーでIME2002に切り替えるとかでは治らない。やっぱり削除するべきなんだろうか? (せっかく学習させたのになぁともったいないお化けが悪いのだろうか)

Logicool レーザーコードレスマウス ブラック [MX-610BK]

僕の掌にちょうど良いのでロジクールのこの絞り状マウスは好きで、これも悪くない(もうちょっと重いほうがもっと良いかも)。電池も少なくても1月以上は余裕でもっている。

しかし、今日アマゾン見たらぼろくその評があるな。ポインタは飛ばないし、電池のすぐは人によって評価基準が違いそうだからおいておくとして、でも、今直面している問題とはあまり関係なさそうだ(KHALMNPRが張り付くと確かにCPU1個だとマウス飛びはおきるかも知れない)。

#ふと気付いたが、ホイールの左右移動がくさいな(全然使わないから存在自体を忘れてた)。なんかの拍子に入りっぱなしになったとドライバーが勘違いするんじゃないか? 今度起きたら右に倒してみよう。もしそうなら、IME2700はまったく白かったことになる。というか、それっぽいなぁ。

追記:当たり。再現したのでホイールを右に倒したり左に倒したりしばらくやってたら収まった。IME2700は潔白のようだ。


2006-11-26

_ IE6が標準にしたがっている点

XMLHttpRequestを使うページのテストをしている。

1つのページでイベント受信用と送信用で2つ使う。受信用で使うってことはつまり、Cometというわけだが。

問題は、Cometのパフォーマンスを見たくて、「新規ウィンドウ」を開くところから始まった。イベントは受信できるのに送信できない。タイミングによっては送信できるけど受信はできない。なにがなにやら。あるいは完全にハングしてプロセスを殺すしか手段がなくなったりもする。

で、いろいろ試行錯誤してるうちに、どうもインスタンスが同時に2つしか作れないんじゃないかと気づいた。

で検索すると Ajax-Development-Gotchasなんてページが見つかった。

IEは長年に渡る標準を無視する伝統を打破してRFC2616に従ったので2インスタンスしか同時に実行しないと書いている。しかもそれ以上の作成要求はキューする――これはハングしたように見えることと合致する。2つのページで同時に要求出すとデッドロックするからだ。ってことは、予測通りみたいだな。

RFC2616

これか! (8.1.4 Practical Considerations)

Clients that use persistent connections SHOULD limit the number of

simultaneous connections that they maintain to a given server. A

single-user client SHOULD NOT maintain more than 2 connections with

any server or proxy. A proxy SHOULD use up to 2*N connections to

another server or proxy, where N is the number of simultaneously

active users. These guidelines are intended to improve HTTP response

times and avoid congestion.

まあ、標準に従うことは良いことだ。

ということから結論としては、Cometページは1ホストあたり最大2ページ。Ajaxを利用して送信もするなら1ページのみ(ロングポール用とAjax用)、それ以上のページを新規作成されると最悪デッドロックする。

注)FirefoxはConnetion: closeを送ってくる。Ajaxを多用すると細かなコネクションの生成/廃棄が山となる。IEは、Connection: Keep-Aliveだけど、サーバでちゃんと意識しないと細切れ返送だけに生成/廃棄がやはり山となる。

確か、RFCに上記の制限が必要となった理由のひとつにコネクション生成/廃棄(生成は処理的なオーバーヘッド――まあいろいろ理由はあるけど例えばある種の攻撃回避のための動作とか、廃棄の場合はCLOSE_WAITの期間の利用不可ソケットが問題となったはず)が問題となったのだと思う(ネスケがやみくもにimgを表示するためにサーバーに接続してきたあたり。確か4コネクション使ってたような記憶があるけど違うかも)が、AjaxはOKなのか? とちょっと疑問を持ったり。最近のサーバーは高速だからOKならば、上記のRFCの制限についてもちょっと緩めて欲しいなとも思ったり。

追記:『WinInetの設定を変える』。HTTP/1.0の場合は4か……

更に追記:試した。4にしたら2ページで動く。テスト時の緊急避難的設定だな(と2に戻すというか、エントリを削除するのが筋袋かも)

_ 上の結論

危険な作業っぽいからタスク化しとく。
# change_httpcon.rake
require 'win32ole'
 
CONN_PER_SERVER = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\MaxConnectionsPerServer'
WSH = WIN32OLE.new('WScript.Shell')
 
task :set_more do
  WSH.RegWrite CONN_PER_SERVER, 8, 'REG_DWORD'
  puts WSH.RegRead(CONN_PER_SERVER)
end
 
task :reset do
  begin
    WSH.RegDelete CONN_PER_SERVER
    puts WSH.RegRead(CONN_PER_SERVER)
  rescue
    puts $!.message
  end
end
実行結果(レジストリ見なきゃ意味ないけど)
C:\home\test>rake -f change_httpcon.rake set_more
(in C:/home/test)
8
 
C:\home\test>rake -f change_httpcon.rake reset
(in C:/home/test)
RegRead
    OLE error code:80070002 in WshShell.RegRead
      レジストリ キー "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\MaxConnectionsPerServer" を開いて読み取ることができません。
    HRESULT error code:0x80020009
      例外が発生しました。
本日のツッコミ(全3件) [ツッコミを入れる]

_ omo [一部の人は仕方なくひとつの接続上でプロトコルを決めて多重化してるらしいです: - http://cometd.com..]

_ arton [これはおもしろいですね。どうもありがとうございます。 もっと見てみたいけどajaxian.comというのが今は落ちて..]

_ arton [今見たらajaxian.comは動いてた。]


2006-11-27

_ るびま17号

http://jp.rubyist.net/magazine/?0017

とりあえず、あおきさんのインタビューだけ読んだ。

_ メモ:long-polling

onunloadで……何すりゃいいんだ? でもしないと特攻野郎行った切りだし、というかサーバーが定期的に空を返せば良いのか。そりゃそうか。

追記:onunload="polling.transport.abort();" でうまく行くかと思ったが(prototype.jsのAjax.Requestを利用しているのでtransportというのが入る)、なんの役にも立たなかったがそういうもんなのかなぁ(何か間違えてるような気もするような)


2006-11-28

_ アメリカ人の贈り物

ある写真を見て、突然、アメリカンシロヒトリって言葉が脳裏に浮かんだ(フラッシュバック的でかこいい)。幼児の頃、近所の農家の人からものすごく怖いものだということを教えられたわけだが、それが蛾の名前とまでは教えてくれてなかったもので、白い人取り(人さらいの一種と想像してる)をまるでぼのぼののように勝手に想像して(異人さんに連れられて行ってしまった歌の影響とかもありそうだ。追記:小川未明の黒い人と赤い橇の印象から白い人というものを何か想像したという面もあるはずだと思い出した)恐怖で震えあがったわけであるが、いつのまにかそれが蛾の名前だということがわかってしまって、きれいさっぱり忘れていた。

あの国は本当にいろんなものを世の中に送り込むんだよなぁとか、イラクとかアフガニスタンのことを脈絡なく考えてみたり。

ひとつには、つい先日、東京名物で中央線からも見えた300年の椿の大木が毒蛾によって枯れ果てたっていうようなことが書いてある記念碑を、とあるお稲荷で読んだというのもあるかも。どんな毒蛾とまでは書いてなかったので、それが関係あるかどうかはわからないけど。

_ 麦の穂をゆらす風

で、ケンローチはやっぱり好きだなぁとか思いながら見に行った。日曜の初回だが結構混んでいて一体何が起きたんだと疑問に感じたり。で、たとえばルシネマとかシャンテとかにグレードアップされるとがらんがらんで、結局誰からも輸入されなくなるというドワイヤンみたいなことにならないと良いねとか話し合ったり。

ケンローチは見ている限り、脚本をリアルに丁寧に描くだけの作家と感じるのだが、対象との距離の取り方(心理的な話ではなく、カメラと撮影対象の間の取り方の話)に特異性があるように思う。そこにライトの使い方やオルナメントというかその場に置かれているものによって生まれるものが加わって、独特のいやな感じ(主人公はたいてい嫌な状況に置かれている。たとえば国有鉄道の民営化によるリストラとか、自分を愛してくれない親からの愛を獲得するために犯罪に手をそめるとか、祖国を取り戻すとか)と、ささやかに時々感じられる幸福とかが映画として生まれてくる。

たとえば、この映画だと休戦協定のパーティでざわざわしているところから一人席を離れて恋人と見つめあうところで、薄暗い室内で白い首の長さと曲線が妙に浮かび上がるところとか。安定した構図なのに不安定なのはライトと距離にあるように思える。

それから、見えているのに手が届かないもどかしさの描写がうまい。どの映画にも必ず、手を届けて何かすべきなのにそれができないというテーマが映画として作られている。それが映画以外のなにものでもなく表現されているのは、これも距離の取り方にありそうだ。この映画だともっとも明確なのは、恋人の家がブラックアンドタンズに襲われて燃やされるシーンであったり、子供を診察するところだったり、きっかけになる駅での暴行のシーンだったりするのだが、目の前にあるのに手が届かないという構造はそのまま映画そのものなので、それを正しく表現できるということはまさに映画作家だということなんだろう(ここでカラビニエでの映画と絵葉書とかを想起する)。

物語としては、典型的な自由と平等のせめぎ合いで、確かにフランス革命からえんえんとどっちを選ぶかで殺し合って来たのを1920年代にも繰り返してたんだな(というか、1910年代に平等がロシアでは勝ったわけだが、その後も殺しまくることになったわけで)と、問題の難しさに嫌な気持ちにはなる。共和国軍というのはそういうことであったのかと納得したり。

アイルランドはおいておいて、平等は赤だが、自由には白と黒があるんだが、黒が出てくることはないなぁ(ユーゴはちょっと黒かったのだが、おそらく白が発達してなかったからだろう)とか。でも黒がどうなるのかはまだろくに実験されてないわけだから実際のところどう動くのかには興味がある。

で、歴史が示していることは、成功パターンはまずは白を回して富を蓄積してからちょっぴり赤っぽくそれを再分配すると、そこそこうまくいくということで、問題はあまりの富の少なさに性急に赤をめざすともともと分配するものさえないので食い合いになるということのような。

という後付けで振り返れば、やはりアイルランドの白い決着は正しかったのだろう。物言わぬ大多数はそれに気づいている(というか、無関心は支持のうち)。

しかし、そこには栄養失調で子供が倒れているという現状もあるわけで、赤く考えてしまうのは現場にいればいるほど、無理もなかろうと思える。目の前で死人が出ているのに30年後を見据えて斬って捨てるのは難しいだろうな。それは訓練なんだろうか?

したがって、結論は出しようがない問いかけであり(というか、結論は出ているのだが、そこを300万人死んでも1億が助かれば良いみたいに、公言することはなかなか難しいだろう)いやな気分のまま終わることになる。

ケンローチはこの映画を撮ったことでいろいろ攻撃されたそうだ。右翼や排外主義者も多そうな国だからそれは想像できる。日本で言えば、朝鮮の抗日運動から南北戦争までを描くようなもんだ。敵を敵として描写すればいやおうなく敵として映画になる。でも実際には敵はイングランドではなく他国による支配という抽象的な存在で(その後は富の創出と分配方法に移るわけだが)、それは第3者には当然のこととして見えるのだが、当事国の人間でかつ見たとおりにしか受け取ることができないばかにはそうは見えないんだろうな、とか。

_ ハッカーズ

日本のハッカーの数はSourceForge.jpから推測するに3000から5000人いるというような発表がGPLv3カンファレンスであったらしい。

結構、いっぱいいるもんだ。なんとなく明るい気分。

とかTalpa memorandum読みながら書いてたわけだが、赤白黒問題ってここにもあるわけだよなぁとか。

たぶん、ストールマンは黒だけど白い白い、それはたぶん、世の中にはまだまだコードが足りないと考えてるんじゃなかろうか。だからまず自由が来る。足りなかったどころか没収されるところを目撃したからだ。

一方、もう十分に足りてると感じてる連中もいる。だからみんなに投げ与える。別に囲い込んでもいいぜ、必要になったらまた作るからな。

でも、一般論としてストールマンは赤だと思われてる。オープンの嚆矢者は自分たちを白だと言って銃を振りまわして見せたり。

でも、実態としては逆だ。

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

Before...

_ arton [そう言えば赤い靴を履いているのはどんな子だと思います? 今思い出したけどそこにも衝撃の幼児体験(世代固有かも)が! ..]

_ rubyco [赤い靴…]

_ arton [あれはrubycoさんだったのかな。]


2006-11-29

_ Cometの続き

今頃になって、足跡ライブの仕組みを読んだりして。で、ホスト名をロングポーリング側と送信側で分離するというあたりで2コネクション制限に触れていることを知った。

てのとは別にomoさんに教えてもらったBayeuxを眺めてJuggernautみたい(というか、Juggernautが影響下にあるのかも知れないけど)だなと思ったり。

で、どうすれば、同じホストに対するページ(windowオブジェクトということになるのかな)間で他のページがすでにホストへポーリング出してることを知ることができるのかを調べるとこで停滞中。ツリー上に作れるのならルートにあたるwindowが持てば良いということはわかるんだが、クローンした場合はどうやるんだろうか。

_ COBOL

COBOLってDSLぽい。

move a to b.

add c to b.

set index to 1.

しかもカラムの美学があるし。

(あ、今、一瞬、21世紀のCOBOLerのRailerというのが脳裏をかすめたが気のせいだろう)

というかキャンペーンにもかかわらずもうすぐ2007年なのに置き換えは進まなかったってことなんですね。

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

Before...

_  [あ、ごめんなさい。フレームワーク違い、ですね。ERBはまったく逆を目指しています。さっきの「かっこいいフレームワーク..]

_ arton [あ、なるほど。別の言い方をすると5人は救えないけど500人は救える=かっこいいということですね。]

_ arton [(でも5人を救えないのなら、500人を救っているというのも嘘100倍だというだけなのではないかという疑問)]


2006-11-30

_ ASP.NETでJavaScript

いろいろ事情があって、onsubmitの時にバリデーションがOKだったらプログレスバーみたいなのを実装したくなったとする。なかなか結果が返ってこない時に動いているよを嘘でも表示する必要があるのだ。

で、MSDN読むんだけどクライアントスクリプトによるonsubmitへの介入方法がわからん。ButtonクラスのOnClientClickってのはあるのでそれにfoo();とか設定してみると、

onclick="foo();return asp_net_generated_bar_baz_bang();"

みたいになる。いや、おれはバリデーションの結果の動作を知りたいのだよ。で、生成されたHTMLをしげしげと眺めるとformのonsubmitが設定されているのがわかる。こいつが真を返した時にfoo()すりゃいいのだな。foo()は、おおざっぱには

var pos = 10;
var bias = 3;
function foo() {
    setInterval(function() {
        document.getElementById("progressBarNoTsumori").style.width = pos + 'px';
        pos += bias;
        if (pos > MAX_WIDTH) {
            bias = -3;
            pos = MAX_WIDTH;
        } else if (pos < 10) {
            bias = 3;
            pos = 10;
        }
    }, 500);
}

みたいなやつ。div要素を伸び縮みさせてプログレスバー代わりにとりあえずしとけみたいなハック(やっつけ仕事)。

さらにしげしげとHTMLを眺めてbodyのonloadとonunloadが未定義なのに気づいた。

function setupProgressbar()  {
    var org = document.getElementById('form').onsubmit;
    document.getElementById('form').onsubmit = function() {
        if (org()) {
            foo();
            return true;
        }
        return false;
    };
}
<body onload="setupProgressbar();" onunload="インターバルのクリア">

で、JavaScriptでは関数はファーストクラスオブジェクトだというのは、こういうことなのだな、と感じるのであった。

もちろんASP.NETならではのまっとうな方法もあると思うので、方法のご指摘は歓迎です。

_ Monoミーティング

おもしろかった。感想を書くより、ちょっとMonoをまじめに見ることにしようと思った。あとMVMのお話とかOSGIとか、知らないおもしろい世界がいろいろあるのだなぁとか。

_ COBOLのWeb DSL

知識が仕事で使ったCOBOL 74(73かも、と書いた瞬間にLPI-COBOLは8xだったと思い出したけど7xスタイルで書いたのだろう)で止まってるしすっかり忘れてしまったし思い出す気もないので適当なのだが、COBOLのWebアプリケーションってこうなってるんだよね?
html-section.
  01 html.
   03 body.
     05 table.
       07 TR occurs 30 times index by item-index.
         11 td-name      escaped X(10).
         11 td-price     pic  ZZZZZZZ9.
         11 td-quantity  pic  ZZZZZZZ9.
...
set-item.
   set item-index to 1.
   move record-name to td-name.
   move record-price to td-price.
   move record-quantity to td-quantity.
   if reocrd is not eof then
       set item-index up to 1
       set record-index up to 1
       goto set-item
   end.
exit-set-item.
...

(最初、全部大文字で書いたがあまりに読みにくいので全部小文字に変えてみたが、するとおもむきがなくなってしまった。微妙な言語であるな)

_ 言外の言

COBOLとRails』で、前田さんが(たぶん)書かれているが、なんでもできるプログラミング言語の中に簡素化して書くための仕組みが埋め込まれているものと、簡素化して書くことしかできないものの差はありますね(もちろん、callするものはCなどで書けるので「しかできない」は正しくないし、頑張ればできなくもないけど――bitで別の前田さんがCOBOLで再帰を書いたというようなことをコラムで書いていたのを読んだ覚えがある、でも全然やりかたはわからなかった、index付けされたレコードをスタックがわりに使ってperformするときに回すのかなぁ――想定外な使い方には無理がある)。

前者は公園の中の砂場とか砂漠の中のオアシスで外へ出るのも内へ入るもその人の選択にかかっているけど、後者は高い塀で囲まれた砂場(しかも猫が住んでいるのでへたに掘るとこわい)とか人工芝で覆われた中庭(建物への入り口には鍵がかかっていて一応ワイヤーハンガーが置いてある)で、同じことをやるのでも、使っていいよと言われて使うのと、これだけ使えと言われて使うのは、そりゃ違うよな、ということでしょう。そこに差がある。

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

_ shugo [そうそう、Railsでwhyのsandbox使うようになって…なんてことはありそうにないですよね。]

_ arton [それは辛い]


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|

ジェズイットを見習え