著作一覧 |
#!/usr/local/bin/ruby if ARGV.length != 1 STDERR.puts 'usage: ruby u.rb 0xコード' exit 1 end ch = ARGV[0].to_i(16) u = ch - 0x10000 u0 = u >> 10 | 0xd800 u1 = u & 0x3ff | 0xdc00 printf "surrogate pair = \\u%04x \\u%04x\n", u0, u1 u = [18, 12, 6, 0].inject([]) do |r, x| r << (ch >> x & 0x3f | 0x80) end u[0] |= 0x70 printf "utf-8 = 0x%02x 0x%02x 0x%02x 0x%02x\n", u[0], u[1], u[2], u[3]実行してみる。
$ ruby u.rb 0x2a422 surrogate pair = \ud869 \udc22 utf-8 = 0xf0 0xaa 0x90 0xa2ちなみに上の字は、多分だけど、ガッツと読む。
参考にしたページ:J2SE 5.0の新機能(第21回 文字操作の変革)
WikipediaのUnicode一覧
あとは、昔ながらの方法:echo 貼り付けた文字>a; od -t x1 a
こないだ見損なったソクロフの牡牛座を観た。
右半身不随となったレーニン(というか、本当にロシアの役者の層の厚さというのは不思議きわまりない。どうして、こうもレーニンみたいなレーニンとかクルプスカヤ(違うかも知れないが面倒なので調べない)みたいなクルプスカヤだのスターリン以外の何者でもないスターリンとかが出てくるんだろう)が、うだうだしたり、怒ったり、ご機嫌になって草むらを這ったり立ったり倒れたり、車に乗ったり、カメラの前でポーズを取ったり、杖をついたりする。最後、ユダヤ人とは話が合いそうだなとか言いながら、明日のジョーの最後のように静かになる。
スターリン(ヨシュアではなくカインだとかいう言葉を思い出したり)が、白いぱりっとした服を着て、洒脱に登場。
ああ、なんでこいつに権力を与えてしまったのか、なんとなく理解した。20年代のスターリンは文句なくかっこよかったのだ。
はげちょろげたブハーリンとか、くしゃおじさんみたいで眼鏡のユダヤ人とか、間抜けっぽい髪型(イレイザーヘッドみたい)のジノヴィエフやカーメネフや、学者っぽいラデックとかと違って、スターリンはかっこ良かったのだ。ばかだなぁ。
「杖を書記局からプレゼントだ。偉大なる師に偉大なる弟子から、と銘を打ちたかったが、一人反対するやつがいてできなかった」
「ユダヤ人だな?」
というわけで、このころはまだ全会一致原則が貫かれていたようだが、すでに孤立していたことを匂わせる。
だが、師だの弟子だのばかげているのだから、本来は全員が反対すべきだったのだ。というわけで、モスクワの空気というか風向きを匂わせながらスターリンと会話が始まる。
最後、会見が終わる。と、スターリンはテラスへの戸口ではなく、逆にバルコニーの端へ進む。「そっちじゃないぞ」というレーニンを無視し、美しい庭を眺める。「ここは美しい」 とまるで、すでに手に入れたかのようだ。
大木の問い。
「大木が崩れるのを待つか、どかすか?」
「もう一つの方法がある。切り刻むのだ」
レーニンの顔は曇っただろうか。(このスターリンの第3の選択は、未来のトロツキーに対する態度表明というよりも、僕には、現在のレーニンに対しての恫喝に聞こえた。が、批評をみるとそうは取られてはいないようだ)
比較的最初。レーニンの部屋の扉を細く開けてのぞきこむ医師。眼鏡、山羊ひげ、ユダヤっぽい、まるでそこに直接は名指しされない反対者の幻影かもと思った。
周りは敵だらけだ、と言いながらベッドの脇に寝そべる妹。
まるで雌牛のように愚鈍そうで、テンポがのろいクルプスカヤ。頼まれていたロシア刑罰史と、マルクスの最期を調べたノートを聴かせようとする。
マルクスの最期を読もうとして、処刑された男についてのメモを読む。ぎょっとするレーニン。間違えたといってマルクスの最期をもう一度さがす。娘が戸口にいたエンゲルスと(ラマルクかな、忘れたけどもう一人)が入ってくるとすでにマルクスは死んでいた。
「エンゲルスは準備していたようだ」
シャンデリア。
食事。スープ。
シャンデリアに火が灯る。火が灯っていることについて怒る。
車で狩りへ出発するシーン。2階のベランダではしゃぎまわり、クルプスカヤの指示を無視するメイド。
「労働者の……」と車中で語るレーニンに対して冷笑的な運転手。
ざらざらの風景。
ネットワークカード(オンボードだが)が壊れた。
VistaのNICドライバがおかしい。
VistaのTCP/IPドライバがおかしい。
のいずれかだろうというとこまではわかった。(ルータやハブではない。ということは、ケーブルの可能性もあるのか)
突然LINKが切れるのがハブのLEDで見えた(口を変えても変わらない)。なんとなくだが、オンボードNICっぽい気がするのは、こないだグラフィックボード換えるとき、マザーボードをたわめちゃったからだな。
でも、送信量に依存することを考えると、TCP/IP周りの問題(でも、LINK LEDを消せるかな)っぽくもあり。どこで見分ければ良いのだろうか。
明日朝から土曜中までのいずれかの時点でリリースします。
no uim... but it seems fine the on board NIC.
初めてアップグレードではないインストールをしたのでいくつか、前のWindowsよりよくなっている点があることを知った。
・インストール時に、直前のバージョンのWindows、Prograum Files、Usersの3つのディレクトリをwindows.oldという名称のディレクトリに保持するオプションがある(フォーマットしなければならないと思っていたのでこれはラッキーだった。とは言ってもUsersのバックアップはとったわけで、無駄になったと言えなくもない)。
・間違えて64ビットバージョンを入れてしまった。が、いまのところ不自由はないみたいだ。このまま64ビットバージョンでいくかどうかはかんがえどころだけど、VC6がまともに動けば、それもありかな。
#IEが32ビットバージョンなのにはちょっと驚いた。
タッチング・フロム・ア・ディスタンス―イアン・カーティスとジョイ・ディヴィジョン(デボラ カーティス)
ディヴィジョンには部門という意味があるから、つまりはジョイ部門なのだが、もちろん少しもenしないジョイだ。
Explicit Lyricsと書いてあるが、オリジナルの詩なのかな。はるか昔イタリア製のブートレグ(歌詞集付き)を買ったが、それは違うんじゃないかみたいな聴き取りのやつだったので、まともなものなら相当欲しいかも。
別にすることが他にもたくさんあるので、少しずつ、インストールが続く。
今日はBeckey!を入れて、とりあえずメールの読み書き環境を作った。(mailフォルダがwindows.old\users\おれの下に残ってたので、話は簡単。でも、パーミッションを取り直す必要はあったけどーー正確にはDocumentフォルダは\homeの下に別に作ってあって、そこへのリンクという形式なので、\homeの下の実体のパーミッションを直すということ)
次に、VC6を入れて、やっかいなことにMSJVMのインストールとかされたが、それを除けば普通に終了(環境変数の設定が反映されてない気がするが、気のせいだろう)。(でも、Rubyのビルド環境を作るには、ssl、iconv、zlibなどたくさんインストール/ビルドが必要なのだ。Tcl/Tkは85にしてしまおうかなあ、というような迷いも。さらにMSIパッケージのためには、VS2005も入れなければならないが、これはさすがに中途半端なので、VS2008へパッケージ作成環境は移行しよう。ってことは、VS2008もさっさとインストールしなければ)
次にOffice Enterpriseを入れる。
で、iTunesを入れようとしたところで時間切れ。しかし、今気づいたが、DRM解除の解除を忘れてた。これで1ライセンス分、消えてしまうんだろうか?(だろうな。いやだな)
と、ここまで32ビットアプリケーションばかりなようで、思い出したが、7Zipもインストールしたのだった。
最初、以前ダウンロードしておいた7Zipの32ビット版をインストールして悩んだ。一見正常にインストールできるが、Explorerに組み込まれないからだ。もちろん、IEが32ビットのままというのと同根で、同一プロセス内で32—64の共存はできないってことなんだろうな、多分。サンクを使って行き来とかいうような技は64ビットwindowsには無いのだろうか、あっても実用性が無いのかも。で、7Zipのサイトへ行ったらちゃんと64ビットバージョンがあったので、そちらをインストール。当然のようにExplorerに組み込まれた。明日は、TurtoiseSVNについても確認だな。
今日は、TurtoiseSVNの64ビット版を入れた。
次、ダウンロードしてあるiTunesSetupを実行しようとしたら64ビット版を入れろとのありがたいお告げ。で、64ビット版インストーラをダウンロードしたわけだが……タスクマネージャでみるとiTunesだのDeviceなんちゃらだのは全部32ビットなんだが。インストーラだけが64ビットというアップルクォリティ(=羊頭狗肉)?(追記:iPodServiceというような名前のサービスには*32が付いていないので、そのあたりは64ビット版なのかも)
で、iTunes Storeだが、まず解除をやってから登録したら認証マシン数はなんとなく数が合っている(余計に食われていない)。NICのMacアドレスとかHDのSerial#とか、MSのアクティベーションと同じようなリソースを参照してるのかな? であれば、結構なことだ。
で、32ビットiTunesで音楽を流しながら、Java6 NetBeans6付き。これは32ビットバージョンだけみたいだな。
で、Meadow3.0。当然32ビットバージョンのみ。
で、Visual Studio 2008(32ビットバージョンしかない)。しばらく放っておいたら.NET Framework 3.5(x64)のインストールエラーという赤い×がやまほどついたダイアログが表示されていて困る。が、どうもWindows Updateと重なったのが原因らしくて、再起動してやり直したらすんなり入りつつあるまますでに1時間程度。面倒なんで、あとはほったらかしで明日やる。
(しかし、NICは快調。ということは、Vista SP1がものすごく臭いんだよな。というか、64ビット版がうまく動くようだから、一回外して放置されているGefo8600 512Mを復帰させるか、どうか迷いどころ(余分なことして動かなくなるのは現時点では致命的)。
もやしもんの影響もあって、菌類が熱い。というわけで、キノコの本を今は読んでいる。
いやあ、不思議な世界ですな。
たとえば、菌類には肉食と菜食がある。何が違うかといえば、作り出す酵素が違う。肉を溶かす酵素を出すのは肉食。
菌ってウィルスとは違って、つまりはキノコの仲間だから、根っこを伸ばす。ということを押さえておく。
人の皮膚というのはすさまじく頑健でそこに潜り込むのはほとんど無理な話だ。しかし傷があると、胞子はその湿り具合に大喜びでかもしはじめる。でも、ある程度までかもすと抗体に追い出される。でも免疫不全な病気にかかっているとそうはいかない。どんどん菌糸が伸びて、もし上へ進めば脳みその中にネットワークが張り巡らされる。グッバイスプートニク。そうでなくても小さい子には結構つらいものがある。
子供のころ、ハタケってのにかかったことがあるが、あれはコロニーだったのか。
地上最大の生物の鯨よりもはるかにでかいのは数100万年かけて成長したアメリカにあるキノコのコロニーで22エーカーに及ぶ(数字はウソかも。鞄から出すのが面倒なのでうろ覚えで書いている)。
キノコは森の中で一番温度が低い生物だ。キノコは胞子を発射して増える。キノコの傘(の下のヒダ)が結露したら、胞子はヒダから外に出ることはできない。
冬虫夏草にとりつかれた蟻は木を上っていき、そこで死ぬ。病気にかかったらコロニーから遠ざかって死ぬように蟻はプログラムされているからだ。おかげで冬虫夏草の胞子は高いところからまんべんなく空に跳んでいくことができる。
麦角を作る菌は、ライ麦に発生する。パンを焼く程度の温度では死なない。手足の先端の毛細血管を食い荒らすので、最終的には手足が腐敗して落ちる。すさまじい激痛。しかし、激痛を抑えて宿主をハッピーにさせるためか、強力な幻覚を起こす。主成分はLSDに良く似た効果を発揮する。セーラムの魔女狩りが起きた年の気候はこの菌が大量発生する条件に合致している。おそらく、セーラムの魔女に呪われたり毒を盛られた人や、魔女の集会について語って火にあぶられた人たちは、麦角つきライ麦パンを食ったのではないか。
などなど、語り口(+翻訳)は、いささか悪い冗談口調ではあるが、思いもかけないことがたくさん。アスペルギルス属は2種類の形態を取り、もやしもんに出て来るオリゼみたいな形(これは単体で胞子を吐く)と、丸っこい形(これは2種類の型が融合して増殖する)のまったく異なる形態を取る。菌にはそのてが多い。そのため、気づくと同一種が2種類登録されているので名寄せが大変だった、とか。で、それに気づいたフランス人の兄弟の研究に触発されたドイツの植物学者が、昆虫になったり魚になったりする生物についての研究を発表する。それに対してイギリスの科学者が徹底的に攻撃する。ドイツの植物学者は学問の看板を降ろしてハッピーな文人生活へ移行した。
「うわさの真相」ってなんで変な書き方するのかすげー不思議だったが、そうか、噂の真相という雑誌を知らないからか、と気づく。固有名詞だと知らないから、ひらがなにしてしまうってことか。
というわけで、知識の共通基盤(70〜90年代の一方の雄だったわけだが)の崩壊をひとつ知った。っていうか、廃刊になったのも当然かも。
cl -nologo -LD -Fe../../.ext/i386-mswin32/tcltklib.so stubs.obj tcltklib.obj msvcrt-ruby18.lib tk85.lib tcl85.lib oldnames.lib user32.lib advapi32.lib wsock32.lib -link -incremental:no -debug -opt:ref -opt:icf -dll -libpath:"." -libpath:"../.." -def:tcltklib-i386-mswin32.def -implib:tcltklib-i386-mswin32.lib -pdb:tcltklib-i386-mswin32.pdb ライブラリ tcltklib-i386-mswin32.lib とオブジェクト tcltklib-i386-mswin32.exp を作成中 tcltklib.obj : error LNK2001: 外部シンボル "_TkEventuallyRedrawMenu" は未解決です tcltklib.obj : error LNK2001: 外部シンボル "_TkEventuallyRecomputeMenu" は未解決です tcltklib.obj : error LNK2001: 外部シンボル "__imp__TkFindMenuReferences" は未解決です ../../.ext/i386-mswin32/tcltklib.so : fatal error LNK1120: 外部参照 3 が未解決です。なんか以前stubを指定したらこうなったのだが、忘れて同じことをしてしまった。追記:んじゃなくて、最初からstubを使う設定になってるんだな…… さらに追記:ruby-tk with tcltk8.5b1
あるところに正直なきこりがいた。
その日もきこりは、いつものように、MacBook Airの最薄0.4cmのエッジを利かせて木を切っていた。そのときなんのはずみか、パワーが入ってポーンというどでかい音がした。きこりは驚いて振り上げた手をゆるめ、MacBook Airは鋭く山の冷たい空気を切り裂きながら、彼方の湖に吸い込まれていった。
えらいこっちゃ、ときこりが湖にかけていくと、ぶくぶく泡をふきながら、美しい女神が水の中から現れた。
女神はおごそかな声でこう告げた。「きこりよ、きこり、何をそんなに嘆いているのか」
きこりは、あわてて嘆きだした。
「わたしの大切なMacBook Airがこの湖に落ちたのです」
「なるほど。しばらくお待ちなさい」
女神はそういうと、湖にぶくぶくもぐっていった。しばらくすると、またぶくぶくしながらなにか黒い塊とともに浮かび上がってきた。
「きこりや、お前が落としたのは、最小構成1億円のIBM System z10かい?」
「いえいえ、めっそうもありません」きこりは大慌てで手を横に振った。
「なるほど。しばらくお待ちなさい」
女神はそういうと、湖にぶくぶくもぐっていった。しばらくすると、またぶくぶくしながらなにか紫色の箱とともに浮かび上がってきた。
「きこりよ、それではお前が落としたのは、3000万円のSun SPARC Enterprise M5000かい?」
「いえいえ、めっそうもありません」きこりは少し残念そうに手を横に振った。
女神はしばらく考えてから、「なるほど。しばらくお待ちなさい」というと、湖にぶくぶくもぐっていった。しばらくすると、またぶくぶくしながらなにか銀色の板とともに浮かび上がってきた。
「きこりよ、それではお前が落としたのは、23万円のMacBook Airかい?」
「そうです、そうです」
きこりは大喜びでそう言った。
「なんと、正直なきこり。お前の正直さを祝福して、代わりにこのIBM System z10を贈ろう」
女神はそういうと、MacBook Airの代わりにIBMの黒い塊を岸辺に残して去って行った。
めでたしめでたし。
VS2008(以前のVIでも同じだが)が、扱うファイル量が想定範囲を数100倍は上回っている(たぶん、平均的なアプリケーションのファイル数なんて10個前後だろう)からか、とにかく動作が遅すぎる。
ファイル1個入れ替えるだけで冗談抜きに3分程度必要となる。
というわけで、RubyGemsのメンテ中についにやる気がゼロになった。
が、それではASRが作れない。
別の方法を考える必要がある。
・候補1: MSIの中にgzファイルを入れて、post-installでRubyでgunzipする。
・候補2: MSIの生成方法を解析してコマンドラインツールを作る
1の問題は、MSIが把握するファイルと実際にインストールするファイルの極端な乖離だ。アンインストールちゃんとできるのか?(たぶん、できるはずだが)
2の問題は、時間だなぁ。
というわけで、とりあえず1の方向で、2をやるという感じに決めた。
というわけで、ASR-1.8.6-P114のリリースは少し伸びます。
追記:vdprojってのは、レジストリのテキストエンコーディング形式なんだな。ってことは、こいつを操作すればよいのだろう。さがせばちょこちょこ情報があるようだな。
昨年に引き続き、Gauche Nightに行く。
最初は、Kahuaの本のはずだったのが、途中、道具もののHacker本になりそうになり、最終的にオライリー動物シリーズになるまでのハワイの魚の物語。
ファインディング・ニモ [DVD](アルバート・ブルックス)(ニルを探して)
この魚は、単独行動でふらふらしているらしい。
併せて読みたい
それはともかく、yharaさんともうひとかた(名前失念)の時間ちょっきりゴングショーの、時間ちょっきりぶりに感動する。
I.D.E.Ainternational LEDブックライト シルバー FDL003-SY 4200037(-)
アフィリエイトでどなたかが買われたものなんだが、評価も高いし、どんなもんなのかな? 今は寒いから白熱電球のフロアスタンドで本を読んでいたりするわけだが、それは夏には使えないから、これ買ってみるかなぁ。
require 'fileutils' class Through def initialize(a, line) @proj = a @line = line end def read(x) nil end def save(f) f.puts @line end end class Entry def initialize(a, line) @proj = a @key = nil @MsmKey = nil @OwnerKey = nil @MsmSig = nil end def read(x) if x.strip == '}' return nil elsif x =~ /MsmKey.+:([_0-9A-F]+)"/ @MsmKey = x @key = $1 elsif x =~ /OwnerKey/ @OwnerKey = x elsif x =~ /MsmSig/ @MsmSig = x end self end def save(f) if @proj.key?(@key) f.puts ' "Entry"' f.puts ' {' f.puts @MsmKey f.puts @OwnerKey f.puts @MsmSig f.puts ' }' end end end class Hierarchy def initialize(a, line) @proj = a @entries = [] @state = nil end def read(x) unless @state if x =~ /\A\s*"Entry"\s*\Z/ @entries << @state = Entry.new(@proj, x) elsif x.strip == '}' return nil end else @state = @state.read(x) end self end def save(f) f.puts ' "Hierarchy"' f.puts ' {' @entries.each do |e| e.save(f) end f.puts ' }' end end class FileEntry def initialize(a, line, key) @key = key @proj = a a.add_file(key, self) @lines = [line] @SourcePath = nil @removed = false @nest = 0 end attr_accessor :removed def read(x) @lines << x @nest += 1 if x.strip == '{' if x =~ /\A\s*"SourcePath".+?"8:(.+?)"\Z/ @SourcePath = $1.gsub(/\\\\/, '/') elsif x.strip == '}' @nest -= 1 return nil if @nest == 0 end self end def save(f) unless @removed @lines.each do |x| f.puts x end end end def contains?(fn) if String === fn || Symbol === fn fn = [fn.to_s] end fn.each do |f| if @SourcePath =~ /#{f}/ STDOUT.puts "remove #{@SourcePath}" return true end end nil end end class FileSection def initialize(a, line) @proj = a @entries = [] @state = nil end def read(x) unless @state if x =~ /\A\s*"\{[-0-9A-F]+\}:([_0-9A-F]+)"\s*\Z/ @entries << @state = FileEntry.new(@proj, x, $1) elsif x.strip == '}' return nil end else @state = nil unless @state.read(x) end self end def save(f) f.puts ' "File"' f.puts ' {' @entries.each do |x| x.save(f) end f.puts ' }' end end class MergeModule < FileSection def initialize(a, line) super(a, line) end def save(f) f.puts ' "MergeModule"' f.puts ' {' @entries.each do |x| x.save(f) end f.puts ' }' end end class VdProj def initialize(fn = nil) @lines = [] @files = {} @state = nil read(fn) if fn end def read(fn) File.open(fn).each_line do |line| line.rstrip! if @state @state = @state.read(line) else if line =~ /\A\s*"Hierarchy"\s*\Z/ @lines << @state = Hierarchy.new(self, line) elsif line =~ /\A\s*"File"\s*\Z/ @lines << @state = FileSection.new(self, line) elsif line =~ /\A\s*"MergeModule"\s*\Z/ @lines << @state = MergeModule.new(self, line) else @lines << Through.new(self, line) end end end.close end def save(fn) File.open(fn, 'w') do |f| @lines.each do |line| line.save(f) end end end def add(x) @lines << x end def key?(key) @files[key] end def add_file(k, v) @files[k] = v end def remove(files) @files.each do |k, v| next unless v if v.contains?(files) v.removed = true @files[k] = nil end end self end end if __FILE__ == $0 if ARGV.size == 0 STDERR.puts 'usage: ruby delnode.rb vdproj node-name [node-name ...]' exit end fn = ARGV.shift FileUtils.cp fn, "#{fn}.back" VdProj.new(fn).remove(ARGV).save("#{fn}.new") end追記:ファイルの削除(あとから上に追加)は期待通りに動くことがわかった。あと、フォルダの削除も実行しておけば、追加はまだ我慢できるからとりあえずはここまでだと思う。
さらに追記:役に立ったので、一応コミットしておこう。vdprojtools
str << elemみたいなのを書いていてはまりまくり。イミュータブルなStringに慣れ親しみ過ぎたのか、とんでもないことになった。もちろん、
str = "#{str}#{elem}"でよいわけだが。(
str += elem
だと最初のと同じ意味になるよね? 追記:ならない。どうもありがとう)
とりあえず、お試しということで。
変更点:
・Ruby 1.8.6-p114
・Exerb 4.4.0 (単にRUBY_VERSIONがp114になったというだけ)
・Rjb 1.1.2
・VialuRuby 080229
・RubyGems 1.0.1
・ruby consoleは、ユーザーのデスクトップにも配置
(特に何もないようなら、明日午前中にinfoseekで公開します)
追記:rexml\undefiendnamespaceexception.rbが不足してた。直した。
ひげぽん:Gaucheもさわる必要があると思って、ソースを読んだ。世界は美しい。
(会場から、そこかよ、とツッコミ)
ひげぽん:shiroさんのソースは良いって聞いているし。
shiro:Gaucheのソースは、それまでの良い実装からぱくりまくってるからね。そうやってよい実装の食物連鎖みたいなことがあるのかも。
_ yuumi3 [☆☆☆]
ライラ、っていうと、このあたりか。
いや、それはボクサーとボウイが言う。
時間と訳されているがtimeのライラララの部分の節回しは印象深い。ファガースンのピアノがとんでもなく海のようなア・ラッド・インセインも大好きな曲だけど。
というくらいに、想像と異なる映画でびっくりした。
これまでいろいろどうしようもない映画を見てきたが、ここまでぶっちぎりで筋を追っかける映画ってのは見たことないんじゃないか(ジャンギャバンのああ無情は筋追っかけ映画だが、演劇のしっぽが長すぎるので比較にならない。ライラの冒険は映画の話法だ)? というわけで、あまりのスピードにむしろ感銘を受けたくらいだ。
とにかく、タメが全然ない。おかげで無駄なシーンもない。衝撃の親子宣言ですらあっさりぶったぎって先へ進む。退屈する暇すらない。しかも白熊はすげぇ。っていうか、最初に電機屋で働いていることろは良いシーン。
問題は空間把握がえらくへたくそなことで、クマの王様に対する最後の一撃とか、タルタル人との戦いとか、なんだかさっぱりわからない。若手のジャンプマンガのバトルシーンみたいで、書いているほうは見直しさんざんしてるからわかってるだろうが、読むこっちにはまったくわからんみたいなものだ。
このあたりは、ナルニア国(次回のやつの前売りを買っちまった)のライオンと魔女の戦闘開始シーンとか、角川の天と地ととか、オーソンウェルズのファルスタッフとかチェンガイグ(カイコー)の人生は琴の弦の村同士の合戦(あるいは、始皇帝暗殺の巨根マンの造反とか)、同じくらいの規模で、すばらしい映画は山ほどあるのだが、せっかく空を無数に飛び交う魔女軍団という新たな視点を導入しながら、この程度になってしまったのは、もったいないことだ。
が、そのスピードがずば抜けているから、これはこれですごい映画だったかも知れない。すごい映画だな。なかなかすごい。たたみかけるから、北極に上陸してから熊が仲間になるまでの疾走感とか。
本屋では、旧版が置いてあったりして、ちょっと間抜けっぽい白熊のイラストで、アマゾンにおいてあるニコールキッドマンの表紙よりはるかに良いので、ちょっと買って読みたいかも、と思わないでもなかった。
あと、主題歌らしいクレジットで流れるケイトブッシュの声がただのおばさんの声になっていてがっかり。もうライオンハートのころのケイトブッシュじゃないのか。
それにしても、白熊の王国にしろ、嘘つき(というより物語を作る)少女が身を助けとか、お話そのものもよくできていて、ハリーポッターやナルニアより、お話は上等であった。
嘘つき(というより物語を作る)少女といえば、サキの開け放たれた窓が印象深いが、イギリスって国の伝統芸なんだろうか(特異点ではなく、特異なものが複数あればそれは得意だと思わざるを得ない)。
_ 通りすがります [ライラというと、アリスの『チャンピオン』世代です。って書いて気がつきましたが、なんとボクサーつながり。]
ゼッフィレッリ版アイーダを観に新国立劇場。
第2幕の大行進。というか、幕があいた瞬間の神像とか柱とかの規模のでかさにどぎもを抜かれる。これはすごい。
音楽はベルディなので、全然期待していなかったのだが(好みではないから)、前奏曲の2つのメロディの重なりとか、おお、と思う。バイオリンの音がきれいで、日本の国力の充実ぶりをこんなところに感じたり。
で、清きアイーダはいい曲だなとか思ったのも束の間アイーダの長い歌にうんざりする。
第2幕はスペクタルがとてつもないから音楽はどうでもよいかも。有名な凱旋マーチがちょっとオーケストラと舞台のラッパで合ってないように感じたけど、そういうものかも。これはいいし、確かに耳に残る。蛮族バレエがよい味。
でも、重要なことは第3幕と第4幕だった。音楽がすばらしい。レシタティーボが見事で、3幕のラダメスとアイーダのかけあいは美しい。そして4幕のファラオの娘の独白。
それにつけてもファラオの娘が不憫で、最後の2重構造はなんのイヤミか、という感じですらある。というか、エチオピアの王様も死刑なんだろうな、とか。一言、捕まったで済ませられてしまうところが哀れを誘うのだが、人の生命が軽いお話であった。
それにしても、1幕と2幕の人数の多さと衣装の絢爛たるさまは確かに見なければ損だ(しかも税金のおかげで相当安価に設定されているし、とか考えているちょうどその時に、小泉純一郎を見かけて少しイヤな気分になったが(追記:しかし、ぱっと見ただけでその人だとわかる強烈なアイデンティティってのはすごいな)、まあ見たかったんだろうなぁ、劇場型とか言われてたわけだし相性は良さそうだ)。
テノールとソプラノはどちらも声はきれいで、しかもとんでもない声量。アルトは途中オーケストラに負けていたが、表情がある良い歌。バスのアルメニア人が演技をふくめてすばらしく良い味だった。さすがに国立だな、というのが素直な感想。
座談会のメモ。編集してないし、聞き違い(単に僕が知らない言葉も多いし、そういうのは大抵聞き違えているはず)はご容赦。
2005年9月、打ち合わせのまとめ: デヴェロッパー向けムック200ページくらい。それで手軽に読めるような本として、で始まった。
遠藤(karetta.jp)
300ページくらいのコンパクトな入門書。
コンセプト:Scheme、Lispの入門書はいろいろあるが、そこに書かれていないことを書く。
今回は入門書というのとは違う。実用寄りを狙う。Kahuaの本:Schemeを知っている必要がある。
伊藤(オライリーの人)
最初は、Kahua Hack
→Schemeを知っている層を対象:狭すぎる
山下(nobsun)
もともとは入門という感じではない。
知識を限定した感じはやりたくない。リファレンス的なものもつまらない。
遠藤
Gauche Nightの時に2007・8(LL)に売ります→川合による再構成
当初は立ち読み版の構成 → 川合さんが文句をつけて出版を遅らせた
川合(shiro)
作者が口を出すと未実装の機能に対するエクスキューズになるので、手を出さなかった。が、途中からディープに関わり始めた。
伊藤
当初は2部構成: 1部は読み物(コラム)、2部がGaucheの解説
遠藤
昨年のGauche Night:川合さんに本気を出してもらうため
出演者を揃える(黒田、小飼、まつもとなど)
LISP脳(Web版より進化している)
山下
名前が入ったコラムは川合氏は納得していない
遠藤
当初の題:Gaucheプログラミング
分量が増えた結果、プログラミングPerlに対抗できるようになる→プログラミングGaucheに変更
ハックシリーズは物質。動物が良い
遠藤
動物はフムフムアプアプアフア (ハワイ州の州魚)
新聞に載っていたので知った
川合
良く泳いでいる。大体、単独行動。人が寄ってもプワプワプワ。
伊藤
19世紀頃の版画集から動物を拾う。
今回はないので、新たに書いた(そのため、他の本とは精度が異なり、細かい 2ヶ月以上かかった)
遠藤
初稿の入稿が11月
そこから第3稿まで。
3/12の19:00から新宿ジュンク堂で先行発売
今日買った本は見本刷りなので、奥付が間違えている。
----------------------
リリカルLISPを作ったzick
(JavaScriptで作ったSchemeっぽいもの、PostScriptで作ったPS Lispなど)
Gaucheとの関わりは特にない
Gaucheに期待すること:どきどきわくわくできる謎の要素があると楽しい
川合
Shcemeとの関わり:−マイナー言語をやっていても飯は食える
今後: さくさく入れたいものを入れる
ひげぽん
MonaOSを作っている
Schemeとの関わり:OSのシェルをSchemeにする
Gauche上にR6を実装して遊んでいる
Gaucheに期待すること:若手があこがれを持っていることに応えて、突っ走てほしい
Schemeに期待すること:低いレイヤが書けるようになるといい
笹田(ko1)
Schemeとの関わり:RubyでSchemeを書いた
Gaucheとの関わり:Kahuaプロジェクトでバイトしたことがある
川合
YARVとGauche VMはライバル関係にある
Gaucheに期待すること:Gaucheソースコード完全ガイド (GHG)
川合
自分が書いたコードは良いコードのつまみ食いになっているから、良いコードになっているかも知れないから、利用して良いコードを書いてほしい(食物連鎖)
黒田(Alleglo)
2002年ILC (international Lisp Conference?)
今日の議題
・R6RSを斬る
前回から今回の間に制定された
・Arcについて
軽く話してみたい(Common LispでもSchemeでもない、第3の選択肢)
川合
Arcについて何か言うのは早いかな。
いろんなアプリケーションを書くときにコアとなる(7つの言語プリミティブ)では不十分なので、実際のアプリケーションを書くときのコアとなる言語要素を探している(したがって、まだ今後も変わるはず)
Kahuaからの反撃
「Arcからの挑戦」に対して、プログラミングコードが短くなるというのは字面が短くなるのではなく、ノード数が短くなる=Arcからの挑戦。
Kahuaも良い線いっている。
川合:
Lisperの将来の変更を嫌うため、余分なコードが入る。
Arcはそのあたりを割り切っているので短い
ひげぽん
Scheme処理系+コード+ライブラリで言語公開
これで良いのか、という驚き
川合
原点回帰のようだ。昔はLISPで処理系書いて公開するのが普通だった
Scheme界の騒動
R6RSの表紙: サスマンもスティールもいないことに衝撃を受けた(遠藤)
黒田
Algorithmic Language Scheme
→ Programingu以前に論理の言語である
→ Operationalとか言い出している → 数学的な論理を捨てた=ゆゆしき問題(彼らはなにをしているかわかっていないのではないか)
SchemeがSchemeなのは厳密さだ。(ContinuationをLongjumpをいかにきれいに書くか=オペレーショナルかどうかはどうでも良い)
R4からゆがんできているが、とうとうやってしまったな、という感じだ。
川合
R4とR5は別言語
黒田
full continuationがあるからunwind-protectが(理屈の上では)書けない。
これがおかしい。
unwind-protectedがなければ、プラクティカルな言語にはなれない
正常終了:stringが閉じられる。それ以外のときはわからない …… こんな仕様でどうやってアプリケーションを書くのか?
川合
full Continuationは特殊で、それで大域脱出するのはおかしい。Gaucheはその上にExceptionを作っていて、それでunwind-protecteを実装している。
黒田
プラクティカルを目指すのであれば、unwind-protectを残すべき。それでいてAlgorythmic Languageを捨てているので中途半端。
川合
正しい認識で、どっちつかずである。
トップレベルセマンティクスがなかったのが、R4(R5?)で規定された
遠藤
REPLがなくなった
川合
R6RSをSchemeと認識するとわけがわからなくなる。あれは最低限の仕様で、それに合わせていれば互換性が取れる
ひげぽん
マクロを展開するタイミング
川合
効率考えなければ素直に実装すれば良い。
ライブラリ?
ERR5RS ー snowというサイトでライブラリを集積中
黒田
condition Systemがライブラリなのはなぜ? condition systemは型の階層システムがなければ書けない。型のシステムもライブラリ。
なぜ、仕様に入っていない? (ライブラリがライブラリに依存している)
川合
R5RSの問題
R6RSではCondition Systemはstandard libraryに入っている
ひげぽん
(R6)型システムっていろんな仕様があるけど、どういう用途で使うのか?
川合
Condition Systemの型は、Condition Systemのベースに使うために、アドホックに入っているだけ。
Schemeとしては、string?にtrueを返せばstring
笹田
プリミティブを定義するのがSchemeというイメージがあるのだが、ではプリミティブとはなんだろうか?
川合
それが問題となっている。R6RSはそういう方針を選んだ。
最終的にはコミュニティ投票で67%くらいが賛成。ただし、メジャーな実装者は反対。賛成したのはTLTとシェスキーとSchme48の一人。
遠藤
バイナリーが使えるようになった
ポータブルなものが書けるべきという圧力が強いのか?
川合
Yes
黒田
ポータブルは大きい。仕事の規模によって処理系を使い分ける必要がある。
ポータブルは大切である。スクリプト言語に不満なのはポータビリティを考えていないことで、エンジニアリングについて語ってほしくない。
なぜ、そこに気づかないのか。
笹田
そうですよね。
川合黒田そういう意味ではCommon Lispにもあって、書けない部分がある。困ったことにScheme的な発想をする人がいる。
良い点:たとえ、ANSIになっていなくても、デファクトになっているものがある。マルチ処理(Lisp Machine Lispから引いてきているので大体同じ。国際化文字の扱いもANSI標準にはないが、どこもexternal fromatをサポートしている)。そういう意味では裾野は広い。
rcpとか使ってしまうので、そうされるとアウト。
川合
デファクトがあるというのなら、SchemeにはSRFI(サーフィ)があるから、同じことになってしまう。
R6RSコンパチなソースはUnicodeを読める。Schemeの文字型というのはUnicodeのコードポイント(処理系内部ではなく、仕様)。
仕様ではUTF-8とUTF-16しかないが処理系が複数持っている。
GaucheはPythonからもらって、coding:unicodeのように指定する(R6にあるわけではない)また、この時処理するのはreadではなくport。
遠藤
R6RSでWebフレームワークが書けるのか、というのは?
ひげぽん
ポータブルならそうしたい
川合
R6RSの間違いは、アプリケーションを目指すのであれば、アプリケーションをたくさん書いてみなければ
SRFI(誰でも議論に参加できる。誰でも出せる)
ポピュラーなSRFIはデファクトになる。R6RSのライブラリもそういうので良かったのではないか。
SRFIは緩すぎるからだめだという議論があった。
川合
R5の操作的意味論は実装者にはわかりやすい
えんどう
最初からR6を目指している処理系はどのへんまでできているのか?
今すぐ試したい人は、Ikarus、psyntaxというライブラリで体験できる(ひげぽん)−−マクロで一部を実装している
R6RSで書くには2つの意味がある
・コンプライアント
・ぽいライブラリの宣言など、なんとなくそっていれば良い
Gaucheは後者を取る
Schemeのマントラ
フィーチャを積み上げるのではなく、……
Ruby-1.9.0-1のMSIパッケージ(Win32用)を提供します(約14MB)。
このパッケージは、配布されているruby-1.9.0-1をVC++6でそのままビルドしたものをMSIでパッケージ化しただけで、include、lib、riなどをすべてそのまま含みます(コンソール用バッチファイルを追加しています)。
拡張ライブラリについては、iconv,readline,ssl,zlibを同梱してあります(Tclは含みませんが、Tcl85を使ってtcltklib.soは生成してあります)。
Ruby-1.9.0は、将来のRuby安定板に対する評価版(アーリーアクセス版)です。利用時は、そのことを念頭においてください。
なお、16ビットWindows(9xとかMe)での動作は一切保証しません。また、ASRと異なりMSVCRTやMSVCP60の再配布ファイルも含まないため、NT4.0以前のWin32ではおそらく動作しないでしょう。
今や子供のアニメビューアと化したX31だが(youtube以外にも、なんかいろんなサイトがあんだね)、時々水平方向に多数の筋がはいるようになった。白っぼいオブジェクトの右側にそのオブジェクトを構成しているものが、すごい勢いで吹き飛ばされているようだ。
再現させるのが難しいのだが修理できるものかな?(なんかぎゅうぎゅう押せば治りそうな気もする)。
もし、おれが、なんか昆虫とかを草花とかを外国に持っていこうとすると、たぶん、怒られるんじゃなかったっけ? 逆に外国から持ち込みはできないはずだし。
アメリカシロヒトリみたいな問題があったよね。
で、だ。
納豆は食い物だからよいのだろうか? でも、現地で誰かが近くで茹で豆とか食ってる近くで、おれが納豆食いまくっていれば、いくつかはその茹で豆にくっついて、それで食べ残しがあれば、そこで(たまたま納豆菌が食える豆だったりしたら)増えて、さらにそこらに漂って、それまで現地では見られなかった新たな発酵食品が生まれてしまい、それによってそれまで現地で食われていた発酵食品が姿を消してしまったり、というようなことにはならないのかな。死んでる菌なのかな? 味噌とかはどうなんだろうか。あるいは、ヨーグルトとか。
と、ちょっと疑問に思った。
Macも使ってみたいもんだと、iBookを買ったのが2003年の暮だから今を去ること、丸4年だ。
で、情報を得るために(くまりんさんや、よしだむさんからいろいろ教えてもらえたのはありがたかったが、それはそれ、活字も欲しい)、雑誌も買ってみとこうかと、アスキーのMACPOWERを半年くらい買っていた時期があった。
これはとても不思議な雑誌で、すこしもコンピュータ雑誌とは思えなかった(DOS/Vマガジンとかと比べた場合)。エディトリアル雑誌というか、デザイン雑誌というか。なるほど、確かにMacはコンピュータじゃないのか、とか思ったり。でも川崎さんの連載とか読み応えがある記事もあったりするし、僕はエディトリアルは気になるので(突然Cジャーナルを思い出したが、ありゃ逆方向に突出していた。まるで突然変異(という雑誌)みたいだった)しばらくは買っていたのだが、そのうち買うのをやめた。
それから幾星霜……で、次に続く。
MACPOWERに連載されていたらしい(そのころは読んでないので知らない)建築家のエッセイというか作品解説というかをまとめた本をアスキーからもらったので、読み始めた。ちょうどこないだ読んでいたキノコの本を読み終わったからいいタイミングだ。半分ほど読み終わったので、書いても良いだろう。
どうも、毎号1つの自作建築を取り上げて、なぜそういうデザインにしたのか、それはどのような施主の思いを自分なりに解釈した結果なのか、それを実装するためにはどのような技術が必要(あるいは建材が必要)なのか考えたり調べたり探したり、その結果どのような成果物(建物)が生まれたのか、そしてどのように施主に受け入れられたのか、あるいは利用されているのか、それが建築家としての自分のプロフェッションの深化にどうフィードバックされているのか、を、その建物の写真を載せて説明しているのだが、ここまで読めばわかるように、当然のように抜群におもしろい。
というのは、人間の生産活動で真に興味深いのは思考過程と、その成果物のマッチングだからだ(うまく一言で表せていないな)。しかも、それが美とか気持ちとか快感とかに関連することならなおさらだ。
だから、恋という言葉で、施主が自分の建築と個的に付き合う(つまりは住むということだが)ことで、生じて欲しいと望む、特別に親密な関係をさしているようだが、その一方で、この人自身が、作品を生み出すことに傾ける気持ちが、また恋のようなものだ。
わかりにくいかな。でも、次の図に置き換えればわかるだろう。
Matz→Ruby|プログラミング言語←プログラマ
で、プログラマ=施主、Matz=この人(中村拓志)のスタンスということだ。
この関係は、
CODASYL→COBOL|プログラミング言語←プログラマ
という関係とは異なり、妙に個的な関係にある。
そのような建築によって生まれる空間が持つ質というのは本当に空気のようなものになるのかも知れない(でも、読んでいて気づくのは、無名の質というものが、実は真に無名であってはならないというパラドックスだ。そこで、はるか昔に読んだ蓮見重彦がブルータスに書いていた評論の一節を思い出す。確か、シュレンドルフの映画がつまらないのはシュレンドルフの個性が作品につきまとっているからで、ゼメキスの映画がつまらないのはゼメキスの個性が作品につきまとっているからで、ブニュエルの映画がすばらしいのはブニュエルには個性なんかないからだ、というような言い回しだったような。真の普遍性を獲得するためには、個性といった夾雑物を昇華しきるほどに個性的でなければならないというような趣旨なんじゃなかったっけな)。
まあ、それはそれとして、南房総の海と山の景観を生かすオペラグラスみたいなかたちの家とか、砂漠の町の森に囲まれたショッピングモール(これは完成予想図まで)とか、子供が自分で使い方を見つけて遊んでいる本来は奥行き感を出すために設けた窪みがある家とか、極度に薄い壁で仕切られた美術館とか、板から家がはえている北国の家とか、それぞれについて、なぜそうなったかの解説を読むのはおもしろい。
というか、依頼主の要望を、依頼主の想像力(知識)では不可能なレベルで実現するために、技術と想像力を駆使してカタチに仕上げる、という一連の流れっていうのは、それがどのような仕事であっても興味深いし、参考になる。(誰だ、建築とソフトウェアは異なると言っていたのは?)
MacBook Airを購入した以上、Time Capsuleを買おうとは思っていたが、アマゾンで500GBモデルが10%オフになっていたので注文。
Apple Time Capsule 500GB MB276J/A(-)
1TBという単位にはものすごく惹かれてはいたが、とりあえずそこまで無くてもいいや。
以前、荒井さんのPowerShell本を紹介したことがあったけど(レビューさせていただいたので内容は知っていたし、結果、献本していただけた)、あの本は、PowerShellはどう使えるのか、どういう制限があるのか(代表的な例としてスレッディングモデル)といったことを、PowerShellの機能紹介、文法や記述方法、実例、応用について解説された、良い本だったと思います。特にどうにかしてWindows Formを使おうといろいろ試してみるところとか。ああいう要素は楽しい。
ただ、そうは言っても、一通り読み終わって、いざ自分がスクリプトを書くとなったら、リファレンスは欲しいところ。MSDNってこういう場合にいまひとつアクセスしやすくないのは、重いからだ(Rubyのリファレンス(現在は)とか、Java APIやRails APIとかは軽いんだけどね)。
というところに、同じく技術評論社から、牟田口さんのポケットリファレンス本が出ると聞いたので、紹介します。
Windows PowerShell ポケットリファレンス (POCKET REFERENCE)(牟田口 大介)
(まったく、読んでもいないし、モノも見ていないけど、縦19cm横13cmで、他のポケットリファレンスと同じではないかとのこと)
著者の牟田口さんは、直接の面識はないんだけど、@ITにPowerShellについて寄稿されていたりするWindows Scriptingのエキスパート(MVP)で、というよりも、それよりなにより僕にとっては、Ruby256邪道編の上梓直後くらいにエゴサーチで知ったわけだけど、(Rubyistではない方向から)熱烈に支持をしてくれた、おかげでとても力づけられたし、僕の本が役に立っているらしいと実感できた、ある意味、恩人と言っても良い方です(裏付けのある誉め方してもらうと、そりゃ嬉しいし励みになるからね)。
で、読んでいなくてもリファレンスだし、書いているのはWindows Scriptingのエキスパートなんだから、紹介することになんのためらいもないわけなのであった(というか、僕も自分用にカートに入れた)。
Mono 1.9.2 OS Xをダウンロード/インストールすると漏れなくMonoDevelop 1.0も付いてくる。
ただ、日本語を表示するには、GTK#のリソースをいじる必要があった。
以下に手順を示す。
この設定をしないと、すべての日本語文字が□になるので、さっぱりわからないことになる。
_ きむら(K) [おー、ポケットリファレンスはうれしいですねえ。]
一昨年、翔泳社さんから、Railsの本を上梓しました。
かんたんRuby on RailsでWebアプリケーション開発(arton)
この本のコンセプトは、趣味のWebアプリケーションプログラミングという方向に寄せていたわけですが、同じ出版社、同じ著者、同じRails、同じ10日間という、しかし異なる切り口の本を来月上梓する予定です。
10日でおぼえる Ruby on Rails入門教室(arton)
切り口が異なるのは、編集部が異なるからだろうなぁとは想像しているのですが(以前のはWeb全般系で、今度のはプログラミング系なんじゃないかな)、それは出版社の側の話で、著者の側の話としてはプログラミングに寄せるということで、前の10日ではまったく触れることもできなかったtestディレクトリを今度の10日では使いまくります。
(僕のテストは、思うに、極北のikegamiさんと、赤道直下のt-wadaさんの間で、ぬるま湯のようなTDDなんだろうな、とポジショニングしているわけで、おそらく位置的にはTDの後ろをちょっとひよったあたりかな、とか思わないでもない)
あと、調べ方のとっかかりを出すということとか。練習問題をきっちり作ったとか、そのあたりは、今回のは強く意識した点ですね。なお、本文は2.0には間に合っていないので、付録などで触れたり、という感じです。
(実際に書影が乗るころに、これについてはまた書く予定。レビュアーの方々にいろいろ助けていただいた点についてとか)
後で書くためのメモ。
恋する建築読み終った。
次の本。
電車向けじゃないが献本してもらったアーランのやつが目に入ったので持ち出した。
章立ての説明を読んだら不覚にもワクワクした。
何故か?
おれがばかではあったけど、ISPのメールサービスで、spam判定したら[spam]というマークをsubjectに付けるというのが始まったので申し込んだ。
RubyForgeで公開したアドレス(他じゃないはず)に向けて毎日3桁を越えるspamが来るからだ。
で、なんか急に何もこなくなってしばらくしてゴミ箱みたら、来たものがほぼすべて捨てられている(微妙に残るのもあるので最初気付かなかった)。なんでだ?
で、Beckey!の設定を見直したらあら大変。
subjectに「[spam]」がある場合。
という設定なのは良いとして、デフォルトの「正規表現として」にチェックを入れたままだった。そりゃ、なんでもかんでも捨てられるはずだ。
というわけで、「正規表現として」のチェックを外した(\[spam\] とするのもなんだかなぁという)。
ここはやはり日本のISPなんだから、情け容赦なく【spam】としてくれればよかったのにな、と言いがかってみたり。
妻が使っているiBook G4が本格的にだめになった(何か汁物を机にこぼしたら、それがつたわったか何かして中に入ったらしい)。
くるくる回るやつは途中で固まるし、Command-Sで機動すると最初は動くのだけど、しばらくするとやはり固まる。
そろそろMacBookにしても良いかも、と、きれいさっぱりあきらめることにして、新たにMacBookを買った。とりあえずiBookからは、こないだ追加した1Gメモリは回収して、PowerBook(まだ下取りに出していない)に入れてみたり。
それは良いのだが、HDの中身は救えるものなら救いたい。というわけで、Appleのサポートに電話したら、修理は受け付けるけど、HDだけ外して返すサービスはないとのこと。まあ、そんなもんだろうか。で、修理したらHDも交換になるし、といわれるけど、そもそもMacBook買っちゃったから修理はありえない。こっちは蓋を開けるのが面倒なわけだから、ターゲットディスクとして使えるか(=iLinkケーブル買うメリットあるか?)とジャッジしてもらうと、たぶん、無理だろうという。
では、諸君、分解だ。というわけで、分解webを参考にして分解した。
いや、換装とかじゃなくて、単なる回収で良かった。というくらい、見事に壊してしまった。
最初に下枠をはずすときに、バッテリが収まる薄くなっているところを折ってしまったし、メインボードを覆っていたアルミ板は止めているネジの1つがどうやっても取れないので、いろいろやっていたら、アルミ板の部分が千切れてしまった。
ネジもやたら細かいのがたくさんあるし、PCの大らかさとはえらい違いだ。
で、HDがいかれているのならおしまいだが、以前買ったEVERGREENのUSB IDE変換ケーブルをさしたら、ちゃんと動くじゃん。良かった。
(手元のは56じゃなくて55だから、いつのまにかバージョンアップしたらしい)
最初、3.5インチと違って電源供給コネクタがないので、どうなるのかと思ったら、2.5インチはUSBから取り込んで勝手に動くのであった。
で、移行アシスタントを使って(Airのときこりたのでアプリケーションの移行はしなかった)、無事、サルベージ完了。
ところが、拡張子CWKというファイルが結構あって、それが開かない。子供が作ったファイル群だ。
試すと、Pagesなんかで開くのもあることはあるし、ものによっては勝手にTextEditが開く(どういうマジックだ?)。
(Airと一緒に買ったのだが、最初からファミリーパックにしといて良かった。MacBookには最初にインストールした)
が、なんかおもしろそうなものは開かない(子供が昔作ったやつで、特に不思議な題のやつ(ぺんぺんぽんぽん)とか。くまさん新聞みたいなのは、PagesかTextEditで開くわけだ)。
ところが、もう一度、元のHDを接続すると、かってに判断してアプリケーションを起動するのには驚いた。/Applicationならシステムディスクかどうかは問わないんだろうか。で、AppleWorksで作った絵とかコラージュだということが判明した。ふむ。
というわけで、ApploeWorksだけはMacBookへのコピーしたり。お絵かきツール(これがPagesでは開かなかったファイル)もワープロ(これは開いた)もなんでもかんでも同じ拡張子ってのは、いやだね、という結論。
追記:
下の枠を壊してしまって、しかもアルミを破いてしまったので(最終的にはパームレストの枠も千切ってしまった)、復元できなくなってしまったiBook。このマシンにはMacの美しさを教えてもらったので、廃棄処分にする前に記念撮影。
ラベルの記載を読むとApple製Firmwareが内蔵されているらしい。黒いのはEVERGREENのUSB-ATA変換ケーブル。
プログラミング言語Javaの入門書ではなく、Javaの入門書を宇野るいもさん(この本では本名の花井志生を出してる)が出されたので、紹介。
すっきりわかった!Java (ASCII BOOKS)(花井 志生)
こういうのって、それなりに需要があるわけだし、むしろ言語そのもの入門書や解説書よりも需要があるんだろうけど、どういうユースケースなんだろうか、と少しは疑問も持つ(ちょっと違うな。ユースケースには疑問点はないのだが、そのユースケースの存在そのものに疑問があるというか、おもしろいな、と思うというか)。
たとえば、言語の入門者が背景知識としてJavaとは何か? を知るために読む、というのなら納得は大きいのだが、そうではないだろう。
もちろん、るいもさんのことだから、すべてバラ色のでたらめを書いているわけではまったくない(レビューしたから知っている)のだが。
考えてみたら、新城さんとの共著の.NET入門も、そんな感じか(もうちょっと.NET入門のほうが技術寄りかも)。
参照判定という呼び方があるかどうかは知らないけど、コピー方式はマーク&スィープとは区別されていたように記憶しているし、いずれも有効な参照があるかどうかを判定するという点で、利用側がリファレンスカウンタを操作する方法とは区別されているから、そう分けてみた。
で、リファレンスカウント方式というと、僕は代表的な実装としてCOMを思い浮かべる。COMの場合、言語がVBであれば参照カウンターの処理は処理系が行い、プログラミング言語のソースには直接は示されない(だから、VBプログラムでCOMリークというのは目にしたことはない)、同じくソースコードに明示的に表れないものにJScriptがある。一方、C++の場合は、明示的にAddRef/ReleaseのAPIでカウンタを操作する。ただし、提供されたスマートポインタを使って気にしないことも可能だった。
が、COMで広範に参照カウンタ方式のGCを取り入れたMSが、約8年の実験の末に、.NET Frameworkでは参照方式に変更したわけで、彼らの選択は短期的には常に正しくないが、中長期的には常にうまいことやっているということを考えると、リファレンスカウンタ方式には問題があるのではないかということに思い当たる。
ひとつは、循環参照の問題で、有効な参照が残っているかどうかを判定するシステムであれば、すべての参照が無効となって回収できるはずだが、参照カウンタ方式ではカウンタ値が0にならない状態がある。Pythonの場合は循環参照検出機構を持つことで解決しているようだ。
より大きな問題として、マルチプロセス、マルチノードに及ぶオブジェクトシステムの考慮がある。ダウンしたノード、途中で消滅したプロセスから参照されているオブジェクトはカウンタを戻す機会を失う。そのためにpingをかけたり、大変なことになる。(大変さの例:Managing Object Lifetimes in OLE、なんていうものを持ち出すまでもなく、Win32OLEの実装をみればいかに面倒で、かつ例外的な状況が多いかがわかるかも)
で、最終的にMSはこんなことを言い出すことになった。
The reference counting scheme is the source of many bugs.
単純なシステムであれば、参照カウンタは確実だとは思うが、そんなに良いものではないのではないか、ということ。
5c38868ae7025be85585147dbe6b0fa3
(あとで、/data/asr/index.htmlを作って書いておくべきなんだろうかな?)
ちょっと不安になったので(このマシンがクラックされたとかそういうことではなく、逆に独立してパッケージが出回るようになった場合のことを気にしてるわけですが)、念のため、MD5を公開しておきます。
とは言え、Windowsにはそんな気の利いたコマンドはないので、お手元のRubyで、渡辺さんが公開されているmd5sum.rbスクリプトを実行してください(いや、まったくWindowsでこそRubyは役に立つ)。
追記:と思ったら、そんなに甘くはありませんでした。。スクリプトの先頭に、
ARGF.binmode
と挿入してから実行してください。
(渡辺さんのmd5sum.rbはARGFの利用方法の例になるように、解説も書かれているから参考になります。他にもいろいろ公開されているので、もしご存じでなければ一度は読まれると良いでしょう)
オーム社さんからプログラミングErlangをいただいたのだが、ぱらぱらっと俯瞰するのとは別に、基本的な文法の章まで読み終わったので、書いておく。
つまりは、関数型言語なので、これでなんとなくHaskellとOCamlとあわせて3種類について基本的な文法は知ったことになる(とは言え、ほとんど覚えてないし、使えるプログラムを書けるほど知っているわけでもない)。
参考までに、それぞれ以下の本を利用した。マイコムの目つきの悪い鳥シリーズが出てこないのは、後で読もうとしたためで、最初は薄い本からという方法論のせいだ(Erlangはそれとは異なるアプローチとなったが)。
Haskellはこの本の最初の数章。
Programming in Haskell(Hutton, Graham)
本の価値が厚さで決まるのならば、コストパフォーマンスは最悪の本だが、もちろんそんなことはないと思う。読みやすく、説明は簡潔。わかりやすい。
OCamlはこれ。
プログラミングの基礎 ((Computer Science Library))(浅井 健一)
これも薄い。が、中身はプログラミングそのものの入門にもなっていることと、経路選択プログラムを書くという目的が明確化されているところが良いと思う。
で、なんというか、結局、どれもこれも、タプルとパターンマッチングとリストなのか(というところまで読んだ)。たぶん、C++もJavaもRubyもC#もどれもこれもクラスとメソッドの仮想化なのか、みたいな感じだろうな。
で、プログラミングErlangは、上に掲げた他の2冊と比較するのはちょっとフェアではないのだが、書籍としてはより、読みたくなる点をついている。具体的には、章立てのロードマップが実に明確になっていることだ。というのは並行プログラミングをするのだ、そのためのErlangなのだ、ということを強く打ち出しているからだ。最初に挙げた薄いHaskellはその意味ではHaskellを学ぶためのHaskellだし、OCamlはプログラミングを学ぶためのOCamlなのだが、Erlangは目的設定がうれしくなるということだ。
どうも、僕は、分散オブジェクトと並列プログラミングの2つのキーワードに弱いようだ。つまり、並列プログラミングが好きだ。Javaでもutil.concurrentのアトミックな連中にはわくわくする。モニターを使った待ち合わせはうんざりだが、ロックフリーウェイトフリーは最高だ。ウェイトかロックかどちらを選ぶかと問われれば、フリーを選ぶ。
もちろん分散オブジェクトも好きだ。
(当然、これなのかな)
で、その点(つまりプログラミング言語のドメインの明確化)がプログラミングErlangという本の魅力だ。
でも、違うものの見方もあり得る。つまり、単にプログラミング言語としてのErlangについて、そのプログラムの書き方を知りたいという場合についてだ。その場合は、もしかしたらジョーアームストロング(アームジョーみたいな名前だな。アームジョーを知っているだろうか? 泉昌彦が語る子供のころのがっかりした記憶の物語だ。親戚のおばさんが、電話をしてくる。小学1年か2年のころのことだ。今度、本をプレゼントしてあげるわ。アームジョーという本よ。子供は期待でわくわくする。黒人奴隷のジョーが腕一方で解放を勝ち取る(ハックルベリフィンとか読んでいたりするわけだが)、それともすさまじいパンチ力の黒人ボクサー、ジョーの戦いの物語なんだろうか。夜も眠れない。すっかり想像の中の逞しい黒人ファイター、ジョーのとりこになる。さて、おばさんがやって来る。わたされた本の表紙には「ああ無情」と印刷されていた、という物語だ)の書き方は逆にうっとうしいかも知れない。その場合は、そのあたりをばっさり無視して言語の説明にしぼったアスキーの本のほうが向いているかも。
Macを買うときれいな箱に入ってきて、これが嬉しかったりする。今まで4種類の箱を触ったがいつもそうだ。
DELLの箱も結構さわったが、見られるのはせいぜいXPSが印刷された箱だった程度で、しかし質感はひどいもので、かえって安っぽい感じがした。
emoneの箱は良かったよ。
PCのPはパソのPだってことだ。パソって言葉を耳にするたびにぎょっとする。だって、その言葉を口にしたやつにとっては、意味はコンピュータってことなんだぜ。
パーソナリティをもったパーソナルなコンピュータであることを、パソコンと言い出した連中は否定したのだ。パソコンと呼ぶことでパーソナリティやパーソナルな関係を葬り去ったのだ。
だから、Macをパソコンとは誰も呼ばずマックと、まずいアメ飯のように呼ぶ。まあ、飯は、パーソナルなエクスペリエンスだからそれほど外しているわけでもない。
というわけで、パソではない名前でブランディングし直す時期なんじゃないかな。
すみません、最後の部分を見落としてました。
以前シャープの15"LCD買って、おおこりゃいいですな(黒が黒だ)、と大切に毎日磨いていたのは良いけれど、アルコール混じりのクリーナーだったもんで、気付くと表面がまだらになってしまった(電気が入っているとわからないのだが、電源を落としているとわかる)。
どうもぎらつき防止のコーティングを溶かしてしまったみたいだ。
その後、大型化の波に乗って20"を買ったので今は使ってないけど、良い勉強になった。
という曰くがあって表面が汚いんですが、使っている間は問題ないと、僕には思えます。
SP1を入れてから、HPのプリンタがまともにプリントできなくなった。また、HPか、と思ってインストールし直したりしたが、どうにもまともに動かない。
しばらくいろいろやっていてふと気付いたが、最初威勢良くプリントを開始して、すぐにだんまりになるというパターンだな。
で、最終的にネットワークドライバのフロー制御がdisableになっているのを、Rx&Tx Enableに変更してみたら、これが当たりだった。
SP1を当てた結果、よくわからないデフォルト値になった(インストール直後のデフォルト値とは異なっているのだと思われる)としか思えない。
それにしても、このIntel(R) PRO/1000 MT Server Connectionというドライバは設定項目が多い。
追記:コメント欄にごちゃごちゃ書いたが、間違っている(#c03)と思うので、まじめに考えてみる。それにしても、FreePeekを64ビットカーネルに対応させるんだろうか?(と思ったら、WinPcapにはx64版もあるのか。なら実測だ、とは、少なくとも今はしない)
HPは、AirMac Expressの先につながっている。一方、PC側は100Mbpsの有線LANにいる。プリントデータは数Mバイト以上ある。そこでフロー制御がなければ、PC側は、TCPのWindowサイズ分、一気にプリントデータを送信するだろう(待てよ。先送りできるはずだから、Windowサイズ×先送り可能な分ということか(追記:間違い。Windowsサイズ=先送り可能なパケット数×パケットサイズ)。びっくりするくらい忘れているな)。Switchはしばらくは持ちこたえるはずだ。しかし、所詮安物。送り先はAirMac Expressだからどう頑張っても、速度的に勝てるはずがない。あっというまに、Switchのバッファ(なんか、8Kバイトくらいしかないような気がしてきたよ。20世紀の遺物だし)があふれ、途中でプリントデータは捨てられることになる。
一方、プリンタ側には中途半端にしか送られてこないので待ち状態になる。
この状態で、プリンタドライバ側(TCP/IP)は、ACKが返ってこないことに気づき、送信待ちとなる。TCP/IPの再送間隔しだいだが、何しろMACのところが何も考えずに送信してしまうから、何が起きてもおかしくはない(たとえば、TCPの1パケットの尻切れというような状態だって起こりうる。CRCエラーになるからわかるはずだが、純粋なACK待ちとは異なるから、どういう実装かによって変わるはず—IPは単なるデータグラムなので、ここでは再送はない)。しかし、再送が、またとてつもない量の送出となるため、結局SwitchまたはAirMac ExpressのLANの口であふれてしまう、ということだろう。
おそらく、すべて有線環境なら、フロー制御は(現在のマシンで構成されているネットワークならば)不要かもしれない(と、判断したのでSP1ではフロー制御をdisableしたのだろう)。あるいは、最近のSwitchならバッファが十分にありそうだから、その場合も問題ないかも(TCPのレイヤでACK待ち状態になれば、そこで応答待ちになるから、それ以上は書き込みは起きない)。また、すべて無線LANなら、ドライバーにフロー制御なしというオプションはないから問題ない。
ということだろう。i401さんの場合、VPN(接続先はWANだからLANとの間でやはり遅延が発生するはず)だから、同様にVPNルータあたりであふれたのだと思われる(あるいはWANの中で溶けてしまったか)。
essaさんの企画に合わせて、田壮壮のデビュー作だか、2作目だかについてあさましがてら書いてみようと思ったが、カタログにない。
このどちらかというとモダニストの映画作家(まったく理解できかねるが、シュールレアリストという肩書がつけられているときもある)は、最初、辺境映画からキャリアを積んだわけで、モンゴルだと思うどこかを舞台にした狩場の掟にしろ、チベットを舞台にした盗馬賊にしろ、言葉よりもシーンで物語を語る傾向が強い。辺境映画なので、言葉の喋らせ方が難しいからかも知れない。かくして、ここぞというところでは、言葉がない。
たとえば、盗馬賊の最後、だと思うのだが、連続して狩場の掟も見たので記憶がごっちゃになっているが、赤い風車が無数に回る(はずないな。卒塔婆が回る……はずもないけど、チベット仏教の何かのシンボルだと思うからやはり盗馬賊か、が回るのと合わせて夫婦が塔のまわりを這いずり回るシーンであるとか、あるいは青い凧で主人公の父親の運命が決まるシーン。党の命令で工場から一人、だれでもよいから反革命分子を供出する必要があって重苦しい幹部会議が開かれる。沈黙。お互い、お互いをうかがうだけで、何も言葉が出ない。主人公の父親が会議の雰囲気にいたたまれず、トイレのために退出し、実にほっとした顔で用を足し、そして部屋に近づくと歓談しているのが聞こえ、それで嬉しくなり、そして扉を開けた瞬間に全員の歓談(それは部屋を出るまではありえないことなのだが)がぴたりと止まり、全員の視線が彼に集まり、そしてなぜそれまでの雰囲気が変わったのかに気づいた父親が黒板に書かれた自分の名前を凝視し、しかし、党の指令を受けて会議が始まるまでは実に仲の良かった、今は後ろめたげに顔をそむけたり、困った顔をしていたり、無表情を作ったりしてる顔たちを眺め、そして、自分の愚かさを思い返し、まあしょうがないなと運命を受け入れるシーン(そのあとは子供が中心になるため、それなりに騒がしい映画となって、それほど大したものではなかったが)。春の惑いでは、旧家、田舎の三角関係と、使用人が、それぞれ言いたいことを言わないまま、日課のように崖のある場所へ散歩し、露地から門と母屋を行ったり来たりしながら、時間が過ぎていく。
盗馬賊はそういう作家の初期作品で、チベットが舞台である。
すべての映画はプロパガンダなのだから、もちろん盗馬賊もプロパガンダ映画である。したがって、あたりまえではあるが、代々僧侶の家系の人間が僧侶となる宗教国家というのは、僧侶ではない人間、つまり単なる信者にとっては、実に住み心地が悪いところであるな、ということがこれでもかこれでもかと主人公の不幸とともに描かれる。現世で善行を積めば、僧侶ではなくとも極楽に行けるという教えの宗教国家で、どのような現世がもたらされていたか、ということをいたたまれないほど教え込んでくれる。
ではプロパガンダだとして、現実に目を向けてみる。デモに参加しているのは、農民だろうか? 商人だろうか? 工員だろうか? 技術者だろうか? 誰が革命によって割を食って、誰がそれによって以前よりましな状態になったのだろうか。いつだって闘争が起きれば前衛となる学生たちの動きは?
占領か、解放か、同じことが寄って立つ位置によって変わる。ということだけはわかる。それ以上のことはわからない。
盗馬賊は解放前のチベットを描いた映画だ。
新国立劇場で、カルメン。ヒゲの中尉が酒場で音頭をとる舞踏が良かった。
しかし何より、朝倉摂の舞台がすばらしい。4つの柱で(照明の人もよいのだが)牢獄になったり酒場になったり闘牛場になったり実に美しい。最後は血にそまる十字架かな。
シンプルで巨大な装置と照明といえば、マリンスキーリングをちょっと想起したが、はるかに鮮烈であった。
今を去ること30年ちょい前くらいに、怖い話というのがはやった。深夜放送ネタなんだろうか? で、よってたかって怖い話をする。江戸時代に洒落者の間ではやった百物語の、80年代バージョンだということにしておく。
たとえば、タクシーを四つん這いで追いかける老婆とか、濡れそぼった後部シートとか、崖の向こうのおいでおいでとか、消滅する餃子の峠道とか。
で、恐怖の味噌汁というのがあったのだが、さすがにあまりにばかばかしいので、それはどうでも良い。
というわけで、やっと、1年と3か月ぶりに本棚から取り出し、一気に読んだ。
いや傑作でしたわい。
しかし、この、奇妙な、無機物と有機物、元素と意思、がぐちゃぐちゃに混ざった世界、どこかで読んだような……と思って、本棚をさがすと、以前、友人が貸してくれて、あまりのおもしろさに老後の楽しみに永久保存することにした、СПИ(spiだな)を取り出してみると(追記:邦題は「眠れ」となっていた)同じ人じゃん。というか、向井さんのところにも書いてあったがまったく失念していた(のは、邦題ではなく原題で覚えていたからだ)。アマゾンには出ていないようだが、群像社という出版社の文芸的(ちくまの森みたいなやつ)文庫本だ。っていうか、返さなくてもいいのかな、よくないだろうから、代わりに恐怖の兜を友人には渡すことにしよう。
で、兜のほうは、向井さんの紹介がすばらしいので、おいておくとして、ここではСПИに収められた『ゴスプランの王子さま』について書いてみたい。勝手にしやがれ。
というか、この短編集(СПИは2部構成で、第1部が『ゴスプランの王子さま』という連作短編集(たぶん)、で、第2部が『眠れ』という短編集となっている)、しょっぱなの『倉庫ⅩⅡ番の冒険と生涯』があまりの傑作で、他の作品を読む必要がなくなってしまったので、それだけ、つまり16ページしか読んでいないというわけだ。
そのためには、まずゴスプランから語らなければならないだろう。あたりまえだが、Gothのplanじゃないぜ。ソビエト連邦の経済基盤を形成する脳髄とでも言える組織のことだ。
冒頭を引用する。
はじめに言葉ありき、といってもたぶんその言葉は一つではないだろう——しかし、かれはそのことは何も知らなかった。自分がゼロであった地点において、かれは、新鮮な樹脂の香りを発散させている板が、湿った草のあいだに山と積まれ、黄色い断面で太陽を呼吸しているのを見出した。
かれとは、もちろん、表題のとおり、倉庫ⅩⅡ番だ。比喩とかではない。文字通り、主人公は倉庫だ。もともとは単なる自転車置き場になる小屋だ。だからといって、屋根について議論をしたりはしない。過去の記憶には結構、悩まされているが、ネズミとおしゃべりするような社交的なやつではなく、ひたすら思索する。子供ころは、隣の車庫にいろいろ聞いてランボさんのようにうざがられたりするが、そのうち、ちゃんと成長もする。別に持ち主や町の成長を見つめて歴史を語るような、語り部でもないぜ。単に、それは倉庫なのだ。
彼は恐怖する。
中庭をかれのほうに樽が転がされてきた。まぎれもなく、かれのほうに。(中略)
樽は身の毛もよだつような代物だった。それは巨大な(中略)が、樽が中に運び込まれ、床の上を転がされて一番中央に据えられたのを、意識を失ったⅩⅡ番は見ていなかった。
なんて、おそろしい運命! なんと不幸な主人公! なんて、読者のこっちはこれっぽちも考えないだろうか? もちろん考えない。倉庫が本当に倉庫だから、客観的な読み方が封じ込まれるからだ。読者は主人公とともに、倉庫になりきり、樽の恐怖に恐れおののくはめになる。あー、こわかった。
もちろん、恐怖するには理由がある。樽はこのあと、恐ろしい陰謀と精密な罠を使って、倉庫を完全に破滅させるのだ(比喩じゃないよ。本当の本当にだ)。
つまり、おもしろい。つまり、文学というのは、文字と言葉と文と段落から構成された実験であり、抽象的な(当然だ)時間と空間を存在させることであり、それを正しく構成する能力を持った人がたまにはいて、そういう人はまぎれもない文学作品を生み出す、ということだ。
眠れ―作品集「青い火影」〈1〉 (群像社ライブラリー)(ヴィクトル ペレーヴィン)
(ないと思ったら、あった。ペレーヴェンで調べてたらしい。というかアンドレ・プレヴィンのプレヴィンと同じ綴りだな)
さて、試してみたが、まずわかったことは、Flow Controlの設定項目それ自体は無関係だったようだ(全部を調べる気はないので、推測も多い)ということだ。
関係するのは、Large Send Offload(IPv4) で、この設定がDisableならOK、EnableならNGとなる。いじった覚えはないが、この設定も変えたり戻したりしたみたいだ。既定値がEnableだったのを、Flow Controlと一緒にDisableにして、また戻してしまったのだろう。そうでないと話が合わない。
では、この設定はいったいなんだろう? と調べるとWindows2000の資料が見つかった。Windows のネットワーク タスク オフロード
オフロードというのは、取り除くというような意味だけど、ネットワーク用語としては、「による負荷軽減」あたりで、目的指向な言葉(と思う)。したがって、上のページは、ネットワークにつきもののタスク負荷の軽減、という感じ。Large Send Offloadは、大量送信による負荷軽減というところなのかな?
この状態では、一瞬ネットワーク負荷が100%になる(タスクマネージャによる観察)。
現在は、Large Send Onloadを無効化し、逆にFlow Controlも無効化している。
では、Large Send Onloadが有効なとき、どのようなパケットがプリンタ(の手前のAirMac Expressの手前のスィッチの手前のMAC層のドライバ)に対して流されたのかを見てみる。
以下、mondeはVista SP1マシン、HP9B01E2がプリンタ(の手前のスィッチ——どのノードが問題なのかはここではわからないので置いておく。あと、実際にアダプタが投げているMAC層でのパケットと等しいかどうかは別問題なので、さらに中でまずいことが起きているかも知れない。WinPCapはNDISミニポートドライバだから、アダプタ用ドライバが受けるものと同じものを見ているけど、それはアダプタが実際に送り出すものとは異なる可能性がある)。
23:50:55.390252 IP monde.51264 > HP9B01E2.9100: S 24773620:24773620(0) win 8192どうやら、これがプリント開始の合図らしい。23:50:55.392091 IP HP9B01E2.9100 > monde.51264: S 2545482788:2545482788(0) ack 24773621 win 17520 23:50:55.392171 IP monde.51264 > HP9B01E2.9100: . ack 1 win 16425
23:50:57.478816 IP monde.51264 > HP9B01E2.9100: P 1:1201(1200) ack 1 win 16425 23:50:57.481202 IP HP9B01E2.9100 > monde.51264: . ack 1201 win 16320 23:51:07.139398 IP monde.51264 > HP9B01E2.9100: P 1201:1654(453) ack 1 win 16425 23:51:07.141130 IP HP9B01E2.9100 > monde.51264: . ack 1654 win 15867ここまでは順調に見える。
23:51:07.544423 IP monde.51264 > HP9B01E2.9100: P 1654:5750(4096) ack 1 win 16425 ※1 23:51:07.837354 IP monde.51264 > HP9B01E2.9100: . 1654:3114(1460) ack 1 win 16425 ※2 23:51:08.438426 IP monde.51264 > HP9B01E2.9100: . 1654:3114(1460) ack 1 win 16425 23:51:09.638487 IP monde.51264 > HP9B01E2.9100: . 1654:2190(536) ack 1 win 16425 23:51:10.838539 IP monde.51264 > HP9B01E2.9100: . 1654:2190(536) ack 1 win 16425 23:51:12.042610 IP monde.51264 > HP9B01E2.9100: . 1654:3114(1460) ack 1 win 16425 23:51:14.442746 IP monde.51264 > HP9B01E2.9100: . 1654:3114(1460) ack 1 win 16425
※1。これで相手は死んだらしい。
※2。以降、徐々にサイズを小さくしながらリトライ。間隔については300ms、600ms、1.2sという倍増をしている。
23:51:14.460959 IP HP9B01E2.9100 > monde.51264: . ack 3114 win 17520やっとACKが来た(1460が気に入ったようだ)。
23:51:14.461010 IP monde.51264 > HP9B01E2.9100: P 3114:5750(2636) ack 1 win 16425 23:51:14.752775 IP monde.51264 > HP9B01E2.9100: . 3114:4574(1460) ack 1 win 16425 23:51:15.352800 IP monde.51264 > HP9B01E2.9100: . 3114:4574(1460) ack 1 win 16425 23:51:16.552874 IP monde.51264 > HP9B01E2.9100: . 3114:4574(1460) ack 1 win 16425 23:51:18.953010 IP monde.51264 > HP9B01E2.9100: . 3114:4574(1460) ack 1 win 16425 23:51:23.753277 IP monde.51264 > HP9B01E2.9100: . 3114:4574(1460) ack 1 win 16425 23:51:23.943744 IP HP9B01E2.9100 > monde.51264: . ack 4574 win 17520最初の2636バイトのパケットから数えると9秒たっている。
23:51:23.943794 IP monde.51264 > HP9B01E2.9100: P 4574:5750(1176) ack 1 win 16425 23:51:23.946252 IP HP9B01E2.9100 > monde.51264: . ack 5750 win 16344あっさり、クリア。
23:51:23.946354 IP monde.51264 > HP9B01E2.9100: . 5750:8670(2920) ack 1 win 16425 (なぜ、ここでまた2920とか?) 23:51:28.943574 IP monde.51264 > HP9B01E2.9100: . 8670:9258(588) ack 1 win 16425 23:51:42.844372 IP monde.51264 > HP9B01E2.9100: . 5750:7210(1460) ack 1 win 16425 23:51:43.043423 IP HP9B01E2.9100 > monde.51264: . ack 7210 win 17520 23:51:43.043483 IP monde.51264 > HP9B01E2.9100: P 7210:9846(2636) ack 1 win 16425 (また……) 23:52:39.727630 IP monde.51264 > HP9B01E2.9100: . 7210:8670(1460) ack 1 win 16425 23:52:39.925685 IP HP9B01E2.9100 > monde.51264: . ack 8670 win 17520
最後、ここで完全にだんまりになる箇所まで飛ばす。
23:54:40.323500 IP HP9B01E2.9100 > monde.51264: . ack 12766 win 17520 23:54:40.323559 IP monde.51264 > HP9B01E2.9100: P 12766:13942(1176) ack 1 win 16425 23:54:40.325497 IP HP9B01E2.9100 > monde.51264: . ack 13942 win 16344 23:54:40.325615 IP monde.51264 > HP9B01E2.9100: . 13942:16862(2920) ack 1 win 16425 23:54:45.324828 IP monde.51264 > HP9B01E2.9100: . 16862:17450(588) ack 1 win 16425
一度減ったサイズが常に戻っている。というか、開始してから既に3分経過している。どうも、再試行の結果、プリンタからACKを受けるまでが長すぎて、(別のタイマーで見ているのではなかろうか?)送信サイズがリセットされて同じことを繰り返しているように見える。
あと、サイズを小さくしたときに、PUSHを立てていないのが気になる。これはバグではないか? というか、ずばりバグだろう。PUSHを立てていないのに、後続のパケットを出さずにACKを待っているように振舞っている。したがって、ラージサイズパケットに対してACKを返さない相手と通信するときは、かならず再試行間隔が増えていって、相手が次はまだかと督促するまで待たされているように見える。
一方、Large Send Offloadを無効化した場合は、以下となる。
23:39:35.060059 IP monde.51258 > HP9B01E2.9100: S 954832284:954832284(0) win 819223:39:35.061743 IP HP9B01E2.9100 > monde.51258: S 2372987788:2372987788(0) ack 954832285 win 17520 23:39:35.061801 IP monde.51258 > HP9B01E2.9100: . ack 1 win 16425 (プリント開始指令と思われるものの完了) 23:39:37.038068 IP monde.51258 > HP9B01E2.9100: P 1:1201(1200) ack 1 win 16425 23:39:37.039856 IP HP9B01E2.9100 > monde.51258: . ack 1201 win 16320 23:39:46.780639 IP monde.51258 > HP9B01E2.9100: P 1201:1654(453) ack 1 win 16425 23:39:46.782919 IP HP9B01E2.9100 > monde.51258: . ack 1654 win 15867 23:39:47.175701 IP monde.51258 > HP9B01E2.9100: . 1654:3114(1460) ack 1 win 16425 23:39:47.175737 IP monde.51258 > HP9B01E2.9100: . 3114:4574(1460) ack 1 win 16425 23:39:47.175751 IP monde.51258 > HP9B01E2.9100: P 4574:5750(1176) ack 1 win 16425 23:39:47.180340 IP HP9B01E2.9100 > monde.51258: . ack 5750 win 13424
という具合に、万事快調に進む。PUSHビットも適当(最適かどうかはわからないが)に立てられている。
TSOは、ソフトウェアのレイヤ(TCP/IPの部分)で、いちいちパケットの分割とかチェックサムの計算とかしないで、NICにお任せすることでギガビットイーサの処理に間に合わせるようにするということだ、ということがわかった。
VistaのTCP/IPの実装は、正しくTSOを処理していると考えてみる。そして、IntelのNDISドライバ(なのかNICのファームなのか)も正しく実装しているとする。とすると、4000バイトとかWinDumpでは出ていても、実際にはLANに対しては適切な長さで切られたパケットが送られていると推測する。
でも、それだと3分割で済み、かつ最後のパケットにPUSHが立つのでACKが返ってこないのはおかしい。
ということは、NICのファーム(またはIntelのNDISドライバ)がおかしくて、正しく分割していないのではないか、と推測できる。
まず、SP1で有効にされたというところから、実態は次のいずれかではないかと想像する。
1. x86のNICドライバで対応。x64はだめ。
2. オートネゴシエーション結果、ギガビットイーサと判定したら正しく動く。それ以外の場合は、上位層にお任せ。
1.だったら、しょうがないけど、意味的にCPU負荷を少しでも減らしたいとしたらサーバーだろうから、x64のドライバがだめということはありうるのかなぁ?
2. だったら、お金で解決だ。スィッチの買い替えということ。
でも、ギガビットな人って、他にいないしなぁ、と考えると、やはりLarge Send Offloadを無効にするのが正しいな。
でも、待てよ。まだ届いていないが、タイムリーなことに、
Apple Time Capsule 500GB MB276J/A(-)
を買ったんだった。こいつはギガビットイーサの口を持っている。
というわけで、届いたら試してみよう。(もっとも802.11gのプリンタ相手にギガビットもへったくれもないけど、NASとしての利用時には恩恵に預かれそうだし)
tcpdumpと同じはずだけど、よく忘れるのでメモ。
WinDump -D
インターフェイスをプリントする。
WinDump -XX
ヘッダ情報とデータのHEXとASCIIをプリントする。
WinDump -xx
ヘッダ情報とデータのHEXをプリントする。
WinDump -i xxxx
インターフェイスxxxxを取る。そうでないと適当なのが選ばれる。
WinDump -w xxxxx
ファイルxxxxへキャプチャを書き出す(生データなので、-XXみたいなことをするには、後でWinDump -r xxxx -XXのように読み出して行う)
例)
>windump -D
1.\Device\NPF_{73F0A8D8-4679-45FF-9748-16EF29A9B2FE} (Intel(R) PRO/1000 MT Server Connection)
2.\Device\NPF_{838F3C6C-3C64-4E55-A701-A7882BAD642F} (MS Tunnel Interface Driver)
例)
>windump -i \Device\NPF_{73F0A8D8-4679-45FF-9748-16EF29A9B2FE} -XX -s 256 tcp port 9100 >\temp\ng.dump
思い立ってクラシックのコレクションを捨てまくろうとして、とはいうものの、音楽は残しておきたいので、金曜の夜からPowerBookを使ってiTunesへばんばん取り込んだ。
でだ。夜中作業だから音は出してなかったんだよ。
最初に異変に気づいたのは土曜の夕方頃、ブーレーズのバルトーク(舞踏組曲)を聴いているときだ。
最後の、トゥッティが、突然切れた。ほえ?
あわてて、チェックしてみると、どれもこれも最後の最後で切れる。
響きが残るやつは響きが打ち切り。これは気分悪いが、でもまだ許せる。しかし、バルトークのにしろ、ブルックナーの8番にしろ、最後のトゥッティが切れるのは問題外だろう。
というわけで、すさまじく不快になる。バグでここまで不快な気分になったのは初めてかもしれない。
・デグレ未満(それまでなかったバグ)
・テストすれば明らか(聴けばわかるぞ)
・時間がかかる(というか、一部のCDはゴミ箱から拾い出す必要まであって、これはこれでうんざりだった)作業が無駄になる
・しかも、Win32版なら、いつものことだと思うだけだが、OS X版だ(というか、わざわざ大事を取って、環境を作ったのだ。これも不快100倍増の理由)
・コンシューマ用プログラム
まったく、Appleってのはハードウェア屋で、ソフトがくそだということを思い知らされた。ロジクールや、メルコのドライバみたいなものだな。
むかむかぷんぷん。
というか、音楽を不快な方法で破壊されたから、不快度100倍増なんだな。
0023号が出ました。お疲れ様です。
私は例によって、ホットリンクで野次馬をしていますが、その前に行われた長岡地酒呑み比べのおかげもあってほとんど黙っています。ここには出ていませんが、サイコロを使って5人に均等に機会を与えられるようにするにはどうすれば良いか問題とか、原先生にはいろいろ教えていただいたり、長岡の名物らしいへぎそば(海草が練り込んであるのでつるつる度が高い)の店に連れて行っていただいたり、お世話になりました。ありがとうございます。
記事としては、cgi.rbの問題点指摘記事が良いです。参照可能なソースがあって、それに対してどういう問題があるのか示したものは、ありそうでそれほどない(るびまには考えたら添削コーナーとかあったので、良くある記事だと言えなくもないことに気づいたけど。良いことだ)ので、参考になるでしょう。
私は、日曜の朝一という普段起きていたことがない時間に、『拡張ライブラリの書き方講座』というセッションをやらせていただきます(採択されて嬉しい)。
予定しているのは、タイトルから想像される通りのいたって当然の内容で、ハックをするわけでもハック方法を示すわけでもありません。プログラミングとしてはRubyではなくCのコードとなります。
また、6月時点の状況によっては1.9を意識しますが、現時点では1.8をベースにしようとしています。つまり、実利的な内容ということです。
一応、拡張ライブラリが生成したワーカスレッドからの通知の受け取り方は含めたいと思っています(とは言え、常識的な内容です)。
ジェズイットを見習え |
_ るいも [とりあえずUbuntuのlive cdあたりで立ち上げてネットワークアクセスに問題が起きないか試してみるとか。]
_ arton [なるほど、それが軽いけど、固いですね。]