トップ 最新 追記

日々の破片

著作一覧

2008-11-01

_ にんにくの匂い

総武線に乗っていたら中野で革のジャンパーを着た疲れた雰囲気の中年未満若者超えという雰囲気のおっさんが乗り込んできて隣に腰かけた。

で、この男がにんにく臭いのだが、そこで不思議なことに気づいた。

おれは、どうもにんにくの匂いそのものは嫌いではないようだ。そういえばキムチも食うし、ラーメン屋に行けば壺が空になるくらいすりおろしたにんにくを入れてしまうくらいだ。嘘だろうな。

にもかかわらず、どうも不快だ。

可能性はいくつかある。

1. 属人性。小汚いおっさんから臭うから臭く感じる

2. 人間フィルター。にんにくを人間が食った結果の匂いは臭いのかも。おならじゃないけど、人間フィルターはたいてい物事を悪いほうへ作用させるようだし。

3. 実はにんにくの匂いは嫌い

……3.ってこたないだろうなぁ。

ってことは、1か2だ。

でもないか。

4. おれが食べるにんにくは良い香りのばかり。隣のおっさんが食べてきたにんにくは臭いにんにく。

野菜も生き物だから個体差ってのはあるだろうし、産地とか調理法でも変わってくる可能性が高い。

とか、考えていたら高円寺で男は降りて行った。


2008-11-02

_ 突然アーカイブというかS式

手元にCQ出版社のアーカイブ(インターフェイス別冊)ってのがそろっていて、こいつは出版年が昭和61年(というか何年なんだっけ? 1986年か)だから、過去の遺物だ。

で、これの1巻と2巻にまたがって、稲田信幸さんという理研の人が簡単(つまりダイナミックバインディング)なLisp処理系のリストと解説を書かれている。

この記事は相当に思い出深い気がする。

まず本を見ながらひたすら打ち込むというタイピングの練習になった。

次にいろいろな言い回し(carとかatomとかは置いておいて)、たとえばinternとかsubrとかを知った。

longjmp/setjmpの使い方ってのもこれだな。

ハッシュテーブルの実装もこれだ。

で、それはいいのだが、セルのポインタが16ビットなもんで、最初に

#define SEX short /* for 16 bit micro computer */

として、そのあとは、なんでもかんでもSEXが出まくる。ほぼすべての関数の戻り値はSEXだし、相当多数の関数はいきなり

SEX fn;

となっている。funじゃないけどな。

で、なぜかそれがS-EXPRESSIONの意味だとわからなかったのだ、最初のうち。なんでわからなかったのかが、今になると不思議なのだが、とにかくその時は、このおっさんは何を考えてSEXを連呼しているのかと不思議に思ったものだ。

うーん、Lispは大人の世界ですなぁ。

(RubyはVALUEだからこういう疑問は持ち得ないだろうからつまらないね)

というか、ポインタがshortというのは今になってみると信じがたいものがあるな。

_ 絵日記プラグインのテスト


2008-11-03

_ ネットワークバイトオーダーがビッグエンディアンなのはなぜだろう

RFC791の次の記述が理由っぽい。
Whenever an octet represents a numeric quantity the left most bit in the
diagram is the high order or most significant bit.  That is, the bit
labeled 0 is the most significant bit.  For example, the following
diagram represents the value 170 (decimal).
 
                                    
                            0 1 2 3 4 5 6 7 
                           +-+-+-+-+-+-+-+-+
                           |1 0 1 0 1 0 1 0|
                           +-+-+-+-+-+-+-+-+
 
                          Significance of Bits
 
                               Figure 11.
 
Similarly, whenever a multi-octet field represents a numeric quantity
the left most bit of the whole field is the most significant bit.  When
a multi-octet quantity is transmitted the most significant octet is
transmitted first.
オクテット表記では最も左をMSB(または最上位桁)とし、「同様に」マルチバイトの場合も各オクテットは同じビット表記をすることになるので一番左をMSBとするということのようだ。
ではなぜ一番左をMSB(または最上位桁)とするかといえば、最上位を左に書きたいからではないかと思うのだが。
いずれにしろ、実在するなんらかのCPUのことは意識もしていないようだな。
本日のツッコミ(全2件) [ツッコミを入れる]

_ soda [多バイトの長〜いアドレス+経路集約を考えると、big endian の方がルータのハードウェア実装的に微妙に有利だと..]

_ arton [なるほど。最初の1オクテットを受信した時点で物理的な接続先の切り替え処理を行って……のような動きをするのなら、有利そ..]


2008-11-04

_ 地震のためのピアノ調律師

イメージフォーラムで、クエイ兄弟のピアノチューナー・オブ・アースクェイクを観に行く。

なんの予備知識もなく行ったら(これを書いていて調べたら結構な情報量のサイトを見つける)、ポスターにテリーギリアムが製作総指揮の名前で出ていて、いやな予感がした。で、まあその予感はそれなりに外れてもいなかったのだが、でも、クエイ兄弟はクエイ兄弟だった。

椅子に美しい女性が腰掛け、膝にゴムを通して暇つぶしをしながら、ドアの向こうにアルフォンゾ(名前はでたらめ)がいるとか呟く。カエルの足に電気を通しているらしい、死んだというような呟き。この2つが交互。

楽屋でそのアルフォンゾと抱擁していると百合の花束が届き、あなたをみつめているというような手紙。捨てさせる。

そのアルフォンゾは指揮者のようだが、二人の結婚披露ガラが開かれる。2階から覗く男。歌を手に入れるといいながら百合。目隠しをした指揮者が子供に囲まれて席へつく。

というように始まる。なぜかソプラノではない。リュートかな。

歌手は舞台で息を引き取り、2階席の男が従者に運ばせる。

奇岩城の見事なセット。海。人工的な光。

モレルの発明 (フィクションの楽しみ)(アドルフォ ビオイ=カサーレス)

魂を吹き込むためには調律が必要だ。

調律師が呼ばれる。上陸すると侍女が案内する。壁画。魔法使いと女性、地割れ、その脇に男(ドロス博士)。地震のための調律師だということが告げられる。

森で木を斬るクエイ人形。

崖の上のベンチに腰かける歌手。歌手のシーンではすべてフィルタがかかっている。記憶の曖昧さ。

アリの上から降り注ぐ胞子。脳の中で育ち、アリは樹上へ上り、あごで枝を噛み締め、そこで頭の中の嚢胞が破裂する。地面を歩くアリへ胞子が降り注ぐ。

オートマータの調律。繊細の機械。全部で6個。

ノコギリの音で倒れる調律師。魔術師にアリだと告げられる。木こり人形が自分の足を切り、鮮血が泉を赤く染める。

調律できる機械は止めることもできる。笑い続けるきこりの脇の穴に何かすると、しばらくして笑いが止まる。新月の光が一点に集中したときに扉を開ける。窓に吊るしたコインを離し、タイマーを起動する。

崖を登ってくる夜会服の人々。靴を手に。縫いだ靴のモチーフは全編に登場。

ガラの再現。召使いたちが機械的に動く。調律師が見かけた風景はこの演奏会の練習だったことがわかる。侍女は一人別の場所にいる。

舞台へ駆け寄る指揮者。それに向かい合う指揮者。中から調律師。鏡。

地震。

崖の上のベンチでの永遠の繰り返し(6番目の楽器)。小舟で海を渡りそれを眺める侍女。

ー手が漕ぐ船。(多分、4番目の楽器)

−埋め込まれた顔(口が動く)1番目の楽器

2番目の楽器は筒のようだったかな。マグネット(魔術師が持ってくる)を使って中の部品を取り出す。

糸巻杖のガラスっぽい楽器。

崖からみる、遠くの洞窟の光。ポルトガルの大地震。

悪くはなく、部分的にはとても美しい。薄闇の中の向こうの光。

音は流れっぱなし。調律師の作業中の口笛。

Phantom Museums: Short Films of the Quay Brothers [DVD] [Import](-)

なぜかアメリカでは出ていたりするのだが、日本ではあまり作品を観ることができない。

予告編: ピーター16歳。裸のラリーズとかのようなノイズグループサウンズ。きれいに撮ってくれると聞いたから出演した。パゾリーニのポスター。

ウォールマートが気にするのは品質だけで作業環境や条件はどうでも良い。平均年齢15歳、18時間労働。1時間4円。納期に間に合わなければ給料は出せない。わたしは16歳、本当は14歳。

(追記)

ピアノチューナー・オブ・アースクエイクのDVDが発売されるようだ。

ピアノチューナー・オブ・アースクエイク [DVD](アミラ・カサール)


