2011年6月

Last Modified: Wed Jun 29 23:35:06 UTC 2011

Obfuscation, Distortion and Exaggeration.

/30 [Thu]

@07:57

なんだか風邪っぽい。たくもう

@07:59

そういやー、会社で cmd.exe の意味不明なエラーに悩まされた. 実際に新山が対話的に使ってるのは powershell なのだるが、cmd.exe はいまだに 最小限の環境で動くので製品の中では使っている。どういう症状かというと、 Windowsの環境変数に %ProgramFiles% というのがあり、 これはふつう C:\Program Files\ という値が入ってるのだが、

> cmd.exe /c "%ProgramFiles%\Company\mundo.bat"
などとしたとき、実際に C:\Program Files\Company\mundo.bat にファイルが あれば cmd.exe は正しい動きをする。しかし、そのファイルが ないとき cmd.exe は次のようなメッセージを返すのだ:
'C:\Program' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Huh?? ...なぜパスを空白で区切ってしまうのだろう。 実際、cmd.exe は /c オプションで与えられた文字列を行として評価するので、 これは (クォートを除くと) 2つの引数 C:\ProgramFiles\Company\mundo.bat に それぞれ分解され、じつは正しい挙動である。問題は、なぜファイルが存在するときはこれが動いたのか、 ということである。

推測するに、cmd.exe は与えられた行を(最低でも)2通りのやり方で解析しようとしているのだろう。 つまり、まずは空白の区切りを無視する方法で行全体をひとつの「引数」として 解釈しようとし、それがダメだと行を空白で区切ってから解釈しようとするのだと思う。 だから 2番目の解釈に失敗したときに上のようなエラーメッセージがでるわけだ。 なんでこんな仕様になっているかというと、おそらくこれは DOS時代から延々と受けつがれてきた バッチファイルとの互換性を保つためではないか? つまり、むかしは ファイル名に空白が入ることなどなかったので、「引数をクォートする」という考え自体がなかった。 そういうプログラムが延々と書かれてきたあと、Windows (95だっけか?) になって急に "C:\Program Files" などというアホな慣例が、 信頼できるインフラのサポートなしに開始された。 なので、いまや変数展開をふくむすべての引数の解釈に曖昧性が生まれたのである。

。。。

まあ、たしかに Microsoftの互換性を守ろうとする姿勢はすごいと思うのだが、 そもそものポカは Windows の設計をアホったからである。同じように、 MSはファイル名・レジストリ名の「大文字小文字を区別しない」仕様も 絶対後悔してると思う。これのためにファイル名比較が単純な バイト列比較でなくなってしまい、かといってすべて大文字あるいは小文字に正規化すると Shift JIS のファイル名は使えなくなってしまう。 これで泣きをみた人はたぶん何百万人といると思われる。 原発でもそうだが、「アホな設計は、世界を滅ぼす」のだ。

/29 [Wed]

@08:13

あぁ〜もう熱帯夜の日々が始まるのか? 今日あたりは電力消費量がエライことになりそうな気がするな。

/28 [Tue]

@08:25

毎朝、家を出るときは元気なんだけどねえ…。 会社に着くまでの間に暑さでやる気をなくしている。

@00:53

きょうは「テレビ屋っぽい人」と話した。 どうしても新山はTV的な雰囲気をもつ人間にウサン臭いものを感じてしまう。 かれらは基本的に「1回だけ」うまい絵が撮れりゃそれでいい、 という職種なので、物事を堅牢にしたり磐石にしたり、 なにか何度も使えるものを時間をかけて構築するという作業を軽視しているように思える。 …偏見かな? だろうね、たぶん。

/28 [Tue]

@00:49

権限とは責任であり、責任とは権限である。

@00:49

独断は不正確だ。しかし独断は安くて、早い。

/24 [Fri]

@18:54

とある目的があって、会社で USBメモリ 500個を購入した。激安のやつ。 そしたらこれがひどいしろもんで、書きこんだファイルが読むたびにランダムな内容に変わる。 エラーも出さずに。しかもそんな個体が 5〜6個に1個の割合である。すげえ。 これ、一応ちゃんとパッケージに入ってる商品なんだよ。調べてみると、 USBメモリの品質ってのはかなりメーカーによってまちまちで、 しかも統一した品質基準が確立されてないようだ。それにしても、普通は エラー検査ぐらいするだろうに、と思っていた新山の常識は今回みごとにうち破られた。 いや、貴重な体験でした。安物買いの銭失いとはこうゆうことだ。 (しかし、商品選定をしたのはオレじゃないぞ)

(追記) メーカー保証期間の長さで信頼度を見積もるという方法。 USBメモリには1年保証のやつと、3年、5年、10年保証というのもある。

/22 [Wed]

@21:09

いつのまにか Firefox が 5.0 になっていた。 最近はメジャーバージョンをやたらに上げるのが流行ってるのか? 世の中「Sun化」、している、と思う。酸化ではない。 ついでにいうとSunはもう存在しない。ああそうか。

/21 [Tue]

@08:02

普通に起床。つまり日本時間ではいま 7:02AM ってことだ。

