トップ «前の日記(2005-04-10) 最新 次の日記(2005-04-17)» 編集

Rogue Engineer's Diary / やさぐれ日記

Categories | CPUの創りかた | Modern Compiler Implementation in ML | NerdTV | PDP-11シミュレータで古代のUNIXを動かしてみる | The Yakumo Project | やさぐれ読書録
最近のツッコミ:1.bag781(2009-06-26 12:58)  2.Rhett Trappman(2009-06-22 09:26)  3.Rhett Trappman(2009-06-22 09:24)
最近のトラックバック:1.濃縮還元オレンジニュース:プロ.. (2006-12-22 22:02)

2004|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|09|

2005-04-16

RHG読書会

RHG読書会に出席。迷ったあげく参加表明をしたのは開催の前日だったのだが、やっぱり行ってみて良かったよ。

集合

会場には13:00に到着。20人以上やってくると聞いていたのに4〜5人の姿だけ。まもなく先週のお花見でもお会いした上山さんが登場。即席のxyzzyのプロモーションが始まった。まずは上山さんのナビゲーションでインストール、カスタマイズした後、手始めに階乗の計算を見せてもらう。

(defun fact (n)
  (if (= n 0) 1
    (* n (fact (- n 1)))))

と入力して実行。100までの階乗を計算させても楽勝である。さすがCommon Lisp(ちなみにMeadow(Emacs 20.7.1)で同じように計算をさせると11の階乗を超えたあたりで正しい答えが出なくなる)1000までの階乗も一瞬で計算する(おっ、ちょっとすごいかも)。10000までの階乗もちゃんと出た(かなりびっくり)。面白い。今度練習も兼ねて円周率の計算とかやってみようか。

14:00からは本日の目玉、artonさんによる講演が始まる。「COM―古きを訪ねて新しきを知る」「ビジネスWebフレームワークの現況」の二本立てである。

artonさん

一言で言うなら「知行一致の人」。

  • 知識と経験(「これこれはMicrosoftのどこどこの資料に書いてある」 vs 「使ってみたらこんな目にあった」)
  • マクロとミクロ(技術の全体像をとらえたマップ vs ソースコードレベルの説明)
  • 口と手(語り口、説明のうまさ vs 具体的なプログラムを書く能力)

のバランスがとにかく高いレベルで実現されていることが話を聞いているだけで分かる。ところどころよく分からないところもあったんだけれどもね。「分からないなら何でその場で質問しないのだ」って?質問するには自分が理解できない部分がどこなのか分からないといかんのであるよ。(分かるかな?)

GUID

そんな中でもGUID(全世界で一意となるような128ビットのIDフィールド)についての説明はよく理解できたし、面白かった。

「初めの頃はGUIDの末尾6バイトにMACアドレスが使われていたので、これを生成する"CoCreateGuid" という関数をMACアドレスの取得に使っていた連中もいたんだが、Wordとかで作られた文書にもMicrosoftはGUIDを埋め込んでいたもんだから、プライバシーがどうのこうのと、あちこちでいろいろ問題になったわけだ。ということでMicrosoftはGUIDの生成法を変えてしまい、GUIDに頼ってMACアドレスを手に入れてた連中は全滅。」

GUIDとプライバシーの件は数年前に結構話題になっていたなぁと思いながら当時の記録を探し出してみる…これかな。

マイクロソフト社の『オフィス』文書にユーザー固有のID番号が隠されているというセキュリティー問題は、他のソフトウェア・アプリケーションで作成されたファイルにも影響を及ぼす可能性がある、とこの問題を見つけたプログラマーが述べた。
(…)
スミス社長やプライバシー擁護団体は、マイクロソフト社がすでにID番号のデータベースを作成してしまったのではないかと心配している。ただしマイクロソフト社側は、顧客の同意を得ずに不注意に集められた可能性のあるハードウェアID情報のデータベースは削除する予定だと語っている。
(HotWired 1999年3月8日「MSのセキュリティー問題を検知する方法」)

MACアドレスを入手する簡単な方法は他になかなか無かったので、GUIDの生成用関数"CoCreateGuid"を使うなんて出来事が起きたようなのだが、「もうこうなったらプログラムの中からDOSコマンドを実行してその結果を拾い出すというのが一番早いのではないか」という話も、あの場では出てきたと記憶している。だがそこでも落とし穴にはまる人たちがいたのであった。

この文章を Windows 98 上で読まれている方は実際に試してみるとよい。DOS窓で winipcfg /All /Batch と打てば、コマンドを実行したディレクトリ配下にWinipcfg.out という、そのマシンの IP ネットワーク情報の詳細が記述されたファイルが作成される。
しかし、Windows 95 日本語版だとこれがうまくいかないというのだ。半信半疑で試してみると・・・ホントだ、できん!
(…)
これは一体どうしたものだろう。我々は途方に暮れた。
(…)
Windows 95 日本語版においては、/All オプションは /全、/Batch オプションは/バッチというわけの分からん日本語化がなされているというのだ。しかも気をつけなければならないのは、上の「バッチ」は半角で入力しなければならないし、winipcfg /全 /バッチ(半角ね)の結果として作られるファイルの中身も半角カナだらけというおまけつきである。
(…)
Windows 98 でできるごく基本的な操作なら 95 でもできるだろうと踏んだ常識的な人間は、Windows 95に仕掛けられた五年殺しに泡を食うという案配だ。
(YAMDAS Project「窓の五年殺し vs 頼みの網」)