2008-11-05

_ 稚拙の知

あまりに巧みになると、特にそれが個人で完結していると、そこで行き止まるかも。

むしろちよっと足りないくらいがいい塩梅かな。


2008-11-06

_ こういうNLize

すみか Ruby

なるほどなぁ。

仁義なきRubyとかどうだろうか?

irb(main):006:0> 5/0
ZeroDivisionError: 0でチンコロしたのはオドレらか!!
    from (irb):6:in `/'
    from (irb):6
irb(main):007:0> nil = 'test'
SyntaxError: compile error
(irb):7: nil 相手に代入するバカが何処に居るかい!このボケ!

とかね。

参考:[仁義なき戦い] 好きな台詞

仁義なき戦い [DVD](菅原文太) 仁義なき戦い―美能幸三の手記より (死闘篇) (角川文庫 (4394))(飯干 晃一) 仁義なき戦い―美能幸三の手記より (決戦篇) (角川文庫 (4395))(飯干 晃一)

endがないんじゃあ、endが……

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

_ ムムリク [どうもです。いいですねえ、それ。]


2008-11-07

_ 博物館の学芸員

キュレータというのが学芸員と同じかどうかはわからないが、やっと買って読みはじめたモダンコンピューティングの歴史からは、まさにその香りがする。

モダン・コンピューティングの歴史(ポール E.セルージ)

前書きを読んでいて、あれと思い、後付けをみたら、著者のセルージはスミソニアンの人(スミソニアンアン?)だった。

遺されたものから、意図と実績、影響を探り出し、現在へ連なる線を引き、その延長にあるかも知れない未来を伺う。

そういう意思が目次からも感じられる。

どこに転換点を置くかが、分析力と認識力のみせどころ。

これはやはり持つべき本だ(20世紀の上の21世紀のために)

難点は「GNU/リナックス」という表記かなぁ。固有名詞のうち、明らかな頭語以外はカタカナというルールは合理的だと思うけど強い違和感。

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

Before...

_ arton [ムムリクさん、この本は、確かに絶対的な価格は高いですね。でも相対的にはむしろ安いかも知れませんよ(だからといってどう..]

_ きむら(K) [「ギャラリー・フェイク」なんかでの印象だと同じような気もしますが 違うことは違うみたいですね>学芸員とキュレーター ..]

_ arton [なんか、そのエントリーを読むと悲しくなってくるのは、博物館の歴史がたかだか150年に(たぶん)満たない国だからでしょ..]


2008-11-08

_ モダンコンピューティングの歴史の続き

抽象的なことはおいておいて、この本から何か所か興味深いエピソードを抜き出してみよう。

たとえば、".exe"とか".txt"とかがファイルに付いていて、しかもそれを「拡張子」とか呼ぶと、Unixプロパーなハッカーが、「ははん」と鼻にかけた音を出して、「拡張子? 何それ?」とか言う。

「拡張子ですか、これはなかなか奥が深くてですね、」と前置きしてからおもむろに本書のP.248を開いて、次の個所を朗読することになる。

ユーザーは端末で、簡単にデータブロックを作成し、修正し、保存し、呼び出すことができた。そして、データブロックを指す言葉として、すでによく知られていた「ファイル」という用語がつかわれた。ファイルは、1〜6文字で校正されたファイル名のあとに、ドット、そして3文字の拡張子がつづいた(たとえば、BASICで書かれたプログラムの典型的ファイル名は、xxxxxx.BASである)。端末でDIRとタイプすれば、ユーザーはディスクにあるすべてのファイルのディレクトリを表示することができた。また、LPTはライン・プリンタ……(後略)

「おいおい、DOSの話になんか興味はないね。それはゲイツだ」と相手は冷笑的な雰囲気を崩さない。

「え、DOSのファイル名は1〜8文字ですよ」とこちらはにこやかに答えることにしよう。

そして、おもむろに147ページに戻って、最初のところから朗読を再開する。

MITの支援を得て、DECは1972年初頭「TOPS-10」と呼ばれるシステムを開発した。

そして、さきほどは無視した言葉尻をとらえてP.149ページを指さす。「ゲイツというのは、ここに書かれていることですね」

こうした企業(引用者注:タイムシェアリングを利用してコンピュータの実行を切り売りする企業)のなかで特筆すべきなのは、1968年にシアトルで初めてPDP-10を設置したコンピューター・センター・コーポレーションやC−キューブド(☆1)である。これらの企業は、コンピューター利用時間を売るサービスが開始されると、地元の十代の若者だったビル・ゲイツに、システムのバグを見つけ削除する作業と引換えにコンピューターを自由に使える時間を提供した。C−キューブドの事業は1970年に閉じられたものの、ゲイツに双方向で利用できる対話型コンピューティングの可能性を認識させることになった(★19)。

☆1(引用者注)id:matarilloによれば「Cキューブドことコンピュータ・センター・コーポレーション」の誤訳。CCCということか。

「おや、ここに19という注がある(と言いながら、膨大な原注のページからP.439の該当箇所を探して)。このエピソードは1995年に三田出版会から翻訳された「帝王の誕生」という本の中で語られているようですね」

「ふむ」と相手は少し鼻白む。しかし、すぐに「TOPって、東芝オペレーティングなんちゃらとかじゃないのか」と無理筋を通そうとする。

「いえ、この本によると」

TOPS-10のおかげで、PDP-10を操作することは楽しみを通り越し、病みつきになった。ブランドが見た宇宙戦争ゲームをしていたコンピューターと、コンピューター・ゲームのなかでもっとも息の長かったアドベンチャー・ゲームが書かれたコンピューターがともにPDP-10(☆1)だったのは偶然の出来事ではなかったのだ。

☆1(引用者注):スティーブラッセルのスペースウォーはPDP-1(アラン・ケイによる1962年の出来事)なので、おそらく、それを別の誰かがPDP-10に移植したバージョンのことだと思う。ブランドとは、ステュアート・ブランドのこと。パーソナルコンピューティング革命のビジョンを持った理由のひとつがPDP-10ハッカーを目撃したことにおく。

「なんだって? その宇宙戦争ゲームというのは、もしかして、最初のLisp実装者が作ったあれのことかい」と、こないだファンクションクラブで教わったばかりの知識をひけらかしながら、食いついてくるのであった。

とはいうものの、この本は、主にハードウェアとマーケット(経済)動向を中心に歴史が回るため、スティーブ・ラッセルの名前は出てこない。マッカーシーはタイムシェアリングの伝道師としてだけ出てくる。LispのL、ラムダのLは出てこない。

出てこないものには、パラメトロンもある。

漢字の名前では唯一「嶋」という名字がどうもいやいやっぽくあっさりと出てくるだけだ、コフコフ。

計算機市場はマーケティングに長けただけのシャープとカシオのせいでつぶされたかのような書き方もされている。(この文脈でワングが出てくるとはね)

でも、それは何を拾い何を捨てるかの選択の問題で、この本の描く歴史では、それで良いのだと思う。

拾っているものの代表が、計算機だ。

僕は、あいにく、ドスモバだのHPのなんちゃらだのにはまったく興味を持ってこなかったので、レヴィーのハッカーズ史観(とか言い出したり)に違和感はないのだが、セルージは異議を唱える。

プログラム可能な小型計算機の登場が、いくつかの面でコンピューター技術の方向性を左右することになった。(略)これも重要な点だが、第二に(引用者注:第一はチップの集積度が上がったこと)、小型計算機、なかでもプログラム可能なポケット電卓が、個人のもつ想像力やエネルギーを解き放ったことが指摘できる。(略)だから、電卓ユーザーの5〜10%は、一般にハッカーを指すときに言われる「しわくちゃの服を着て、顔も洗わず髭もそらないボサボサ頭の人たち」ではなかった。しかし、彼らのプログラミングにたいする情熱は、鉄道模型クラブの学生らに負けず劣らず大きかった。

つまり、と面倒になって、一番重要なことを言うことになる。

コンピューターの魅力とは、プログラミングできることだ。

少なくともセルージはそれをわかっている。

モダン・コンピューティングの歴史(ポール E.セルージ)

_ 歴史クイズ

非難の矛先は、*がけっして先駆者になろうとせず、つねに別の中小企業が技術的なリスクを負うのを見届けてから、堂々と市場に分け入り、いかがわしい販売慣行によって、その座を奪い取ってしまうことに向けられた。*は、少なくとも
ここまで読んで、*に当てはまる企業名を答えよ。ヒントは続きにある。
エッカートとモークリーに比べて、電子式コンピューターの未来に気づくのが遅れた。また、*701はユニバックに比べて入出力装置の設計で劣ると見られていた。(略)
より厳密に言えば、*は技術革新の遅れを、より優れた社内の製造技術と現場のサービス力によってカバーしてきたのだ。こうした努力は販売面に顕著に現われ、いつも攻撃的であり、競争相手は不当だと感じることが多かった。しかし、実際は技術力と販売力のあいだに明確な線引きができるわけではなかった。次の二つの例から、*の強みが、販売、製造、技術革新が一体化したものだとわかるだろう。
(前掲書P.92〜93)

アンドリューセンとクラークに比べて、インターネットの未来に気づくのが遅れたとは続かないのであった。

追記:違う、全然違う。読んだとき脳裏にジャジャジャーンと出ていたのはMはMでも松下だ。「優れた社内の製造技術と現場のサービス力」

_ 電卓

そういえば、電卓と言えば(上では興味ないとか書いてたが)、こんなの持ってたなとか思い出して、電源入れたらもちろん動かないのだが、なぜかACアダプタが見つかったので動かしてみたり。

なんとも微妙な存在だなぁ。

追記:違う。全然違う。powじゃなくてfacじゃん。

CASIO AI-1000

_ 当事者の歴史

大島さんがまとめてくださったアラン・ケイの講演の抄録がおもしろい。40th Anniversary of Dynabook

(商業的な影響力がないとセルージの本には出てき難い)

でも、おそらく重要な点は同じなのではないか。

IBMやBUNCHはコンピュータを機械(道具=持つもの)として考えていた。

しかしDEC+MITあたりに源流を持つところでは、コンピュータを何か人間に取って魅力があるデバイス(延長=接続されるもの)として考えて、かつ熱中した人間がいて、それが1980年代後半からの流れにつながる。

その発見、つまりコンピュータの魅力というものは、現在ではちょっと様相が変わってきていて、自分が向き合う1台以上に接続されている無数の人たちとサービスというのになっている。

とかなんとか、ちょっと考えてみたりしたり。

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

_ ムムリク [なんだか「電子立国日本の自叙伝」を見ていたときのような面白さがむくむくとわいてきますね。「わが青春の4004」も復刻..]

_ ma2 [僕も持ってました > AI-1000 確かスーパーファミコン買いに行って売り切れだったので,カッとなって買ったのでし..]

_ arton [そりゃ、スーパーファミコンのほうがいいですねぇ。]


2008-11-09

_ 人体の不思議きのこ

上野に行ったら、女子中高生ばっかり来ていて、それはそれで不思議な光景ではあったが、新開発のきのこの展示方法って、どうも人体の不思議展のような方法らしくて、それがおもしろかった。とにかく、ヒラタケ目というのがはばをきかしているということを学んだけど、実際の世界でどうかはわからない。

というか、植物より菌のほうが最近の生物だという(化石上ということなんだろうけど)のがちょっと驚きだった。酸素を吸う仲間ってことか?

_ 耳にした会話

「で、これ知ってなんの役にたつの?」

「うーん、このての大学に行ったら役にたつんじゃないかなぁ(と、自信なさそうに)」

「そっかぁ(と強く納得した雰囲気)」

_ 及川

なぜか、入ってすぐのところの仕切りの向こう(つまり外)に及川の落書きがあった。気づいた人間の落書きは、あと、メキシコのジュゴンちゃん(だっけか、沖縄での虫男)くらい。

もやしもん(3) (イブニングKC)(石川 雅之)

(これだ)

_ ガイドブック

表紙の厚さに、数十年ぶりに「上げ底」という言葉を思い出した(いや、悪くはないとは思うが、上げ底はネガティブな評価を伴う言葉ではある)。

_ おみやげや

つい、100円の一番安いガチャポンをやりまくって、酢酸菌ばかり4個も手にしてしまった(O-157もゲットしたが、これは菌じゃない(追記:というのは間違い))。

で、海洋堂のソフビ人形というのが山ほど売っていたが、これとは違うみたいだな。

ソフトステージ ~菌劇場~ もやしもん A・オリゼー(-)

買わなかったけど。

_ それにしても

菌類展という企画のおもしろさはわかるが、これ、もやしもんのキャラクタ性がなければ永遠に実現しなかった企画だろうな、と思った。

_ ??

改行2個は無視?
irb(main):001:0> puts("a")
a
=> nil
irb(main):002:0> puts("a\n")
a
=> nil
irb(main):003:0> puts("a\n\n")
a
 
=> nil

で、1.9リファレンスマニュアルを読むと、Kernel.#putsの項にちゃんと出てた。

末尾が改行で終っている引数や配列の要素に対しては puts 自身は改行を出力しません。

_ きのこの新方式

で、乾燥法、ホルマリン漬、注入法(今回の。だが名前を調べようとしても所詮TBSなもんでどこにも情報がない)、模型と4種類並んでいて、それぞの長短の表が出ているのだが、模型の短所:本物ではない、ほかのやつの短所:退色、というのを子供が見て、じゃあ全部模型にすりゃいいじゃんとか言い出して、一瞬なんと合理的な、と賛意を表そうと思ったが、いやこりゃ一番重要な短所が欠けているよ、つまりコスト(工数)、と気づいた。が、実は模型を作るほうが早くて安かったりして(いや、それはないだろう)。

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

_ ken2uch [どうでも良いツッコミ 「もやしもん」はしりませぬが、O-157は大腸菌ではないでしょうか? 大腸菌は菌類(きのこ)で..]

_ arton [ありゃ、そうですね。別の何かと勘違いしたまま調べずに書いてました。ご指摘感謝。]


2008-11-10

_ 無線LANの設定

結局、DSでは一度もWiFiを使って無いことに気付く。ならWEPいらないじゃん

が、古いHPの一体型が確かWEPのみだったような(メニューにはWPAとか出てくるのに選ばれなかった)。そのへん含めて後でいじろう、と、メモ。


2008-11-11

_ メモは難しい

今、昨日の日記を読んで、何もしていないことに気づいた。


2008-11-12

_ なぜなぜ仕様

要件定義−基本設計−詳細設計(または直接実装)というような、段階別のシステム設計を考える。

たとえば、数10年前にこんな要件があったとする。

・プリペイドカードの導入効果を知りたいのでプリペイドカードでの売上合計を簡単に知りたいね

というわけで、プリペイドカードを利用した売上を調べられるようにしたとしよう。

それから幾星霜、システムの更改時期がやって来る。

基本は単純移行+最新鋭のいろいろ

と決まる。

その時に、現行のプログラムを眺めながら、当時の基本設計も参照しながら、移行プランを練ったり、移行プログラムの仕様を切ったり実装したりすることになる。

そこで誰かが気づく。この「プリペイドカード売上レポート」とか「プリペイド売上計上サブシステム」ってなんだ?

「はて?」

そこで相談することになる。「これ、使ってるのか?」

こういうとき、お客さんと相談するのはあまりうまくない。使っているかどうかに関係なく、あるものは移行しろということになるからだ。そりゃなるよな。

もし使っていないことが明らかなら、あるいは単に惰性で出力だけしているようなら、こちらから提案すべきだろう。

「〜という理由であったわけです。今は〜ですから、この機能は落としましょう」

こういった、どのような理由によってそのモジュールが必要で、どのようなユースケースを満たしているのか、といった情報は、要件定義にはあるはずなのだが、基本設計以降はわりとすっぱり消えてなくなっている。

10数年前のシステムであれば、それはわからなくはない。当事者だし。ユースケースはモジュールの設計には直接関係してこないからだ。というよりも、ユースケースという捉え方をしていなかったのだな。

しかし、経験を積んだおかげで、ユースケースは最初と最後に役に立つことがわかった。

いずれにしても、基本設計であろうが実装設計であろうが、とにかくここ数年のプログラミング言語の進歩というものは、「何をしているか」「いかに処理しているか」というような情報は、ほぼソースファイルで表現しきれているのだ。

つまり、もし、「要件定義」「基本設計」「実装仕様(あるいは実装そのもの」というような段階的な文書を後世のために残すのならば、経験的には、要件定義は残らず、設計と設計成果物しか残らないため、そこにこそ、ユースケース(とその前の段階としての、システムの目的)を記述すべきなのだ。

これは、ソースファイルのコメントにちょっと似ている。何を書くかではなくなぜを書く、というやつだ。とは言え、さすがにソースファイルにユースケースおよびそれの前段階を書くのは、やり過ぎのようには思う。

そこで、基本設計というものに、それを入れるべきだろう。

また、かって基本設計書というものに含まれていたものは、複数から抽出して1つのアーキテクチャ設計書に移動したほうが良い。というのは、そこに非機能要件を入れることで、後世の文書解析の分離がうまくいくからだ。というのは、非機能要件は、システムの進歩にしたがって、個々のプログラム実装からは排除できるようにこれまでなってきたし、今後もなると考えられるからだ。したがって、開発するモジュールを規定していく基本設計とは別にしておきたい。

という感じだが、ほかの同業者はどうやっているのかね?

_ 良いネガティブな書評

ネガティブな評価をする場合は、このくらいかっちりとどういう観点から読むとどのような理由からどういう点を評価できないのかを書いてほしいね。

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

_ mumurik [こんな紹介をされるとは思いませんでした(^^; コーディングの前段階としてアーキテクチャがあってその設計は別の人が行..]

_ arton [いやぁ、おもしろいです。 「移植性が大切だ、だからレイヤーパターンを使う事にした」 これなんか、そのまんまパターンラ..]


2008-11-13

_

どんどん増える、まるで医療費のようだというトートロジー。

_ 一番影響を受けた言葉

なにかというと、「AとBなら自由を選ぶ」と口をついて出ている自分に気づく。まさにGPL汚染(いや、GPL感染か)。

_ Ruby-1.8.7の非互換

Ruby-1.5でOK、1.6でOK、1.7でだめぽ(1.9.1も)のパターンを見つけたのだが、ちょっと追っかけたところ、なかなかおもしろいので後でじっくり見ようかなとか。

win32固有の話で、たぶん、Winsock2がからんでいるのだと思う。

というか(後で見ようと思いながらデバッガを起動していたり)、WSAEnumProtocolだな。

->WSAENOBUFF

やり直し

protocols_available -> 8
 (af = 2 AF_INET, protocol = 1 (ICMP) type = 3 (SOCK_RAW)
2-6(tcp)-1
2-17(udp)-2
23-6-1
23-17-2
23-6-1
2-6-1
23-17-2
2-17-2

……確かに無い(というか、取りなおすと値が変わるような)。

というか、これはおかしいなぁ。MSDN読むと

If the lpProtocolInfo is not NULL, the socket will be bound to the provider associated with the indicated WSAPROTOCOL_INFO structure.

NULLを許容している(つまり列挙できないものがある前提)。

*** win32.c~	Fri Jun 06 19:39:57 2008
--- win32.c	Thu Nov 13 20:55:47 2008
*************** open_ifs_socket(int af, int type, int pr
*** 2633,2638 ****
--- 2633,2639 ----
  		WSAEnumProtocols(NULL, proto_buffers, &proto_buffers_len);
  	    if (protocols_available != SOCKET_ERROR) {
  		int i;
+                 WSAPROTOCOL_INFO *pinfo = NULL;
  		for (i = 0; i < protocols_available; i++) {
  		    if ((af != AF_UNSPEC && af != proto_buffers[i].iAddressFamily) ||
  			(type != proto_buffers[i].iSocketType) ||
*************** open_ifs_socket(int af, int type, int pr
*** 2642,2650 ****
  		    if ((proto_buffers[i].dwServiceFlags1 & XP1_IFS_HANDLES) == 0)
  			continue;
  
! 		    out = WSASocket(af, type, protocol, &(proto_buffers[i]), 0, 0);
  		    break;
  		}
  	    }
  
  	    free(proto_buffers);
--- 2643,2652 ----
  		    if ((proto_buffers[i].dwServiceFlags1 & XP1_IFS_HANDLES) == 0)
  			continue;
  
!                     pinfo = &(proto_buffers[i]);
  		    break;
  		}
+                 out = WSASocket(af, type, protocol, pinfo, 0, 0);
  	    }
  
  	    free(proto_buffers);

で、うまく動いた(icmpping.rbの話)。

さて


2008-11-14

_ ニューヨークスティーム

ラジオを聴いてたら、映画でお馴染みのニューヨーク、夜の街、道端から湧きだす白い蒸気の正体は? とやっていた。四人のニューヨーカーは惜しい一人を含めて全員間違い。

下水道の水は0度より高いからだろうとか、聴きながら考えたが、典型的な誤答。

惜しい人がパイプとかダウンタウンとか言ってて意味がさっぱりわからなかったのだが、住民サービスとして19世紀に、イーストリバーの水を引き込んで沸かし、地下パイプで蒸気を各建物へ供給するヒーティングシステムを構築したのが、現在も運用されているそうだ。で割れ目だらけの道路から染み込んでパイプの回りにたまっている雨水(rain water)が熱せられて湯気が道路から沸き立つ、ということらしい。

パイプから洩れてるわけじゃなくて、あのハイヒールの宿敵の割れ目だらけの道路が犯人、とラジオのおしゃべりは続く。

それにしても、地下のスティームパイプ、かっこいい。

「タクシー・ドライバー」オリジナル・サウンドトラック コレクターズ・エディション(サントラ)


2008-11-15

_ カラフの歌

知らなかったのはおれだけだが、誰も寝てはならぬはオリンピックで効果的に利用されたらしい。

実際プッチーニの曲はどれもすばらしいからそれは良いのだが、あの歌詞の内容を考えるとまったく釈然としない。

あのおとぼけ王子は北京のどこかの民家の屋根の上によじ上って星を眺めているわけだ。

すると役人の触れが聞こえてくる。「誰も寝てはならぬ」

トゥーランドットが命令したからだ。カラフの名前を明日の夜明けまでに調べられなかったら、北京市民を全員、死刑にする、と。

すると人々の悲嘆の歌が聞こえてくる。明日の夜明けを見ることなくわれらは死ぬのだ、と。

ところが、カラフは妙に都合の良いとこだけしか聞いていない。

で、「誰も寝てはならぬ」と復唱し、そしてそのまま「私は勝利する。勝利する」とつぶやく(が、歌だから朗々と歌い上げる)。

いや、お前の勝利は北京市民に対する虐殺の上に成立するのだが。その無情っぷりは鬼六さんか?

しかし、カラフは耳をいっさい貸さない。

結局、すべての市民の身代わりのように、リュウが自殺する。

予定調和的に、カラフは夜明け前に自身の名を告げる。(自身の名を夜明け前に告げるつもりだったから、市民の嘆きを無視していた、と読み取ることもできなくはないが、あの歌の皮肉な調子に聞こえる歌詞からは、そう受け取るのは難しいように思う)。

Turandot: Dramma Lirico in Tre Atti E Cinque Quadri (Ricordi Opera Full Scores)(Puccini, Giacomo)

スコアはおもしろかった。しかし、ところどころ弾いてみるとやはり違和感がある。スコアから音を拾っていると、ときどき感じるのだが、ピアノの調性と弦の調性にはずれがあるように思う。

プッチーニ:トゥーランドット 全曲(デバルディ(レナータ))

最近はこればかり聴いている。デル・モナコが歌えばそれは素晴らしかろうと思ってはいたが、想像を上回るおもしろさ。しかし、なんといっても、この演奏が素晴らしいのは、テバルディがリュウを歌っていることだ。いや、もうテバルディのリュウは別格だ。

_ リュウの死

テバルディで聴くと、プッチーニが先を仕上げる気が消えうせたのがわかるように思う。

空耳アワー。26でリュウが「Lasciate-mi pas-sare! Laseiate-mi pas-sare!」と歌うところが「しゃべりなさーれ、しゃべりなさーれ」に聞こえる(ものだから、最初、このパートはトゥーランドットだと思った)。

特にテバルディ(たぶん、オーケストラも良いのだと思うが)が24のLentoのところで、Tanto amore、regretoと歌うところのソロヴァイオリンとからむところの美しさ。

このすぐ後から(ここまではソプラノとソロヴァイオリンを生かすため、低音はヴィオラが受け持つ)チェロも加わり、音の厚みを少しずつ増しながらクレッシェンドして木管が一斉に入る、ここの部分は何度聴いてもすばらしい。

追記:これ、すげぇや。5音音階で作って、ここぞというところで西洋音楽に変えるのか。懐かしいミが最後に出てくるパターンを使って、ここぞというところでミを引っ張って(ここがだからなんともやり切れなく美しく響き、リュウの運命の過酷さを強調する)そしてシフラットで柔らかさを出す。


2008-11-16

_ /と/の間には深くて暗い魔物が潜む

正規表現ハンドブック (Technical Handbook Series)(和郎, 鹿島)

あ、この本の著者監修者の木村さんって、木村さんなのか。

_ Javaのいやんな5つの点

・Eclipse

・jakarta-commons

・インスタンス変数の先頭に_を付けたソースコード

・java.lang.*とjava.util.*の節操のないクラス数

java.lang.base(Stringとかはこっち)とか、java.util.collectionとかもう少し分類してあれば良いと思う。そうであれば、.NET Frameworkみたいにパッケージ名だけを指定するというので良かったはずだ。

・デフォルトとprivateを分けているところ。

privateの範囲をパッケージ単位とすれば、デフォルトと分ける必要がなくなる。ファイルシステムにネームスペース/クラスをマッピングしたのはアイディアだと思うが、それをprivateにすれば良かったのに(多分、そう考えてデフォルト=privateにしたのが、何かの気の迷いで新たにファイル=クラスを単位にしたprivateを加えてしまったんじゃないかなぁ)。

追記:この変なprivateが、巨大クラスや巨大メソッドのための豊穣たる大地となっていると考えているのだ。

・プリミティブ型のClassが、java.lang.Integer.TYPEみたいな妙なところからじゃないと取れない点。別に、int.classとかでいいじゃん。追記:ふとやったことないのに気づいてやってみたら、問題なく取れた。


2008-11-17

_ 秋も終わりだ祭典だ

アマゾンから新譜の案内が届く。

おや、これは、と思うと、昔昔懐かしいSONY時代、セルの代わりとかやってたころのブーレーズの再発だった。

ストラヴィンスキー:春の祭典/ペトルーシュカ(ピエール・ブーレーズ)

多分、買わないだろうけど、ちょっと懐かしくもあり、どうでも良いようでもあり、な感じ。(だが、気になるので備忘録代わりに貼っておいたり)


2008-11-18

_ お元気ですか?

と井上揚水が車から手を振ることができなくなった年の瀬をなぜか思い出す、下血。

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

_ きむら(K) [「揚水」は意図的ですか? 人名としては「井上陽水」だと思うのですが。]

_ arton [お、本当だ。悪魔の足跡です。]


2008-11-19

_ 深煎りコーヒー

インライン・メソッド・キャッシュの仕組み

後で読み返すためのリンク(Rjbのことをまったく考えていないとはいわないが、やっぱりどうにかしようとは思わないなぁ)。

NyaRuRuさんは用語に自信がないとかtwitterで表明していたので、その使い方(あるいは言葉)は違うと言える人は指摘すると良いかも。(というか、僕も知りたいし)


2008-11-20

_ ACIDからBASE

ちょっと勉強。

BASE:ACIDの代わりをどうぞ

要約(のつもりだったがのりで)抄訳:(誤読は十分あり得る)

これまでは垂直拡散(うまい訳はなんだろう? vertical scaling)ってのがひとつの方法だった。よりパワフルなマシンへ移行するという道筋だ。何より簡単だってのがいいところ。でも、問題がある。どこまででもでかくできるわけでもないし、何より金食い虫だ。

それに対して水平拡散(horizontal scaling)ってのもある。いや、でもこれは複雑になる。この場合は、2次元で考えるといいね。横方向は機能分割。縦方向は断片化だ。Oracleのパーティショニングあたりとかかな。

機能分割はいいんだけど、そうなると1つのトランザクションが複数のデータベースサーバーをまたがる必要が出てくる。

エリック?ブルーワっていうバークレーの先生で、インクトミの首席サイエンティストがいるんだけど、CAP予想というのを唱えたんだ。Consistency(一貫性)、Availability(可用性)、Partition tolerance(個々のコンポーネントが使えなくても操作が完了できること)の3つの要素を同時に満たすことは不可能、っていう予想だ。

特に水平分割したデータベースでスケールさせるWebアプリケーションの場合は、どううまいことデータベースを設計しても一貫性と可用性のどちらかを犠牲にしなければならないことになる。

ACIDはもちろん知っているよね? Atomicity、Consistency、Isolation、Durabilityだ。2フェーズコミットとか取り入れて、こいつを満たそうってわけだけど、分散させたら、ほら、一貫性のために可用性が失われてしまったわけじゃないか。

というわけでBASEですよ。

ACIDは悲観主義に徹して操作の最後に一貫性を強制するよね。BASE(Basically available、Soft State、Eventually consitent)(基本的にいつでも使えることにしておいて、状態はなあなあで、最後には一貫性が保てればいいじゃん)は違う。全然違う。データベース、不安定でいいじゃん。楽観主義で行こうよ。なんで、こんなのがACIDの代わりになるのかって?

部分的な失敗をサポートするからだ。簡単な例を出そう。もしユーザーが5つのデータベースサーバーをまたがって使うことにするとしよう。BASE設計では1つのでデータベースがいかれたら、その特定のホストにつながっている20%のユーザーにだけ、あきらめてもらうということだ。でも、これがシステムの可用性を高める秘訣なんだ。

というわけで、機能別にデータベースを分割して、その中でも特に忙しいやつを縦に分割しようじゃないか。こいつにどうBASEを適用するかって? BASEでは論理トランザクションについての深い分析が要求されるんだよ。では、そいつを説明しようじゃないか。

さあ、続きのページを読んでくれ。

というところまで読んだ。

(続きも読んだが、これBASEと名前付けただけじゃん……とか言い出すのは老化の兆候かもしれないので自重)

_ イベントドリブンはまだ続くのかなぁ

GUIの秘訣はイベントドリブン。というわけで、複数のスレッドをがんがん使えるようになっても、Windows3.0レベルのアーキテクチャが一番、というような当面の結論があって。

そしてスケーラビリティの肝となる(とeBayの人が言っている)のも、またもやイベントドリブン(というよりも、キューを利用した遅延処理)だ。

でも、まあ、それが自然なのかな、とも思わないでもない。

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

_ klm [酸(ACID)と塩基(BASE)って云いたかっただけとか。]

_ arton [なるほど! BASEにはそういう意味もあるんですね。とすれば、ありそうな。]

_ winplus [勝手に後半を試してみました。お気づきの点がございましたら、ご指摘いただけると助かります。問題があれば、削除します。 ..]


2008-11-21

_ イノベーンマじゃなかろうが

シスコって桑港

がおもしろかったのだが、実は世の中変わってたりしたりしたらどうだろうかとか考えた。

CDCのディスクなんですか、そりゃ。やっぱりWDですよ、とか。

EMCそれどこのレコード会社ですか、とか。

zOS? そんなOS聞いたこともないですね(おれもないから間違えているかも)。やっぱりLinuxに勝るOSなし、とか。(前提が変わってきたようだ)

ケンジントン? とか書いていて思ったが、量販店万歳なら、「トープレのキーボードは使えますか?」「なんですかそりゃ。やっぱサンワサプライをお勧めしますよ」みたいなものだが、それはつまらないから、えらそうに講釈たれているほうが間違っている例というのを考えてみたいわけだ。

明石の鯛より……というようなのはちょっと難しいし。

突然、思い出したが、カリフォルニアワインを勧められた状態とかが微妙にそういうのに近いのかなぁ、もやしもんによれば。

バッファロー 無線LAN BroadBandルータ AirStation 11a&g&b WHR-AMPG(-)

でも、Wiiつなぐなら、確かに便利なAOSS。


2008-11-22

_ 名前

太郎と一郎というわりと古式ゆかしい、と書いたところでゆかしいという言葉が本当に存在するのか不安になりちょっと検索してみるとゆかしいネットを見つけてなんじゃこりゃと思ったのはともかく、名前の男性がそれなりのポジションで動いているのに対して、花子とか男乕(と変換されたがなんの意味なんだろうと思ってさらに検索かけるとそういう苗字が存在することを知り世の中の広さに思いが駆け巡る)おトラとかというわりと古式ゆかしい名前の女性は見ないなぁと思う今日この頃。


2008-11-23

_ 具体的な時代の具体的な音

とつぜん、遥か以前、ブレーズのヴァレーズを買ったまま忘れ去っていたことを思い出した。カタカナで書くと韻を踏んでいるところがヴァレーズっぽい。

ヴァレーズ作品集(ニューヨーク・フィルハーモニック)

考えてみれば、スロッピンググリッスルだのキャバレヴォルテールだのと遠回りをしてからもさらに時間がたったが、ヴァレーズこそ今にふさわしい音楽じゃないかと気づく。

いやもう、タイトルからして、イオニゼーションだのデンシティ21.5だのオクタンドルだの。で、オクタンドルってなんだ? 密度21.5とは? スピーカーからイオンの香り。

後で聴き返してみようとメモ。

追記:ウィキ(少なくともここの裏庭のウィキではないようだが)にかいてあったよ! 密度21.5とは白銀のことだ。プラチナのフルートのために書いた作品らしい。

_ ウィキ予測

Wikipediaをウィキと略称する人は、Wikipediaというメディアそのものに対して自らの知識/知恵をコンテンツへ還元することはない。

しかし、「ウィキに〜と書いてあった」とオーラルコミュニケーションあるいは限られた範囲へのメールによる伝達によりメディアの存在を公知のものとする役割(=メディア)としては機能する。

という予測。

この予測がもし事実ならば、興味深い点は、書き換え可能な討議の場であるウィキという名前を以って、読み取り専用のメディアとしての機能を称している点にある。

_ ヴァレーズが好きなブレーズ

驚いたことに開封もしていなかったので(こないだのiTunesへの取り込み合戦のときに見なかったはずだ)、さっそくリッピングしたものの、画がなくてさびしい。

そこでAmazonの書影を探して(日本語版のはないことは上ので知っているから輸入版のほう)驚いたのは、ブーレーズ(と表記を変えてみたり)はニューヨークやアンサンブランテルコンタンポランとは別にシカゴとも録り直していることだった。

日本語版がなければ想像もできるが、そんなに売れるわけではあるまい。

とすれば、ブーレーズとしては、稼ぎ仕事としてではなく残したくて残しているのだ。

同じように、その時代の最も豊かなものを学びながらもっとも遠く離れたところへ歩を進めた先輩作曲家へのリスペクトがあるのかなぁ。

Varese: Ionisation / Ameriques / Density 215 / Offrandes / Arcana / Octandre / Integrales(Edgar Varese)

おれが持っているニューヨーク(CBSバージョン)

Ameriques/Arcana/Deserts/Ionis(Varese, E.)

今見つけたシカゴ(DGMバージョン)


2008-11-24

_ 逆P/Invoke

MSKBの「DLLとは」というINFOは、シンプルな題名と裏腹になかなか楽しいことが書いてある。

が、いかんせん、中途半端で、しかもちょっと古いかも知れない。

試してみたが、clr2.5では、vtfixupについての修正は不要なようだ(メソッドシグネチャによるのかも知れないけど)。さらに.corflagsの修正も必要ない。

// MyAssembly.cs
using System;
public static class MyAsm
{
    public static void HelloWorld()
    {
        Console.WriteLine("Hello World!");    
    }   
    public static void HelloMyWorld(int count)
    {
        for (int i = 0; i < count; i++)
            Console.WriteLine("Hello My World!");    
    }
}
これを
c:\temp>csc /target:library MyAssembly.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
でもって
c:\temp>ildasm /out:MyAssembly.il MyAssembly.dll
さらに
c:\home\arton\temp>diff -u -2 MyAssembly.il~ MyAssembly.il
--- MyAssembly.il~      Mon Nov 24 03:06:28 2008
+++ MyAssembly.il       Mon Nov 24 03:07:27 2008
@@ -36,4 +36,5 @@
   .method public hidebysig static void  HelloWorld() cil managed
   {
+    .export [1]
     // コード サイズ       13 (0xd)
     .maxstack  8
@@ -47,4 +48,5 @@
   .method public hidebysig static void  HelloMyWorld(int32 count) cil managed
   {
+    .export [2]
     // コード サイズ       29 (0x1d)
     .maxstack  2
としてから
c:\temp>ilasm /dll MyAssembly.il
 
Microsoft (R) .NET Framework IL Assembler.  Version 2.0.50727.3053
Copyright (c) Microsoft Corporation.  All rights reserved.
Assembling 'MyAssembly.il'  to DLL --> 'MyAssembly.dll'
Source file is ANSI
 
Assembled method MyAsm::HelloWorld
Assembled method MyAsm::HelloMyWorld
Creating PE file
 
Emitting classes:
Class 1:        MyAsm
 
Emitting fields and methods:
Global
Class 1 Methods: 2;
 
Emitting events and properties:
Global
Class 1
Writing PE file
Operation completed successfully
で、dllができたので、一応corflagsを見てみる。
c:\temp>corflags MyAssembly.dll
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  3.5.21022.8
Copyright (c) Microsoft Corporation.  All rights reserved.
 
Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 2
ILONLY    : 0
32BIT     : 1
Signed    : 0
というわけで、ILONLYは自動的に落とされていて問題なさそうなので、まずはCで逆P/Invoke(これがそうかはちょっと疑問)。
// impasm.c
#include <windows.h>
int main(int argc, char* argv[])
{
    HMODULE h = LoadLibrary("MyAssembly.dll");
    FARPROC fnc = GetProcAddress(h, "HelloWorld");
    fnc();
    fnc = GetProcAddress(h, "HelloMyWorld");
    ((void (*)(int))fnc)(2);
    return 0;
}
コンパイルして実行。
c:\temp>cl impasm.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
 
impasm.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.
 
/out:impasm.exe
impasm.obj
 
c:\temp>impasm
Hello World!
Hello My World!
Hello My World!
しかし、引数がintでstaticメンバ関数の呼び出しだからちょろいわけだが、オブジェクトを使いたかったり、文字列を使うには、やはり^とかが必要になると思うわけで、それほど嬉しくないかも。
でも、static void(*)(void)なラッパ関数を作ってやれば、Cから呼べるのだから、それなりに楽しいかな。たとえばRuby拡張ライブラリとかだったらどうか?
本日のツッコミ(全1件) [ツッコミを入れる]

_ ARAI [いやー、有難うございます。 coflagsが落ちるのは、気がついて無かった。MSDNライブラリによれば、Manage..]


2008-11-25

_ ETAホフマン

Aがモーツァルト好きが嵩じてつけたアマデウスのAだということを知って、それで3つも前置するのかと思ってさらに良くみたら、もともと3個前置されているうちの1つを入れ替えたとわかり、面倒な名前だなぁとか思った。

役人にナポレオンの侵攻のせいでなれなかったために、指揮者になったとか出ているが、指揮者というのはどういう職業なのかと疑問にも思う。

というよりか、元々、Wikipediaのホフマン物語の筋があまりにもでたらめ(でたらめがWikipediaに書いてあるという意味では多分(知らないし)なくて、元の脚本がでたらめなのだと思うが)なのに興味をひかれたのであった。

それはそれとして年末にはくるみ割人形を観に行くわけだが。


2008-11-26

_ ?:

と、タイトルを書いて今気づいたが、?:って「三項演算子」だな。というか別に間違ってはいないか。+は二項演算子だし。単項もあるでよ。なぜ、三項演算子という呼び方を目の敵にする人がいるのだろうか?

そういえば、三項演算子の利用を目の敵にする人もいて、マーティン?ファウラーがネタにしていたくらいだ。(ネタといわず、例としてでも良いけど)

いずれにしても、三項演算子は報われない生涯を歩んでいるようだ。

で、正規表現の?:だが、これは何が嬉しいのだろうか?

と、先日購入したハンドブックを読んでいて、初めて知った(一通りの書き方は目を通していたはずだから初めて知ったはないとは思うので)あるいは意識したのだが、さっぱりわからない。

?:のご利益は後方参照用の保存をしないことだということはわかったのだが。

たとえば、/(?:abc)(def)/ =~ "abcdef" として、$1でabcの代わりにdefが取れるというのは例としてはひどいので、たとえば、/(?:(abc)|(def))gh/ =~ "abcdefgh" とすると、外側の()には?:が付いているので、$1はnil、$2はdefとなる。というのは、ghが後ろに続いているのはdefのほうだし、/(?:(abc)|(def))gh/ =~ "abcghdef" なら、$1がabcで$2がnilだ。

たとえば、続けて unless $1 …… みたいな書き方をしたければ、こう書けば良いし、どちらか読めたほうが欲しければ/(abc|def)gh/ として、if $1 == "abc" と書けば良いのだが、別に、/((abc)|(def))gh/ と書いても何も困らないし、むしろ余分な2文字を打たなくて済むから、こっちのほうが良いようにさえ感じる。

たとえば$xのxが1〜9までしか使えず、かつ()を30個くらい書かなければならないような正規表現なら、?:で抑制するのは必要になるわけだから、なくては困るというのはわかる。

でも、そうでなければ、どのような時に?:という余分な2文字をわざわざ記述する正当な理由があるのだろうか?

正規表現ハンドブック (Technical Handbook Series)(和郎, 鹿島)

というわけで、たまたま?:のところを読んで疑問に感じた。

それはそれとして、それぞれについて例が出ているし、言語ごとの異動なども書かれているので、結構、お得感がある本で買って正解だったようだ。サイズもいい感じだし。

追記:木村さんの?:の使い方の説明。ありがとうございます。

こんな感じの使い方ができるということかな。

def cstr(match); "#{$1}-{$2}";end; 

というようなメソッドがあって、でも与えたいMatchDataに対する正規表現は複数パターンがあって、しかもグルーピングがそれぞれ異なる可能性がある。でも、cstrメソッドが処理対象にするのは$1と$2だから、もし/(aaa)(bbb)(ccc)(ddd)/みたいな正規表現が必要で、かつcstrの処理対象にしたいグループが3〜4番目なら/(?:aaa)(?:bbb)(ccc)(ddd)/とすれば良い、ということ。なるほど、これはありそうな気がします。

それはそれとして、?:を、クロイスター(むしろクロワトルというほうが雰囲気がいい)と読むというのがちょっと意表をつかれた。でも単にクラスターの洒落なんじゃないかなぁ。

さらに追記:なんか寝ぼけたことを書いたようだが木村さんの例は、正規表現に正規表現を埋め込んで使えるようにできるということだった。

_ 突然ロキシー

げげげ、こんなの出てるのか。

ヴィジュアル・ヒストリー 1972-1982 [DVD](ロキシー・ミュージック)

忘れずにあとで買う。

ヴァージニアプレインも入っているから、きっとケバくてヤバいイーノも観られるだろう。

追記:買った。


2008-11-27

_ 三項演算子

まあ、確かに三項演算子⊃?:だけど。

実際のところ、三項演算子というのはどのくらいあるものなんだろうか。

Cには?:しかない。Javaもそうだ。JavaScriptもそう。VBだとIf演算子が三項にもなる。if(s is nothing, 0, s.Length)とかして使うらしい。なんか、Lispみたいだな。(cond ((null s) (0)) (t (length s)))とか。でも、condを多項演算子とは呼ばない。

Rubyの場合は「条件演算子。三項演算子とも呼ばれます。if xx then yy else zz end と同じ意味です。」とまで書かれている。

と、こうなるとメインストリーム(特定の構文禁止とか言い出す世界のこと)としては三項演算子=条件演算子で全然OKじゃないかなぁ。というよりも、ここまで普通にサポートされている演算子を禁止とかいうのはやっぱりわけがわからないな。

でも、ここでPHPですよ。perlとphpで三項演算子の挙動が違う件という記事を読むと、perlというか、これまで上に出てきたすべて、と、PHPでは挙動が異なって、混乱の元になるかも(VBは()を付けるからわかりやすいかも)。でも、それはネストした三項演算子の話だというだけのことで、長い長い関数禁止と同じように、せいぜいネストした三項演算子は禁止とかでいいじゃん。

参考までにC#のLanguage Specification 14.12 Conditional operatorでは

The ?: operator is called the conditional operator. It is at times also called the ternary operator.

と、ternary operatorをエイリアスとして認めている雰囲気ではある。もっともMSDNの言語リファレンス(――specificationではなく)には三項演算子の三の字は出てこなくて条件演算子と書いてあるなぁ。

なんとなくノリでARMを見てみると、5.16 条件演算子と書いてあって、三項とは書かれていないし、そもそも索引にも「三項」というのは出てこない。というか索引では条件演算子が条件式演算子と何か間違っているけど。

さらに、ternay operatorで検索すると、普通に?:の意味で使われている雰囲気で、最終的にはWikipedia

Many programming languages that use C-like syntax feature a ternary operator, ?:, which defines a conditional expression. Since this operator is often the only existing ternary operator in the language, it is sometimes simply referred to as "the ternary operator".

どうせそれしかないんだからシンプルに三項演算子でいいじゃんサムタイムということになるのだろう。

というか、引用されているALGOLのa := if x > 0 then x else -x.がRubyのif修飾子みたいだな(逆だろうが)。というか、ja.Wikipediaの条件選択演算子の「選択」というのはどこのプログラミング言語が使っている言い回しなんだろうかと疑問に感じたり。

_ 本質

xxxの本質は〜というのは、たぶん、今話題にしているxxxの把握の仕方にぶれがありうることを承知の上で、xxxを〜と規定した場合の話をするよ、というような枠組みの明示を含意しているんじゃないかなと、本質という言葉の本質を考えてみた。

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

_ naruse [value = conditionA ? valueA : conditionB ? valueB : defau..]

_ arton [それはいいよね(PHPの仕様は、条件演算子が使われていないことを調べるための実証実験だったりして)。]


2008-11-28

_ ダンプの極意

Windowsダンプの極意をアスキーの嘉平さんから一昨日もらって、電車の中でほぼ読んだ。

取りあえず職場用に一冊購入を要求して、さらに教育用資料として幾つかの計画をしたり。

という具合に実用的な本だ。

読者としての僕について言えば、かれこれ10年以上(最近数年は離れているけど)ワトソン博士が出力したスタックトレースを追っかけたり、場合によってはヒープのダンプを眺めてポインタが破壊された状況を追っかけたり、さらにその方法をOJTしたりはしているから、その意味では前半と後半は、それほど目新しいことはない。

が、それをきちんと言語化してあるのは実に良い。しかも、読みやすい。良い意味で現場的な言葉遣いと順序を追って書かれているからだ。

Windowsで開発したりサポートしたりしている人で、ダンプを見たことがなければ必読、そうでなくてもいまいち追い切れなかったことがあればほぼ必読、内部追っかけ系の本が好きなら読み応えあり、という本だ。僕の感覚では、Windowsが手元にあるのなら、コンピュータはなぜ動くか系の本より、こっち読んだほうが良いのではないかなぁ。

本の造りを説明すると、最初は、ダンプを解析するというのはどういうことかの説明から始って、その前提知識としてCPUとOSの動作、API、レジスタの役割、割り込みやプロセスとスレッド、ハンドル、といった基礎知識が良いテンポで、のめりこまないけど必要な程度の塩梅で説明される。

次に、デバッガのインストールやダンプの種類、ダンプを取得する設定の方法、OSごとの使えるツールやコマンド(このあたりになると知らないことも出てきて、僕にとっては知識の更新の役にえらくたった)、ダンプの読み方と来る。

最初は、当然のように、スタックの人間バックトレースの方法を説明。例をきちんと作ってあるのでわかりやすいから、いきなりOJTより、まずこれを読むのは正解だろうなぁ(もちろんプログラムであれば自分の良く知っているプログラムをデバッガで追えば良いわけだけど、この本のターゲットはプログラマとは限定せずダンプ解析者だから、この説明は良いと思う)。

そして、分岐したりすると追うのがやっかいになるのは当然、というあたりでフラグレジスタの説明と分岐命令の説明、そしてなぜかヒープ(とカーネルメモリでのプール)の説明。

このあたりで全体の1/3強というところ。

そして、STOPエラーの場合の調べ方、OSがフリーズした場合の調べ方、アプリケーションエラー、アプリケーションのハングアップ、パフォーマンス低下と事象単位にどう調べるかについて、パターン別の説明。たとえばアプリケーションエラーなら、ヒープ破壊、スタック破壊(確かにこの2つだな)、ハングアップなら、デッドロック、ループ、というように分類して説明がある。で、ハングアップの場合、ループは約1割に満たないとか、著者のサポート経験からのざっくりした感覚が書かれているのだが、これ、相当確度が高そうに(経験と照らし合わせて)思えるから、そのあたりもいい。このパートが全体の1/3を占める。

そして残りでトラップフレームがないダンプとしてプールを壊したドライバのコードの逆アセンブルリストを見て追っかけるというのが、ちょっと紹介(ここまで来ると、とっかかりを示して、後は経験だということなのだろうし、それは正しいと思う)。そしてカーネルデバッグの方法を説明。

この本を試すには、Windowsマシンとネットワークがあれば良いわけで(というのは、デバッガにしろダンプ採取ツールにしろ、MSの無料ツールだからだ)、とりあえず買って読みながら試すと良いと思う。

なぜなら、Webページにこのての情報が書いてあってもSTOPエラーで殺したりするわけだから参照性が悪すぎる。書籍だから実験材料のマシンが倒れても問題なし。

というわけで、Windowsと付き合っている/付き合える環境にある人にお勧めします。

Windowsダンプの極意 エラーが発生したら、まずダンプ解析!(上原 祥市)

個人的(昼の仕事系)には、これのWindows CE(CPUはARM)版が欲しいところ。

あと、見た目がチェンの極意本に似ているけど、アスキーハイエンド書籍ということと、プラットフォームがWindowsという以外には共通点がないのが、微妙におもしろいと思った。

Windowsプログラミングの極意 歴史から学ぶ実践的Windowsプログラミング!(Raymond Chen)

(これはこれでおもしろいのだが、ダンプの極意とは違ってエッセー風なおもしろさのほうが大きい)


2008-11-29

_ ロキシーはロキシーだった

いやぁ、全盛期といっていいのか悪いのか、イーノが在籍していたころのロキシーの映像って無茶苦茶おもしろいではないか!(レコードはクズ未満の代物だったわけだが。といってもピジャマラマとバージニアプレインは好きだったけど)。

ヴィジュアル・ヒストリー 1972-1982 [DVD](ロキシー・ミュージック)

なんかピヨピヨしているだけのイーノと、プープーしているだけのアンディ・マッケイとじゃらじゃらしているだけのフィルマンザネラと、ポーズをとってばかりいるブライアン・フェリーとドラム(ポール・トンプソン)と良くわからないベーシストで、すかすかで始まるリ・メイク/リ・モデルのばかっぽさ。

なんじゃこりゃ。レディトロンの気持ち悪くしなをつくりながらへなへな歌うブライアンフェリー、まるでリコーダーを吹く小学生のようなアンディ・マッケイ、でもサビのあとになると緑のラメに着替えてサックスを吹いていたりして(これ合成している雰囲気はないんだけど)、フィル・マンザネラは単にジャラーンといわせているだけだし(実際にはけっこうひきつっている)、これはライブではうけただろうなぁ。で、イーノは豹柄のジャケットでブヨブヨピピピピとか意味なくシンセサイザーに弄ばれているだけだし。

これは、音源だけ聴いていたらつまらないはずだよなぁ。

というか、グラムというとマーク・ボランとかボウイとか音作りも歌もうまい連中のイメージが強すぎたのだな。それで音だけでもおもしろいと思ってしまっていたのだった。

っていうか、バージニアプレインでは後ろでゴーゴーガールズがゴーゴーしているし(途中で完全に目があっちへいっちゃってる仏頂面の女が映ってちょっと怖い)、おれは本当に70年代の風俗ってだいきらいだな。

でも、おもしろい。

フォーユアプレジャーは実につまらない曲だが、ずーっとフェリーがにやにやしていて気持ち悪いし、それもすごく。アンディマッケンは緑の妙な軍服みたいな肘だけ赤い服を着てキーボードを弾いているのだかなんだか、でイーノは鳥みたいな緑の服着て、ただシンセサイザーのつまみを回しているだけ。

あ、do the strandはいい。この曲は忘れていた。これはいいな。でもアンディマッケイが変だ。イーノは銀色の鳥みたいな服(有頂天時代のジンジャーロジャーズみたい)で髪が短い。で、これはビンセントプライス(みたいな名前のデザイナー)だなとわかる奇妙なスーツのフェリー(できそこないのハンフリー・ボガードだな)が中腰でピアノを弾くし。最後はマッケイとフェリーが右手を挙げておしまい。なんじゃこりゃ。

イン・エヴリ・ドリームだとアンディマッケイは緑のきらきらしたランニングを着ている。フェリーは三白眼を作って歌うし、イーノは今度は茶色のもさもさした妙な服だ。

というような感じで、ロクシーナイトはふけていくのであった。

エディションズ・オブ・ユーは本当のライブみたいで音が悪いが、ただタンバリンを振っているだけと思ったらプニャプニャした音を出しているせむし男みたいに一瞬見える肩が異様に張り出した妙な金色の服のイーノ(ジャミラみたいでもあるな)が目立つ。この曲は名曲おほほほー。

だんだんイーノが目立つようになるのがわかっておもしろい。それで追い出されたんだな、と納得する。

ピジャマラマは最高だな。小汚い青に金糸の刺繍のマンザネラがずーっとジャラーンとしていると白い服の背中が映り、くるっと振り返ると蝶ネクタイに白いジャケットのフェリーが歌い始めて(この服が似合うということは、給仕マンなんだろうな、本来的に)、アンディマッケイもジャズメンみたいな服でプーププーとかやるし。でもイーノが映らない(ついに追い出されたようだ)。後ろではオープンリールのテープが回っているのだが、何を流しているのか(まともなリズムセクションを流しているのか)。


2008-11-30

_ ダーシーはうまくやったのさ

シュトゥットガルトバレエ団のオネーギンを観てきた。

スペードの女王は読んだことがあるが、オネーギンは名前しか知らないわけで、どんな話かも知らずに行ったことになる。オペラのほうも聴いたことも観たこともないから、音楽も初めてだ。

さて。

まず幕が開くと、EOと大きく真ん中に書かれた紋章つきの薄い幕があって、はてEOとはなんだろう? というところから始まった。

つづり忘れたがカンティレテオネールイルネプリュデゾネールみたいな言葉が回りに書かれているもので、ますますはてなとなって、名誉を求めたときには名誉は無いというような意味なのかなぁとか考えたりしたりして、結局1幕の終わりに再び出てきたときに、ああ、エウゲニ・オネーギンかとやっとわかったという具合だ。

エヴゲーニイ・オネーギン (講談社文芸文庫)(プーシキン)

で、これは素晴らしいバレエだった。ただし、音楽はそれなりに退屈。チャイコフスキーがいかに凄まじい才能の持ち主だとはいえ、すべてが大傑作というわけでもなく、それほどはぱっとしないオペラから選り抜いたらしいが、あんまり大したことはない。ただし、1幕の始まってわりとすぐに、田舎の人たちの群舞のところの音楽はけっこう良かった。が、まったく記憶からなくなってしまった。

幕が開くとタチアナはずっと赤い本を読んでいて、妹のオリガはあばれているのだが、そこに詩人が登場、そして黒い服着たプリンス(デトロイトの悪魔)みたいなオネーギンが登場。このオネーギン役(ジェイソンレイリーという人)が良かった。そして、代役らしいが韓国の人らしいタチアナ(スージンカン。最初モンゴルの人かと思ったがハーンは称号らしいからそれは違うよな)が、また見事だった。少なくとも僕にはそう感じたから結構。

鏡から悪魔が出てきてこんばんわのパドドゥは実に良かったし(掌に乗せるのはここだったか?)、最後の待っておくれの手紙のパドドゥも良かった。あと公爵役もきっちり3幕の最初で頑張っていたし、全体的に統一も取れていて(1幕でオリガを中心にしてみんなで足を挙げながら舞台を左右に走り回るところとか、実に躍動感にあふれてたし)、踊りだけについて言えば、これは行って良かった。

が、ここでオースティンを思い出してしまったのであった。

高慢と偏見 上 (ちくま文庫 お 42-1)(ジェイン オースティン)

かたや英国の1813年出版の本、かたやロシアの1832年ころの本。プーシキンは読んだんじゃないか? それともそういう時代風潮だったのか。

厭味な野郎だが洗練された都会人が田舎で傍若無人に振る舞って、それに対して田舎のインテリ女性が恋をするというところが同じなだけで、違うといえば全然違うのではあるが、どうにもダーシーとだぶって見えてしょうがない。

が、ダーシーはうまくやれたのだが(というか、リジーが賢明だということだが)、オネーギンは結局何も得られない。やっと求めるものが見つかったのに残念さまな物語であった。

_ 条件演算子の呼び方についての仮説

誰が言い出したかは知らないが、ternary operatorという言葉でも代替されていることから想像できることだが、日本固有の現象ではない。

ということは、誰かが条件演算子を三項演算子という言葉に置き換えて使ったということと、おそらく、そのほうが良いと判断してむしろ積極的に広めたということが考えられる。

技術書の著者というスタンスで考察すると、おそらく、理由として考えられるのは、入門書の著者があえて使ったという線ではなかろうか。入門書で覚えたことは生涯ついてまわることがあり得るので、広まる経緯としては十分条件となる。

もし、上記の推測が正しければ、次に考えるべきことは、なぜその入門書の著者がその用語を選択したかということだ。

これもわからなくはない。

索引性の問題だろう。(実際に索引化して気づいたということではなく、似たような術語であふれることへの危惧というのが近い)

conditional clause、conditional expression……ときて、もう先頭をconditionalで始めるのはやめとこう、と考えた、というあたりではないかな。

と考えた。(そのほうが、もしかしたら良いのかなぁと言葉の隆盛を考えるとちょっと迷う)

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

Before...

_ arton [ifが演算子な言語ってVB以外にも(iifだっけ)あるのかなぁ。というか構文要素ってキーワードと呼ぶのがいいのか、も..]

_ なかだ [演算子ってなんですか? というlispとかFORTHとか]

_ arton [と言えばSmalltalkも「なんですか」なのかな。]


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

ジェズイットを見習え