著作一覧 |
これって、URLを決めた連中がソース(Cかな)に埋められるように狙ったんだろうか。
逆に新しく言語を考えるならば埋められるようにしておくと何かメリットがあるかなぁ?
Win32用CVS。だからwoeとか書くなよ厨房
llfutureで、処理系のメッセージをちゃんとしてくれ、というのを聴いていて、思った。少なくともMSのコンパイラみたいに、日本語で出たほうがまだましだよな。
どういう手段が良いだろうか? 文字列を機械的に抽出してgettextのmo化しておいて、vsnprintfの呼び出しをフックしてそこで取り換えるってのはどうだろうか? rb_raiseとrb_compile_errorあたりを見ると、最終的にはstaticなerr_snprintfに行くし、そこでvsnprintfを呼び出している。
遅そうだけど、漏れは少なそうだし、遅いったって、どうせテスト時点でしか使わない……と考えると、拡張ライブラリでやるのが良さそうだ。コードの中から呼び出しを探してjmpテーブルを書き変えれば良いのだからどうにかなりそうだ。
で、とりあえず、フックできるかどうか試してみる。
#include <stdio.h> #include <malloc.h> #include <string.h> #include <windows.h> int somefunc(char* p, int c) { // 置き換えのターゲット return printf(p, c); } int altfunc(char* p, int c) { // これでフックする char* alt = (char*)_alloca(strlen(p) + 32); int len = sprintf(alt, "***%s", p); if (*(alt + len - 1) == '\n') len--; strcpy(alt + len, "***\n"); return altfunc(alt, c); } int main(int argc, char* argv[]) { // int (*fnc)(char*p, int c) = somefunc; unsigned char* org = (unsigned char*)somefunc; // 後の操作のためuchar_t*にする // int (*alt)(char*p, int c) = altfunc; unsigned char* alt = (unsigned char*)altfunc; int diff = org - alt; // とりあえず、near_label jmp決め打ちでいいや DWORD old; #if_DEBUG printf("%p: %02X %02X %02X %02X %02X\n", alt, *alt, *(alt + 1), *(alt + 2), *(alt + 3), *(alt + 4)); printf("%p: %02X %02X %02X %02X %02X\n", org, *org, *(org + 1), *(org + 2), *(org + 3), *(org + 4)); #endif if (!VirtualProtect(org, 5, PAGE_EXECUTE_READWRITE, &old) || !VirtualProtect(alt, 5, PAGE_EXECUTE_READWRITE, &old)) { printf("error %d\n", GetLastError()); return 1; } else { unsigned char temp[5]; memcpy(temp, org, 5); memcpy(org, alt, 5); *(DWORD*)(org + 1) -= diff; memcpy(alt, temp, 5); *(DWORD*)(alt + 1) += diff; } return somefunc("hello %d\n", 32); }
で、デバッグモードでやってみる。
c:\home\test\Visual Studio 2008\Projects\TestHello\Debug>testhello 0100109B: E9 C0 03 00 00 010010FA: E9 01 03 00 00 ***hello 32***
よっしゃ。できた。VirtualProtect APIがミソだな。ページ単位の設定だから2回呼ぶ必要はないはずだけど、逆にやり過ぎても大丈夫なようだ。
ではプロダクトモード
c:\home\test\Visual Studio 2008\Projects\TestHello\Release>testhello hello 32
え? なぜだ? 死ぬならわかるが……
デバッガで逆アセンブルリストでステップを追う。でも読み込んだアドレスの内容がjmpテーブルっぽく無い。なぜだ?
int somefunc(char* p, int c) { return printf(p, c); 00171000 jmp dword ptr [__imp__printf (1720ACh)] --- ソース ファイルがありません。 ------------------------------------------------------------ 00171006 int 3
すげ。いきなりprintf呼ぶのか。というか、jmpテーブル無しで直接、関数のアドレス持ってるし。というか、ますます死なないのが不思議になる。
00171189 add esp,8 } return somefunc("hello %d\n", 32); 0017118C push 20h 0017118E push offset string "hello %d\n" (172130h) 00171193 call dword ptr [__imp__printf (1720ACh)] } 00171199 mov ecx,dword ptr [esp+20h] 0017119D add esp,8 001711A0 pop edi 001711A1 pop esi 001711A2 pop ebp 001711A3 pop ebx 001711A4 xor ecx,esp 001711A6 call __security_check_cookie (1711AFh) 001711AB add esp,0Ch
というわけで、vsnprintfに対してやってみた。
が、難しいことがわかった。
とりあえず、VS2008なら次のようにすればできる。
#include <stdio.h> #include <malloc.h> #include <string.h> #include <windows.h> int alt_vsnprintf(char* buffer, size_t count, const char* format, va_list argptr) { char* alt = (char*)_alloca(strlen(format) + 32); int len = sprintf(alt, "***%s", format); if (*(alt + len - 1) == '\n') len--; strcpy(alt + len, "***\n"); return _vsnprintf_l(buffer, count, alt, NULL, argptr); } static int (*altvsnprintf_p)(char*, size_t, const char*, va_list) = alt_vsnprintf; static unsigned char* palt; int _tmain(int argc, _TCHAR* argv[]) { DWORD old; int x[] = { 32, 33 }; char buff[128]; va_list aptr = (va_list)&x; unsigned char* org = (unsigned char*)vsnprintf; palt = (unsigned char*)&altvsnprintf_p; VirtualProtect(org, 8, PAGE_EXECUTE_READWRITE, &old); *org = '\xff'; *(org + 1) = '\x25'; memcpy(org + 2, &palt, 4); *(org + 6) = *(org + 7) = 0; vsnprintf(buff, sizeof(buff), "%d-%d", aptr); printf(buff); return 0; }
デバッグモード、リリースモードのいずれでも、実行すると、32-33ではなく**32-33**が出力される。
これは、元のvsnprintfの利用をあきらめて、代替関数はvsnprintf_lを呼ぶようにしているからできているだけだ。vsnprintf_lが存在しないVC6でどうやって実現すれば良いか? (gccを使う場合は、gnulibのソースからvsnprintfと必要な関数(vasnprintf)を取り込めば良いのだが)
問題は、vsnprintfのコードを書き変えて、代替関数へジャンプさせる点にある。
書き換えるために、元のコードをどこかへ保持しなければならない。
これ自体は、それほど難しくなく、retに出会うまでコピーしてコピーした領域を実行可能属性に変更し、代替関数からそこへ飛べばよいからだ。
しかし、実際には、その中で相対アドレスを利用したcall(helper関数。gnulibのvasnprintf相当)があるため、単純にコピーすると飛び先が異なるので即死することにある。
かといって、書き変えるとすると、ニアな相対アドレスへのcallの代わりに48ビットを利用するcallへ書き換える必要があり、それは厄介だ。……やればできるけど、やりたかないね。
そこで、代替関数側で、完全に処理を奪うというのが簡単なのだが、vc6には、代替関数側で利用できる実装がないというところまで。
というか、それを外部からロードされたDLLでできるかどうかとか、とか、試してないことはあるけど。
#if _MSC_VER < 1300 { FILE str; int ret; str._flag = _IOWRT | _IOSTRG; str._base = str._ptr = buffer; str._cnt = count; ret = _output(&str, alt, argptr); putc('\0', &str); return ret; } #else return _vsnprintf_l(buffer, count, alt, NULL, argptr); #endif微妙だなぁ。
irb(main):018:0> class X irb(main):019:1> def self.si irb(main):020:2> puts 1 irb(main):021:2> end irb(main):022:1> end => nil irb(main):023:0> class X irb(main):024:1> alias :si2 :si irb(main):025:1> end NameError: siはclass `X'の未定義メソッドです from (irb):24 irb(main):026:0>
NameErrorMesgの"!"をオーバーライドしたいのだが。
まだ途中もいいとこint _vsnprintf_l( char *buffer, size_t count, const char *format, locale_t locale, va_list argptr );
いや、まあ、処理系依存を示す_が付いているけどさぁ。
で、こんだ適当なmanを開く。
int vsnprintf_l(char * restrict str, size_t size, locale_t loc, const char * restrict format, va_list ap);
そして、locale_tの位置を見比べて、なんでこんなことが起きたのかを想像してみる。
追記:NOZAKIさんが想像してくれた。ありがとうございます。
* snprintf → snprintf_lと修正する際、va_start(3)の引数が変わらんよにしたMacOS X
* 新しく追加する引数locale_t必ず最後にするちゅー原則を守ったMSVC
ああ、なるほど。後者はva_startの引数が変わりますね。前者を実装するのは誰になるかわからないけど、後者はMS自身=ライブラリ提供者側の修正で済むから、というのもあるかも。
irbでテストしてたから気づかなかったけど、拡張ライブラリだから評価は構文木作った後になる。だから、文法エラーは日本語化されない。当たり前のことであった。
まったく存在自体を知らなかったのだが、きのうアスキーに行ったら受付に等身大のこれが置いてあって目がテンになった。で、思わず記念撮影。
なんだ、このもすごくかわいい段ボールのロボットは?
で、あとになってダンボーという名前を知ってちょっと検索したら、すごい有名人でもっとびっくりしたり。
ちゃんとアマゾンで売ってたり(アスキーに住んでいるのとは別のものみたいだけど。目は光らなかったし、質感もなにも本物の段ボールだったし)。
こっちはもっとくだらないなぁ(感嘆)。
【Amazon.co.jp限定】 リボルテック ダンボー Amazon.co.jpボックスver(-)
でも、アマゾンでこれが売ってるってことは、楽天バージョンとか、cbook24バージョンとかもあるんだろうか?
マーラー: 交響曲「大地の歌」 ほか(ケルスティン・トルボルク)
ヴァイオリンの音が甘美だというのは、欧州が2度目の大戦を始めるまでの話だ。
70年代には「甘美」なヴァイオリニストというのはまだ残っていたかも知れない。しかし、みんな(メニューヒンやオイストラフを挙げようか?)新古典主義の洗礼を受けていたし、突然、イスラエルからやってきたズーカーマンとパールマンという当時の若手の中に、過去の何かをみとめることができたくらいのことだ。
甘美なヴァイオリンというのは、ある種の演奏様式であり技術である。つまり、ポルタメントと僅かなルバートのことだ。
それは音を揃いにくくするし、あまりに微妙な加減が要求されるので、巨大なホールで整然と、録音も可能な正確さで、しかもある程度の大きな音を維持するには、向かない技術だったと思える。
最後に、チェリビダッケが、新古典様式ではあるものの、戦前の記憶を残しているかのような繊細な演奏で見せることがあったとは言えるにしても、それは明らかに時代的な要請からはずれていたし、捨てるべき過去の技術に過ぎないのだろう。
と、1930年代のウィーン、まだアメリカで録音のための技術を取り込んでいなかった若いワルターが、マーラーの直弟子のワルターが、1936年に、ドイツ零年の1ディケイドほど前に、惜別の音楽をウィーンの楽団と奏でる。細かな装飾に彩られた弦がからみあい、弦の動きに合わせて音が大きくなっては小さくなる、鳥の啼き声。
衰退する産業、技術、媒体は、衰退すべくして衰退するのだから、それはそういうものだ。衰退して消え去って70年(1人分の時間)が経過して、その時の人が味わえば良いのだろう。
$ diff -u -p html_anchor.rb~ html_anchor.rb --- html_anchor.rb~ 2006-11-28 01:33:19.000000000 +0900 +++ html_anchor.rb 2008-09-07 02:13:09.825832000 +0900 @@ -24,12 +24,21 @@ # def anchor( s ) +File.open('/tmp/tdiary.log', 'a') do |f| + f.puts "html_anchor(#{s})" +end if /^(\d+)#?([pct]\d*)?$/ =~ s then if $2 then "#$1.html##$2" else "#$1.html" end + elsif /^([\-\d]+)#?([pct]\d*)?$/ =~ s then + if $2 then + "?date=#$1##$2" + else + "?date=#$1" + end else "" endさらに追記:良く考えたら、mod_rewriteのパラメータを変えるのが筋じゃないか? と思ったら、プラグインの説明のほうに-を含めるように書いてあった。
おとといアスキーへ行ったときに見かけて、ぱらぱら読んだら良さそうだったのでアマゾンへ注文。
ミニ実験でつかむパケット解析手法 ネットワーク原理の観察からトラブルシューティングまで(荒井 美千子)
名前忘れたが、以前はEtherreal(こいつのせいでなんどapt-getしたことか)とか呼ばれていたスニファ使いながら、いろいろ眺め方が書いてあった。説明もていねいな感じだったし、種類もいろいろ出たように見えたので購入決定。
最近、生のパケットを見る機会が減った(ってこともないかと思ったけど、ここ1年では、仕事では半年前に一度、家ではネットワークプリンタとVista SP1のときくらいか)ので、ちょっとうとくなってるのは間違いなさそうだし。
c:\home\arton>set PATH=c:\home\ruby-1.9.0-2\usr\bin;%PATH% c:\home\arton>ruby -e 'p Time.now.to_s' "2008-09-07 21:36:44 +0900" c:\home\arton>set PATH=c:\home\ruby-1.9.0-3\usr\bin;%PATH% c:\home\arton>ruby -e 'p Time.now.to_s' "2008-09-07 21:37:19 +0900" c:\home\arton>set PATH=c:\home\ruby-1.9.0-4\usr\bin;%PATH% c:\home\arton>ruby -e 'p Time.now.to_s' "2008-09-07 21:37:29 +4363008"追記:って言うか、Win32の処理がstrftime.cのcase 'z'に実装されていないし。 追記:タイミングが悪かったのか。Revision 19008
c:\home\arton>irb irb(main):001:0> File.open('b', 'w').close => nil irb(main):002:0> "#{File.ctime('b')}, #{File.mtime('b')}, #{File.atime('b')}" => "2008-09-08 00:58:10 +0900, 2008-09-08 00:58:10 +0900, 2008-09-08 00:58:10 +0 900" irb(main):003:0> File.open('b', 'a') {|f| f.puts } => nil irb(main):004:0> "#{File.ctime('b')}, #{File.mtime('b')}, #{File.atime('b')}" => "2008-09-08 00:58:10 +0900, 2008-09-08 00:58:58 +0900, 2008-09-08 00:58:10 +0 900" irb(main):005:0> IO::read('b') => "\n" irb(main):006:0> "#{File.ctime('b')}, #{File.mtime('b')}, #{File.atime('b')}" => "2008-09-08 00:58:10 +0900, 2008-09-08 00:58:58 +0900, 2008-09-08 00:58:10 +0 900" irb(main):007:0>
ファイルを作るとctime、mtime、atimeに同一時刻が入る。それは当然のこととして。
ファイルへ書き出すと、mtimeが変化する。modified timeだろうからそれも当然だ。
でも、書きだすということは、アクセスはしているわけだが、atimeは変わらない。ファイルからデータを読み込んでも変わらない。
File.GetLastAccessTime メソッド 指定したファイルまたはディレクトリに最後にアクセスした日付と時刻を返します。
となっているが、上の結果からそれは正しくないという結論となる。
Rubyのatimeだからか?
そんなことはない。Rubyであってもファイルシステムから時刻情報を読み込んでいるのだから、元の値がそうなっているということなのだ。
それだけならばまだいいが
irb(main):007:0> File.delete 'b' => 1 irb(main):008:0> File.exist?('b') => false irb(main):009:0> File.open('b', 'w').close => nil irb(main):010:0> "#{File.ctime('b')}, #{File.mtime('b')}, #{File.atime('b')}" => "2008-09-08 00:58:10 +0900, 2008-09-08 01:08:17 +0900, 2008-09-08 01:08:17 +0 900" irb(main):011:0>
実は、ctimeはファイルの単純な作成時刻ではない。同一ディレクトリ上に最初に同名のファイルを作ったの時刻がctimeなのだ。それに対してatimeは、そのファイルのインスタンスを作った時刻となる。
調べると、ウィルスバスターなどが検査を完了した時刻をatimeに設定していたりする。
したがって、atimeというのは上で引用したMSDNの説明のように単に最後にアクセスした時刻ということではなく、「特定のアプリケーションがファイルにアクセスした時刻」をログするためのフィールドということになる。初期化されるのは、そのファイルのインスタンスを作成した時点だ。
少なくともWin32(NTFS)ではそのようになっている。
現在、File#atime=(time)や、File.atime=(time)メソッドは未定義のようだが、Win32のファイルシステムを扱うには、atimeを更新するメソッドが必要だということになる。
宇野るいもさんと、『開発の現場』で連載していた、『コーディングの掟』が単行本になりました。
コーディングの掟(最強作法) 現場でよく見る不可解なJavaコードを一掃せよ! (開発の現場セレクション)(arton)
軽い読み物調で、実際に見聞きした妙なコードや運用などを元ネタ(もちろん同値でも参照等価でもなく、意味等価に変えているわけですが)に論評し、どうすればよりベターになるのかを示すという技術系読み物です(それっぽい表紙ですな)。結構、軽いですが、内容はそれなりに重かったりもします。たとえば、ソース管理ツールの運用についての章は読み応えもあります。
そういう意味では、以前に宇野さんと書いた
Javaプログラミングの処方箋 (Programmer’s foundations)(宇野 るいも)
を、より読み物よりにして、かつ泥臭くしたような本とも言えます。
校正のため、あらためて読み返してみたら、なかなか面白かったので、きっと面白いでしょう。
たとえば、宇野さんの書かれたところですが、ロギングのためのコードの説明がいつの間にか、commons-loggingがロードできないトラブルの話になって、それを解決するために、Tomcat(というかJavaのというか)クラスロードの仕組みの解説になって、原因を説明するところとか、僕にはすごく面白い。
というわけで、どうぞよろしく。
なお、校正のために読みなおしたところ、手を入れる必要が感じられなかったので(一部、補足したところはあります。たとえば分散SCMについて言及を入れたりとか)、連載時の記事から誤植や書き間違いの修正は入れていますが、ほとんど同じものです。
構造化するってのは、機能で分けることだという言い回しを見かけることがある。
多分、こういうのだろう。
# 機能=function def open(path) File.new(path, "r") end def read(f) f.read end def close(f) f.close end f = open('foobar') puts(f.read) f.closeで、それに対して、そもそもOOPではどうしたといいだす場合には、
#機能 = use case class FooBar def initialize(path) @f = File.open(path, "r") end def show(f) f.puts(@f.read) end def close @f.close end end foobar = FooBar.new('foobar') foobar.show($stdout) foobar.close
とかいうように、エンティティとして扱えるように、最初のコードではバラバラだった「機能」をカプセル化する。
しかし、カプセル化されているとは言っても、下の3行が3行であることに何の変りもない。メリットはなんだ?
むしろ、この場合であれば
# 機能=feature class FooBar def self.show(path, f) File.open(path, "r") do |file| f.puts(file.read) end end end Foobar.show('foobar', $stdout)
のほうが、よりカプセル化されているのではなかろうか?しかし、結果的に静的なメソッドになってしまった。
はて?
上のは、いんちきがあって、最初のと最後のは視点が異なる。
最初のは、プログラミングとしての構造化で、機能というのは細粒度となっている。与えられたパスからファイルを開くとか、与えられたファイルを閉じるとか。
最後のは、モジュールの導入だ。FooBarというクラスはまったくクラスの必要はなく(インスタンス化を考えてはいない)のだが、与えられたパスのコンテンツを表示するという、最初の例ではメインが実行していた処理そのものを行っている。この場合、FooBar.showの内部実装がOOPLによるものかたとえばCOBOLによるものかは、この粒度からはどうでも良いものだ。
「モジュールを黙殺しちゃってるんです」というのは、最初と2番目(例が無茶だが)とは別に3番目があることを言っているのだと思う。3番目はマルチインスタンスは無視しているが、2番目(あ、ちゃんとaskじゃなくてtellするように引数を使ってたので違う例になってしまった)と同様にtell, don't ask則にしたがっているというのは重要だ。というか、もし2番目でshowメソッドではなくreadメソッドを実装していたとしたら、それは最初のやつよりも手間がかかるぶんだけ、もっと悪い(この処理では同時に複数のFooBarのインスタンスが不要だと仮定している)。
というように、2.5mあたりに視点をおくと、固い3番目のFooBarの亜種をたくさん用意することこそが重要になるので、COBOLのほうがへたなJava(showメソッドではなくreadメソッドを実装するようなタイプ。ゲッタとかセッタとか)より、よほどモジュール化できるため、システムを組みやすいということなのではないか、というように推測してみる。
亜種が複数あるのに対して、ポリモーフィズムは不要なのかといえば、それは設定可能なフレームワークのレベルでサポートされることになる(粒度が粗いというのはそういうことだ)し、そのような外挿しの仕組みのほうが運用に自由度を与えられるからむしろ望ましい(場合がある)。
以前、買ったものの、ローズウォーターさんの赤ちゃんだけ読んで(同じ早川だからこういうのも良いかも)なんとなくそのままにしてあった、朝食のほうも読んだ。
チャンピオンたちの朝食 (ハヤカワ文庫SF)(ヴォネガット,カート,Jr.)
そしたら、キルゴア・トラウトが書いた踊るあほうがおもしろいのなんのってしむかと思った。
これこそディスコミュニケーションの極北というやつだな。
長さにして、1ページに満たない掌編というかプロットだけなのだが。
というか、トラウトってダーガーにかぶるし、そういうのはスタージョンにも出てくるし、やっぱりアメリカには、無数のダーガーがうろうろしてはいないのか、部屋の中に閉じこもって一心不乱に何かを作っているというイメージがあるんだろうなぁ。いや、いるのかも。というか、確かに一人は実在した。
非現実の王国で ヘンリー・ダーガーの謎 デラックス版 [DVD](ジェシカ・ユー)
と同時に、踊るあほうだが、アメリカは死んだという大事なお知らせをするために、野郎二人がオートバイにまたがって伝道の旅につくものの、彼らのメッセージは、髪を伸ばしてチョッパーにまたがってふらふらすることで伝えるわけだから、そのお知らせを受け止めるまでもなく、すっ飛ばされてしまうってのと、時代的には同じなのか。
いまさら見たかないけどな。
つまり文字は長く映像は短い。
ふと気づいたが、LINKAGE SECTIONと同様な考え方だな。
むぅー、なぜかうさちゃんの口を90度回したやつをつけていた。気付かなかったってことは、その程度の理解だったんだろうなぁ。
ルグリとかマレーホフとかは無視して、子供と観にいく。
ジゼルなんて曲はえらくつまらないし、物語もかすだし、というかホワイトバレエなんで(白鳥の湖を別とすれば、有名どころの観ている範囲では)眠くなるだけの代物だけど、ああ、やっぱりえらくおもしろかった。
家から飛び出すやいなやびっくりするようなはしゃぎっぷりで、思わず愉快になるし。
それが一転して、実は伯爵と知ったところで(それより前、この演出では二人で手に手を取って家の前を離れるシーンを挿入しているから、えらく意味深でもあるけど)狂乱するのだが、その狂乱っぷりときたら、おっかないのなんのって、生身の人間の舞台であんなおっかないものは、初めて経験した。
ある点においては、それは見た目のギャップで、レッサーパンダの大暴れというか、目の大きさを強調した強いマスカラのメイクに、丸顔、おかっぱ系黒髪のせいもあるだろうけど、ただでさえ踊りが大柄で派手な人が狂乱して踊るのだから、片時も目が離せない。ただでさえでっかめな目をかっと見開いてあっちへとんでこっちへとんで、剣を持ってくるくる回す(そりゃ、そういう振り付けと決まっているけど)、本気で怖かった。
表現力ってのは、本当に天性のものだな。
で、二幕。だから退屈なんだってば、てば、てばと観ているうちに、登場すると、登場するだけで、なんか違和感があるのだが(髪が短いからかなぁ)それが実によい。というか、本来違和感を覚えない状態なら、それは退屈でうんざりなわけだから、違和感があるのはよいことなのだ。
ただ、1人で飛ぶときはどうも低めに飛んでいた気がしたけどなぜだろう。音を殺そうとして抑制しすぎたのだろうか、ということがわかるほど、技術的なことは知らない。
で、またこないだのドンキホーテでもコンビを組んでた人だと思うけど、実にイキがあっているというか、うまく引き立ててくれるというか、飛んだり浮いたりが、実にきれいでおもしろく、これならジゼルもよいものだ。というか、むしろ、ドンキホーテよりも、またこれやってくれないかな、また観たいというという感想。
いやぁ、観にいってよかった。あれはすばらしかった。
どのくらいおっかないかと言うと、思い出したが、バッコスの信女を演ずる白石加代子を越えるおっかなさ。
と生身の舞台で思い出し、検索してみたら、NHKアーカイブスがひっかかった。
で、保存してあるのは結構なことだが、なんでこれ見られないんだ?
トロイアの女 [DVD](白石加代子/蔦森皓祐/苅野久/見神忠男/杉浦千鶴子/鈴木健二/高山春男)
こっちは観た記憶はないなぁ(いずれにしろ加賀へは行けないから観たとしてもNHKだけど)。
・平べったいほうのハートを入れたテキストファイルを、"r:utf-8"で読むと、その文字のところでエラーになる。あとでコードを調べる予定。
・"r:utf-8"が、メモ帳で保存した、早い話BOM付きファイルを読めないのは文句をつけるべきか、そういうものだとあきらめるべきか、判断に迷う。(追記:ruby-dev:32986にあった。しかし任せられても困るような気もするなぁ。IO#openをさらうようにすれば良いのか)
ちょうど2年ほど前に買ったE521のメモリーが異常なことになったので、そのDIMMのどちらかが壊れただけだとは思うが、安心のため、マシンそのものをInspiron 531へリプレースした(AMD系列ということなのだ)。
B001AN68HK
(買ったのとは構成が違う)
E521がAMD64x2 3000+で9万円近かったのが、5000+で5万円に届かない(勤め先がグローバルカスタマー契約なのだ)ので、価格だけでみればずいぶん安くなった感がある(2年で壊れると考えると安くはないけど)。
HDDはどちらもWDの320Gだが、メモリーはE521が533だったのが667に変わったので不良ではないほうのメモリーの流用ができず、それはちょっと計算違いではあった。
しょうがないので、昨日、渋谷へ出たついでにビックでメモリー買おうかと思ったら、バッファローの箱入り娘しかなくて、667の1G×2とか買うと3万円を超えることがわかってびっくりして、家帰ってからアマゾンで発注(秋葉原めんどくさい)。
I-O DATA PC2-5300(DDR2-667) DDR2 DIMM DX667-1Gx2 DX667-1GX2(-)
でもアマゾンで買うのって、写真があてにならないのでちと怖くもある。実際、あやういところでとんでもないのを買いそうになった。
Transcend JetRam デスクトップPC用増設メモリ DDR2-667 512MB×2 永久保証 JM1GDDR2-6K(-)
1GBって書いてあるし、上のIOデータに比べると×2しても安いし、トランセンドはふつうだからこっちのほうがいいじゃん。でも、よくみると、カテゴリーにWindowsノートとか書いてあるし。もしかしてSO-DIMMなのかわけわからなくなって調べると、カテゴリーの登録ミスっぽいけど、それよりも512M×2で1Gの製品だった。これ×2で注文したら4枚来て、どうにもならなくなるところだった(Inspiron 531はスロット4つ)。
で、とりあえず2GBでVista Home Premiumが動いているのだが、新品だと2GBでも別に問題なく動く。石が速くなったからかも。でも、オンボードのグラフィックはてんでだめなようだ。Vistaのチェックを見るとグラフィックは2D、3Dとも3.0で、他はすべて5を超えているからバランスも悪い。で、E521に増設したGeForce7600を入れて、とりあえず4.xまで底上げ。
というようなことをしていて、つくづく思うのは、デルもコストダウンに邁進した結果だろうが、どうでも良い、ショップPCみたいなマシンになってしまったな、ということだ。
E521は、デルらしいマシンで、スライドノッチで蓋が片羽バタフライ式に開いて(もっとも蝶つがいがないので、はずすことになるけど)、ディスクの交換も、青いプラスチックのバネ兼スライドケースをつまんだりひっぱったりすればOK。カードもつまみをひっぱれば抜けるし、早い話がドライバーとかを使う必要がない。実に使いやすいケースを使っている。ケーブルを通したりひっかけたりするためのフックが要所要所についているので、きれいにまとまるし。
しかしInspiron 531はいきなり、ネジまわしをつかわないと蓋は開かないし、ハードディスクもネジで止めるようになっている。で、もちろん余分なネジは付属していない。ケーブルを通すフックなんかも付いていない。
なんか、メーカーから購入するメリットがあまり感じられないつくりだ。
デザインも妙なへこみやでっぱりや洞窟とかがなくて、そのへんで売ってそうなやつだし。
まあ、それなりに静かだし、蓋を開けることはほとんどない(メモリーが届いたら開けるけど)ので、いいじゃんと言えばいいじゃんだし、それで数万円安くなっているのだから結構なことだとも考えられるけど、おれは、前のネジがいらないケースのデルが好きだったな。というわけで、次はないかも。
今更ながらRSSについて調べようと、まずはとっかかりとしてWikipediaを読む。RSS。
そこで、なぜ「RSSは〜の省略形だが、〜'の省略とも〜''の省略とも……とも言われています」というような書き方がされるのかやっと理由がわかった。
こうやって後になってみると、Netscapeの好き勝手が結構残っているものだな。
というわけで0.9なSOAPは好きだが、WS-*は嫌だね。わかるんだけど。確かにSやTをまじめにやればああなるってのは。
でも使われているのは単なるIだったりするわけで、なんだかたぁ感がするのだ。
以前用意しといたチェックボックス、あまり意味がないような気がしたのでバージョンアップを機会に消したのだが、どうもすり抜けるやつがいるところを見ると、効いていたようだ。
つまり、前は、最初にチェックボックスを入れたものの、すり抜けるやつがいるので、単語と構成文字のフィルタで頑張るようにしたのだった。そこから短絡して、チェックボックスは効果がなくてフィルタが一番と結論して、今度はフィルタで頑張るようにしたのだが、すり抜けるやつがやっぱりいるということは、結局、打てる手は全部打つってのが正解なようだ。
以前入れたツッコミ用のチェックボックス(元は青木さんが作成したのだと思う)だが、プラグインになっていれば便利だろうとやってみた。
しかし、TDiaryCommentクラスがプラグインをロードするのは、日記を保存したあとだった。したがって、プラグインとしてお手軽導入はできないという結論。チェックした時には既に書き込まれているからだ。保存されたものを後から削除するというのは、どうも気に入らないし。
とは言えせっかく作ったのだから、あまり役には立たないけど、公開しておく。
odzさんのところでデフォルトプロパティについての話題があって、ちょっと試してみた。
次のVB6のプロジェクトを作る。
'Class1.cls Dim obj As Object Public Property Get foo() As Object Set foo = obj End Property Public Property Let foo(ByVal o As Object) Set obj = o End Property
fooプロパティはツールの設定でdefaultプロパティとしておく。
フォームも用意する。
'Form1.frm Private Sub Command1_Click() Dim x As New Class1 Dim y As New Class1 ' As Class1で試してみたり x = Label1 x.foo.Caption = "helloS" MsgBox x y = x ' Let y = x で試してみたり MsgBox y End Sub
省略するが、スタンドアローン実行ができるように、Sub Mainも用意し、かつ、ActiveX Exeとしてコンパイルしておく。これはClass1をCOMコンポーネントとしないと、どうもdefaultプロパティが有効にならないようなので(確認していない)。
これは、何かというと、デフォルトプロパティがオブジェクトの場合の動作を見たいということだ。ここでは、Class1のデフォルトプロパティはfoo(内包したオブジェクト)、LabelのデフォルトプロパティはCaption(文字列)だ。
いろいろ試してみたところ、次の結果を得た。
まず、変数(ここでは、xとy)に対するLet代入(y = x)は、y.foo = x.foo.captionに置き換えられる。つまり右辺のデフォルトプロパティの呼び出しは繰り返される。しかし、左辺については繰り返されない。
次に、setの右辺は、オブジェクトそのものとして評価される。デフォルトプロパティとはならない。したがって、setは左辺だけでなく右辺にも影響する。つまり、set y = x という書き方は常に有効。
つまりSetは評価しない。
あと、思いだしたけど、オブジェクトの場合に、Letが型に応じた特別な処理をするのではなく、SetならばQueryInterfaceを行うというように特化させたかったのかも知れない。COMは参照カウンターがあるので、単なる代入では済まなくて、参照カウンターのインクリメンタルをなんらかの方法で設定側が行う必要があるからだ。
地下鉄乗ってたら、隣に若い女性が腰かけた。連れも若い女性でどちらもチャーミングで、結構なことだ。
ところがどうも妙なのだ。手振り激しく「だびでびでひでbひだばとぅびや」みたいなものを話して会話している。「ってな感じでね、どびでぃびだばやまねびでぃべだたとえばねどぼるびでべでびで」なんじゃい? 日本語勉強中の外人ってわけじゃなく、日本語ネイティブが妙な音を混ぜているという感じだな。
しかしどうやら上達がどうのとか言っているし、もっと早い友達がいるとかも聞こえてくるし、会話が成立しているようにも見える。
しばらくしてパターンがわかってきたような気がしてきた。何を言ってるかはわからないが、ラ抜き言葉とかタヌキとかの一種のようだ。したがって、すごい速度でどびでびどでだばしているときは、それは意味なくて、ときどきかどでびなびでばらびでもなどでばとか言っているときは、有効な音が混じっているのだろう。
そのうち、ちょっと人前では話題にしにくい話を始めたらしく、ひそひそ声で相談をしたりしながら、だびゃでびどばだが始まったがちょっとテンポが悪くなって、何やらいくつかの単語が判明できたりもしたが(右手の親指から薬指まででアルペジオしながら小指でメロディーを弾くような感じだ)、ほとんどわからなかったが、そういう会話を地下鉄の中ででっかな声で話すかわいい女の子二人組という取り合わせが、結構、おもしろかったどびでびだばや。
子供がメモ帳使ってテキストを打っているのを見ていたら、ごく自然にUnicode(UTF-8ではなく、16ビットのやつ)を選んで保存していた。
というのは、ハートとかハートとかハートとかが変換すると出てくるからだ。
変換して出てくればそりゃ使うだろう。(でも既定で記号辞書は無効になっているのだが、いつ変えたんだろう? OfficeをインストールするとOfficeのIMEがそう設定するのか?)
そして保存しようとすれば、Unicodeを選べと警告してくる。素直にやれば、そこでUnicodeを選ぶだろう。
こんな感じで、じきにUnicodeのBOMが付いたテキストファイルが蔓延することになるんだろうな。「テキストファイルでお送りください」とか書いたりすると。それは良いのだが、だったらUTF-8を勧めてほしいと思わないでもないが、UTF-8のBOMが付くとそれはそれで厄介か。
「単位」と確実に打った覚えがあるのに、妙に、「単に」と変換されることが多くて不思議に思っていた。
どうもIMEが気をばりばり利かせて「tanni」を「tannni」の打ち間違いだと推測してくれているらしい。
というか、いろいろ試すと、「tannigotono」で変換すると「単位ごとの」と確実に変換するが、単に「tanni」は100%確実に「単に」にしでかしてくれる。
しかし、おれの親指は単語単位にスペースキーを叩くようにeducateされている。なんて訳せば良いのかな? 訓練されているというとちょっと違うし、学習されているというのともちょっと違う。
ストーミーウェザーでミスターボージャングルが蒸気船に乗って、さておれはどこへ行こうかなと考えていると、音楽が聞こえてくるのだか、蒸気船のエンジンがポンポン言い出すのを聞いただかして、自然とタップを踏むシーンがある。通りかかった船員がびっくりして「おまえの足はwell educatedだ!」と賞賛するシーンとセリフの一部が印象的だが、さてどう訳されていたか記憶にない(非常に印象的なシーンなので英語の原文がプログラムに出ていたのを覚えてしまったのであった)。
Stormy Weather(Various Artists)
(後で買う。というか映像を観たいのだが30年代へ逆戻りみたいだな)
もちろん、ボージャングルはショービジネスの世界に入り、あのアステアが引用するくらいの成功をおさめる。
スイング・タイム(有頂天時代) [DVD](フレッド・アステア)
しかし、1930年代のハリウッドでは、世界最高のタップダンスをフィルムで公開するには、世界で2番めのタップダンスを使わざるを得なかったというような歴史があって、ようやく戦争のおかげで黒人をフィルムで主演させることができるようになったときは、すでに第一線からは退いたあとだった、なんだかなぁ。
というくらい、「単位」問題は厄介だ。
でもこれは「たんにしょう」と読むのだよ。
小学生のときだと思うのだが、鼻毛の歌という歌が一瞬だけ歌われたことがあった。
確か、「鼻毛が伸びたよ」、で始まって、最後には伸びた鼻毛で息ができなくなって死んでしまうというような内容だったように覚えている。それなりに物悲しい歌ではあるが、ジャンルとしてはコミック歌謡とか、ナンセンスソング(70年代っぽいね)とかに属するのだと思う。
その歌を教えてくれた友人が、これは帰ってきたヨッパライの歌をうたっていた人たちの歌だ、と言っていたように記憶している。
で、なぜかは知らなぬが、今、たまたまフォーククールセダーズについてWikipediaを眺めていたら、そんな曲ないじゃん。水虫の唄というのはあるけど。
いったい、あれはなんだったんだろう?
#ちょっと検索したらソルティシュガーという名前が出てきた。なるほど。走れコータローのヒットの次の2曲目というところに帰ってきたヨッパライの次の曲という記憶と相似性があるから、そこでごっちゃになったんだろうな。
以前買ったまま放置していたエルデシュの伝記を読了。
知識のある人間についてかかれたところは興味深いということもあるのだが、晩年(どうも30代以降はすべて晩年だったような)のゲーデルが妻の作った食べ物以外は一切口にできなくなり(毒を盛られることを心配していたそうだ)、妻が入院したために餓死したというエピソードに恐怖する。
主人公のエルデシュが一時期プリンストンの研究所で働いていたので、ゲーデルやアインシュタインも登場するのだ。
モンテカルロ法はノイマンに関係しているのだと思っていたが、この本を読むとスタニスワフ・ウラム(読み物だからしょうがないとは思うが、途中からスタンと書かれるので、この初出のスタンとはどこの誰だ? となったりする)という人が方法論を確立したことが、共通の知人がモンティ・ホール問題をモンテカルロ法(この名前もウラムの知人にちなんで命名されたとしている)を使ってエルデシュに示すところで書かれていたりするのだが、そういうものなのだろうか。
ベーラ・クーンは、反スタ文献にちょろっと出てきて粛正されてしまうだけの良くわからない人物だが、ここで無血革命と3ヶ月天下の人として出てきて、はじめてつながりがわかったという、読む前にはまったく期待してもいないことを知ったりもした。エルデシュの母親はクーン体制に好意的だったせいで、続く独裁政権(必ずしも親ナチではなく、圧力によってナチ化したこともこの本で初めて知ったり。というか東欧の歴史というのはあまりに断片的にしかわからないものだ)ではパージされていて、逆にそのせいでソ連による(ある種の)解放後は優遇されて、おかげでエルデシュは特別製のパスポートをもらえた(しかし、ソ連の圧力によって良い関係も長くは続かない)とか、それ以上に、中国人の数学者と文通をしていたり、日本人の数学者とうろうろしてスパイとして捕まったりとかのせいでアメリカから追放されたり、政治とは無縁に生きていそうでどっぷり1930年以降の政治の最前線に立たされていたりと、いかにでも読みどころがある。
突然友人の家に門付にきてそのまま議論を戦わせて去っていくとか、こだわりの単語を使うとか(女性をボス、アメリカをサム、ザブックは誰でもザブックなのかな?とか、SFとか。最初何かサンフランシスコの天候のことを書いているのかと思ったら全能の存在の意味だったり)、それなりに人間としての奇矯な振る舞いについても書かれているが、それはそれほど興味深いことではない。
むしろ、素数回りについてだけで一生を考え続けることができるネタがあるということのほうに驚嘆した。
というわけで、20世紀の国際政治史やら多分何かのスペクトラムの内側の人についてやら、素数や、(途中でゲーデルの成果を説明するためだと思うが、リーマンによって幾何学の基盤が破戒されたのに恐怖した数論の人たちが基盤を確立させようとフレーゲが立ち上がり、ヒルベルトが鼓吹して、それをラッセルが突き崩して(集合の集合が矛盾することについて簡単に書かれているが、それはメタ数学でなければならないという指摘なのかな、ここはすごくおもしろかったが理解できたとは思わない)、絶望したフレーゲの代わりにラッセルがホワイトヘッドといっしょに再興させようとしたところを、ゲーデルが完膚なきまでに叩き崩し、それによってラッセルが政治の人に転身し…というようなエピソードとか、いろいろな内容が詰め込まれているので読み物としてのおもしろさは抜群だった。
そういえばモンティホール問題のエピソードで、なぜエルデシュほどの数学者が1/2と考えてしまうのかについて、状態より現象という姿勢から来るのではないか(状態というのは連続しているが、現象というのは独立しているというような意味だと思う)とヴァージョニという数学者が考察しているのが、興味深かった。興味深いというかわけがわからないというか。エルデシュという人の功績として確率的方法の考案ということが直前の章に出ているのだが、(ここでわからなくなって再度、本を眺めてみる)だからモンテカルロ法の結果を見て納得したのだろうけど、どうも奇妙な感じがある。
久々の青木さんの日記を読んでいて、つい最近、仕事でJavaのプログラムを書いていて、何か一点、あーC#のあの面倒なvirtual−overrideにもすごく利点があるな、と思ったのだが思い出せない、と書いているうちにやっと思い出した。
確実なんだよね。
例によってEmacsを使って(Eclipseなんか使わないし、それよりはましとはいえNetBenasだっていまさんよんだし)いて、どうもこのメソッドはオーバーライドしているつもりだが、本当にこの綴り(だか引数だか)で良かったかな? と詰まったところがあったのであった。
で、リファレンスを参照すれば(参照の重複)良いのだが、面倒だね。
これが、C#ならコンパイルすれば存在しないメソッドはoverrideできませんエラーになるか、OKかどっちかだ。基本はOKとして、間違っていたら教えてもらえるわけで、それはそのほうが楽だ。
というわけで、わざわざコンパイルしてチェックする言語なら、C#のほうがいいや。J型のチェックをするなら、メソッドの?(作用か位置か実装形か)もチェックするほうが一貫している。しなきゃしないで、それはそれだし。その一方でJavaはしてほしくもないチェック例外のチェックとかするし。
しかし、C#で書くときはほぼVS使うから、そもそもそんなことを考える必要すらないというわなであったり。
データファイルを読むのはアプリケーションなので、どうでも良いことのように思います。それをどうするかはアプリケーションが決めれば良い。
C:\Users\arton\tmp>type u8.rb ・ソ#!/usr/bin/ruby -Ku ← typeが妙なものを出すのはどうかとは思うが、それはCPが違うので良いとして puts('hello') C:\Users\arton\tmp>ruby -v u8.rb ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32] ← なすすべがない u8.rb:1: Invalid char `\357' in expression u8.rb:1: Invalid char `\273' in expression u8.rb:1: Invalid char `\277' in expression C:\Users\arton\tmp>ruby -vKu u8.rb ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32] ← 打つ手もない u8.rb:1: undefined local variable or method `・ソ' for main:Object (NameError) C:\Users\arton\tmp>set PATH=c:\home\ruby-1.9\usr\bin;%PATH% C:\Users\arton\tmp>ruby -v u8.rb ruby 1.9.0 (2008-08-26 revision 18849) [i386-mswin32] ← やっほー hello
というわけで、1.9を使おう! という結論。
多分、PATHの設定の戻し忘れか何かで1.9をいじっているときに1.8を動かして、BOM付きutf-8のスクリプトを処理できないと勘違いしたのだと思う。で、そう思ったまま32982を読んだので、BOM付きスクリプトの扱いもユーザー側に投げられたのかとさらに勘違いをしていた、ということでした。
typeが相変わらず先頭に妙なものを出すのはともかく、
なぜ、putsの結果に余分なものが入るんだ?(むしろcmd.exeかコンソールのウィンドウシステムを疑っている。というのは、typeの結果も選択-反転を一度しないと正しく表示されないから)
masuidriveさんのところに問題が出ている。
早くもmoroさんが別プロセスキャッシュ生成君という案を出している。
twitterだと、僕が見た範囲では最速配信さんが(一言で言えば)Rails捨て案かな。
おもしろそうな問題なのだが、Feedの例が逆に邪魔をして、問題を還元しにくくなっているように思える。というか、僕は何が論点なのか最初読んだ時点ではわからなかった。あまり生にかけないからかも知れないけど。
というか、Railsを捨ててキューを利用する(MOMとまでは行かないのだろう)フレームワークを自作するにあたってのコメントを求むということなのだろうか?
中島さんのところのマルチスレッド・プログラミングの落とし穴、その2を読むと、論点は、CUDを別プロセスにどうやってするか、というところになっているのかな(更新即反映の要不要というのもあるようだけど)。
以下、雑多に考えたこと。
キューの実装には2種類ある。大雑把だけど。1つは揮発性のキューでメモリにためこむ。SystemVのキューとかがそうだ。マシンが落ちると消える。おそらくこれが許されるかどうかは情報の重み次第だけど、消えないほうが良いのだろうなぁ。とすると、不揮発性のキューを使わざるを得ない。そのためには、そこでDISK I/Oが発生せざるを得ない。このDISKをどこに配置するかというのも論点となる。中央DBサーバーが存在するとして、そこへ書き込むのか(通信後の書き込みとなる)、それとも個々のWebサーバーへ書き込むのか(場合によっては最速で済む)、ローカルRDBを使うのか、フラットファイルを利用するのか(後書き、先読みになるので、あまり向いているわけでもない)、マシンが落ちた場合、そのマシンに貯めたものはあとから拾えるとしても、順序がある時点で狂うことになる(1,2,3と送った場合、2と3だけ更新されて、3時間後に1がやっと入るとか。入れば受信時のタイムスタンプでソートできるだろうから順序は維持できるとは思うけど、ユーザーによっては不思議に思って1を再送して2十登録したりとかするかもーー負荷倍増計画となって、生き残ったWebサーバーに、さらに負荷が集中するから望ましいことではない、もちろんフロントエンドが1台ならその時点では良いけど)。
ローカルで良いのなら(マシンが落ちないという無茶な前提)、リクエストをシリアライズして1リクエスト1フラットファイルに書いて、かつメモリ上に覚えておけば良い。投げて結果が戻ったらファイルは削除。つまり読むのはあくまでもマシンが死んだときだけとする。もっとも書いている最中に死んだ場合にコミットされるのか、されないのならファイルに書くだけ無駄ではないかとかいろいろあるけど。
insertは遅いがupdateは速いというのもあるな、と突然、別方面に考えが飛ぶ。問題はインデックスの更新にあるからだ。無茶だとは思うが、あらかじめユーザーごとの更新を見越して空きをたくさん開けておいてupdateしていくようにするという手法は取れないだろうか。
ケータイからの更新(写真添付メールによる)を主にして、更新したよ通知をメールで返すとかしたらどうかとかすると、いくらでも(限度はあるにしても)間隔を開けられるな、とか。(mixiの場合、ケータイ更新を利用するユーザーが多くなれば多くなるほどWebの処理が軽くなるだろうなぁとか思う)
ディレイさせた更新の通知はCometが有利だとは思うけど(Ajaxの空読みだって負荷になる)、(ここを見えないJavaAppletでサーバーからの通知を受けて、それによってJavaScriptへイベントを通知し、そこでAjaxで取りにいくという方法はどうだろうかとか)、同期的に更新してその結果を返す処理でも間を開ける方法はいくらかはあるとは思うけど。
更新DBと読み込み専用DBの分離とか。
(Webサーバーでの処理優先順位)
特定ブラウザのみ高速という方法で、IEに合わせてXMLアイランド使ってしまうとか(作ったXMLを直接IEに食わせる)、その他のブラウザは普通にビューを使うとか。
あまりにとりとめがないから、TBするのやめた。
追記:プロセル→プロセス(tmtmsさんの指摘)
うーん、途中まで読んだけど微妙だなぁ。
(このカバーは、上はわからない、次のはただの四角かな、次はアステア、次がカサブランカ(署長、リック、バーグマン)、そしてモンロー、最後は一番上と同じ)
何がかというと、わかるんだけど、でもこの作家は本当にミュージカルが好きなのか? 映画が好きなのか? と疑問でいっぱいになるからだ。
でも、わからなくもないところが微妙なところ。
つまり、本当は観ていなくても書けそうな小説なのだ。名セリフとタイトルがたくさん。
そこで、アンビバレンツに陥る。
1. こいつ、うんちくだけで書いてるな
2. くそー、おれの知らない映画を観まくってるのかうらやましいぞ
というわけで、少なくとも観なけりゃ書けなさそうな、しかも観たことがない、いや、たぶんザッツエンターテインメントで観まくったような気もしないでもないが、
をぽちっちゃったよ。すげぇ高いよ、これで当分、文化費は無しだな。
パウエルがくるくる回るところは観た覚えがある。ザッツはMGMだからこれがあってもおかしくはない。ニューヨークというとシナトラとケリーとかが水兵さんのかっこうでブロードウェイをどたばた駆け回る映画がすぐ浮かんでくるけど。でも、この本に描かれている夢のようなダンスは記憶にはないし(もちろん違う映画だからだけど)、ザッツはVHSだから確かめたくても今は観られない。
ザッツ・エンタテインメント [DVD](フレッド・アステア)
(この映画でミュージカルを知ってからRKOのアステアを観ると、それは確かに、この本の中で書かれているような感想を持つ。にもかかわらず、やはりアステアはアステアで、ステッキといっしょに踊りだし、壁を垂直に踊りながら天井をさかさまに踊りながら、また壁を垂直に踊りながら床で普通に踊って、夢のような気分からさめるというような名場面は、それでも圧倒的な印象を受けるというか覚えている)
でも、やっぱりこいつ、観ずに書いているんじゃないかという感じがしまくるんだよね。もちろん、主題は違うんだから、資料を駆使して書くことにはなにも問題はないのだ。それは理解できる。でも違うんだよな、違うんだよね。
たとえば、ジーンケリーを悪く書いている。これもわかるのだ。MGMには2人もスターはいらないから、ケリーがいかにアステアを踏みつけて自分がトップに立ったか、といった政治の話であるとか、事実、優雅なダンスに勝てないから、ダイナミックなダンスを作り、それがつまりは俗受けしたとか、そういう話は少し調べればいくらでも出てくる。
にも関わらず、たとえば巴里のアメリカ人でストライプのスーツを着て帽子をパタパタやりながら出てくるところとか、あるいは海賊の屋根から屋根へ飛び移っていくのが、そのままダンスになっているところとか、あるいは軽妙でも洒脱でもないけれど、やはり雨に唄えばで街灯とダンスしたり水たまりぱしゃぱしゃやって最後に警官を観てしょんぼりしてしまうマイムであるとか(いまいちだったロボットもののアニメ映画でも引用されていたけど、あれはなんだったっけな?)、やはり映画以外の何物でもないのだから、あの書き方はないだろう。いや、確かにアステアには遠く及ばないかも知れないが、それでもケリーも神なのだ。
つまり、紋切型だ。そこが本当にこいつ映画が好きなのか? と読んでて感じて、それがいやな感じになってくるのだ。
でも、それにしても、踊るニューヨーク(ニュウ・ヨークと訳してあるけど、初出はそうだったのかな)についての描写は良かった。ああ書かれたら観ないわけにはいかないね。
ぼろくそに書かれているが、ガーシュインの音楽は最高、ハリウッドのセット美術の美しさは本物の安っぽさの本物、レバントのピアノは明解、レスリーキャロンはチャーミング、ケリーは胸幅は厚すぎるけど全然悪くない。ヴィンセント・ミネリの頭おかしな演出もいかしているし、これを悪く書くなんて信じがたい。
たとえば、(と話は変わる)、17ページからの章ではリファレンスとして「汚名」「グリード」「卒業」「卒業白書」「ティファニーで朝食を」「暗黒街に踊る」「パーティ」というのが出ている。
素直に考えれば、これらに対する引用を含む章だということになるだろう。
ところが、「汚名」は昔テレビで観たが忘れた、「グリード」は何度も観たが(VHSだけど)まったく記憶にないや(最初のエピソードは覚えているような気がする反面、カウリスマキの白い花とごっちゃになっているような気がする)、「卒業」は最後のシーンだけしか覚えていない(ジャケットに使われている脚は絵として覚えているけど)、「卒業白書」はリアルタイムに映画館でみたが、(この映画は印象が強いな。大した映画だとは思えないけど、というかギターを弾くところと、地下鉄を俯瞰で映したシーンくらいしか覚えていないと今わかった。パーティのシーンはバックトゥザフーチャとごっちゃになっている)、「ティファニー」はどうも観た覚えがないような観たような(日本人のカメラだけ覚えているようだ、旅行中とか引用できるのは小説のおかげだし)、「暗黒街」は初めて知った、「パーティ」ってなんだ? という程度の知識だから、中途半端にしか楽しめない。
スキッドのシーンが卒業白書なのかな、とか思っても、パーティというのを知らないわけだし、中途半端に知っているから距離感がつかみにくいってのも読んでいて感じるいらだちの原因のような気がするな。
というわけで、巻末を見ると半分は観ていないことがわかり、つまりお楽しみはこれからだということがわかったので、それはそれで結構ではある。
でもその一方、未見のものを観るよりも、捜索者をもう一度観たい、とかの気持ちも強かったり。というか観たい。
(ビッグトレイルの引用のところはまったく記憶にないだけに悔しいかんじだ。あの幻の映画を観られただけでも奇跡だっていうのに、おれの覚えていないパートが出てきて、しかもそれがまったく思い出せないというのはね。また観たいものだというような雑念が入るのもいまいち作品世界にのれない理由かも)
読了。読み終わって解説読んだら、ザッツエンターテインメントにも収録されていることがわかって、あああれかと思ったり思わなかったりした。というか、発注した以上ちゃんと通してみるから良いけど。
ところで地下鉄の中で読んでいたのだが、ふと気付くと、車内は比較的混んでいるのに本を開いているのはおれひとり状態。だいたい電波が届かないから携帯を覗いている人間はそうそうはいなかったように思うのだが、相当の人数が携帯を覗いている。ゲームとも思えないし、ちょっと不思議。メールを書いているのだろうか。だらうか。
夕刊紙を広げているおっさんというのも見かけなくなって久しい。道徳的なことか、あるいは政治的な正しさが広まったからというわけでもないような気がするし、あの夕刊紙を読む人たちはどこへ行ってしまったのだろうか。
下ネタとルサンチマンとどうでも良い情報をの提供という大衆娯楽の王道を堂々と歩む王者たる電車内夕刊紙文化が滅びかけているとはいかがなものか。単に地下鉄から駆逐されただけで、今でも東上線のあたりでは生息しているかも知れないな。銀座から船橋までは快速に乗って30分だよ。
左ALTが狭すぎて?M-vが…
というのはともかく、いじらなきゃわからんことはあるから買った。
とりあえずXPモデルにデュアルブートでUbuntu入れてちよっといじってみただけだが。
これって、少なくとも日本じゃ2台目は2台目でも携帯の2台目市場向けだな。
おそらくデルもそう考えているんじゃないか?
だからあり得ないメモリ量でUbuntuモデルを出したのだろう。携帯2台目なコンピュータ知らずならそれで十分だ。OSってなんですか。もちろんキーボードも問題ない。比較対象が携帯だからだ。
価格は低いがパイはでかい。
つまりコンピュータじゃない。PDAと違うのはそこだ。あれはコンピュータであって、2台目の携帯じゃない。
おれはエア(ほぼ同じ重さ)のほうが好きだが、それはコンピュータ脳だからだろう。というか値段が別の世界だから比較が無意味。
というわけで、もうちょいいじってどういうものかを考えることにする。
real 9m19.843s user 8m56.498s sys 0m20.065smake testは
PASS 914 tests echo executable host ruby is required. use --with-baseruby option.; false "./bootstraptest/runner.rb" --ruby="ruby" ./KNOWNBUGS.rb executable host ruby is required. use --with-baseruby option. make: *** [test-knownbug] エラー 1 real 1m2.281s user 0m32.734s sys 0m13.921s
エコー&ザ・バニーメンは好きなバンドで、渋谷公会堂にも行ったものだ(そのくらいに好きなバンドだという意味)。
ところが、アメリカで一定の売上を叩き出したあたりからおかしくなって、空中分解してしまった。リーダーが薬漬けになってしまったらしい。ヒットするとプレッシャーがかかるということなのかな。そこまでは聞かないこともないし、物語的にはありそうな、rise & fallな物語であった。
(この時期、アメリカで売れるということは、ハードロックなアレンジに変わるということで、シンプルマインズやU2はそのあたりをうまく妥協したのだろうが、エコーはちょっと異なっていたのだ)
でも、そのあとがちょっと違う。
リーダーは中毒からそれなりに立ち直ったが、バンドは解散、ソロでそこそこいく。残ったメンバーは別のボーカルを連れてきて、ギターが勝った(僕は好きなのだが)バンドとなり、最悪のレコード売上をしてシーンから消えてしまう(ちょっとだけ、ライドンとキースリチャーズレヴィンの分裂後を想起させたりもする)。
Violent Opposition(Levene, Keith)
良くわからない理由があって、結局、バンドは復活する。そしてUKのチャートを飾る。
事実、聴けば誰でも口ずさみたくなるポップなメロディーと切れのあるリズム、幻想味と穏やかな太い音のバランスが良くなったギター、傑作だ。特にI Want To Be Thereの爽快感(テンポは無茶苦茶速いのだが、アレンジが柔らかなのでスケール感があるのだろう。すごく聴きやすい見事なポップナンバー)は、以前にはなかった突き抜け感を持ち、いろいろ悩んで成長してすげえバンドになったなぁ、と思ったり。
それに気を良くしたのか、いろいろ温めていたものを出したのが次のアルバムだ。が、一説によるとギタリストが体調を崩しているうちにボーカルが勝手に作ったという話もあるようで、サイケデリックな曲調はすっかり影を潜めている。
What Are You Going To Do With Your Life?(Echo & Bunnymen)
でも、これを作りたかったのだろうな。タイトルと、道の半途を向こうへ歩いていくアートワーク。
アコースティックなギターの響きで幕を開ける。
アルバムタイトルと同名のWhat are you going to do with your life ?という問いかけになっている。この曲もそうだが、次のRustと、それは傑作だと思う。彼らの作品の中で最も好きなのはこの2曲だ。続くGet in the carやBaby Rainも良い曲で、午後にうだうだとしながらコーヒーのみながら煙草をふかすにはもってこいのアルバムだ。さらにHistory Chimesなんてアコースティックピアノに声を自然に這わせているだけの歌だが、実にいいね。そしてLost On Youだ。疾走感は以前からのバニーメンだがボーカルは軽くバンドの音は弱めでどこか遠くでばらばらに演じているような音の作り方、ところどころにブラスが混じるのがとってつけたような奇妙な、でもいかしたポップ中のポップだ。
のだが。
アルバムは数1000というような単位でしか出なかったらしい。もうエコー&ザ・バニーメンではない。
そしてメジャー放出、マイナーバンドへの転落。つまりはrust。
What are you going to do with your life ?
あまりにタイトルに合ってしまったその後が待っていた。
でも、確かにwith your lifeではあるらしく、never stopだ。
Dancinghorses [DVD] [Import](Echo & Bunnymen)
まだ仕事をしている。
ラムダ(ブラジルではLambadaと間にaを入れてランバーダと発音する)
そっかー、ラムダブームから20年もたってるのか。それじゃ知らない人が多いはずだ。
片足を相手の股の間に入れてお互いの股間(局部)を太股で刺激するように擦り合わせ腰をすり寄せる格好をする
と、再帰的なダンスとして発展したのであった。
世界的に流行したのは良いものの、踊りのあまりの下品さというか煽情性に危機感を抱いたカソリック教会(チャーチ)――ちなみにヒットを飛ばしたのはカオマというカソリックのおひざ元のフランスのバンドであった――が、信徒たちに禁止すると同時に数学的な論理基盤を付与することで世間の燃え上がった情欲に水をさしたのであった。
この決断がなければカソリック教国では人口の大爆発が原理的に起きるはずだった。
(参考映像)
知らなかったがカリー化のことをdipと呼ぶようだ。
インプレスのプリンター? 何か新しいMSのビットマップ方式? とかさんざん不思議に思ったあげくに質問を見たら、インクがレスということだった。
のは良いが、最初、まったくその発想がなかったときは、incressとかincrest(末尾tは発声しない)とかが頭に浮かんで、どう読んでもインクレスプリンターだったのが、わかった瞬間以降、どう眺めてもinklessのインクレスプリンターとしか読めない不思議さ。
固定化された見方が別の固定化された見方に変わる。
踏切の音が、テンカテンカテンカテンカと鳴っているわけだが、ある瞬間からそれがカテンカテンカテンカテンに変わってそれが当たり前となった次の瞬間にまたどう聞いてもテンカテンカテンカテンカに変わる、のと同じようなものだろう。
こういう感覚というのは人類という生物に普遍的な性質なのか、それともおれの感覚が変なのか、さてどっちだろう?
積ん読消化シリーズも10月になったら打ち止めだな。
というわけで、カントールの本を読了。
「無限」に魅入られた天才数学者たち(アミール・D. アクゼル)
2章になると、えらく長くて退屈なユダヤ教の説明が始まり、カバラがどうしたというような話になる。うんざりしながら読み続けた。
なぜ、出自がユダヤ人かどうかで、こういう話になるのかと疑問に思っていたら、アレフ(ヘブライ文字のアルファ相当)に続けることと、無限の多段概念を出すためだったのか、と最後のほうになって納得はしたが、なんか損をしている感じだ。2章が、仮に須弥山の例だったらもう少しおもしろかっただろうか。
対角線を使うことで、有理数と自然数を対応づける方法については、先日読んだエルデシュの伝記に出ていたので特に感銘もなにもないが、それがたかだか明治維新のあたりの頃の話(黒船あたりか)だということ、しかもそれに対してそんなものは学問ではないと論文の発表を潰しにかかる敵対勢力があること、などのほうに奇異の念を受ける。
無限というのは、それほどまでに、まずいことだったのか?
逆に東洋のように無限、あたりまえじゃんとみんなが考えてありのままに受け入れていると(無間は無間だし、というか無限という言葉の語源はなんだろうか。そのくだりは記憶にないが、荘子が「わが生涯は有涯にして、知は無涯なり」と語ったとブリタニカに出ている。形而上では時間の概念も量の概念もないから――アプリオリということは時間の概念から独立していなければならないし、量についても何かあったような――それをもってして無限と考えると、それ以上の考察は不要となる理屈だ)、それ以上に学究が進まないということなのかも知れないなぁとも思うわけだが。というか、そもそもありのままとはなんぞや、と考えないことが問題か。
カバラのところはともかく、無限について論理を巡らす人たちが、カントール、ゲーデルと次々に精神に失調を来すというところに、著者は物語的な興味を持ったようだし、確かにある種の呪われた学問というスリルに近いものはあるのかも知れない。が、それにしてもそこに網を張って捕まえて、研究の対象とできるようにした、ということがカントールによって行われてからまだ150年なのか。実に世界は驚嘆と謎に満ちあふれていて人類の(前衛の)想像力は尽きないものだなぁ、と、なんとなく楽しい。
とりあえず、おれはこのあたりの時代のこの分野の数学は好きだし、それなりに理解できるということは確認した。大学の教養数学で感じたことの再確認だな。実際、えらくおもしろいのだが、それは対象から一歩下がったところから全体的な把握をしようとする姿勢に共感するからかも知れない。そして共感があるから、理解したいという欲望が強くなり、それによって思考が駆動されるという感じだろうか。
一応、まとめた。AsusのEeepcという先行機があり、デザインガイドによってNetbookはHW構成がほとんど同じ、という恩恵を受けまくっているようだ。
問題は、キーの小ささ(特に左ALTというか右ALTは無い。この点については英語キーボードのほうが良いとは思う。しかし{}がFnキーというのはやはり問題外に思う)と、縦の解像度(Emacs22が2/3しか表示されなくてミニバッファがそのままだと見えない)というのはいかんともしがたい。
それを除けば、音はしないし、それなりに軽いし、良いのではないかなぁ。
ただし、電源ケーブルコネクタが左側から垂直に突き出ているのが、寝っ転がって使うのにはやたらと邪魔なのは気になった。背面からなら垂直に突き出してもそう邪魔ではないと思うが。
パームレストは熱いことは熱いが、MacBook Proのレベルにはまったく達しないというか、そもそもパームを乗せるとキーがまともに打てないのでそれほど気にならない。
B001FMD1KS
Killer in the Crowd (Dig)(Levene, Keith)
どういう音を作っているのか興味はあるが、さすがに買ってまで聴く気にはならないなぁ。
ピンクのジャケットのきれいなあんちゃん。
ジョーカーだろ?
ぽっぺんさんがガウスの1から100までの整数を足す話を書いているのを読んで思いだした。
先日読了したエルデシュの伝記に、そのエピソードをエルデシュの口を使って語らせているのだが、ちょっと印象深かったのは、それまで僕が読んだことがある天才ガウスの早熟ぶりを示すエピソードとは異なる視点から書かれていたからだ。
ちょっと長いが引用する。
「中世のおぞましいなごりで、暴力でたたきこむといったやり方をする教師がクラスを担当していた。ビュットネルという名のその教師は100人ほどの少年たちを教えるには、生徒が自分の名前を忘れるほどおびえてなにも考えられない状態になるまでムチ打つことだと考えていた」
ある日ビュットネルがムチを手に教室の中を歩きまわりながら、1から100までのすべての整数の和を出すようにと言った。いちばん最初に問題ができた者は、ビュットネルの机まで行って、自分の石板を置いてくることになっていた。次にできた者はその上に石板を置く。ビュットネルは生徒たちがその問題を解くのに授業時間いっぱいかかるだろうと思っていた。ところが数秒後、ガウスが飛んでくると、石板を教師の机の上において自分の席に戻った。ビュットネルは、他の生徒たちの計算が終わるまでおとなしく座っているガウスに、冷笑的なまなざしを向けていた。ビュットネルが石板を表に返して答えを確かめていくと、次から次へとまちがった答えが現れ、かれのムチは休むことなく振りおろされ続けた。ついにガウスの石板の番が来た。そこには単に5,050とあるだけで、計算式がひとつも書かれていなかった。驚いたビュットネルはガウスにどうやったのかと尋ねた。「そこでガウスは説明した。教師はそれがかれの人生で最も重大な事件であることに気づき、それ以来ガウスにいつも目をかけるようになった。」とエルデシュ。ビュットネルはガウスに参考書を与えてやり、「そうしてもらったことをガウスは生涯感謝していた」
ガウスのようになるのは難しい話だが、ビュットネルになら、なれそうな気がする。というよりも、そのようであるべきだし、そうありたい。
おれが恐れるのは、5,050と書かれているだけなのを見て、計算式がないという事実だけでムチを振りまわしたり、あるいは説明を聴き終わったところでニタリと笑い、「いや、ガウス君、この問題は、まじめに計算することを学ぶために出したのだよ。さあ、私のムチの前に立ちなさい」と言いだすような人間であり、知らずにそういう振る舞いをとってしまうことだ。
というわけで、この本でのこのエピソードの書き方は印象的だった。
ジェズイットを見習え |
_ no6v [class << X alias si2 si end でしょうか?]
_ arton [おお、どうもありがとうございます。selfを特異クラスにするのですね(……なんで気付かなかったんだろうと、ちと口惜し..]