|
それはそれ。これはこれ。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
◇最新の記事◇
|
■ 2005年03月22日 / やはり二重更新は面倒
■ 2005年02月11日 / 「神々に告ぐ」(BlogPet) きょうシロがここまでotnが燃したかったみたい。 きょうシロは、otnとDVDしたいなぁ。 きょうotnの、3したかったみたい。 きのうシロが、otnと新聞にNewsHandlerするはずだったみたい。 otnは、 「信長燃ゆ」の前段に当たる、後奈良天皇崩御から正親町天皇即位までの3年あまりを描いた作品。といってました。 *このエントリは、BlogPetの「シロ」が書きました。
■ 2005年02月09日 / 【続々々々々々】ディレクトリかどうかの判断 数ヶ月ぶりの続きであるが、まだまだ終わらない。「続」が6つなので7回目ということだ。 ネットワーク上のファイル・ディレクトリに対して、if exist での判断が出来ないということで終わっていたが、何とかなりそうである。
と、 if exist "%~1\\*" echo ディレクトリだ が使えそうである。空ディレクトリやルートディレクトリでも大丈夫。 同じネットワーク上のファイルでも、UNC形式とドライブにマウントしての場合で、NULをつけたときの真・偽が変わってくるのがちょっと怪しげ。
■ 2005年02月01日 / コマンドプロンプト機能Wikiの公開 「はてなダイアリー」に記事を移し終わった。 まだまだ作成途上だが、「コマンドプロンプト機能Wiki」を公開します。 http://it-is-it.net/CMD/ TIPSだけにするか、スクリプトの公開までするかは未定。
■ 2005年01月30日 / マーク制定で振り込め詐欺防止 by やゆよ記念財団 やゆよ記念財団。 この手のサイト、よくありますが、さすが老舗という感じですね。写真のコーナーも面白いです。
■ 2005年01月29日 / 「神々に告ぐ」 「信長燃ゆ」の前段に当たる、後奈良天皇崩御から正親町天皇即位までの3年あまりを描いた作品。これも新聞小説だったらしい。「信長燃ゆ」と違って、若干伝奇が入っている。と言っても、怨霊や伝心が出てくる程度。 今回、20代前半の前久(前嗣)のライバルは松永秀久である。作品中では「早すぎた信長」的な描かれ方をしている。 足利義輝って、「松永秀久らに殺された将軍」という程度の印象しかなかったが、こういうキャラだったのか、って、本当かどうかはわからないけど。 秀久との対決のほかに、毛利元就を訪ねて安芸に下向、長尾影虎と話し合い、織田信長に友と呼ばれるなど大活躍である。
■ 2005年01月25日 / 「コカ・コーラCMソング集 1962―89」 「コカ・コーラCMソング集 1962―89」という2枚組CDが3月に出るらしい。ずっとこういうCDが出ないかなあと思っていたので、大変嬉しい。本当は、映像入りDVDを出して欲しいところだけど、CMは権利関係が複雑らしいので、音楽CDが出るだけで我慢か。
■ 2005年01月24日 / mixiの日記設定を「はてなダイアリー」に変更 NewsHandlerからMovableTypeへの移行を考えてたんだけど、思ったような見栄えにするのは標準機能だけで出来ないとか、結構面倒だと思うようになってきて、とりあえず止めることにした(いずれまた再トライ)。 NewsHandlerも2月にシステム切り替え予定なんでメインで使い続けても良かったんだけど、「はてなダイアリー」のコミュニティ的機能に期待して、メインを「はてなダイアリー」にすることした。 並行更新はしばらく続けるつもり。 Windows関係の過去記事以外は移行した。来週残りを移行する。
■ 2005年01月14日 / WMP10からWMP9に戻す(こうさぎ)
■ 2005年01月07日 / 「信長燃ゆ」 日経新聞に連載されていた小説であるが、文庫化されたので読んだ。考えてみると、新聞小説をちゃんと読めたためしがない。やはりどうも、「毎日少しずつこつこつと」というのは性格に合わないようだ。 信長物の小説はいくつも読んだが、本書は上下巻からなる長編にもかかわらず、天正九年の正月から、翌十年六月の本能寺の変までという一年半足らずだけを描いているというのが特色であろう。にもかかわらず内容は濃い。一番の魅力は、信長と、盟友でもあり終生のライバルである近衛前久との戦いであろう。(知らない人は[Wikipedia:近衛前久]等を参照) 中公新書「流浪の戦国貴族近衛前久」 を3年ほど前に読んだが非常に魅力的な人物である。 本書の話に戻ると、前久の嫡子信基が父の意に反して信長に心酔し、逆に信長の嫡子信忠が父の行き過ぎを心配して前久と親しくするなど、父子関係のねじれも面白い。また、皇太子妃である晴子の人物も素敵である。前久・晴子といった公家らしくない行動的な人物の活躍と彼らの周囲の公家らしい公家との葛藤も魅力の一つである。 エンディングがちょっとあっけないが、タイトルが「信長燃ゆ」なので、信長が燃えたところで終わるのがちょうどいいのかもしれない。秀吉の中国大返しまで書いていては、舞台を短い期間に限ったコンパクトさが失われるのでこれでよかったと思いたい。 大河ドラマの戦国物もネタ切れで前田利家などを描くくらいなら、前久を主人公にするのも面白いのではないか。上杉・毛利から信長・秀吉・家康まで長期にわたる物語でありドラマとしても結構いけると思うのだが。
■ 2004年12月29日 / 「逃走中」結構面白かった またもや関東ローカルかもしれないけど、昨日やってた深夜番組「逃走中」が意外と面白かった。 早朝の渋谷のある区画を、12人の芸能人が60分間逃げまわる。ルールは、私有地(建物など)に入らない、つまり逃げるのは道路と公園だけ。あと交通ルールを守る(信号など)。 これをスポーツマンの黒スーツ黒サングラスのハンター3人が探して捕まえる。女性や年配の出川哲郎さんは走る速度が違うのでハンターに見つかると逃げ切れない。若手男性も走って疲れてくると逃げ切れない。 賞金があって、つかまると0円。60分逃げ切ると60万円。途中で公衆電話から自首するとその時点の時間に応じて賞金がもらえる。浅香唯は残り38分13万円くらいでさっさと自首。島崎和歌子も自首しようとするが電話ボックス内でぎりぎりつかまり、アウト。 残り30分でヘリから逃走者を探してハンターに伝え、残り10分でハンターが6人に。ちょっと厳しすぎない?その時点で残り4人だけど、金子貴俊がすぐにつかまり、あと3人。 DonDokoDonの平畠さん「タレントオーラが無いので周囲に溶け込んでる」とか言われちゃってる。確かに。 残り50秒で袴田吉彦が挟み撃ちでアウト。横断歩道以外は道路わたれないので両方から来られると逃げられません。これは惜しかった。相手が一人なら逃げきれたでしょう。 結局逃げ切ったのは、岡田義徳と平畠啓史。平畠は一度もハンターに見つからなかったらしい。さすがオーラ無し?でもカメラ他スタッフ2,3人ついて一緒に動き回ってるんで、結構目立つはずなんだけど。負のオーラでカバーしてたのか? また見たいな。ちなみに最初につかまったのは5分で嶋大輔。ほかの逃走者は、ゴルゴ松本、森下千里、セインカミユ、藤崎奈々子。
■ 2004年12月17日 / WMP10からWMP9に戻す(こうさぎ)
■ 2004年12月16日 / (echo)の空白付加の謎 echo ABC (ABCの後に空白は入れない)とやると、ABCとCRLFの5バイトが出力される。echo ABC>abc.txt とやると同じく5バイトがファイル abc.txt に入る。 (echo ABC) や (echo ABC)>abc.txtとカッコで囲んでも同じだ。 しかし、(echo ABC)| とパイプで次のプログラムにデータを渡すと、ABC空白CRLF と6バイトのデータが渡る。不思議だ。 (echo ABC&echo DEF)| とパイプすると、ABC空白CRLF DEF空白CRLFと合計12バイトが渡る。 もちろん、(echo ABC&echo DEF)>abc.txt だと、ABCとCRLF DEFとCRLFの合計10バイトがファイルに入る。 バグとまでは言えないかも知れないが、理解できない「仕様」だ。 表示だけなら問題ないだろうが、パイプを繋げてデータを加工する時には注意が必要である。 あ、もちろん、echo ABC| というようにカッコを使わなければパイプでも空白付加は無い。
■ 2004年12月13日 / 「新選組!」が終わりました 「新選組!」がとうとう終わってしまいました。最終回録画を見る前に前々回・前回から見なおした。 公式ホームページの次回あらすじを見なかったのは大正解。まさか死ぬと思っていなかった人が二人死んでしまいました。特に捨助。モデルはいるものの、自由に動かせるフィクションの人物なので最後どうなるのかと思ってましたが(近藤の墓守をするという説もあった)、こう来るとは思いもしませんでした。男が男にあこがれるというのはこういうことなんでしょうね。友情に生きた人。ある意味走れメロスか。 それに比べて他の人は信念と義に生きたということでしょうか。 お孝の死はショッキング。総司も夏に死ぬと言ってた通り。孤独な死だったでしょう。夏前にまた来るといっていた斎藤もきっとこない。 あと政治家たち、勝・西郷。彼らのせいで近藤は斬首となったわけですが、憎めません。近藤のよき理解者とも言える。 最後、尾形のせりふで山南さんの遺言がまた出てきましたね。山南さんの回の再放送があるそうなんで、DVDには撮ってあるけどまた見てしまいそう。 各人のその後を描いて「完」のあとの、過去シーンもよかったです(これは舞台のカーテンコールか?)。最後のせりふも。 最後に、斎藤はやっぱりかっこいいねえ。前々回の熱い斎藤とそのあとのはにかんだ斎藤も彼らしくて。最後の戦闘でしっかり名乗るところもね。 心に残るせりふは、前回、笑顔での「加納君、お久しぶりです」。このシーンには涙した人も多いでしょう。 去年の武蔵の平均視聴率(ここ10年最低)をわずかに抜いたらしい。最近はBSもあり、BSデジタルでは本放送より時刻が早いので最近の大河の低視聴率(NHK総合本放送のみの視聴率)に繋がっているんだと思います。武蔵も途中まではそこそこ面白かったんだけどね(「人は一人では生きていけない」とか言い出すまで)。 面白い大河ドラマはいままで何回もあったけど、よく出来た大河ドラマはこれがベストでしょう。果たして抜かれる日はくるのか。三谷さんの「信長」も見てみたいですね。 来年の「義経」がどこまでありきたりを裏切ってくれるかが楽しみです。
■ 2004年12月07日 / WMP10からWMP9に戻す 約1ヶ月前頃WindowsMediaPlayerのver10が出たのでアップデートした。随分外見が変わっているのはさておき、「デバイスへの転送」が「デバイスとの同期」に変わっているのは今風か。しかも、デバイスへの転送時にレート変換する場合、ver9だと変換してから転送だったのがver10だと変換と転送が並行して出来るようになっており、ごくわずかだが時間短縮が図れる。 しかし、困ったことに転送時変換の最低レートが64Kbpsになってしまっている。ver9だと最低レートが32Kbpsで今まで48Kbpsで使っていたので(カセット時代を思えばこれくらいで十分)今までよりデバイスに入る容量が減ってしまう。 48Kbpsだと64MBにアルバム3枚半近く入っていたのに、64Kbpsだと2枚半位しか入らない。しょうがないので、バージョンを戻すことにした。ちょっと心配だったが、コントロールパネルの「プログラムの追加と削除」からちゃんとver9に戻すことが出来た。 あと、可変ビットレートでのCDからの録音時にもver10の方がビットレートが高くなるようだ。それぞれ128Kbpsを含んだレートで設定した場合、ver9だと128Kbpsを上回ったり下回ったりだが、ver10で数枚録音したところいずれも128Kbps以上となった。いずれの仕様変更も音質重視のためなんだろうけど勝手に決められてもなあ。少なくとも選択の幅が狭まるのは困る。
■ 2004年11月29日 / 遅延環境変数のechoの謎 環境変数を echoするとき、値が空かも知れないときに、「ECHO は <OFF> です。」等と表示されないために、echo. 等とするのは基本的なTIPSである。私はピリオドを好んで使っていたが、他の記号を好む人もいるようだ。今まで特に問題は無かったが、遅延環境変数で、部分文字列や文字列置換を使うと不都合が起こるようだ。 @echo off setlocal enabledelayedexpansion set A=abcdefg echo !A! echo !A:~1! echo !A:~1,3! echo !A:~10! echo !A:~10,3 echo !A:*d=! echo !A:*g=! echo ................... echo.!A! echo.!A:~1! echo.!A:~1,3! echo.!A:~10! echo.!A:~10,3! echo.!A:*d=! echo.!A:*g=! echo =================== echo=!A! echo=!A:~1! echo=!A:~1,3! echo=!A:~10! echo=!A:~10,3! echo=!A:*d=! echo=!A:*g=! 表示結果は abcdefg bcdefg bcd ECHO は <OFF> です。 ECHO は <OFF> です。 efg ECHO は <OFF> です。 ................... abcdefg bcdefg A:~1,3 A:~10,3 A:*d= A:*g= =================== abcdefg bcdefg bcd efg となる。 echo. だと長さを指定した部分文字列や文字列置換を使った時に意図しない表示となっている。echo= や echo, や echo; だと問題ない。この3文字は、 for %%A in (A=B;C,D) do echo %%A のように、for文の(セット)の部分で、各要素の区切りに使える文字列だ。どの文字も echo の直後に書くのは違和感があるが、このように空になる可能性のある遅延環境変数の展開ではこの3つのうちどれかを使わざるを得ないであろう。 バグなのか仕様なのか微妙なところだが、遅延展開でなければピリオド等でも問題ないのと比べると仕様が異なるのは意図不明なので仕様と強弁するのは困難だろう。まあ、アンドキュメントな部分ではあるが。
■ 2004年11月22日 / 「この人が出るドラマなら見たい」 「この人が出るドラマなら見たい」というアンケートがあったので(投票はしてないのだが)見てみた。 男性→男優トップが、阿部寛。これは私もです。「トリック」の「どんと来い!」もいいんだけど、去年の大河「武蔵」の祇園藤次。このドラマで武蔵のライバルって小次郎より藤次の気がしてます。だって、小次郎とは無理やり闘わされただけで、ライバルより剣友という感じ。 他には「最後の弁護人」これは良かった。あと主役じゃないけど「マイリトルシェフ」、「笑顔の法則」。最近では「アットホームダッド」も。「逃亡者」は脇役だけど良い役。 以降は、私の好みの順番で。 次は、佐藤浩市。これはアンケートでも2位ですね。これも大河「炎立つ」の源義家が良い。「タブロイド」での真田広之との対決はすごかった。「アフリカの夜」も良いよね。「高原へいらっしゃい」はリメイクだけど意外と良かった。さんまとの共演「恋も2度目なら」も好き。「親愛なる者へ」「素晴らしきかな人生」をちゃんと見てなかったのが残念。あ、忘れてはならない「新選組!」の芹沢鴨。昔の映画「新選組」も見たけどお父さんと同じ役で、近藤との焚き火対決のシーンも外見もそっくりでした。 三番は、明石家さんま。「男女七人」以降彼の出る連続ドラマは必ず見ている(はず)。「男女七人」以降だと「恋も2度目なら」がベストかな。 女優は難しい。好きな女優は多いけど、脇役が多い。脇役だけ目当てに1クールドラマを見続ける気はしないですね。 主役クラスならまずは、小泉今日子。当たり外れありますが。CMどおり「さびない人」。 次は、深田恭子。彼女は80年代前半の歌謡界における松田聖子に相当するのではと思ってます。本人はともかく周りの人がいい作品を作ってそれに乗っかって非常に楽しい作品になってる。どこかで読んだ評で「脇役俳優は演技が上手い必要がある。でも演技が下手でも主役張っちゃうほうがいい人がいる。代表が深田恭子だ」。同意。いや、いい意味で。 次クールの「富豪刑事」に期待。筒井康隆の原作は面白かったけど、たぶん違うテイストでしょうね。 三番は、うーん。今だと竹内結子かな。それともやっぱり、ともさかりえか。
■ 2004年11月20日 / unix占い(こうさぎ)
■ 2004年11月19日 / unix占い 占い作成ツールを見つけたので、「unix占い」 を作ってみた。結果文を自動生成してくれる機能があるのだが、あえてゼロから自分で書いたのでちょっとしょぼい。 まあ、今後すこしずつでも拡充するつもりはある。“linuxの偉い人”にも加筆修正をお願いしたのでもしかしたら手伝ってもらえるかも。
■ 2004年11月17日 / ご当地キティ達 ご当地キティってすごい。うちの娘も少し集めているようだが、こんなページ見せたら欲しがるに違いない。 根付やキーホルダー、携帯ストラップ、ペンのぶら下がりが大半だが、ファスナーや耳掻きもある。 個人的には、大阪たこやきキティの頭に刺さった爪楊枝が気になる。
■ 2004年11月14日 / 「新選組!」もいよいよ大詰め 「ほぼ日テレビガイド」で、「源さん、死す」というサブタイトルについて、 >ふつう、『源三郎、死す』だろ。せめて。 と書いてあったけど、普通、「鳥羽伏見の戦い」だろ。 弾を避けたり、刀で跳ね除けたり、やるなあ、源さん! あと四回か。
■ 2004年11月13日 / pukiwiki CGIの編集認証 pukiwikiの編集を特定ユーザーに限る認証機能だが、apacheのBasic認証機能を使っているため、PHPがcgiとして実行されるときには使用できない。これを別の方法で認証を行うよう変更したので忘れないように書いておく。ver1.4.4だがおそらく他のバージョンでも可能でしょう。 (1) index.php をコピーして edit.php を作る (2) .htaccess で edit.php にBasic認証を掛ける (3) edit.php 内に、define('EDIT_OK','yes'); を記述 (4) pukiwiki.ini.php の $script = 'http://hostname/index.php'; の後に if(defined('EDIT_OK')) $script = 'http://hostname/edit.php'; を追加 (5) auth.php の function basic_auth の中の // PHP_AUTH* 変数が未定義の場合 の前に、 return defined('EDIT_OK'); を追加 2004-11-14追記: うーん、でもこれだと編集出来る人はすべてのページを編集できる。pukiwiki.ini.php の $edit_auth_pages での設定通りのページ単位での認証にするにはもう一工夫いる。 (5) で追加するコードを、returnを止めて $auth_flag = FALSE; if(defined('EDIT_OK') and isset($_SERVER['REMOTE_USER'])) { $_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER']; $_SERVER['PHP_AUTH_PW'] = 'pass'; }; に変更 (6) pukiwiki.ini.php の $auth_user 定義ではパスワードをすべて 'pass' にしておく もちろん実際のパスワードは、edit.php のBasic認証で設定したものを入力する 2004-11-21: ファイル名の誤記を訂正(まあ、実害は無いと思います)。 2006-05-25: PukiWiki 1.4.6についてはトラックバック先の「はてなダイアリー」の方を見てください。
■ 2004年11月05日 / 「木更津キャッツアイ 日本シリーズ」をようやく見た(こうさぎ)
■ 2004年11月02日 / 「東京ワンダーホテル」 「東京ワンダーホテル」 めずらしい季刊のドラマ。春の1話目を観損ねて夏の2話目だけ観た。11/2の深夜から1話から再放送があるので見逃した人にはおすすめ。していいものかどうか、2話目しか見てないので何ともいい難いが、まあ面白そう。 季刊だとスタッフ集めなど制作も大変でしょうね。
■ 2004年10月30日 / 手のひら静脈認証であなたの預金を守る? 「手のひら静脈認証であなたの預金を守る」ということですが、手に怪我したらどうするんだということはさて置き、仮に東京三菱のATMがすべて静脈認証になっても、他社の提携ATMがすべて静脈認証にならない限り預金は守れないんですが、どうするつもりなんでしょう? 提携ATMで引き出されたら保険でカバー?
■ 2004年10月28日 / 「木更津キャッツアイ 日本シリーズ」をようやく見た キャッツファンといいつつ、今頃になって観た。随分前に買ってたんだけど、その後行方不明になっていて先日発見した。 やっぱり久しぶりに見る皆は良かった。テレビでメイキング見てたんだけど、あの女王ってモー子じゃなかったのね。あと、ウッチャンが学生服で踊ってたのは回想シーンだった。薬師丸のセーラー服にはちょっと無理を感じました。 あと、アニの本名がついに判明。久々のモー子や、ぶっさんのラブソングも良かったし最後の写真撮影もね。 もっと続編が観たいけど、まあしょうがないでしょうね。うーん、でも、テレビの本編観てない人には勧められないね。 ところで、あの島ってどこよ。木更津の近くにあるわけなし。
■ 2004年10月23日 / 「ミステリー民俗学者八雲樹」って?(こうさぎ) きのう、書籍が話しなかったよ。 シロは、TRICKしたかったみたい。 きょうはここでotnはアクションとか展開しなかったよ。 otnは、 テレビ朝日で「ミステリー民俗学者八雲樹」というドラマが始まりましたが、第一話を見る限り同局の「TRICK」をまねたのか?最近マンガ誌読んでないからわからない。といってました。 *このエントリは、こうさぎの「シロ」が書きました。
■ 2004年10月17日 / 「ミステリー民俗学者八雲樹」って? テレビ朝日で「ミステリー民俗学者八雲樹」というドラマが始まりましたが、第一話を見る限り同局の「TRICK」の二番煎じとしか思えないストーリー展開。キャラが弱いだけ負けてる。マンガが原作だけど、ドラマ化に際して「TRICK」をまねたのか、そもそも原作からしてTRICKなのか?最近マンガ誌読んでないからわからない。 せっかくミッチーを使っているのに普通の人っぽくて「ドンと来い阿部寛」ほどキャラ立ってない。ベッシーみたいにすれば良いのに。平山あやも普通だし。キャラだけ見ると二時間ミステリドラマみたい。 と、言いつつまあ観ますけど。
■ 2004年10月14日 / 雑誌を新聞のオマケに フリーペーパー「R25」に学ぶことという記事で面白い事が書いてあった。 フリーペーパーが成長しているということから、どうせ雑誌の売り上げはコストの2-3割で7割りは広告収入なんだから、「雑誌0円」の時代が来るのでは?ということ。 「YOMIURI weekly」は売らずに読売新聞のオマケとして毎週配れば、一躍1000万部の日本最大の雑誌となる。逆に「SPA!」をオマケとすることでサンケイ新聞の拡販を図る。 結構いけそうなアイデアだ。
■ 2004年10月11日 / 「HERO英雄」(ネタバレあり) TVでやってたので見ました。公開時にはアクションに重点を置いた宣伝のようだったけど、内容としては、新本格ミステリのような何重にも重ねられた真実。何が真実なのか順次ひっくり返らされていく。 秦の役人「無名」が秦王を狙う刺客「長空」「残剣」「飛雪」の3人を倒して秦王に謁見する場面から始まります。 アクションはそれほどすごくない気がする。が、それぞれの闘いのカラーの様式美がいい。長空との白黒の想像上の闘い、最初に無名の語る残剣・飛雪・如月の赤の闘い、その嘘を見抜いて秦王の語る青の闘い、最後に無名の再度語る真実の白の闘い。残剣の語る3年前の緑の真実。 結局タイトルの「HERO」は、秦王政のことだったんでしょうね。残剣の書から剣の道の奥義を悟った。時代に早すぎた興味深い人物だ。絶対君主の孤独を描いた物語は多いけどこれもその一つでしょう。 ちょっと残念だったこと。最初に倒して死んだと思っていた長空が実は生きていたことが明かされるのはちょっと余計だったかも。あと、近衛兵って爺さんが多かったけど、顔が映るくらいの人は若者を配置して欲しかった。
■ 2004年10月09日 / いくつかの投稿から ¥ が抜けてます(こうさぎ)
■ 2004年09月26日 / 【続々々々々】ディレクトリかどうかの判断(こうさぎ)
■ 2004年09月26日 / CD コマンドの機能拡張 第二版 CDコマンドの拡張について二回書いたが([1]、[2])、仕様を一部変更追加削除して、ネットワークパスにも対応した。 ・移動はすべて pushd で行う。 ・cd のみのときはディレクトリスタックの表示 ・ホーム(%HOME%)への移動は cd ~ ・cd - で前のディレクトリに戻る ・cd + で現ディレクトリと一つ前のディレクトリの交換 ・cd 存在するディレクトリ だとそこへ移動 ・cd ショートカット の場合、ショートカット先がディレクトリならそこへ移動し、ファイルだとそのファイルのあるディレクトリへ移動 ・cd 存在するファイル だとそのファイルのあるディレクトリへ移動 (explorerからcmdプロンプトへファイルをドラッグ&ドロップしたとき便利) ・cd それ以外 の場合環境変数CDPATHを探索してオペラランドがそこにディレクトリとして存在すればそこに移動 前版との相違点は以下の通り。 ・ディレクトリ名を値に持つ環境変数名を指定した時の対応はコードの量の割に使い出が無いので削った ・/s の機能を削った。時間がかかりすぎて実用的でないため。適切にCDPATHを設定すれば十分のはず ・ディレクトリ表示順を新しい順で現ディレクトリも含めることにした(bashのdirs仕様と合わせた) ・cd + 機能の追加(cd +n や cd -n は bash だとディレクトリスタックのローテートだがこれくらいのほうがシンプルで使いやすいと思い独自仕様にしてある) ・ディレクトリ判断方法を変更し、ネットワークパスやネットワークドライブにも対応(したはず) ・ショートカット先がCドライブ以外や共有フォルダ内の時も対応(したはず) 最後の2点はテストが足りてないかもしれない。 @echo off if "%~1"=="" ( %引数が無ければ表示のみ% call :dirs goto :eof ) if "%~1"=="-" ( % - なら戻って表示% popd call :dirs goto :eof ) if "%~1"=="+" ( % + なら前回と交換% for /f "delims=" %%X in ('echo %%CD%%') do ( popd for /f "delims=" %%Y in ('echo %%CD%%') do ( popd for /f "delims=" %%Z in ('echo %%CD%%') do ( if not "%%Y"=="%%Z" (pushd %%X) else (cd /d %%X) if not "%%X"=="%%Y" pushd %%Y ))) call :dirs goto :eof ) if "%~1"=="~" if defined HOME ( % ~ ならホームへ% call :pushd %HOME% goto :eof ) if exist "%~1" ( %存在するか?% dir /b/ad "%~1" >NUL 2>NUL if not ERRORLEVEL 1 ( %ディレクトリか?% call :pushd "%~1" ) else ( %普通のファイルだ% if "%~x1"==".lnk" ( %ショートカットだ% call :shortcut "%~1" "%~0" if not ERRORLEVEL 1 goto :eof %リンク先が見つかった% ) call :pushd "%~dp1" ) goto :eof ) if not "%~$CDPATH:1"=="" dir /b/ad "%~$CDPATH:1" >NUL 2>NUL && ( %CDPATHに見つかった% call :pushd %~$CDPATH:1 goto :eof ) call :pushd %* goto :eof :pushd %pushdが成功しても元と同じならpopdする(履歴を残さないため)% for /f "delims=" %%X in ("%CD%") do ( pushd %* if not ERRORLEVEL 1 for /f "delims=" %%Y in ('echo %%CD%%') do ( if "%%X"=="%%Y" popd ) ) goto :eof :dirs %ディレクトリスタックを横に並べて表示する% setlocal enabledelayedexpansion set TEMPFILE="%TEMP:"=%\\cd$$%TIME::=.%.tmp" pushd > %TEMPFILE% set DIRS=%CD% for /f "usebackq delims=" %%A in (%TEMPFILE%) do set "DIRS=!DIRS! %%A" del %TEMPFILE% 2>NUL set /p=%DIRS%<NUL endlocal goto :eof :shortcut setlocal enabledelayedexpansion set F=&set FILE= for /f "delims=" %%A in ('more "%~1"^|^ %findstrはWin2Kの日本語バグのため必要% findstr /v /b aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') do ( set A=%%A if "!A:~1,2!"==":\\" for %%B in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if "!A:~0,1!"=="%%B" set FILE=%%A if defined F (if defined FILE (set FILE=!FILE!%%A) else (set FILE=!F!\\%%A))&set F= if "!A:~0,2!"=="\\\\" set F=%%A ) if defined FILE endlocal&call "%~2" "%FILE%"&exit /b 0 endlocal&exit /b 1 なお、コード中のWin2Kのバグについては以前の記事を参照。
■ 2004年09月25日 / 【続々々々々】ディレクトリかどうかの判断 半年ぶりの続きである。なかなか奥が深い。約1年前に、このような表を作った。
しかし、対象がネットワーク共有名またはネットワークドライブの内部だとこの通り行かない。
つまり、ファイルとディレクトリの区別が付かない。また、\NUL を付加する方法でも駄目である。 したがって、ネットワーク共有先も含めて考えるなら、やはり if exist では駄目で、前回書いたように、 dir /b/ad FILE >NUL 2>NUL && echo ディレクトリ if exist FILE dir /b/ad FILE >NUL 2>NUL || echo ふつうのファイル のような方法を取る必要がある。
■ 2004年09月17日 / 「世界の中心で、愛をさけぶ」が終わりましたが 書籍でも映画でもなく、テレビドラマの話。堤D作品。有名な話だと思うのでストーリには触れません。 最初は、「本が売れて、映画も話題になって、三番煎じで視聴率取ろうとして」と思ってたけど、終わってみると今クールベストドラマかな。話としては無理なとこもあるんだけど、丁寧なシナリオ・演出とキャストとかの魅力でしょうか。綾瀬はるかもダイエットとか髪そりとか今時テレビドラマでよくここまでという感じ。友和さん貫禄あったなあ「まだ生きてたのか。人に会ったら挨拶しなさい」。高橋克実さんも「トリビアの泉」の変なおじさんではない。友人達も名の知れた人出てないけど、智世ちゃんかわいいし、介ちゃんも今後伸びそう。過去サク山田君も「どうしていいかわからない」様子がよく出てた。 特にアキの両親(友和、手塚理美)が印象的。同じく娘を持つ親として、もしあんなことになったら、ああいう風に娘や彼氏に接する事が出来るだろうかとつい考えてしまう。 最初は時間延ばしかと思っていた現代のサクたちも最後三話で収束した感じで、あって本当に良かった。現代アキ(桜井幸子)の事故も普通だとわざとらしいと思うところだけど、現代サクが過去に自然にけりをつけられた。現代アキは原作・映画に無い役ということらしいんで原作・映画にはビンが割れるシーンも無いんでしょうね。現代サク緒方直人がトラック走ってるところだけちょっと気持ち悪かったけど。矢田部先生の体の大きさも気になる。松下由樹、昔は小さかったのに。 ちょっと残念だったのは、せっかく時間あったんだからアボリジニのドリームタイムの説明があったら最終回のサクの夢の話がもっと活きたのにと思う。多くの人は知らないよね。あと雨もちょっと多用しすぎ。舞台は瀬戸内海なんで、雨が少ないと小学校で習います。それとも降水量少なくても夕立レベルは結構降るのかな? 原作も映画も見てないけど、ドラマ見ちゃうとこれを映画でやると話がわからないのではと思える。はしょれるエピソードって、介ちゃんの東京行きと鳥羽潤の所くらいだよね。きっとテレビのほうが出来が良いでしょう。空港で「助けてください」と大声で叫ぶのは変。現代アキとの出会いと、ガラス瓶が割れるのもキーだと思う。 きっと再放送がそのうちあると思うので(関東地方平日深夜?)未見の人は観て損はない。 それはそれとして、カニクリームコロッケが食べたくなった。最後の友和さんたちの弁当シーンが良かった。エンディングのサクとアキも。世間では「セカチュー」というと「純愛」ということになっているようだけど、少なくともこのドラマでは喪失と回復(再生)のほうがメインではないか。アキの両親もサクも。家族を突然失った人のニュースが多い昨今、それらの人に再生の日は来るのだろうか。 あと、骨髄バンクって1991年設立なのね。それより前だったと思うけど、顔も知らない大学の後輩が白血病になったという連絡が大学事務室から来て、血液検査に行った事ある。二次検査の連絡来なかったので不適合だったわけだけど、もし適合していたら迷っただろうと思う。臓器移植とは違うけど全身麻酔での骨髄液採取なんで輸血なんかとはレベルが違うはず。当時は独身だったけど、家族を持つと、見ず知らずの人への移植って正直勇気が無いです。彼の続報を知らないんだけど、大学の卒業生名簿のその学年のあたりって怖くて開くことが出来ません。 P.S. 智世ちゃん(本仮屋ユイカ)が、来年のNHK朝ドラのヒロイン抜擢とのこと。おめでとうございます。
■ 2004年09月12日 / 「犯人デカ」 フジテレビ月曜深夜の「犯人デカ」が面白い。系列他局でやってるかどうかは知りません。 全四回中二回が終わったが、定式化されていてとっても良い。この枠のこれまでと違い連続ドラマでなく、各回独立した短編なので三回目から見ても大丈夫。 主人公は「人間の証明」では竹之内君の下僕と化していた大杉漣。タイトル通り、刑事だが実は事件の犯人。多くの事件を解決しているので(そりゃそうだ)、敏腕刑事で知られており警察内での信用も厚い。 毎回、些細なことで腹を立てて人を殺し、たまたま居合わせた有名刑事として所轄の刑事と協力して犯人を逮捕する。もちろんその場に居合わせた他人に罪を擦り付けるわけであるが、詭弁を弄して半ば催眠術のように他人の記憶を操り(そのシーンでは何故か詭弁ダンサーズという女の子が後ろで踊ってる)、犯人をでっち上げる。途中危ない手がかりも出てきてあわてるが何とかごまかす。 というとネタバラシのようだが、タイトルで犯人を明かしてるし、毎回同じパターンだから大丈夫だ。
■ 2004年09月11日 / 「マンハッタンラブストーリー」再放送(関東)(こうさぎ) きょうは、編集した? きょう、編集した? otnは、 関東だけだと思うが、TBSドラマ「マンハッタンラブストーリー」の再放送が本日深夜から始まる。といってました。 *このエントリは、こうさぎの「シロ」が書きました。
■ 2004年09月02日 / いくつかの投稿から ¥ が抜けてます サーバープログラムのバグ/仕様のため、1バイト文字の ¥ を書くときは¥¥と書いて、さらに再編集するときに¥1つになっているのをまた¥¥と全部書きなおさないといけないのだが、すっかり忘れて編集した記事が幾つかある。つまりその記事からは¥が全部欠落している。 従って最近の記事中のバッチスクリプトのうちいくつかはそのままでは動かない。 そのうちに何とかします。とりあえずお知らせまで。 2004-9-8 追記 おかしいのは CDコマンド拡張 の記事だけだった模様。復旧しました。
■ 2004年09月02日 / 「マンハッタンラブストーリー」再放送(関東) 関東だけだと思うが、TBSドラマ 「マンハッタンラブストーリー」の再放送が本日深夜から始まる。昨年10-12月のドラマではマイベスト。「白い巨塔」の裏番組だったので視聴率は今ひとつだったらしいけど。 主演は一応TOKIOの松岡君だけど、実際は小泉今日子かも。というか、主要登場人物が毎回入れ替わりで主人公。 松岡君は、ほとんどしゃべらず、心の声と顔の表情のすばらしい演技でした。宮藤ドラマ常連の森下愛子、酒井若菜らのほか、船越英一郎が本人役で登場。及川光博もほとんど本人役で、次クールの「白い巨塔・後編」での弁護士とのギャップが。 最終回の小泉今日子の回には意表を突かれるどころでない大爆笑。
■ 2004年08月30日 / CD コマンドの機能拡張〜ショートカット対応 少し前に、cd コマンドの拡張を行った。ちょっと思いついてショートカットにも対応してみた(多分)。.lnk ファイルの内容をきちんと解析しているわけじゃないので駄目なケースもあるのかもしれないが今のところ動いている。 面倒なのでショートカット先はCドライブしか対応していない。 長いので変更点の周辺だけ示す。 if exist "%~1" ( %存在するか?% if exist "%~1\\" ( %ディレクトリか?% call :pushd "%~1" ) else ( %普通のファイルだ% if "%~x1"==".lnk" ( %ショートカットか?% for /f "delims=\\ tokens=1*" %%A in ('more "%~1"') do ( if "%%A"=="C:" call "%0" "C:\\%%B"&goto :eof ) ) call :pushd "%~dp1" ) goto :eof ) DOSKEY cd=cdd $* でエイリアス定義を行うと、cd の後ではディレクトリ名しか補完しないので、ショートカットファイルを対象にするときは cdd と元のバッチスクリプト名を使ったほうがいい。 2004-08-31 追記 フォルダを共有した状態でその中のファイル・フォルダのショートカットを作ったものに対しては上記の方法では駄目なようだ。一旦共有を削除してからショートカットを作ればOK。その後また共有を設定する。共有した状態で作ったショートカットにはローカルディスク上のファイル・フォルダについても共有名が記録されている。 ショートカットの内部構造を解説しているウェブページがあれば紹介いただきたい。
■ 2004年08月28日 / 「ココニイルコト」 何ヶ月か前にテレビの深夜枠で見た映画だが、山南さん追悼ということで感想を書いておく。 「ココニイルコト」2001年作品。タイトルはスガシカオの曲から、ストーリーは最相葉月の短いエッセイから取ったということだ。主演の真中瞳はこの作品で日本アカデミー賞他数々の新人賞を受賞。最近ではNHKの23時ドラマ「恋せよ乙女」「もっと恋せよ乙女」もおもしろかった。堺雅人は助演男優賞は取れてない。 話は、上司との不倫が元で東京から大阪の営業部に飛ばされた広告代理店のコピーライター(真中)。手切れ金をホテル代にして使いきったら会社をやめて東京に帰るつもりだった。同じ日に転職してきた不思議な感覚の営業マン(堺)と知り合う。 詳しい話は 公式ページ で見てもらうとして、いつも気になっていた堺のニヤニヤがこの映画では役柄とマッチして全然気にならない。硬い真中とやりあう柔らかい役柄。口癖は「ま、ええんとちゃいますか」。真中も堺とのふれあいで次第に自分の居場所を見つけていく。 キーワードは「星」。プラネタリウム、真中の子供の頃の想い出、堺のアパートのベッドから昼間見える星。 あと、エンディングタイトルでキャストの最後にクレジットされているのは笑福亭鶴瓶。わずか2シーンの出演だが、堺の雰囲気と一体となっていい味を出している。2シーン目はエンディングタイトルの後なので見逃さないように。いびきだけでセリフすらない出演だが印象に残ることは絶対である。 新選組!に堺が出ていなかったら、見なかったかもしれない映画。何か得した気分だ。 まぁ、公式ページのプロダクションノートくらいは見たほうがええんとちゃいますか。
■ 2004年08月27日 / WSHスクリプトのBATスクリプトへの組み込み(後編)(こうさぎ)
■ 2004年08月23日 / この笑顔にもう会えない〜 「新選組!」 #33「友の死」 NHKの番宣で「この笑顔にもう会えない」と何度か流れていた。公式ホームページに特集ページまでできちゃうし。 やっぱり史実通り死んでしまいましたな。そりゃまあそうなんだけど。 なんとか逃がそうとする近藤・土方・沖田や源さん・永倉・左之助達。 山南が死ぬのを知っているのに知らん振りをする明里。 切腹の後、近藤と土方が抱き合って泣く。 斉藤・沖田の「俺から見るとあの二人はお互いに敬い認め合っていた」「私の好きな人は皆私の刀で死んでいく。私は私はこんなことのために剣を学んできたんじゃない」といつものキャラと似合わない言葉。 深刻な回なのに、八嶋さんの「(身長が伸びるという石田散薬を)見せていただけますか?」という笑いシーンも忘れない三谷さん。 以前新選組物のドラマを見ていたとき、山南脱走が良く理解できなかったんだけど、今回のドラマでは隊内での対立や明里との出会いだけでなく、坂本との二回の会話がきっかけを作ったように思える。 堺雅人って新選組!に出るまで何度かドラマで見ていたけど、いつもニヤニヤ顔であまり好きな俳優さんではなかった。新選組!でも最初はニヤニヤが多かったけど、中盤から話が重くなるにつれ同じ笑顔でも次第にニヤニヤ度が下がってきた。特集ページのインタビューを見ると演技だった模様。 前日の「恋するハニカミ」(相手は大河内奈々子)ではとても自然な感じで、ゲストの土方=山本君に「あんなに天然とは知らなかった」と言われてた。地はあんな感じなんだろうね。「デートらしいデート初めて」「運転免許持ってない」「車に酔いやすい」「花火大会初めて」。いい意味で役者一筋という感じ。そんなにニヤニヤも気にならなかった。 新選組!を見て印象の変わった俳優さんとして山本君に次いで二番目。
■ 2004年08月21日 / RD-XS43買いました RD-XS43 を買った。今までは同じく東芝のAF40という、40GBHDD+VHS機を使っていたが、容量不足と録画中は別番組が見られない、そろそろDVD機が欲しい等で買い替え(買い増し?)た。 店頭でパナソニック機と操作をいろいろとやって比べてみたが、パナソニック機はどうも私の感覚に合わない。 東芝機は、DVD-Rメディアの相性とか、起動が遅いとか、簡易TBCだとか、DEPGには常時LANが必須とか色々問題もあるようだが、http://www.kakaku.com/ 掲示板では RD-XS41 の時のような障害続発の書き込みも少ないので、オリンピックが始まりやや値段が下がったところで購入に踏み切った。もう少し待てばまだ下がるだろうがこれはパソコンと一緒で欲しい時が買い時である。 RD の操作性はは同じ東芝でもAF40 とは天と地である。AF40は操作種類(削除・編集・プロパティ変更等)を選んでから対象タイトルを選ぶ。設計者はWindowsを使ったことが無いのかとさえ思える。RD は対象タイトルを選んでから操作を選ぶ普通のユーザインタフェースだ。
設置は明日の予定。
■ 2004年08月18日 / 運転免許の写真は前と同じ物は使えません 優良運転者なので6月に警察署で免許の更新をして、9月まで有効の判子を押してもらった。 さて今朝午前中特に予定が無かったので、出勤前に警察署に更新した免許を受け取りに行って来た。(送料900円をケチったということ) 係のおばさんじゃなくて婦警さんが電話で興味深そうな話をしているので耳を傾ける。 免許証受け取りが終わった後、聞いてみた。 otn「前回と同じ写真を出した人がいるんですか?」 plc「前回どころか平成6年の時と同じ写真です。免許センターから言って来るんですよ」 otn「そういう場合は写真を出しなおさないといけないんですか?」 plc「そうです」………6ヶ月以内の写真と書かれているので、そりゃそうだ。 性別や何歳くらいの人か聞きたかったが自粛。手数料を再度払うのか位は聞いてもよかったかな。 しかし、10年前の写真を使うか?良く残ってたもんだ。でも、5年前は違う写真を使ったんだよな。不思議。 でも数年前の写真であっても、過去に免許用に使っていなければチェックに引っかからないわけだ。ごく僅かと思われる“以前と同じ写真を使う人”のためにわざわざチェックしているというのも、なんだかなあ。まさか人手でやってるわけじゃないだろうな。
■ 2004年08月15日 / WSHスクリプトのBATスクリプトへの組み込み(後編) 前回の続き。 VBScrirpt と異なり、JScript には、行末までのコメント記号 // の他に、 /* */ で囲んだ複数行コメントが書ける。従って、バッチスクリプト部分をこれで囲めばコンパイル対象外に出来るため VBScript のようなコンパイルエラーを回避できる。 後は、/* がバッチスクリプトとしてもエラーにならなく書け、それが JScript としてもエラーにならない書き方が出来ればいい。共通のコマンド/ステートメントとして、@set 文が使えそうである。JScript の @set でセットできる変数名は @ で始まり、値は真偽か数字と制約がある。一方、バッチスクリプトの set コマンドとして見ると @ のために行がエコーされないので都合が良い。 今回も、一週間後の日付けを表示するという具体例でいく。 @set @_=1/* @echo off for /f "delims=" %%A in ('cscript //nologo //E:jscript "%~f0"') do set OUT=%%A echo 一週間後の日付けは %OUT:~0,4%-%OUT:~4,2%-%OUT:~6,2% goto :eof */ d=new Date((new Date).getTime()+7*24*3600*1000); WScript.Echo(d.getYear()*10000+(d.getMonth()+1)*100+d.getDate()); これで一応動作する。バッチスクリプト内に */ が出現する場合はまずいが、例えば、 echo コメントの終わりは */ という文を書く必要があれば、 set STAR=* echo コメントの終わりは %STAR%/ のように書き直せばよい。 別解として、条件コンパイルを使って、 @set @_=1//&echo off&goto bat @cc_on @if (false) :bat for /f "delims=" %%A in ('cscript //nologo //E:jscript "%~f0"') do set OUT=%%A echo 一週間後の日付けは %OUT:~0,4%-%OUT:~4,2%-%OUT:~6,2% goto :eof @end d=new Date((new Date).getTime()+7*24*3600*1000); WScript.Echo(d.getYear()*10000+(d.getMonth()+1)*100+d.getDate()); というのもあるが、/* */ を使うのが簡単だろう。 なお、いずれの手段でも、外側のバッチ環境変数を一つ(この例では @_ )の値を破壊してしまう副作用がある。
■ 2004年08月13日 / WSHスクリプトのBATスクリプトへの組み込み(前編)(こうさぎ)
■ 2004年08月11日 / 田宮版「白い巨塔」の総集編再放送 来週8/16から、田宮版「白い巨塔」全31回を13時間に再編集した版がフジテレビで再放送される。多分関東だけでしょう。 昔見たような気がするけど、覚えているのは財前教授の総回診のシーンと、義父のおっちゃんくらい。ストーリーは教授選くらいしか覚えてなかった。 この枠当面、野沢尚追悼特集でやるのかと思ったら2作で終わってしまった(「恋人よ」と「氷の世界」)。
■ 2004年08月08日 / WSHスクリプトのBATスクリプトへの組み込み(中編) 前回の続き。まず直感的に考え付くのが、中間ファイル版のパイプ化である。今回は、一週間後の日付けを表示するという具体例でいく。もちろんこの例のように表示だけなら VBScript だけでやればいいのだが、本来はバッチスクリプト部分でバッチスクリプトの方が書きやすい処理が書いてあるものと思ってもらいたい。 @echo off for /f "delims=" %%A in ('findstr /e "'VBS" "%~f0" ^| cscript - //nologo //E:vbs') do set OUT=%%A echo 一週間後の日付けは %OUT%. goto :eof WSCript.echo dateadd("ww",1,date()) 'VBS しかしだめである。cscript コマンドはパイプからの入力に対応していないようで、 CScript エラー: スクリプト "-" の読み込みに失敗しました (パイプは終了しました。)。 というエラーメッセージを出すだけだ。findstr 直接でなく1行ずつゆっくり出力するフィルターをかませても駄目である。 次に、ruby や bash のように一方では実行され他方では読み飛ばされるような書き方が出来ないか考えてみる。 set A=nothing'&@echo off&setlocal&goto bat WScript.Echo DateAdd("ww",1,date()) if false then :bat for /f "delims=" %%A in ('cscript "%~f0" //nologo //E:vbs') do set OUT=%%A echo 一週間後の日付けは %OUT% goto :eof end if しかし、これもだめ。VBScript では複数行にまたがるコメントが書けないので、if false で バッチスクリプト部分を囲って、この内部もコンパイル時にパースされて、VBScript のコンパイル時に文法エラーになる。While false でも同じ。 仮に上手く行っても、set A=nothing' & がエコーバックされるのは抑止できない。 そこで、VBScript は諦めて JScript を使うことを考えることにする。もしかしたら、VBScript でも何か技があるのかもしれないが。 JScript なら複数行にまたがるコメントが書けるので、バッチスクリプト部をコメント化出来る。 つづく。
■ 2004年08月07日 / 複数行のnet sendメッセージ 以前書いた、環境変数に改行文字をセットの話だが、今一ついい使い道が思い浮かばなかった。今回、net send での複数行メッセージ送出に使うことを思いついた。 @echo off setlocal enabledelayedexpansion set DEST=%2 if not defined DEST set DEST=%COMPUTERNAME% set MSG= for /f "usebackq delims=" %%A in ("%~1") do ( set MSG=!MSG!^ %%A ) net send %DEST% "!MSG!" 引数1のファイルの内容を引数2の宛先に net send する。ただし、文字数に制約があるようで、長い場合は切り縮められる。宛先が * の場合はさらに送れる文字数は少ないようだ。 また、特殊文字を考慮していないので、ファイル中にある " ^ は消える。! があるとエラーになるケースもある。その他の特殊文字は単独文字での簡単なテストでは大丈夫そうだが、注意が必要。普通の日本語メッセージなら大丈夫。
■ 2004年08月06日 / アメリカンホームダイレクトの危険広告 前から思ってたんですけど、アメリカンホーム・ダイレクト保険の広告で、右手の親指と小指を伸ばして、電話しているポーズがあるよね。 あれ、車に乗ってシートベルトもして電話しているポーズの新聞広告が一時よく見られた。最近あまり見ないので、さすがに気づいて止めたのかと思っていたら、最近テレビでよく見かける!!しかもテレビ版は窓から頭も出してる。 アメリカンホーム保険は車に乗ってシートベルトもした状態で電話をしてくれということなんだね。まあ、「運転中ではない」というイクスキューズなんだろうけど、わざわざ車に乗って電話している絵にしなくていいのに。 あと、窓から頭を出すのは運転中でなくても危険ですよ。わかってます?
■ 2004年08月04日 / 「新選組!」 #29「長州を討て」 TVドラマのレビューは原則終わった時だけにするつもりだった。大河だけ長いので先日中間レビューを行った。 でも、その前日の放送#29「長州を討て」だが、今回は、「イトイ新聞」もみてまた土曜日の再放送を録画。再放送を2回合計4回も見てしまったので、特別。前半最終回である鴨暗殺の#25「新選組誕生」も何度見たことか。 象山先生と近藤の最後の会話、「国を思うおのれの心に誠があるならば迷うことは無い。近藤君おのれを信じて生きたまえ。」直後に先生が殺されたこともあり、この言葉は近藤の心に残るのであろう。今回の#30「永倉新八、反乱」でも近藤が回想するシーンがあった。 いわゆる精神主義に過ぎないとも言える言葉だが、新選組隊旗の「誠」とはいい意味でも悪い意味でもそういうことであろう。 一方、久坂の最後「これからどうなっていくのだ。長州は、幕府は、日本は?我らがなしてきたことは意味があったのか?」はともかく、それに続く「俺たちが生まれてきたことは…」の言葉は悲しい。泣けますね。泣かなかったけど。 情勢の読みが甘かったと言う意味では鷹司卿に指摘された通りであるが、松下村塾の俊英の悲しい最後である。 私の好きだった「花神」では、吉田松陰が篠田三郎、高杉晋作が中村雅俊、久坂玄瑞が志垣太郎。みんな格好よかった。主人公の大村益次郎=中村梅之助は格好よくなかったけど。 宮部鼎蔵の最後の言葉はありきたりだったので略。この人だけ自害シーンを見せたのはどういう意図なのかはわからず。介錯無しの切腹って即死しないと思うけど文句は略。誰かとどめを刺してあげたのかだけ心配しておく。 また、この回のもう一つのポイントの捨助については前回書いたので略。
■ 2004年08月03日 / 首相には広報担当専任秘書官が必要 「政治的な立場の偏った映画は、あまり見たいとは思わないね」 まあ、彼個人の好みはどうでもいいのだが、年金法案で委員会質疑を途中で打ち切って採決した与党党首である首相としての発言としてみれば、“自分と対立する人の意見は聞きたくない”という一般的な意思表明と受け取られても仕方ない。 私はいわゆる無党派で、自民党に投票したことも共産党に投票したことも、もちろん民主党や旧社会党に投票したこともあり、小泉ファンでもないのだが、「人生いろいろ、会社もいろいろ、社員もいろいろ」といい、わが国の首相の発言が“国民に与える印象を何も考えずに”行われているということは、一国民として恥ずかしい・何とかしてもらいたいと思っている。いい意味でパフォーマンスして欲しい。 首相は、アメリカで大人気のドラマ「ザ・ホワイトハウス」を見たことがあるだろうか?それとも「民主党大統領のドラマなど見たいとは思わない」のだろうか?大統領のしゃべる言葉一つ一つに熟考を重ねている広報部スタッフ達の姿を是非見て欲しいものだ。 ところで「ザ・ホワイトハウス(The West Wing)」、NHKへのファンの陳情が実って、9月から第2シーズンの再放送、10月からいよいよ第3シーズンの放送だが、韓国ドラマに地上波枠を取られていずれもBSでの放送である。それまでにBSアンテナ立てなければ。 (韓国ドラマに他意は無い。実は「冬のソナタ」も見ていることは他のTWWファンには内緒だ)
■ 2004年08月02日 / WSHスクリプトのBATスクリプトへの組み込み(前編) バッチスクリプトの中で、どうしてもバッチスクリプトの機能で実現できない部分だけを他のプログラムで補わないといけないことがある。既存プログラムなら、for /f の機能で処理結果を標準出力から受け取ればいいのだが、1コマンドで書けないスクリプトの場合は困る。 簡単な方法は一時ファイルを使う方法だ。例えば、何らかの処理をしてその標準出力を OUT にセットする場合、 @echo off findstr /e "'VBS" "%~f0" > tmp.vbs for /f "delims=" %%A in ('cscript //nologo tmp.vbs') do set OUT=%%A del tmp.vbs 何らかのバッチスクリプト goto :eof VBScript をここに書く 'VBS 。。。。。 'VBS VBScript の最終行 'VBS のように、目印となるコメントをつけた VBSript 部だけを別ファイルに書き出してそれを呼び出せばいい。 でも、何か一時ファイルを作ると言うのはあまり気分の良いものではない。無理ならしょうがないが避けられるなら避けたいものだ。他の言語の場合は1ファイルに両方のスクリプトを書いてどちらの言語で実行してもOKということも出来る。例えば、ruby の場合、 @echo off for /f "delims=" %%A in ('ruby -x "%~f0"') do set OUT=%%A 何らかのバッチスクリプト goto :EOF #! ruby ruby スクリプトをここに書く 。。。。。 ruby スクリプトの終わり という風に、このような使い方を想定した -x オプション(#! ruby 行まで読み飛ばす)が存在する。 bash の場合だと、 : " @echo off goto bat " bash スクリプトをここに書く 。。。。。 bash スクリプトの終わり exit 0 :bat for /f "delims=" %%A in ('bash "%~f0"') do set OUT=%%A 何らかのバッチスクリプト のように、bash の : コマンドと、バッチスクリプトのラベル定義行が同形式なことを使えば出来る。@echo off と goto は " " で囲んで : コマンドの一引数としてしまう。 このようなことが、VBScirpt または JScript で出来ないかどうかを考えてみる。 つづく。
■ 2004年07月31日 / CMD.EXE だけで翌日の日付けを求める 前回、前日日付けを求めるスクリプトを書いたので、今回は翌日版。2月の処理がちょっと複雑になってしまった。 @echo off REM 日付の翌日を求める。結果は ANS にセット。 REM 引数(YYYYMMDD or YYYY-MM-DD or YYYY/MM/DD)がないときは本日とする。 if "%1"=="" (for /F %%A in ('date /t') do set ANS=%%A) else set ANS=%1 if not "%ANS:~8%"=="" set/a ANS=%ANS:~0,4%%ANS:~5,2%%ANS:~8,2% set/a ANS+=1 if 1%ANS:~-2% leq 128 goto ans if %ANS:~-2%==32 set/a ANS+=100-31&if not %ANS:~4,2%==12 goto ans if %ANS:~4,2%==13 set/a ANS+=10000-1200&goto ans if %ANS:~4,2%==02 if %ANS:~-2% geq 29 set/a ANS+=2-(!(%ANS:~0,4%%%4)^^!(%ANS:~0,4%%%100)^^!(%ANS:~0,4%%%400))*(31-%ANS:~-2%) for %%M in (02 04 06 09 11) do if %ANS:~-4%==%%M31 set/a ANS+=100-30 :ans 引数形式や使い方、日付けの正当性チェック無しなど、すべて前回と同じ。 if 1%ANS:~-2% leq 128 goto ans は不要だが、多くのケースでの速度向上のために入れてある。 n日前後を求めるJScript内蔵版はまた別途書くことにする。
■ 2004年07月30日 / 鉄人28号とチェリッシュ?(こうさぎ)
■ 2004年07月28日 / CMD.EXE だけで昨日の日付けを求める 質問掲示板を見ていると良く見かける質問で、今日の日付けをファイル名につける等の日付け関係のものがある。今日の日付けだと、date/t や %DATE% を加工するだけなので簡単。たまに、昨日の日付けを求めると言うのがある。簡単に行うのは、VBScriptやJavaScriptを使う方法だが、使わない範囲で出来るだけコンパクトに作ってみた。 @echo off REM 日付の前日を求める。結果は ANS にセット。 REM 引数(YYYYMMDD or YYYY-MM-DD or YYYY/MM/DD)がないときは本日とする。 if "%1"=="" (for /F %%A in ('date /t') do set ANS=%%A) else set ANS=%1 if not "%ANS:~8%"=="" set/a ANS=%ANS:~0,4%%ANS:~5,2%%ANS:~8,2% set/a ANS-=1 if not %ANS:~-2%==00 goto ans if %ANS:~4,2%==01 set/a ANS+=-10000+1131&goto ans for %%M in (02 04 06 08 09 11) do if %ANS:~4,2%==%%M set/a ANS+=-100+31&goto ans if not %ANS:~4,2%==03 set/a ANS+=-100+30&goto ans set/a ANS+=-100+28+(!(%ANS:~0,4%%%4)^^!(%ANS:~0,4%%%100)^^!(%ANS:~0,4%%%400)) :ans 一応、サブルーチン形式で作ってみた。引数はyyyymmddでも、区切り文字入りでも可能。ただし日付けの正当性まではチェックしてない。 ワーク用の環境変数を使っていないため、サブルーチンでなく、スクリプト中に埋め込んで使うことも出来るだろう(それを考慮して goto :eof を使ってない)。 ポイントは、年・月・日を分けずに8桁の数字として扱うことと、閏年の算出の工夫(排他的論理和を使用)。 また、ANSの値は、最初に8桁の数字をセットして1引いた後は set/a で最後に一度しか変更しないので、goto を使わないで、if ( ) else ( ) でも書けるかも知れない。 何日前、何日後をバッチだけでやるのだと、ジュリアンデイトに直してから計算するんだろうけど、VBS, JS に頼ってしまいそう。これはまた別途書くことにする。
■ 2004年07月26日 / 「新選組!」が半分終わって 「新選組!」が半分終わってというタイトルにしたが、半分というのは期間的にも内容的にも6月末の芹沢暗殺の時である。その時書こうと思っていたけど遅くなってしまった。 芹沢殺しは大人になるための試練とプロデューサーのコメントにある。新選組物で、期間の半分まで芹沢鴨を引っ張ったのは多分初めてでは無いか。三谷さんも朝日新聞の連載コラムで「大河史上最大の悪人にしたい」と書いていた。沖田に関していうとオイディプス王の話を模していると言えるだろう。つまり父殺しである。でもその後も相変わらずみたいだけど。 史実に合って無いとか言う事をいう人もいるらしい。確かに、試衛館時代の近藤らと坂本、桂が知り合い出会ったという記録は無いのだろう。でも、坂本・桂は、江戸の名門道場の師範代である。近藤らは彼らの名前を知っているだろう。酒を飲み交わす仲なら日記等にのこっているだろうけど、見かけた位あってもおかしくない。フィクションとしては許容範囲だと思う。大河では過去に、城代家老大石内蔵助と吉良側上杉家江戸家老が旧知の間柄という設定もあった。これも記録にあったわけでは無いだろう。文句を言った人いるの? 近藤らと坂本らが元々敵同士と誤解している人もいるようだが、放送の前説でもあったように、黒船来航のころは皆「攘夷」の思想では一致している同士である。しかし、龍馬って遊んでばかりのように描かれてるなあ。まあ周辺人物なんで、神戸海軍操練所等の話を書いてもしょうがないと言うことか。武市も出てこないままに終わりそう。あと、久坂が活躍してるのに高杉は全く出てこないのかな。西郷は今回(蛤御門の変の回)出てきた。 芹沢から「鬼になって俺を食っちまえ」といわれた近藤もようやく「鬼になる」と決意、池田屋では「公儀にたてつく者は斬る」と決めた。芹沢が宴席の帰りに斎藤に「お前はいい」とボディガードを断り、斎藤はそれでも芹沢を守ろうと、土方の言うことは聞かないが近藤の「斎藤君、通してやれ」の言葉には従う。 今後は、三谷さんが近藤・土方・山南・斎藤の関係をどう描いていくかが楽しみ。一時は土方・山南は名コンビだったのにね。まあ、結末はわかっているんだけど。 最近の近藤は土方に対しても「いいお言葉がでたぞ」とか「薬屋の言うことだ。信用していい」とか他人の前でわざとのように言っている。親友だからからかっているのか、最近の土方の動きに違和感があるのか。親友とは言え、土方自らが「他人の前では、トシと呼ぶな」と近藤を立てるため人目を気にしている。近藤もそれをわかった上での発言なので、やはり現時点では違和感があるんだろうか、それとも土方と距離を置いていることのポーズ?今後の近藤と土方の関係は一体化していくだろうから、近藤ももう一皮むけると言う事になるのだろうか。その時が山南の脱走に繋がるのか。 しかし、斎藤のオダギリジョー、かっこいいねえ。あの拷問案を出したのはちょっとあれだけど、史実ではないらしいし。拷問案を出したのを斎藤に割り当てたのは土方・斎藤の今後の接近を意図してのことなのか?でも斎藤って「近藤が天狗になって困る」という建白書に参加しているんだよね。いずれにせよ今後に注目。 あと土方。実はキャストを見たとき一番違和感のあったのは彼。だって「一つ屋根の下」のイメージしか無かったから。でも、きっと土方は彼の代表作になるだろう。殿内が斬られて芹沢の罪を問えなかった時の「あいつ(近藤)に二度とこんな思いはさせない」のセリフ。 「ほぼ日刊イトイ新聞」では無いが、「山本くん、いままでごめん!」。 捨助も最近は大活躍。だいたい大河は、歴史上無名な市井の人が主要な登場人物でも良く出てくるが、さすがに幕末しかも新選組周辺では全く無名の人は少ない。そのあたりの役柄を捨助が一手に担っているのだろう。一応実在人物のモデルはいるようなのだが。 多摩編で登場の時、中村獅童にしてはえらく役不足(本来の意味)だなと思ったんだけど、さすが「HR」の名番長役、また香取君との絡みが楽しみ。 ついでに三谷さんの書いていた「大河史上最大の悪人」を考えてみた。芹沢はそうじゃないよね。いろいろ考えたけど私が見だした「国取り物語」以降では「炎立つ」の源頼義(佐藤慶)かな。
■ 2004年07月23日 / 三谷さんと野沢さん(こうさぎ)
■ 2004年07月22日 / 鉄人28号とチェリッシュ? 少し前に新版「鉄人28号」のことを書いたが、その後暗いのであまり見てなかった。今日久しぶりに見たが、何と初めてエンディングテーマ曲が「なのにあなたは京都へ行くの」だというのに気づいた。最初からだったのかなぁ? チェリッシュは、「なのにあなたは京都へ行くの」から「若草の髪かざり」くらいまで好きだった。子供の頃初めて買ったLPアルバムもその時期のチェリッシュ。何年ぶりかに聞いたけど、昔のオリジナルとちょっと違う感じ。新録音なのかな。 CD持ってない。LPは実家で行方不明。 しかし、何で鉄人でチェリッシュ?不思議だ。 2004-07-25:追記 コメントを頂いた(ありがとうございました)ので本文に追記。前回と今回だけ(京都の街が舞台/テーマなので)特別にエンディングを変えたらしい。前回自分でも、 >主題歌もオープニング、エンディングともアレンジは違うものの昔と同じ。 と書いているのを発見。 >しばらくは見ることにします。 と書きながら見てないし。
■ 2004年07月21日 / 三谷さんと野沢さん 朝日新聞夕刊の三谷幸喜の今日のエッセイは、野沢さんの葬儀に出席した際の話だった。 葬儀の話はしんみりするから書かないと最初に書きつつ、関係ない話が続き、でもやっぱり最後には野沢さんの話。 なんかとても良い話に思えました。さすが上手いね。 まあ三谷さんは自殺しっこないので安心。
■ 2004年07月16日 / CD コマンドの機能拡張 このところBATスクリプトの話が途絶えてたので、自作スクリプトの紹介。cd コマンドの pushd 化と csh 風拡張。移動はすべて pushd で行う。 ・cd のみのときはディレクトリスタックの表示 ・ホーム(%HOME%)への移動は cd ~ ・cd - で前のディレクトリに戻る ・cd 存在するディレクトリ だとそこへ移動 ・cd 存在するファイル だとそのファイルのあるディレクトリへ移動 (explorerからcmdプロンプトへファイルをドラッグ&ドロップしたとき便利) ・cd 英数字 で、その英数字が環境変数であり、その値が "?:\\*" つまりフルパスのディレクトリならそこへ移動 ・cd 文字列 で環境変数CDPATHを探索してオペラランドがそこにディレクトリとして存在すればそこに移動 ・cd /s 文字列 だと、カレントディレクトリの下を再帰的に探して最初に見つかった該当ディレクトリに移動 ディレクトリスタックの表示は、単に pushd を使うと新しい順に縦に1つずつ表示されるが、古い順に横に並べたかった。for /f "delims=" %%A in ('pushd') doでは現在のディレクトリスタックを取得できない。'pushd' の出力は空となる。おそらく、'pushd' がサブシェルで実行され、そのサブシェルに現在のディレクトリスタック情報が継承されないためと思われる。そのため、一時ファイルを作らざるを得なかったのが少し残念。 このスクリプトを cdd.bat 等として、doskey cd=cdd $* と定義して使う。 実際使ってみると、環境変数名指定での移動機能までは要らなかったかなと思う。それを省けば20行ほど短く出来る。 @echo off if "%~1"=="" ( %引数が無ければ表示のみ% call :dirs goto :eof ) if "%~1"=="-" ( % - なら戻って表示% popd call :dirs goto :eof ) if "%~1"=="~" if defined HOME ( % ~ ならホームへ% call :pushd %HOME% goto :eof ) if exist "%~1" ( %存在するか?% if exist "%~1\\" ( %ディレクトリか?% call :pushd "%~1" ) else ( %普通のファイルだ% call :pushd "%~dp1" ) goto :eof ) setlocal enabledelayedexpansion call :isname "%~1" if %ERRORLEVEL%==0 ( %英数字だけの名前か?% if defined %1 ( %環境変数名か?% set "Q=!%1!" if "!Q:~1,2!"==":\\" if exist !%1!\\ ( %内容がディレクトリ絶対パスか?% endlocal&call :pushd %%%1%% goto :eof ) ) ) set "P=%~$CDPATH:1" %CDPATHの探索% if defined P if exist "!P!\\" ( %見つかった?% endlocal&call :pushd %~$CDPATH:1 goto :eof ) endlocal if /i "%1"=="/s" if not "%2"=="" for /r %%A in (%2) do if exist %%A\\ ( %第一引数が /s ならサブディレクトリを探す% call :pushd %%A goto :eof ) call :pushd %* goto :eof :isname %英数字と一部の記号だけかチェック% setlocal enabledelayedexpansion set "W=%~1" for %%A in (@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9) do ( if not defined W endlocal&exit /b 0 set "W=!W:%%A=!" ) endlocal exit /b 1 :pushd %pushdが成功しても元と同じならpopdする(履歴を残さないため)% for /f "delims=" %%X in ("%CD%") do ( pushd %* if not ERRORLEVEL 1 for /f "delims=" %%Y in ('echo %%CD%%') do ( if "%%X"=="%%Y" popd ) ) goto :eof :dirs %ディレクトリスタックを古い順に横に並べて表示する% setlocal enabledelayedexpansion set TEMPFILE="%TEMP:"=%\\cd$$%TIME::=.%.tmp" pushd > %TEMPFILE% set DIRS= for /f "usebackq delims=" %%A in (%TEMPFILE%) do set "DIRS=%%A !DIRS!" del %TEMPFILE% 2>NUL if defined DIRS echo %DIRS% endlocal goto :eof ディレクトリスタックに同じものが連続しないように工夫。そのために :pushd というサブルーチンを作ったが、setlocal が使えない( setlocal と endlocal の間で pushd すると、endlocal で元に戻ってしまう。unix の シェルスクリプト内で cd 出来ないのと同じ) ので環境変数を汚さないために for/f の制御変数に新旧のディレクトリをセットして比較せざるを得なかった。後で考えると、OLDCD のような環境変数を新設して使う手もあった。
■ 2004年07月11日 / ようやく「12人の優しい日本人」を見た 昨日、深夜放送で「12人の優しい日本人」をやっていたので見た。以前にも一度TV放送された時に録画したんだけど見ないうちに見失ってしまっていたので今回初めて見ました。三谷幸喜脚本で監督は「ボクの女に手を出すな」「櫻の園」の中原俊。1991年作品。 豊川悦司が出てますが、NIGHT HEADの前年なのでまだ無名の時期ですね。前半は一人離れて議論を傍観してますが後半活躍します。 また、ついこの前まで「新選組!」で新見錦をやってた相島一之(これも若い)が、「怒れる男たち」のヘンリーフォンダの役(有罪・無罪が逆ですが)。被害者への反感から非論理的に「もし有罪でも無罪だ」と固執する役が梶原善。他の皆もキャラ立ってて面白いです。 話としては、殺人事件の陪審員の議論で、無罪11人・有罪1人から議論が始まり(陪審は多数決じゃなくて全員一致に至らないと、陪審員の再選定からやり直し)、有罪と思える根拠がどんどん出てきて有罪論者が増えていきますが、また無罪に戻す人もいれば、頑固に有罪や無罪を貫く人もいる。 タイトルが「12人の優しい男たち」とか「12人の優しい人たち」(女性もいるので)じゃなくて「日本人」になってますが、各人が有罪・無罪をころころ変えるのとその変える理由がいかにも日本人らしいということからでしょう。 以下ねたばれなので、文字色を背景色に変えますが、カーソルで選択すれば読めるでしょう。 相島さんがヘンリーフォンダの役かと思っていると、議論中で平気でずるしたり嘘ついたりするし、最後で実は自分の境遇を事件に重ね合わせて有罪を主張していたことが判明。感情的にしゃべりますが、もう11人は冷静になってる。つまり「怒れる男たち」で最後に泣きながら無罪を認めた人と二人分の役をしていたことになります。これは中々面白い。 ところで、最初に飲み物の注文を取りまとめますが、皆バラバラにしゃべる上に人の注文をきいてコロコロ変える(議論で意見がころころ変わるのを暗示)ので、きっと届いた時は注文が合わないというシーンがあるのかと思い込んで見てましたが、配達された時には誰も文句を言わなかった。注文が合ってたということです。この時点で意見がまとまることも暗示していたのか? レンタルビデオ屋ではあまり見かけない。DVD欲しいところだけど邦画のDVDは高い。 「12人の怒れる男たち」を見たひとも見てない人にもお勧めですが、先に「怒れる男」を見ていた方が楽しめるでしょうね。
■ 2004年07月10日 / orkutのブラジル化 orkutの統計ページを見ると、いつの間にかブラジルが約40%で、アメリカの約25%を超えている。日本も5位から6位に落ちてる。言語表記も"Javanese"のままだし。 コミュニティメンバーに来るメールもポルトガル語らしいものが増えてきました。ブラジル国内に母国語でのSNSサイトが無いんでしょうか。orkutどうするのかなあ。特定国が40%を占め、アメリカ人が1/4しかないSNSを維持していくモチベーションは続くのか?Newsページを見ると機能拡充は少しずつ進んでいるようだけど(個人ホームページのコミュニティ表示順も固定順序からランダム順序に改善されている)。
■ 2004年07月09日 / 「仔犬のワルツ」が終わりましたが(こうさぎ) きょうシロはここにotnとカバチタレされたみたい… きょうは、otnがコメントしたかったの♪ シロがここにotnはカバチタレ♪ きょうotnの、ラもコメントされた。 *このエントリは、こうさぎの「シロ」が書きました。
■ 2004年06月27日 / 「仔犬のワルツ」が終わりましたが 何とコメントしていいものやら。「え、そんなんあり?」とか「いくらなんでも、それはやりすぎじゃあ?」というのが途中から増えてきましたが、最終回でもまだまだ出る出る。 基本的に意表を突かれたり、意外性があるのは好きだし、日テレ土曜21時枠は「なんでもあり」だと思ってましたが。。。日本テレビ開局50周年特別企画がこれでいいのか? とりあえず、ドランク塚地の母親が実は酒井和歌子だったという設定は許しがたいと、本筋に関係ないところにだけ突っ込んでおきます。 ところで、普段ドラマを見ないのに安倍なつみのファンだからこのドラマを見ていたという人はどういう思いで見てたんでしょうね。連続ドラマ初主演がこれでよかったのかなあ。 でもこれ後に怪作としてカルトな人気が出るとか、あるかな?確かにもう一回最初から見たい気はする。
■ 2004年06月26日 / 「ホームドラマ」が終わりましたが なんか変なタイトルでしたが、「ホームドラマ」結構面白かった。実際にあった話をもとにしているらしい。 海外旅行中にバス事故で家族を失って一人になった人たちが、一緒に生活して擬似家族を作るという話である。関係者九人だし、一回目の最後で堂本の家に一人来たので、一回に一人ずつが参加していく話かなと思っていたら違って、二回目でユースケサンタマリアと、添乗員の妻である紺野まひる以外が全員集まり、四回目には全員揃ってしまった。 子供たちは3人はみんな何らかのトラウマを抱えてしまっている。両親の言うことを聞かずバスの中でもゲームばかりしていた小学生の男の子は自分が言うことを聞かなかったために親が死んだと思い、ゲームをしなくなってしまう。中学生の男の子は父親から勧められたチョコバーを食べなかったので事故後はひたすらチョコバーを食べまくる。バスに乗れなくなり、雨でも自転車で通学する高校生の女の子。 あとは、酒井若菜、いしだあゆみ、久しぶりに見た田村高廣、皆を呼び集めた堂本剛。 田村さんが、若者言葉を覚えて使いたがるいいおじいちゃん。その田村に「うざい」と言われた堂本の「うざさ」がこのドラマのいいところであり、それを本当に「うざい」と思う人は観るのがつらいかもしれない。 井上真央って初めて見たけど「キッズウォー」という連作ドラマで有名だったらしい。紺野まひるも初めて見たけど、硬い人に見せながら酔うと関西弁で暴言を吐くというおいしい役どころ。酒井若菜も「14ヶ月」に続いてシリアスな役で、何でも出来る人だなあと再度認識。これが木更津キャッツの「モー子」とは思えない。 家族を持って思うのは家族を失うと本当につらいだろうなという恐れ。
■ 2004年06月20日 / orkutの多言語化? orkutから、コミュニティオーナー宛に、 「コミュニティに使用言語の指定が出来るようになりました」 というメールが来たので、もしかして日本語での書き込みが出来るようになったのかと淡い期待を抱いてやってみましたが、やはり駄目でした。コミュニティの属性として「言語」が増えただけ。 しかも、言語を選択するプルダウンメニューに「Japanese」が無い!! スペルがよく似た「Javanese」というのがあったので、それを選んでおきました(笑)。Javanese語なら書き込めるのかもしれません。 国別ユーザー数もかつての2位から3%台の5位になってるし、もう日本人ユーザーは増えないのかなあ。最近私もmixiを見ることが多いです。
■ 2004年06月18日 / blogペット“こうさぎ”を設置してみました
■ 2004年06月17日 / 映画「湘南爆走族」 少し前に深夜放送でやっていたものを録画してたんですが、先ごろ見ました。主演の江口洋介の(実質的な)デビュー作、織田裕二・清水美砂もデビュー作です。彼らは忘れたい作品じゃないかなあ。 紫のとがったリーゼントで、手芸部の部長を務め女子部員に丁寧に手芸の指導をする一方で副部長の清水美砂に頭が上がらない江口洋介を見たい方は必見か。織田裕二は江口と違い、とんがった感じですね。杉浦幸の彼女が居るけど。 彼らの若い頃を見られる以外にはごく普通の暴走族の話。 バイクのチキンレースをするのに目隠しをするのはやりすぎだと思う。普通死ぬでしょ。 清水美砂より、江口らのライバルである竹内力の妹役の加藤麻里がかわいかった。調べると「はみだし刑事情熱系」のレギュラーらしいけどこのドラマ一度も見たことありません。
■ 2004年06月16日 / 竹中さん参院出馬 竹中さん、参院選出馬らしいけどいいのかなあ。 自民党には大メリットだろうけど、本人には出る必要全く無いし、万一得票数が少なければ進退問題が再燃する。 得票数に自信があるのか、党に押し切られたのか。 得票数が多くても議員の大臣になっちゃえば、今の特別な立場が失われて党の言うことも今まで以上に聞かなければならないだろうし。 小泉政権が長くないという読みがあるのか。でも小泉が倒れると、きっと大臣にはなれず単なる参院議員ですよね。
■ 2004年06月09日 / 「TSUKAJI24」が終わりましたが 「はねるのトビラ」の1コーナー「TSUKAJI24」が先週終わりました。 一言で言っちゃうと「ドッキリカメラ」なんだけど、違うのは「24」を模したドラマ仕立て(ナレーションはジャックの声優さん)になっているところ。特にだまされ役の塚地が出ていない、だます側だけののシーンでもちゃんとドラマ風に撮影されてました。 ストーリーは、塚地がアイドル・いとうあいこちゃんといい雰囲気でデートした後、カメラマンに2人の姿を撮られて、いとうあいこの事務所から呼び出され、「写真は抑えるから、二度と会うな」と、天国から一気に地獄へ。最後のいとうあいこの「やっぱり、もう会えません」というメールに対しての塚地からの優しい返事を見て崩れ落ちるシーンは良かった。いとうあいこは塚地に好意を持っていたと言う設定です。塚地は設定でなく現実に好意を持っていたけど。 塚地は「はねる」の本番まで、ドッキリだったことを知らされてなかったようですね。 これはもう従来の「ドッキリカメラ」とは一線を画してます。録画を消してしまったのは惜しかった。
■ 2004年06月04日 / 「カバチタレ」のTVドラマ再放送が終わりましたが 関東圏はで昨日まで「カバチタレ」のTVドラマの再放送をやっていた。 本放送の時は、マンガ版を読んでいたので、「女性二人が主人公なんて」と見ず嫌いで1,2回の一部を見ただけでちゃんと見てなかったが、今回見直すと結構面白かった。もちろん、マンガ版とは全然別である。何人かの登場人物の名前と役柄、毎回の事件エピソードだけが同じ(だと思う。昔のことなので放送当時のマンガ版エピソードを確実に覚えている自信は無い)。 マンガとは全く別の普通のドラマとしてみると十分面白い。主人公二人のキャラクターもいいし、篠原涼子の婦警もいい味。 よくわからないのが、エンディングタイトルのサイケ風バックと、常盤貴子が勤める喫茶店で掛かる音楽が70年代J-POP(いやフォークか。「虹と雪のバラード」とか、「風と落ち葉と旅人」とか)。テーマ曲が岡崎友紀のカバーだから70年代? でも"Do you remember me"は70年代じゃないけど。 ドラマ中でしつこくかかるので、つい"Do you remember me"のCDを買ってしまった。さすがにオリジナルのYUKI名義版は売ってないので「カバチタレ主題歌原曲」とシールの貼られた岡崎友紀名義の再発売版でジャケットもカバチタレエンディングタイトル風。覆面歌手YUKI当時、正体はユーミン説もあったような気がする。シングルCDを買ったのは何年ぶりか? あと、エンディングタイトルの最初に出てくる深津絵里は若い頃の岡崎友紀に似せてる。これもわざとか? あ、別にあんまり岡崎友紀ファンだったわけではないです。 原作エピソードまだあるはずなので、あの終わりかただと続編も可能ですね。山下君はスケジュールが無理だろうけど、まあ、地方の大学に進学したことにでもすればいいか。
■ 2004年05月22日 / Win2000のFOR文のバグ とある掲示板で回答して(今頃)気づいたのだが、Win2000の for /f %A in (\'command ....\') do の日本語処理にはバグがある。(XPでは直っている) for /f %%A in (\'echo あいう123456789\') do echo %%A for /f %%A in (\'echo あ123456789\') do echo %%A では、それぞれ、「あいう123456789」「あ123456789」が表示されるはずだが、実際には、「あいう123456」「あ12345678」が表示される。(\' \') の2バイト文字の数だけ (\' \') 内のコマンド末尾から文字が削られるようだ。かといって空白を末尾につけても無駄で同じ結果に終わる。空白だけでなく、セミコロン、カンマ、イコールなどの in ( ) 内リストの区切り文字も駄目。また、usebackq と ` ` を使った場合も同じである。 現実的には、 for /f \"delims=\" %%A in (\'find \"日本語\" filename\') do .... のようなケースで問題になるだろう。2バイト文字の数が分かっていれば、 for /f \"delims=\" %%A in (\'find \"日本語\" filename@@@\') do .... のようにその数だけ余分の文字をあらかじめ末尾に付けて置けば良いが、2バイト文字の数が不明の場合(及びWin2000とWinXPで共通に使う場合)は、例えば、 for /f \"delims=\" %%A in (\'find \"%STR%\" filename^|findstr /v qwertyuiopasdfghjkl\') do .... のように末尾からある程度文字が消えても良いようにする必要がある。もうちょっとましな手段は無いものか? WinXPでは直っているのにWin2000の最新SPでも直っていないということは、直す気が無いということだろう。初歩的過ぎて情けないバグである。
■ 2004年05月15日 / 首相の国民年金未加入問題 やはり首相も未加入期間がありましたね。 ただ、テレビニュースを見ていると、未加入であったこと自体とか、嘘をついたとか、公表を遅らせたことについての追及が多いような気がします。まあ、人誰しもミスはありますから原因がミスなら、首相とはいえ未加入議員の one of them です。 しかし、学生時代のことは置くとして、国会議員在職中の未加入について、86年までは国会議員は任意加入で、加入義務が無かったことから、「法律上、問題がないことを確認して加入しなかった」と説明してます。 これは、他の、制度の無知や誤解による未加入議員と異なり、 「私は強制加入になったからやむなく国民年金に加入したが、任意加入であれば国民年金になんか加入する気は無い」 ということを公言したに等しく、首相である人が国民年金加入についてそういう意識であるという、そちらの方が問題が、「わざとじゃないんでしょう」と首相自ら言った他の議員連と違って大きいと思うし、そういう意味で、「未加入はミスでなくわざとだ」と発表してしまうあたりにも意識の低さがうかがえますね。これにはかなり驚きました。いずれ野党やマスコミもそのあたりを突いて来るでしょう。
■ 2004年04月11日 / イラク日本人人質解放か イラクでの日本人人質の解放が決まったという情報が流れたようですね。なによりです。聖職者の呼びかけに応じてと言うことですが、詳しい理由はわかりませんが、「イラクのために来た人たちである」ということがわかってもらえてのことなら大変喜ばしい。 ただ、犯人の要求が「自衛隊撤退」という小泉首相が絶対しないことから、「現地自衛隊指揮官との人質交換」とかに変わっていたとしたらどうなっていたことか。よど号事件の時は、山村運輸政務次官が人質交換を買って出て男を上げましたが。 成果が出なかったので、次は日本国内でのテロでしょうか。
■ 2004年04月10日 / 新「鉄人28号」 なんか最近TVの話題が多いのですが、TVの話題って書きやすい。日記やblogでもTVテーマのものが結構多いですね。 TV東京で、「鉄人28号」が始まりました。 最近のリメイク物にありがちな、舞台を現代にしたものでなく、1944年生まれの正太郎君の歳から考えると昭和30年代前半ごろですね。主題歌もオープニング、エンディングともアレンジは違うものの昔と同じ。リメイクと言うより復刻版というところか。ただ、鉄人誕生のストーリーはちょっと違うような気がしますが、昔のものをちゃんと覚えているわけじゃないので、まあ、しばらくは見ることにします。ずっと見続けるかどうかは? 映画もあるそうだけど、こちらは舞台も現代。あんまり期待できそうにないかな。 「キャシャーン」の映画は見てみたい気がするけど、「デビルマン」は。。。。
■ 2004年04月07日 / 新「ウルトラQ」が始まりましたが 今日からTV東京で始まりましたが、「MONSTER」を見てたので冒頭5分ほど見逃し、オープニング映像とか音楽が不明。 今回は、ガラモン+ピグモンのパロディみたいな物だったけど、今後はオリジナリティのあるものが出るのか、リメイク路線で行くのか?実はどっちでもちょっと不安。 キャストはまあまあか。博士役の草刈正雄の怪しさとか。1,2年前のテレビ通販物ドラマでの社長役以来(かな?)、他のドラマでもなんかしゃべり方が変なんですが、昔はあんなしゃべり方じゃ無かったと思うんだけど、今後もこの路線で行くんでしょうか。昔は2枚目だったのに。
■ 2004年04月04日 / %~sI のバグについて 先日予告した通り、alt.msdos.batch.nt で発見した ~s 修飾子のバグについて。 for変数や、バッチ引数には、%~sI や %~s1 という修飾子でショートネーム(または8.3形式。以下ではSFNと書く)形式のパス名・ファイル名を得ることが出来る。しかしこれにはバグがある。NT4時代からあって、直っていないらしい。このバグは簡単に再現できる。 md \"long long long dir\" cd \"long long log dir\" echo.>\"A B.txt\" for %%A in (*.txt) do echo %%~sA 本来は、\\LONGLO~1\\ABBE64~1.TXT のように表示されるべき部分が、\\LONGLO~1\\ABBE64~1.TXTB.txt のように後ろにごみ(LFNの残骸)が付いてしまう。 こういうバグがある以上、特定の環境で一時的に使うバッチならともかく、汎用ツールを作る時は ~s 修飾子を安易に使えないと言うことだ。 解決法としては、パスの上位部分から順にSFN形式にしていくしか無いようだ。汎用サブルーチン :sfnsub とその(上記スクリプトで作ったファイルでの)テストスクリプトを示す。:sfnsub の仕様としては、\" で囲んだフルパスを引数にすると、環境変数 SFN にそのSFNを返す。\" で引数を囲むのは必須。なお、これと次のスクリプトは私とfoxidrive氏の合作である。 @echo off setlocal for %%A in (\"A B.txt\") do @echo %%~sA&call :sfnsub \"%%~fA\" echo %SFN% goto :eof :sfnsub set ARG=%1 set ARG=%ARG:\\=\\\" \"% set SFN= call :loop %ARG% goto :eof :loop for %%A in (\"%SFN%%~1\") do set SFN=%%~sA shift if not \"%~1\"==\"\" goto :loop set \"SFN=%SFN:&=^&%\" set \"SFN=%SFN:^^=^%\" goto :eof 汎用と書いたが、% はスクリプト中でサブルーチンの引数として渡せない(注1)ので % を含んだファイル名は駄目だがそれ以外のファイル名に使える特殊文字には対応しているはずだ(まだ漏れがあるかもしれないが)。なお、この方法と別に COMMAND.COM を使ってカレントディレクトリを SFN に変換する別法もある。 @echo off setlocal for %%A in (\"A B.txt\") do @echo %%~sA&call :sfnsub \"%%~fA\" echo %SFN% goto :eof :sfnsub pushd . cd /d \"%~dp1\" command /c rem for %%A in (\"%~nx1\") do set SFN=%%~sA popd goto :eof こっちのほうがわかりやすい。ただし、日本語版Windowsの場合は初回のCOMMAND.COM実行時に画面がクリアされていろいろメッセージが出る(注2)のでいまいちである。 いずれにせよたかがSFNを得るために大げさな話であり、スクリプトではSFNを使うのを避けたほうがいいだろう。 \\Program files\\ の下だけ調べてみたが、%~sI が正しい結果を返さないファイルは結構ある。 (注1:もちろん、% を %%%% に置換してから引数に使えばよいが、for変数には置換が使えないし、置換するために一般の環境変数に一旦セットすればさらに多くの問題を引き起こすので現実的でない) (注2:英語版では出ないらしい。これを出さない方法は無いだろうか?)
■ 2004年03月27日 / 【続】日付け時刻を得る 先日、日付け時刻について、 >まあ、date < NUL の2行目を見れば年月日の順序はわかるのでそれで何とかなるかもしれないが、 >他国語版にも対応するのは大変だろう > ( date < NUL の実行時だけコードページを英語にするんでしょうね)。 と書いた。 alt.msdos.batch.nt とかを最近読み書きしだしたのだが、そこに年月日の順序に依存しない日付け取得スクリプトが載っていた。ただし、date < NUL の2行目に表示順に (mm-dd-yy) 等が表示されることを利用しているが、構文解析めいたことをしない巧妙なやり方でそんなに複雑ではない。ヨーロッパ版Windowsでは (dd-mm-yy) とか表示されるんだろう。もちろん、(yy-mm-dd) でもOKだ。しかし、(年-月-日)だと駄目なのでそのままでは日本語版Windowsでは使えない。 日本語版対応するためには、date コマンド実行前後に、call us と call jp を書くか、スクリプト中の yy mm dd を 年 月 日 に書き換えればいいわけだが、そんなことをするくらいなら、yy mm dd の順序を仮定しているその辺のスクリプトで十分な気もする。 ちゃんと他国語対応するには、date コマンド実行前にコードページ番号を調べて保存し、実行後にコードページをそれに戻すように書く必要があるが、コードページを調べるための chcp や mode con cp コマンドの出力形式自体がコードページ依存なので、やはり他国語対応の道は遠そうである。 このスクリプトは曜日付き表示にも対応しており、惜しいのは年の2桁表示に対応していないことだけだけど、それくらいはまあいいか。 ということで、前回書いた、 >結論としては、BATスクリプトだけで日付を得るのは特定環境向けなら簡単だが、汎用を求めるなら労多くして益少なしということ。 は98%くらい撤回する。 時刻についても先日は >12時間制と設定されているかもしれない。 と書いたが、コントロールパネルで12時間制に設定しても time < NUL や %TIME% は影響を受けず24時間制のままだった(念のため再起動してみたがOK)のでこれらを使えば問題ない。ただし、time/t だけは12時間制になる。もちろんExplorerの表示やDIRコマンドの表示も12時間制になるが、何故 time/t だけ道連れなのかは謎。 alt.msdos.batch.ntでは、%~sI のバグについて初めて気づいたがそれはまた別項で。
■ 2004年03月22日 / 「ザ・ホワイトハウス2」が終わりましたが 20日、ザ・ホワイトハウス(The West Wing)が最終回でした。 NHKの公式サイトに、「ついに今シリーズ最大の見せ場である最終回です。全米で大絶賛されたエピソードです。」とあった通りの出来だったと思います。 アメリカでは第5シーズンまでやってるので、引退表明はありえないんだけど、情勢を客観的に考えると再出馬表明もありえない。でもまさに、今回ジョシュが言った「バートレットはバートレットらしく」のセリフ通りの結末でとても良かったです。 ただ、最大の見せ場ともいうべき、大統領が亡くなったランディハム夫人の亡霊(?)と、再出馬の話をする部分が、前回の次回予告や今回冒頭のハイライトシーン週で明かされてしまうのはなんとも。以前、2時間サスペンスドラマで殺人トリックのシーンを冒頭でばらしてしまった間抜けな番組があったとどこかで読みましたが、そこまではいかないものの、ちょっとねえ。 ランディハム夫人って、地味な印象しかなかったのですが、あんな人だったとは意外でした。「貴方にはお姉さんが必要」。見せ場のためとはいえ死んでしまったのは残念です。(若い頃は)美人だったし。 1年前の第1シーズン最終回の後、次シーズンは半年後に始まるとお知らせがありましたが、今回は無かったです。「冬のソナタ」の後はERらしいですね。 次シーズンの放映予定は未定とのことですが、何で視聴率が低いんでしょうね?見れば面白いことはわかると思うんだけど、タイトルが硬そうなので見ず嫌いの人が多いんでしょうね。某サイトの The Weset Wing の Community の forum で「日本では視聴率が悪い」というのを書いたらオーストラリアのおばさん(おねえさん?)から「吹き替えの翻訳が悪いんじゃないの?」というコメントが付きましたが、そんなことはないですよね?(おかげで、吹き替えが be dubbed、字幕が be subbed というのを知りましたけど) 日本語版DVD出るのかなあ。「ロズウェル」のも出るくらいだから何とか出して欲しいものです。
■ 2004年03月14日 / 「彼女が死んじゃった」が終わりましたが TVドラマの話は多分初めてか。「彼女が死んじゃった」が昨日最終回でした。 2,3回目の頃、あるところで、「面白いかどうかわからないけど、大化けしそうで見続けるのを止められない」と評したんだけど、最終回まで見ても、他人に「面白い」と薦めていいものかどうか判断付かない。 何か、いい意味で映画のよう。もし2時間半くらいの映画にしたらDVD買うかも、というくらいには面白い。いや、決してTVドラマとしてけなしている訳じゃないです。けなすくらいなら書かない。 でも、2時間になるかなあ、あんまりエピソード削ると訳わかんなくなるし。八千代さんも削れないし。西村雅彦+いしのようこは削っていいか。 一色伸幸原作の漫画が原作と言うことで検索してみると、漫画家さんのページにあたったんだけど(あたりまえか)、何と原作は、「一色伸幸さんが作られた映画用脚本」とのこと。やっぱり。何で映画にしなかったんだろう。 ハイロウズの「日曜日よりの使者」が耳についてしまってます。「5:55」もいいですけど。
■ 2004年03月13日 / 日付時刻を得る 日付や時刻の入ったファイル名・フォルダ名を作るために、日付・時刻を BAT スクリプトで得たいという話が良くある。掲示板では、 for /f "tokens=1-3 delims=/ " %%A in ('date/t') do set YMD=%%A%%B%%C と答えたりするわけだが、これはWin2000やWinXPでも地域のコントロールパネルで日付の短い形式を変更していない場合の話だ。 日本語版Win2000の場合デフォルトで、date/t の結果は 「2004/03/14 日」、%DATE% の値は「日 20004/03/14」のようになっているが、コントロールパネルで区切り文字を / でなく - や . にも変更できる。ただし、日付の形式を「mm/dd/yy」のように変更しても形式自体(年月日の順序や桁数、曜日の有無や位置)は変わらないようだ。これだけだと、 for /f "tokens=1-3 delims=/-. " %%A in ('date/t') do set YMD=%%A%%B%%C と、区切り文字を増やせば大丈夫のようだが、区切り文字はプルダウンで表示される / - . 以外にも指定できるので万全ではない。 また、WinXP では date/t の結果や %DATE% の値は、コントロールパネルの短い形式の日付で指定した通りになるので、年月日の順序もわからないし、年が2桁かもしれない。従って一旦環境変数にセットして、文字位置で切り出すことも出来ない。WinXPの場合は、reg コマンドがあるので、 for /f "tokens=1-3" %%I in ('reg query "HKCU\Control Panel\International" /v sShortDate') do if %%J == REG_SZ set YMDFMT=%%K で、日付書式がわかるのでこれを元に解析すれば何とかならなくもない。 Win2000の場合は日本語版に限定すれば区切り文字が変わるだけなので、環境変数%DATE%を文字位置で切り出すことで出来るが、英語版はおそらく mm/dd/yyyy の順序なので、確実に処理しようとすると、やはりレジストリを見る必要がある。reg コマンドが無いのでレジストリを見ようとすると、VBS+WSH 等を使う必要がある。 でも、VBS を使うなら最初からそれで日付を得れば簡単だ。 結論としては、BATスクリプトだけで日付を得るのは特定環境向けなら簡単だが、汎用を求めるなら労多くして益少なしということ。 まあ、date < NUL の2行目を見れば年月日の順序はわかるのでそれで何とかなるかもしれないが、他国語版にも対応するのは大変だろう ( date < NUL の実行時だけコードページを英語にするんでしょうね)。 時刻についても同様の問題がある。コントロールパネルで時分秒の順序を変えて設定する人は居ないだろうが、12時間制と設定されているかもしれない。
■ 2004年03月08日 / パラメータ区切り文字の謎 ビルトインコマンドの多く( echo は違うようだが)で、パラメータの区切りに、空白の他、, ; = が使える。コマンド処理の時点で空白になっているようだ。 例えば、 dir a.txt;b.txt,c.txt も可能だし、 for=%I=in=(A;B=C),do=@echo %I では、A B C が1行ずつ表示される。 区切り文字として、空白やカンマはわかる。セミコロンも、PATH 等の要素区切りがそうなので、わからないでもない。しかし、イコールはどうしてだろうか? 昔を思い出すと、CP/M のコマンドでは、REN newname=oldname というリネームコマンドや、PIP destfile=srcfile というコピーコマンドがあった。そのあたりからの互換性を引きずっているのだろうか? DOS コマンドでも、 ren oldname=newname とは書けるわけだが、= の意味が逆だ。
■ 2004年03月07日 / 【続々々々】ディレクトリかどうかの判断〜whichコマンドの改訂版 以前の記事において、 >昨日の記事に対し、 >>私は、dir "対象" /a:d してみて errorlevel を見ます。 NUL に頼るより確実では? >というコメントを頂いた。 >ただ、if existで一気にチェックできるコンパクトさは捨てがたい。ということで、もう少しあがいてみました。 ということで、 if exist "%%A" if not exist "%%A\" echo 普通のファイル という方法を取った。しかし、|| を使うと、コンパクトさを損なわずに dir を使う方法も取れる。 if exist "%%A" dir /b/ad "%%A" >NUL 2>NUL||echo 普通のファイル である。/b は必須ではないがわずかに速くなる。これと元の方式を使った which.bat の処理時間を比べてみた。 exist 方式が 0.2 秒で、dir 方式が 0.4 秒である。時間自体は PATH や PATHEXT の要素数に依存するがいずれにしても exist 方式のほうが速いようだ。 わずかの差ではあるが、0.2 秒だと瞬間的に終わるのに対して、0.4 秒だとちょっともたつく感じである。PenIII/650MHzでの結果なので、もっと速いCPUだと dir 方式でも気にならないかもしれない。アンドキュメントの機能を使わないわけだし。 私の場合は当面 exist 方式を使い続ける。また、同じような処理が4回出てくるのでこれをサブルーチンにしてみたが、処理時間が 0.8 秒とかなり長くなる。ソースは見やすくなるがこれではもたつきが気になるので、サブルーチン化はしないことにする。 高速CPUの人は、dir 方式 & サブルーチン方式のほうがソースが見やすいだろう。 うーん、PCの買い替え時かなぁ。。。高速CPU使用者向けに一応紹介する。 @echo off for %%X in (%*) do ( for /f "delims=" %%A in ('DOSKEY /MACROS') do ( for /f "delims==" %%B in ("%%A") do if /i "%%B" == "%%X" echo %%A ) for %%A in (ASSOC BREAK CALL CD CHDIR CLS COLOR COPY DATE DEL DIR ECHO ENDLOCAL ERASE EXIT FOR FTYPE GOTO IF MD MKDIR MOVE PATH PAUSE POPD PROMPT PUSHD RD REM REN RENAME RMDIR SET SETLOCAL SHIFT START TIME TITLE TYPE VER VERIFY VOL) do if /i "%%X" == "%%A" echo %%X cmd.exe builtin if not "%%~xX" == "" call :sub "%%~X" for %%S in (%PATHEXT%) do call :sub "%%~X%%S" set _= if "%%~X" == "%%~nxX" ( for %%P in ("%PATH:;=";"%") do ( if not "%%~xX" == "" call :sub "%%~P\%%~X" for %%S in (%PATHEXT%) do call :sub "%%~P\%%~X%%S" ) ) ) if not defined _ goto :eof if not "%_%" == "%_: =%" set _="%_%" goto :eof :sub if exist "%~1" dir /b/ad "%~1" >NUL 2>NUL||(echo %~1&if not defined _ set "_=%~1") 以前書いたものからは、seltlocal を使わないなど若干改善してある。 2004-09-25 誤りがあったので少し修正
■ 2004年03月06日 / [続々々]tailコマンドの作成 tail コマンドの完成版。+ オプションもつけたが、単に more の機能を使っているだけ。 @echo off setlocal set MORE= if not defined LINE set LINE=20 set \"OPT=%~1\" if not defined OPT goto pipe if \"%OPT:~0,1%\"==\"/\" echo>&2 コマンドの構文が誤っています&exit /b 1 set OPTLINE=0 set /a \"OPTLINE=%~1\" 2>NUL >NUL if \"%OPT:~0,1%\"==\"+\" if %OPTLINE% geq 0 set /a L=OPTLINE&shift /1&goto plus if \"%OPT:~0,1%\"==\"+\" echo>&2 コマンドの構文が誤っています&exit /b 1 if \"%OPT:~0,1%\"==\"-\" if %OPTLINE% lss 0 set /a LINE=-OPTLINE&shift /1 if \"%~1\"==\"\" goto pipe for /f %%N in (\'find /c /v \"\" ^< %1\') do set /a L=%%N-LINE :plus if %L% lss 0 set L=0 more +%L% %1 goto :eof :pipe set TEMPFILE=\"%TEMP:\"=%\\$$$%TIME::=.%.TMP\" set I=-%LINE% set J=0 for /f \"delims=\" %%A in (\'more\') do ( set /a J+=1, I+=1 echo.%%A>%TEMPFILE% call :setsub SAVE%%J%% SAVE%%I%% ) del %TEMPFILE% 2>NUL set /a I+=1 if %I% leq 0 set I=1 setlocal enabledelayedexpansion for /l %%K in (%I%,1,%J%) do echo.!SAVE%%K! goto :eof :setsub set /p %1=< %TEMPFILE% set %2=
■ 2004年03月05日 / call 命令のオーバーヘッド〜添え字付き環境変数へのセット 前回書いた環境変数へセットする方式の tail コマンドでは、添え字付き環境変数へのセットで、call 命令を使う。前回書いたような eval 的な call の使い方と、実際にサブルーチンコールする場合とでの処理時間を念のため計ってみた。 for /l %%I in (1,1,1000) do set J=%%I&call set SAVE%%J%%=1 と、 for /l %%I in (1,1,1000) do set J=%%I&call :sub SAVE%%J%% goto :eof :sub set %1=1 goto :eof の処理時間を計ってみると、意外なことに、前者が5.5秒、後者が4.5秒とサブルーチンコールのほうが速い。 制御が行って戻る分だけ遅い気がするのだが、繰り返し回数を増やしたり、= の右辺をなくしてセットでなくアンセットにしても同じで、必ずサブルーチンコールのほうが早い。前回書いた tail コマンドでは、call が2回出てくるのでこれをまとめてひとつのサブルーチンコールに変えればさらに速くなるはずだ。 (前略) echo.%%A>%TEMPFILE% call :sub SAVE%%J%% SAVE%%I%% (中略) :sub set /p %1=< %TEMPFILE% set %2= goto :eof (1) 前回の中間ファイル方式と、(2) 改訂版中間ファイル方式で、同じファイルで実行してみたところ、 (1) 21秒 (2) 17秒 と少しだが速くなった。(1) の時間が前回と違うのはバックグラウンドプロセスやメモリ状況の違いであろう。前回・今回とも数回計ったが誤差は1秒以内である。
■ 2004年03月02日 / [続々]tailコマンドの作成 前回書いた2つの方法で書いた tail コマンドの基幹部分を示す。 (1) 中間ファイル方式 set I=-%LINE% set J=0 for /f \"delims=\" %%A in (\'more %1\') do ( set /a J+=1, I+=1 echo.%%A>%TEMPFILE% call set /p SAVE%%J%%=< %TEMPFILE% call set \"SAVE%%I%%=\" ) set /a I+=1 if %I% leq 0 set I=1 setlocal enabledelayedexpansion for /l %%K in (%I%,1,%J%) do echo.!SAVE%%K! del /f %TEMPFILE% 2>NUL goto :eof (2) for (%%) 方式 set I=-%LINE% set J=0 for /f \"delims=\" %%A in (\'more %1\') do ( set /a J+=1, I+=1 for /f \"delims=\" %%B in (\'echo SAVE%%J%%\') do set %%B=%%A call set \"SAVE%%I%%=\" ) set /a I+=1 if %I% leq 0 set I=1 setlocal enabledelayedexpansion for /l %%K in (%I%,1,%J%) do echo.!SAVE%%K! goto :eof これと、(3) [続]tailコマンドの作成で書いた、more + を使った方式とで処理時間を比べてみた。テストでは 1000行、約32KB のファイルに対して、tail -10 を行った。結果は、 (1) 25 秒 (2) 99 秒 (3) 1 秒 である。(3) が早いのは当然として、(2)が遅いのはサブシェル起動に時間が掛かっているためと思われる。検証のために、 for /l %I in (1,1,1000) do @cmd /c \"@rem\" と、 for /l %I in (1,1,1000) do for /f %J in (\'rem\') do @echo. の時間を計ってみると、それぞれ、102秒、75秒である。(2) の結果とも考え合わせると、for /f (\' \') によるサブシェル起動は、明示的に cmd を起動するよりは効率よく出来ているようだ。 結論としては、いくら“パイプ入力にも対応”“中間ファイルを使わない”という利点があるとしても(2)は遅すぎる。オペランドでファイルを与えた時は(3)で、そうでない場合は(1)の方式をそれぞれ使うようにするのがいいかと思う。
■ 2004年02月29日 / for制御変数から添え字付き環境変数へのセット for制御変数から添え字付き環境変数へのセットの話の続き。もちろん、任意の内容を安全にセット出来なれればならない。 set の = の左辺のみ2度評価して、右辺は1度しか評価してはいけないわけだが、1文でやるのは前回無理とわかった(実は書いた以上にもいろいろ試行錯誤している)ので、2文以上に分けるしかない。まず思いつくのは、 echo %%A | call set /p SAVE%%J%%= だが、これでは何もセットされなかった(SAVE%J%は未定義状態)。 何が悪いのか切り分けのために、テストとして、 echo %%A | call set /p SAVE%%J%%= set SAVE と echo %%A | ( call set /p SAVE%%J%%=&set SAVE) をやってみると、環境変数にセットはされるもののその値を次の行で参照できないと言うことがわかる。おそらく、パイプの各要素がサブシェルのCMD.EXEで実行されて親のCMD.EXEの環境変数に反映されないためと思われる。 echo %%A>FILE call set /p SAVE%%J%%=< FILE と、ファイルを経由すれば問題はない。ただ、あまり中間ファイルは使いたくない。 後は、複合文中での環境変数参照の記事での、(4)の方法である。 for /f %%B in (\'echo SAVE%%J%%\') do set %%B=%%A これはうまく行く。ただし、(\' \') の中もサブシェルで実行されるため、tail コマンドで使うと、読み込んだファイル1行ごとにサブシェル起動が入るため遅そうである。
■ 2004年02月28日 / 網野善彦氏死去
網野善彦氏、27日死去とのこと。もっと若いかと思っていたけど、76歳。そんな歳だったのね。世に出たのが遅かったのでそういう印象を持ってたんでしょうね。 amazonで検索すると共著もあるんだろうけど249件も引っ掛かる。
■ 2004年02月27日 / [続]call 命令の謎 for /f 版の tail を作るに当たっての難関は、遅延展開を使わないで、添え字付き環境変数へのセットだ。unix で 配列変数機能の無い古い sh では、eval SAVE$J=\\$VALUE とやるのが定石だ。これを参考に、左辺は call set SAVE%%J%%= と call を使う方法が思いつく。しかし、単純に、 call set SAVE%%J%%=%%A とやってしまうと、右辺のfor変数Aに入っている読んだ行に含まれる特殊文字が call 時に効いて来るので駄目だ。最初の評価ではfor変数は展開されず、call での再評価時にfor変数が展開されるとうまく行きそうだ。テストのために、 for %%Q in (%%%%) do for /f %%A in (\"aaa/?\") do call echo %%QA としてみた。for変数Qの値は %% なので、初回の評価では call echo %%A となり、call による2度目の評価でfor変数Aが展開されると期待した。ところが、表示されたのは、%A である。他にも % の個数を変えたり、^ を使ったりいろいろやってみたがどうもうまく行かない。 どうも、call による再評価は、% 関連処理つまり、 (1) % による環境変数展開 (未定義変数を空にするのも含む) (2) 連続した %% を % に (3) 単独の % を削除 を再度行うだけで、for変数や%1等の引数の展開や ^ の処理は call の時点で再度はされないようだ。 call による方法は無理そうだ。 つづく
■ 2004年02月22日 / [続]tailコマンドの作成 昨日の head コマンドだが、第一パラメータで、+10 とか /E 等の more の有効なオプションを指定してしまうと、第二パラメータにファイル名を指定しても無視され標準入力待ちになってしまう。とりあえず、 set \"OPT=%~1\" if \"%OPT:~0,1%\"==\"/\" echo>&2 コマンドの構文が誤っています&exit /b 1 if \"%OPT:~0,1%\"==\"+\" echo>&2 コマンドの構文が誤っています&exit /b 1 を追加しておく。 tail コマンドだが、ファイルからの読み込みに限定すると別の解法がある。まず、find /c /v \"\" < file 等でファイル全体の行数を求め、表示行数を引いて、何行目以降を表示するか決める。以前考えた時には、find で求められるのは空行も含めた全体行数で、for /f では空行が飛ぶので行数が合わないと思っていた。しかし、for /f の skip= オプションを使うと、空行も含めた行数で先頭から読み飛ばすことが出来る。 @echo off setlocal if not defined LINE set LINE=20 set \"OPT=%~1\" if not defined OPT echo>&2 コマンドの構文が誤っています&exit /b 1 if \"%OPT:~0,1%\"==\"/\" echo>&2 コマンドの構文が誤っています&exit /b 1 if \"%OPT:~0,1%\"==\"+\" echo>&2 コマンドの構文が誤っています&exit /b 1 set OPT=0 set /a \"OPT=%~1\" 2>NUL >NUL if %OPT% lss 0 set /a LINE=-OPT&shift /1 for /f %%N in (\'find /c /v \"\" ^< %1\') do set N=%%N set /a L=N-LINE if %L% gtr 0 (set S=skip=%L%) else (set S=) for /f \"%S% delims=\" %%A in (\'more %1\') do echo.%%A どうせ more を使うんだったら、最後の2行は、 if %L% lss 0 set L=0 more +%L% %1 でいいか。何のことは無い簡単なスクリプトになった。しかも速い。 しかし、これらでは標準入力を扱うことは出来ない。せっかく head コマンドが標準入力対応に出来たので、前回のような環境変数に覚えておく方式の for /f 版を引き続き考える。
■ 2004年02月21日 / head コマンド再び 昨日書いたように、for 文中での環境変数の直近値の参照方法はいろいろある。そこで、 以前あきらめた head コマンドの for /f での実現をやってみた。ただし、空行はスキップされると言う for /f の仕様だけは我慢することになる。一方、副産物だが、do ( ) の部分を do (\'more %1\') とすることで、 (1) 引数無しの時にパイプ入力にも対応できる (2) UTF-16 のファイルでもOK というメリットも出来た。 @echo off setlocal set MORE= if not defined LINE set LINE=20 set OPT=0 set /a \"OPT=%1\" 2>NUL >NUL set /a OPT*=-1 if %OPT% gtr 0 set LINE=%OPT%&shift /1 set L=0 for /f \"delims=\" %%A in (\'more %1\') do ( call :check if ERRORLEVEL 1 goto :eof echo.%%A ) goto :eof :check set /a L+=1 if %L% gtr %LINE% exit /b 1 exit /b 0 ! < | > & ^ 等の特殊文字を含んだファイルもOK。dir | head -10 もOK。 意外と簡単だったので、ついでに、行数オプションにも対応。ただし、 set /a \"OPT=%1\" 2>NUL >NUL と、手抜きのためちょっと無理やりなところがあるので、穴があるかも。 複数ファイルの引数にも対応しようかと思ったけど、そうすると、引数無しの場合を別扱いしないといけないので止めた。 先日のものに比べると欠点は空行が扱えないだけで、利点が大きいので前のは捨てよう。次回は tail の書き直し版。
■ 2004年02月20日 / 複合文中での環境変数参照 if や for や ( ) の内部での % での環境変数置換は最初に行われるため、複合文内部で環境変数の値を変更してもその新しい値を参照しにくい。この参照の仕方を整理しておく。 (1) 遅延環境変数展開を使う これが一番簡単であるが、デメリットとしては、% で展開する環境変数や、for制御変数の値の中に ! が含まれているとそれも展開されてしまい、予期しない値になることがある。これが理由で、以前 head コマンドを作成しようとした際、採用できなかった。 例: setlocal enabledelayedexpansion for /l %%I in (1,1,10) do ( set /a X=%%I %% 2 if !X!==1 ( echo %%I 奇数) else ( echo %%I 偶数) ) (2) call を使う 環境変数の直近の値を他の環境変数にセットしたい場合、call set B=%%A%% とすると、その文を実行する時点での A の値が B にセットできる。ただし、if や for には使えないため、call if %%A%%==1 のような直近の値での判断が出来ない。 (3) サブルーチンコールを使う call :sub とすると、:sub の中では各環境変数の直近の値が参照できる。ただ、その参照結果をどうやって呼び出し元に伝えるか。これには、ERRRORLEVEL を使う方法と、DEFINED を使う方法が考えられる。 例1: for /l %%I in (1,1,10) do ( call :sub %%I if ERRORLEVEL 1 ( echo %%I 奇数) else ( echo %%I 偶数) ) goto :eof :sub set /a X=%1 %% 2 exit /b %X% 例2: for /l %%I in (1,1,10) do ( call :sub %%I Z if defined Z ( echo %%I 奇数) else ( echo %%I 偶数) ) goto :eof :sub set %2= set /a X=%1 %% 2 if %X%==1 set %2=1 goto :eof ERRORLEVEL を使うと数字の結果を返すことが出来る。ただし、%ERRORLEVEL% での参照が出来ないので、旧来の if ERRORLEVEL の書式しか使えない。環境変数の定義状態では基本的には2値状態しか返せないし、setlocal してないとスクリプトの外の環境変数が書き換わってしまう。 この機能を使うと、以前断念した、for /f を使った head コマンドが作成できそうだ。 (4) for 環境変数にセットする for 環境変数は直近の値が参照できるので、それに環境変数の直近値を代入できれば良い。しかし、以前書いた通り、 call if /f \"delims=\" %%%%B in (\"%%A%%\") do echo %%%%B のようなことは出来ない。%%A%% を再度評価できればいいので、ちょっと工夫して、 for /f \"delims=\" %%B in (\'echo %%A%%\') do echo %%B とすると、\' \' の内部はサブシェルのcmd.exeで実行されるため、再度 % の評価が出来、目的を果たすことが出来る。しかも、setlocal しなくても外の環境変数に影響が無いので、何らかの理由(外の環境変数をセットしたい or カレントディレクトリ変更の結果を外に伝えたい)で setlocal を使えない場合にも応用できる。 例: for /l %%I in (1,1,10) do ( set /a X=%%I %% 2 for /f %%Z in (\'echo %%X%%\') do ( if %%Z==1 ( echo %%I 奇数) else ( echo %%I 偶数) ) )
■ 2004年02月18日 / HTML関連もろもろのテスト prog テーブルのテストです 円記号は直ったかな(\)(\\)(\\\)(\\\\)
ここまで
■ 2004年02月17日 / for文とgoto文 for 文から goto 文で抜け出ることが出来る。 が、抜け出なくても goto しただけで、for 文の機能が無効になるようだ。 @echo off for /l %%I in (1,1,5) do ( if %%I==3 goto x echo A %%I :X echo B %%I ) を実行すると、 A 1 B 1 A 2 B 2 B %I と、制御変数が展開されないばかりか、ループが終了してしまう。 @echo off for /f \"tokens=1-9\" %%A in (\'dir\') do ( if \"%%D\"==\".\" goto X echo A %%A :X echo B %%A ) のような他の形式の for 文でも同様だ。 goto でどこに飛ぶかは関係なく、goto した時点で for 文の外に出たと言う認識のようだ。長い for 文を書くときは注意が必要。goto 文が回避できない時は、do 部をサブルーチン化して回避する。
■ 2004年02月15日 / コマンド実行時のエコー表示の謎 バッチススクリプトでは通常先頭で、@echo off するので、デバッグ時以外はコマンド実行のエコーを目にすることはあまり無い。 最近気づいたのだが、以下の一部のオプションなどについて、小文字で入力しても大文字になってエコー表示される(WXPで確認)。 (1) if の /i オプション および equ, neq, lss, leq, gtr, geq の各比較演算子 (2) for の /r /f /l 各オプション (3) for の /d オプションは何と d が表示されず / だけが表示される。これは /D と大文字で書いても同じだ 既に書いたように if と for の構文解析は早い段階で行われるので、何かその辺が関係しているのか?しかし、for の in や do は小文字のままである。if の /d に至ってはバグだろうが、何故 d だけ?どんなバグなんだろう。
■ 2004年02月14日 / [続]環境変数に改行文字をセット 前回からの続き。 set X=echo 1^ echo 2 という風に環境変数AAにセットした2行の命令をそれぞれ実行するにはどうするか。前回書いたように、 %X% !X! とも駄目である。 if や for や ( ) の構文解析が % による環境変数置換に先立って行われることを思い出して、 (%X%) (!X!) とやってみると前者で希望通りの動きをする。後者は !X! と同様1命令と扱われる。 横道にそれてしまったが、環境変数に複数の命令をセットして実行したいなら、別に改行をはさまなくても、 set Y=echo 1 ^& echo 2 と言う風に、& を ^ でエスケープして環境変数にセットすれば、 %Y% で実行できる。このときも、 !Y! だと、1命令と扱われ、1 & echo 2 が表示される。 本題に戻って、改行文字の使い道を考える。 環境変数に複数行を記録するときの1つのやり方は、tail コマンドでやったように環境変数名に連番をつけて複数の変数に1行ずつ記録するやり方がある。tail コマンドは記憶する内容が順次変動するのでそのやり方しかないが、そうでなければ1つの環境変数に改行文字を挟みながら記録するというのも考えられる。サンプルとしては以下のよう。複数行をセットした後、改行を @ に置換してみた。 @echo off setlocal enabledelayedexpansion set AA= for /f \"delims=\" %%I in (\'DIR\') do ( set AA=!AA!^ %%I ) set AA1=!AA:^ =@! set AA なお、今回いろいろ試していた時に発見したのだが、 set AA=echo 123 %AA% | more ⇒ これは期待通り 123 が表示される !AA! | more ⇒ これは \'echo 123\' がコマンド名と見なされエラー (!AA!) | more ⇒ これは \'!AA!\' がコマンド名と見なされエラー である。ちょっと不思議だが、この謎は解けるか?
■ 2004年02月11日 / 環境変数に改行文字をセット ^ による行の継続を試している時に、環境変数に改行を含んだ文字列をセットできることに気づいた。 set AA=123^ 456 のように間に空行をはさむと、AA に 123 改行 456 がセットされる。 set AAA=123^ 456^ 789 のようにすれば何行でも入る。ただし、この値を表示させようとして、echo %AA% では駄目である。1行目の 123 しか表示されないし、その後に何を書いても無視される。 echo %AA% xyz & date/t ⇒ 123 だけが表示 表示させるためには、遅延展開を有効にして、 echo !AA! xyz & date/t ⇒ 123 改行 456 XYZ 改行 日付 が表示 部分文字列も同様に、%による展開だと改行で途切れるが、改行を飛び越えればOK。 echo %AA:~1% ⇒ 23 が表示 echo %AA:~4% ⇒ 456 が表示(改行はCR+LFの2文字でなく1文字のようだ) echo !AA:~1! ⇒ 23 改行 456 が表示 次に、命令文としての実行はどうか? set X=echo 1^ echo 2 として、 %X% xyz & date/t ⇒ 1 のみが表示(2行目やxyzやdate/tは無視) !X! xyz & date/t ⇒ 1 改行 echo 2 xyz 改行 日付 が表示(echo 2は命令でなく最初のechoのパラメータになっている) つづく
■ 2004年02月10日 / findstrコマンドの使い方 findstr コマンドに、 /L 検索文字列をリテラルとして使用します。 /R 検索文字列を正規表現として使用します。 /C:文字列 指定された文字列をリテラル検索文字列として使用します。 というオプションがあるが、/L の「リテラル」と /C の「リテラル」の意味合いがよくわからなかったが、使い方がようやくわかった。 findstr "abc xyz" は、"abc xyz"というパターンを検索するのではなく、"abc" または "xyz" というパターンを検索する。unix の grep とは空白の意味が違う。 "abc xyz" というパターンを検索したい時は、findstr /C:"abc xyz" とする。 これはこれでいいのだが、空白を含む正規表現の時に困っていた。 findstr "^@echo off" だと、"行頭の@echo" または "off" にマッチしてしまう。かといって findstr /C:"^@echo off" だと正規表現で無くなり、"^@echo off" という山記号を含んだ文字列にしかマッチしない。findstr "^@echo\ off" や findstr "^@echo[ ]off" も駄目である。 もしかして、/L と /C の「リテラル」という言葉の意味が違うのではないかと思って、findstr /R /C:"^@echo off" とやってみたところ、うまく希望通りの動作をする。 /R(正規表現) と /L(単純文字列) の両オプションで、/R がデフォルトだが /C を指定すると /L がデフォルトに変わると言うことのようだ。/R を明示指定すればそちらが優先して正規表現となる。 まとめとしては、findstr を grep のように使うためには、/C: で文字列を指定して /R も指定するということだ。 12/26の記事で、行頭に空白以外の文字がある行の抽出が上手く行かなかったが、 findstr /r /c:"^[^ ]" で行ける。
|
◇今月の記事◇
◇過去の記事◇
◇カテゴリー◇
◇ブックマーク◇
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||