winipcfgコマンドのコマンドラインオプションに"/全"(漢字だ)と"/バッチ"(半角のカナだ)を要求する(しかもドキュメントには説明がない)とはまた豪快な。当時のMSKKの自由奔放ぶりがうかがえるエピソードである。さすがに今ならばそんな心配はしなくていい…はずであるが。

せっかくなので、他にMACアドレスを取得する方法はどんなものがあるのかな、と思いながら調べてみると、"How can I find the hardware address of a NDIS MAC adapter?"というページが見つかった。これによると、

  • IOCTL_NDIS_QUERY_GLOBAL_STATS DeviceIoControl コールを使う方法
  • NDIS Protocol Driver経由で取得する方法
  • CoCreateGuid関数を使う方法
  • NETBIOS APIを使う方法
  • GetAdaptersInfo関数を使う方法
  • GetIfTable あるいは GetIfEntry関数を使う方法
  • SendArp関数を使う方法
  • WMIを使う方法
  • SNMPを使う方法

と、9種類(!)もの方法があるみたい(どれを使うのがいいかは僕は知らないけど)。CoCreateGuid関数を使う方法は、Windows2000からは使えなくなっているという説明も確かにあるなぁ…でもその下に

However, Microsoft has introduced a new function, UuidCreateSequential, which behaves as CoCreateGuid did on previous versions.
(しかし、MicorosoftはUuidCreateSequentialという新しい関数を導入した。これは以前のバージョンのCoCreateGuid関数と同じように動作するものである)

とか書いてあるよ。Microsoftはやっぱり自由奔放だ。

二次会と三次会

ということで(?)読書会も無事終わり、まぐろ食べ放題のお店に移動しての二次会。とろろと納豆付き。もちろんその他にも沢山料理が出てきた。主な話題は…

  • 一昨日に放送されたドラマ「恋に落ちたら−僕の成功の秘密」に川合史朗(shiro)さんが出演していた話。僕は最初のほう、2シーン分だけ見て、「結構しっかりと映っているな」と思いながら観るのをやめてしまったのだが、その後のシーンにもセリフ付きで登場していたらしい。見逃したのはちょっと残念。shiroさん本人による解説はこのページの2005/03/05と2005/04/18のエントリを参照。
  • サーチエンジン"google"の語源が"googol"(10を100乗した数)であるという話。googleのページを見ると、確かにそんな説明がある
  • "Fermat's Last Theorem"という本の話。元々はBBCのドキュメンタリーとして製作されたものだという。「素晴らしい。泣ける。とにかく読め。」と勧められる。

三次会は別の居酒屋にて。僕の座ったテーブルではなぜかフォントがらみの話題で盛り上がる。

  • 平成フォントでは『塚』の字が微妙に違うとのこと。大塚製薬の広告で平成フォントを使ったら「字が違う」と怒られたとかなんとか。
  • osakaは省略の度合いがちょうど良いとかなんとか。
  • 新聞の書体がやや平べったいのは戦時中の紙不足の時期に、限られたスペースへ文字を入れるための努力の名残であるとかなんとか。

さんざん騒いだ後に23時ごろ(?)に解散。お疲れ様でした。

本日のツッコミ(全6件) [ツッコミを入れる]
# arton (2005-04-29 22:31)

先日はどうも。なんかすさまじく持ち上げていただいて恐縮です(と思わずコメントを入れるくらい舞い上がっている)。

# 福盛 (2005-04-30 00:03)

いえいえ、こちらこそ恐縮です(ぉぉ、なんとも日本的な会話だ)なんというか、そのときの印象をそのまま書いたらあんな文章になったのでした。またお会いする機会があることを期待しつつ、楽しみにしております。

# 三浦 (2005-04-30 05:26)

winipcfgのNT系版はリソースキットのツールとしてwntipcfgという名前で配られてますね。

# 福盛 (2005-04-30 07:16)

ほほぅ…しかし"wnt"("win"ではない)ipcfgとはまたなんとも微妙な名前をつけるものですなぁ。googleで検索すると「もしかして: winipcfg」とか当然のように表示されたし。しかもヒット数はたったの722件。

# arton (2005-04-30 21:58)

>UuidCreateSequential
確かに自由奔放ですね。まあプライバシー侵害が問題となる既存コードはそのままにしておくという選択なのかな。しかし、すぐに後先考えず(本当に欲しいのはMacアドレスじゃなくて一意キーなのに)UuidCreateSequentialのほうを使うようになったり。
#今だとほとんどNT系になったはずだからipconfig /allの出力をリダイレクトでもいいかも。

# 福盛 (2005-05-04 09:23)

UuidCreateSequentialみたいな仕様がデザインレビューを通過して(いや、そもそもトラディショナルなデザインレビューをやっていない可能性も排除できないかも)APIに追加されるというのが(善し悪しを超えて)マイクロソフトのすごいところだと思います。
う〜ん、やっぱりウチのカイシャでこんなカンジのAPIが無事にレビューを通るとは思えんなぁ。QA(品質保証)部署に叩き落とされそう。

Name / お名前:
E-mail:
Comment / コメント
(To English posters: please do not remove the extra characters in the comment area):
本日のリンク元


福盛秀雄/Hideo Fukumori

Visitors Count: 236(yesterday) / 42(today) / 339112(total)