新山は自分で書くどんなつまらない文章にもかならずタイムスタンプを入れることにしている。 しかし、ときどきオンラインの記事を見ていると、日付が入ってないものがある。 こういう記事はいったい何を考えてるのか?? 署名や日付は、その記事の情報が 無期限に利用されるのを (ある程度は) 抑制することができる。オンライン上に 日付が入ってない記事を放っておいたら、そいつはいずれ確実に混乱のもとになる。

でも一方で、こういうこともあるのだ: 新聞記事によっては、時間が定まっていないものがある。 あとから情報の追加や訂正のために、こっそり書き換えられている場合がある! とーぜん更新履歴とか何もなし (後でたまたま読み直して、変わっていることに気づく)。 こういう連中にとっては、記事に日付を入れないことはむしろ得策なのかもしれないが、 それってどうなのよ? やっぱりごまかしだな。

/20 [Mon]

@20:04

何をトチ狂ったか、うちの社長が夏時間を実施するというので、 きょうは家じゅうの時計を1時間すすめて、これを勝手に JDT (Japan Daylight-saving Time) と定義することにした。 新山は電車にも乗らないしテレビも見ないので、ふだんの生活で 会社以外の“時刻”に束縛されることがない (唯一の例外は、ゴミ収集車のくる時間だ)。 なので、きょうからうちはチャモロ標準時(ChST)で生活している。 UTC+10 なので、基本的にはオーストラリアやロシア東部と同じなのだが ヤクーツクやシドニーと違って ChST には夏時間という概念がない。 これは zdump -v /usr/share/zoneinfo/Pacific/Guam をやるとわかる。 今回、zoneinfo のファイルをいろいろ見て回ったけど、結構おもしろいな。

/19 [Sun]

@19:22

なぜ人は笑うのか。人はいろいろなタイプの笑いを使い分けている。

  1. 笑わない人。
  2. 笑うけど、ほとんどが愛想笑いの人。
  3. 笑うけど、愛想笑いはしない人。

@19:25

以降←→以後。あるいは←→また。

/17 [Fri]

@19:01

新山が「○○は腐っている!」と表現するとき、それはその物品がすべて 腐っているという意味ではない。新山はとりわけ根底の部分を気にするので、一般的に 枝葉がよくできていたら、根底はそれ以上によくできていることを期待する。 それができていないと、その構造はすべて砂上の楼閣だということになり、 したがって「腐っている!」ことになるわけだる。一見、小さな問題でも、 じつはより大きな問題の一部の発現である、ということはよくある。 それを見逃さないようにするために、根本の部分を観察することは重要だ。

/17 [Fri]

@08:12

きのうは賭けに負け、ずぶぬれで帰ってきた。 今日はそういうことのないようにしたい。

/13 [Mon]

@19:13

最近の Linus のもっとも賢い行為は、なんてことないバージョンを いきなり "Kernel 3.0" と呼び始めたことである。つまり、メジャーバージョンを上げるときに 大規模な書き直しやら second system 症候群やらに陥っていない。 個人的には、これは、とてもカシコイと思う。

@19:15

基本的に新山はアホである。実際、「頭の回転」という点では多くの人に遠く及ばない。 新山が得意とするのは、自分の頭のこんがらがっている糸をほぐすことだけだ。 しかもそれは通常かなり遅い。… … …

さいきんあまり日記を書いていないが、それは決して minecraft にハマっているせいではなく、 単にあまり日記を書けるような落ちついた状態にならない。べつに不安定なわけではないのだが、 たいてい日記を書けるときには別のことに熱中しているか、あるいはすでに眠くなっているような状態なのだ。 そしてこんな言い訳をしているようでは大変よくない。

@00:44

人間はみな誰しも、なんらかのアホな情報源を持っており、 そこからの情報を信じこんでいる。しかもそれは時にかなり重要な意思決定に使われる。 たとえば、占星術に頼る大統領、とか…。 実際のところ、宗教にハマっている人々をバカにはできない、と思う。 人のふり見て我がふり直せ、ですよ。

/10 [Fri]

@00:18

From: Fangamer <orders@fangamer.com>
Subject: Fangamer Shipping Confirmation: Order #28920

DEAREST CUSTOMER Yusuke Shinyama,

  ALL OF YOUR STUFF SHIPPED
 HAVE NO FEAR, HAIKU BOT HERE
    TO CONFIRM SHIPMENT
------------------------------

Order #28920:

1x Invincible - M / Unisex
1x Awesome Video Games DVD

/05 [Sun]

@11:43

Eli Pariser: Beware online "filter bubbles"

だから言っているじゃん。 あなたがこういう世界を望んだ。オレは望んでない。以上

@23:56

X does not do Y. People do Y.

/03 [Fri]

@07:58

きのうは盛大なバグが1個発見された。 いつも思うのだが、たいていのバグは「前提条件の見落とし」によって起こる。 つまり、「まさかここで」こんな状況になるとは考えてもみなかった、という ヤツである。具体的には…

新山が興味あるのは、これらの見落としのうち一体どれほどが 人間の「心理的な盲点」にかかわっているのか、ということである。 おそらく、結構な数の見落としがそうだと思う。バグのないプログラムを組むのは大変だ。 なぜなら、人間は想定しうる仮定をすべて思いつくことは不可能だからである。


Yusuke Shinyama
Document ID: e8ffa180793163f38b613ccf16d9fee8