三国志大戦では多くの事象が並列的に並列的に発生する。騎兵が敵部隊に突撃したら一騎打ちになり、騎兵が負けても突撃ダメージが相手に入るなど。極めつけが以下の同時落城。でも、どうなんだろう。引き分けになるより、勝敗を決してほしいと思うなあ。攻城開始が同時なら、武力が高い方が敵城を先に攻落できると考えて、武力が高い方の軍を勝ちにするとか。武力が同じならランダムでどちらかが勝ちということにしても良いと思う。
DB を扱うエンジニアとしては、落城などという更新系の重要なトランザクションは SERIALIZABLE になっていてほしいんだけどなあ。オークションのシステムで、複数の人が同時に落札できちゃったらまずいでしょ?
三国志大戦 103合目 ドリフの大雷銅
http://game10.2ch.net/test/read.cgi/arc/1119552434/186-
DB を扱うエンジニアとしては、落城などという更新系の重要なトランザクションは SERIALIZABLE になっていてほしいんだけどなあ。オークションのシステムで、複数の人が同時に落札できちゃったらまずいでしょ?
三国志大戦 103合目 ドリフの大雷銅
http://game10.2ch.net/test/read.cgi/arc/1119552434/186-
186 :ゲームセンター名無し [sage] :2005/06/24(金) 16:49:08 ID:wOLtwPtc
ところで地元の大激戦リプレイですごく珍しいものを見たんだが。
勝負の内容自体は十品同士の凄まじくレベルの低い争いだったんだが
最後、お互いあと一発で城が落ちる状況で、手前の軍のKdoAが相手城門で攻城準備中。
同じく相手軍の荀��様が城壁で攻城準備中。
両軍他の武将はほぼ全員撤退中。
で、KdoAの攻城デモが流れ「手前軍が勝ったか」と思ったら同時に手前軍の攻城ゲージもパリーン。
荀��様がアップになり勝利セリフと共に「落城」
その後に表示された文字は「引き分け」・・・・
同時落城引き分けって有り得たんだな。初めて見たよ。
187 :ゲームセンター名無し [sage] :2005/06/24(金) 16:52:17 ID:/JrZA8FF
まぁ無い事はないな。同時計略発動とかはしばしば見るし
しかし同時落城とは珍しいもんだ
190 :ゲームセンター名無し [sage] :2005/06/24(金) 16:55:49 ID:hrJiyCs+
そういえば敵の攻城ゲージ満タンになった瞬間に味方ぶつけると
「わあーっ」て声援が聞こえて画面の色反転したのに攻城はされてないとかあった
普通にラグかなと思ったらやっぱ減らなかった
「使い方によっては危険なメソッド」が呼ばれたときに、呼んだプログラマに対してなんらかの警告を出したい。できるならば、プログラムを実行する前に。
その後、C++ で書かれた通信用 DLL の特定の関数にバグがあることがわかった。一定回数以上その関数を呼ぶと、エラーしか返らなくなるというものだ。その関数はラッパー上では DllImport 属性でインポートしているだけなので、もとの DLL のバグが修正されない限りはバグが発生する。バグに当たるのを避けるため、C# で作ったラッパーの利用者に「その関数を使うのは危険だよ、呼ぶのは一定回数以内で済む場合だけにしてね」という警告を出したい。
できれば、コーディング中にそのメソッドを呼ぶコードを書いたら警告を出すとか、もしくは、コンパイル時に警告を出すようにしたい。実行時に警告を出すのでは遅すぎる。さて、どうするのがいいだろう。
C# プログラマーズ リファレンス Obsolete
http://www.microsoft.com/japan/msdn/library/ja/csref/html/vc ...
これなら、このメソッドを呼んでいる場合、コンパイル時に警告が出る。期待する動作だ。でも、意味が違う。Obsolete は「もう使われていない,すたれた;時代[流行]遅れの;役に立たない,不用の」といった意味だ。将来的に削除予定のメソッドにつける属性を、期待する動作をするからといって付けてしまうのは美しくない。それを許したら、「警告を出す」という目的のために属性が使われてしまう。
何か他に良い属性は無いかと思い、MSDN のドキュメントを探してみたが、良さそうなものがない。Alert 属性とか Critical 属性とか Warning 属性とか、Danger 属性とか Notice 属性とかないのかなあ。syslog だとあと EMERG と ERR と DEBUG があるけど、それはいらないな。カスタム属性を作る? うーん、この一か所だけのためにそうするのは手間だなあ。
XML ドキュメントコメントの ///<summary> </summary> に警告文を書いておけば、インテリセンスには表示される。しかし、それだけだと XML ファイルが参照されなかったり、何らかの理由でインテリセンスが表示されなかったときに対応できない。2004-08-25 の「DataSet でインテリセンスが効かない」みたいな現象が起きたときに困る。
連載:C#入門 第19回 プリプロセッサとドキュメント
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_019/ ...
#warning ってのがあるのか。なになに、以下のようにソース中に書くと、続く文字列を警告してくれると。
よしやってみよう。警告文をソース中に埋めて、と。あ、VS.NET 2003は 警告文に下線まで引いてくれるのね。コンパイル。おおっ、ちゃんと警告が出たー! 警告文字列は日本語でも大丈夫なんだね。って、ちょっと待て。これって危険なメソッドを呼んだ方のソースのコンパイル時じゃなくて、元のソースがコンパイルされたときに警告されるわけじゃん。いや、私はこのメソッドの危険性はわかってるんだってば。このメソッドを含んだ DLL の利用者に警告を送りたいのに、これじゃ意味がない。
- 危険なメソッドが呼ばれたら警告を出したい
C++ で書かれたとある通信用 DLL ファイルがある。その 通信用 DLL を直接呼ぶとリソースの管理やマーシャリングが面倒なので、C# でラッパーを書いた。そのラッパーは、いろんな開発者に渡して使ってもらうことになる。ただ、ラッパーのソースを渡すことはできないので、コンパイルしたアセンブリとして配布する。その後、C++ で書かれた通信用 DLL の特定の関数にバグがあることがわかった。一定回数以上その関数を呼ぶと、エラーしか返らなくなるというものだ。その関数はラッパー上では DllImport 属性でインポートしているだけなので、もとの DLL のバグが修正されない限りはバグが発生する。バグに当たるのを避けるため、C# で作ったラッパーの利用者に「その関数を使うのは危険だよ、呼ぶのは一定回数以内で済む場合だけにしてね」という警告を出したい。
できれば、コーディング中にそのメソッドを呼ぶコードを書いたら警告を出すとか、もしくは、コンパイル時に警告を出すようにしたい。実行時に警告を出すのでは遅すぎる。さて、どうするのがいいだろう。
- Obsolete 属性を付ければ警告を出せるけど、意味が違う
後輩はラッパーの該当メソッドに Obsolete 属性を付けることでこの問題に対処した。C# プログラマーズ リファレンス Obsolete
http://www.microsoft.com/japan/msdn/library/ja/csref/html/vc ...
これなら、このメソッドを呼んでいる場合、コンパイル時に警告が出る。期待する動作だ。でも、意味が違う。Obsolete は「もう使われていない,すたれた;時代[流行]遅れの;役に立たない,不用の」といった意味だ。将来的に削除予定のメソッドにつける属性を、期待する動作をするからといって付けてしまうのは美しくない。それを許したら、「警告を出す」という目的のために属性が使われてしまう。
何か他に良い属性は無いかと思い、MSDN のドキュメントを探してみたが、良さそうなものがない。Alert 属性とか Critical 属性とか Warning 属性とか、Danger 属性とか Notice 属性とかないのかなあ。syslog だとあと EMERG と ERR と DEBUG があるけど、それはいらないな。カスタム属性を作る? うーん、この一か所だけのためにそうするのは手間だなあ。
XML ドキュメントコメントの ///<summary> </summary> に警告文を書いておけば、インテリセンスには表示される。しかし、それだけだと XML ファイルが参照されなかったり、何らかの理由でインテリセンスが表示されなかったときに対応できない。2004-08-25 の「DataSet でインテリセンスが効かない」みたいな現象が起きたときに困る。
- #warning は期待する動作ではない
Google で 属性 警告 生成 C# を検索すると、@IT の文書がヒット。連載:C#入門 第19回 プリプロセッサとドキュメント
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_019/ ...
自作のエラーや警告を発する
込み入ったプログラムを記述していると、C#の文法エラーではないが、プログラムの意図として間違いだとプログラマに伝えたい場合がある。特に個人ではなくチームで開発していると、他のプログラマに間違った使い方をさせないために、このような措置が必要とされることがある。これを実現するために、C#のプリプロセッサには、警告を発する「#warning」と、エラーを発する「#error」が用意されている。以下はそれを用いた例である。
#warning ってのがあるのか。なになに、以下のようにソース中に書くと、続く文字列を警告してくれると。
#warning This is a sample warning.
よしやってみよう。警告文をソース中に埋めて、と。あ、VS.NET 2003は 警告文に下線まで引いてくれるのね。コンパイル。おおっ、ちゃんと警告が出たー! 警告文字列は日本語でも大丈夫なんだね。って、ちょっと待て。これって危険なメソッドを呼んだ方のソースのコンパイル時じゃなくて、元のソースがコンパイルされたときに警告されるわけじゃん。いや、私はこのメソッドの危険性はわかってるんだってば。このメソッドを含んだ DLL の利用者に警告を送りたいのに、これじゃ意味がない。
- もう Obsolete 属性でいいよ
MVP (Microsoft Most Valuable Professional) の C# を持ってる人に聞いたり、Web の文書を探してみたが、結局有効な代案を見つけられなかった。私は実利主義。仕方がないので結局 Obsolete 属性を付けることにした。ただ、///<summary> </summary> のコメントには、Obsolete 属性を付けてるけど削除予定はないよ、ということを記述した。BIOS の Spread Spectrum 機能を使うと、「電磁放射強度」を減らすことができるらしい。
Athlon64ガンバ(`・ω・´)ソケ754 AMD雑談スレ216都市
http://pc7.2ch.net/test/read.cgi/jisaku/1121231674/263-
用語検索 スペクトラム拡散クロック(spread spectrum clocking)
http://www.cqpub.co.jp/term/spreadspectrumclocking.htm
「そんな設定」と >>265 は言ってるけど、私が扱ったマザーボードの多くで Spread Spectrum の設定ができた。たまたまそういうマザーを扱うことが多かっただけだろうけど。何 % くらい拡散させるのかを設定できたりした。
ちなみに、よくわからず Spread Spectrum をオンにしたりオフにしたりしたことがある。ある意味ブラインドテストになってるわけだが、私には音質の差はわからなかった。>>275 の煽りはもっともだな。私は PC から AV アンプにデジタル出力さえできてればとりあえず満足というという程度なので、それでいいけど。
ところで、Spread Spectrum と Spread Spectrum Clocking は同じ? 前者は自分の通信のノイズ低減や秘匿性向上を目的としていて、後者は主に周囲へのノイズ低減を目的としているようなので、微妙に違うもののような気がする。
Athlon64ガンバ(`・ω・´)ソケ754 AMD雑談スレ216都市
http://pc7.2ch.net/test/read.cgi/jisaku/1121231674/263-
263 :Socket774 [sage] :2005/07/14(木) 08:35:08 ID:9fNNrXZh
おまいら教えてください。
BIOSの項目でSpread Spectrumというのがあるんですが、これは何ですか?
264 :Socket774 [sage] :2005/07/14(木) 08:42:42 ID:FQQypcPc
>263 ttp://www.google.com/search?q=Spread+Spectrum&btnG=Google&lr=lang_ja
265 :Socket774 [sage] :2005/07/14(木) 08:47:03 ID:xzAajQIP
>>263
そんな設定できるなんて、どんなマザーボード?
クロック周波数に1%ぐらいの変調かける機能。
放射電波を規制値内に抑えるための機能なので、性能には関係ない。
274 :Socket774 [sage] :2005/07/14(木) 09:38:15 ID:R29zRndt
>263-267
オーディオやってるひとはONにしてるんだとか。
ノイズが減るとか
275 :Socket774 [sage] :2005/07/14(木) 10:11:29 ID:6za4b9aO
>>274
聞き分ける能力もないのにオーディオヲタってのは大変だな。
用語検索 スペクトラム拡散クロック(spread spectrum clocking)
http://www.cqpub.co.jp/term/spreadspectrumclocking.htm
スペクトラム拡散クロック(spread spectrum clocking)
ディジタル機器の高速化などにより,機器からの電磁妨害(EMI)が大きな問題となっている.そこで,EMIの発生源の一つであるクロック信号をスペクトラム拡散することにより,電磁放射強度を6〜12dB低減したクロック.
「そんな設定」と >>265 は言ってるけど、私が扱ったマザーボードの多くで Spread Spectrum の設定ができた。たまたまそういうマザーを扱うことが多かっただけだろうけど。何 % くらい拡散させるのかを設定できたりした。
ちなみに、よくわからず Spread Spectrum をオンにしたりオフにしたりしたことがある。ある意味ブラインドテストになってるわけだが、私には音質の差はわからなかった。>>275 の煽りはもっともだな。私は PC から AV アンプにデジタル出力さえできてればとりあえず満足というという程度なので、それでいいけど。
ところで、Spread Spectrum と Spread Spectrum Clocking は同じ? 前者は自分の通信のノイズ低減や秘匿性向上を目的としていて、後者は主に周囲へのノイズ低減を目的としているようなので、微妙に違うもののような気がする。
友達の所に投稿しておいたコピペ。自分用にもメモ。三国志大戦とはあんまり関係ないけど。諸葛亮と劉備のやりとり。孔明は諸葛亮の字(あざな)。玄徳は劉備の字。なんか劉備に親近感を覚える。からかうような諸葛亮も好き。
ちなみに、私の好きな諸葛亮は三国無双に出てくる諸葛亮。通称、「ビーム諸葛亮」。中原の覇者って曹操だよね。乱世の奸雄 (姦雄って書くとなんかエッチ) っていう通り名は知ってるけど、中原の覇者とも呼ばれてたのか。そういえば、中原の覇者という副題を付けた三国志のゲームがあったなあ。ナムコだっけ?
その後 Google で埋伏毒を検索するとちゃんとヒット。最初に調べたときは十面埋伏の計しかヒットしなかったんだけどなあ。
ところざわ図書館−マ行
http://webmania.jp/~rerasiu/liv/lm.html
4、埋伏の毒、苦肉の策、連環の計
http://www2.ttcn.ne.jp/~history/collaborate/sekiheki/engi/4. ...
このときの埋伏毒の計って失敗してるんだね。「苦肉の策」っていうのも慣用表現じゃなくて、この逸話が起源らしい。
ちなみに、私の好きな諸葛亮は三国無双に出てくる諸葛亮。通称、「ビーム諸葛亮」。中原の覇者って曹操だよね。乱世の奸雄 (姦雄って書くとなんかエッチ) っていう通り名は知ってるけど、中原の覇者とも呼ばれてたのか。そういえば、中原の覇者という副題を付けた三国志のゲームがあったなあ。ナムコだっけ?
46 :水先案名無い人:2005/04/29(金) 23:39:40 ID:qpNM7l3h0
孔明「玄徳ちゃんは中原の覇者?」
劉備「覇者じゃないです」
孔明「今軍師いるの?」
劉備「今はいません」
孔明「じゃあ一人でしてるんだw」
劉備「え、いや…」
孔明「いいじゃん、みんなやってることなんだから。計略は悪いことじゃないよ。玄徳ちゃんも埋伏毒の計してるんでしょ」
劉備「うーん…することもありますけど…」
孔明「みんなー玄徳ちゃんは埋伏毒の計しまくりですよーーw」
劉備「しまくりじゃないですー」
- 埋伏毒の計
埋伏毒 (まいふくどく) の計の意味がわからなくて、Google で調べてもそのときはなぜか一件もヒットしなくて困ってたら、友達が教えてくれた。要するにフェイントつきのスパイ。その後 Google で埋伏毒を検索するとちゃんとヒット。最初に調べたときは十面埋伏の計しかヒットしなかったんだけどなあ。
ところざわ図書館−マ行
http://webmania.jp/~rerasiu/liv/lm.html
埋伏の毒【まいふくのどく】
三国志に登場する計略の一つ。
敵勢力に味方勢力から離反したと思わせてもぐりこみ、敵を撹乱させる作戦。
魏の曹操が赤壁の戦いに際し、降将蔡仲、蔡和を離反したと見せかけて
周瑜(シュウユ)率いる呉の内情を知るために派遣したが周瑜に看破され、
逆に苦肉の策をかけられて大敗している。
4、埋伏の毒、苦肉の策、連環の計
http://www2.ttcn.ne.jp/~history/collaborate/sekiheki/engi/4. ...
ある日呉軍に、蔡和(さいわ)と蔡中(さいちゅう)名乗る二人の武将が投降してきた。二人とも、以前に周瑜の離間作で殺された蔡瑁(さいぼう)の甥である。この二人は、曹操が呉軍を探るために「埋伏の毒」として送り込んだのだが、孔明、周瑜共にはじめから気づいていた。そのため、わざと騙されたふりをして偽情報を流させ魏軍を錯乱する、という新しい選択肢が増え、呉軍が非常に動きやすくなった。曹操の策は裏目に出たのである。そして、ここから遠大な苦肉の策が始まる。
このときの埋伏毒の計って失敗してるんだね。「苦肉の策」っていうのも慣用表現じゃなくて、この逸話が起源らしい。
Web サービスにリクエストを投げたときに、それがタイムアウトするまでの時間を延ばしたい。
データストアとして、データベース。たとえば、MS SQL Server。
データベースに接続しクエリを投げるためのデータプロバイダ。.NET で MS SQL Server 相手だったら System.Data.SqlClient。
データストアから取得したデータを加工するビジネスロジック。
ビジネスロジックを載せるための Web アプリケーションフレームワーク。たとえば、ASP.NET。
REST や SOAP のリクエストを受けるための HTTP サーバ。たとえば、IIS (Internet Infomation Server)。
REST や SOAP のリクエストを投げるための HTTP クライアント。.NET だったら System.Web.Services.Protocols.SoapHttpClientProtocol あたりがいろいろやってくれる。
これらの全てのタイムアウトを延ばさないと、Web サービスのタイムアウトを延ばすという目標は達成できない。以下、それぞれのタイムアウト設定方法のメモ。
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/fr ...
今回設定が必要なもののうち、この SqlCommand.CommandTimeout が一番短い。短いといっても、30秒もあるわけだけど。
接続のタイムアウトを設定する
http://www.microsoft.com/resources/documentation/windowsserv ...
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/fr ...
- 大人の事情
Web サービスのタイムアウトの時間を延ばすなんて、なんでそんなことする必要があるの? と思うかもしれない。でも、大人にはいろいろ事情がある。とにかく Web サービスがタイムアウトすることだけは避けなければならない。それが今回の課題。たとえクライアントからリクエストを投げた後、レスポンスが返ってくるまで2分とかかかったとしても。- Web サービスの背後で動いてるもの
Web サービスは単純だ。SOAP なり REST なりでリクエストを投げ、レスポンスが返ってくる。ただそれだけ。でも、普通はこれを実現するためにいくつかのミドルウェアが背後で動いている。データストアとして、データベース。たとえば、MS SQL Server。
データベースに接続しクエリを投げるためのデータプロバイダ。.NET で MS SQL Server 相手だったら System.Data.SqlClient。
データストアから取得したデータを加工するビジネスロジック。
ビジネスロジックを載せるための Web アプリケーションフレームワーク。たとえば、ASP.NET。
REST や SOAP のリクエストを受けるための HTTP サーバ。たとえば、IIS (Internet Infomation Server)。
REST や SOAP のリクエストを投げるための HTTP クライアント。.NET だったら System.Web.Services.Protocols.SoapHttpClientProtocol あたりがいろいろやってくれる。
これらの全てのタイムアウトを延ばさないと、Web サービスのタイムアウトを延ばすという目標は達成できない。以下、それぞれのタイムアウト設定方法のメモ。
- SQL Server のクエリ実行時間タイムアウト
SqlCommand.CommandTimeout プロパティ System.Data.SqlClient 名前空間http://www.microsoft.com/japan/msdn/library/ja/cpref/html/fr ...
プロパティ値
コマンド実行の待機時間 (秒)。既定値は 30 秒です。
解説
0 は、制限なしを示します。ただし、コマンド実行の試行が永久的に待機されるため、 CommandTimeout では使用しないでください。
今回設定が必要なもののうち、この SqlCommand.CommandTimeout が一番短い。短いといっても、30秒もあるわけだけど。
- IIS の HTTP レスポンス生成時のタイムアウト
IIS5 の場合。インターネット サービス マネージャを開き、Web サイトのプロパティを表示させる。「既定の Web サイト」しかなかったら、それを右クリックしてプロパティを表示させる。「Web サイト」タブの「接続」の「接続のタイムアウト」に秒単位で設定できる。デフォルトは900秒。接続のタイムアウトを設定する
http://www.microsoft.com/resources/documentation/windowsserv ...
- SOAP クライアントのタイムアウト
WebClientProtocol.Timeout プロパティhttp://www.microsoft.com/japan/msdn/library/ja/cpref/html/fr ...
プロパティ値
XML Web サービスを同期的に呼び出すときのタイムアウト (ミリ秒単位)。既定値は 100000 ミリ秒です。
解説
Timeout プロパティを Timeout.Infinite に設定すると、要求がタイムアウトしないことを示します。XML Web サービス クライアントが Timeout プロパティをタイムアウトなしに設定しても、Web サーバーが要求をサーバー側でタイムアウトにする場合があります。
Mozilla Thunderbird にはラベルを設定するキーボードショートカットが用意されている。
Thunderbird にはメールに「フラッグ」を設定することができる。メール一覧で該当メールのフラッグのカラムをクリックするだけで設定と解除ができる。似たような機能で「ラベル」というものもある。「重要」「仕事」「私事」「ToDo」「あとで」といったラベルを設定することができるというものだ。
いままでは設定と解除が簡単なフラッグを使っていた。しかし、フラッグには欠点がある。フラッグを設定したメールを検索で抽出することができない。これは致命的だ。事実、フラッグが設定されているが、処置がなされずに埋もれているメールが2通ほど見つかった。大した案件ではなかったが、仕事ではこれらは命取りになる。Mozilla Thunderbird には検索条件にヒットするメールを仮想のフォルダとして扱う「検索フォルダ」という機能があるので、検索条件に「フラッグを設定したメール」を指定できるのならば、それがそのまま TODO リストになるので便利だが、現行の Mozilla Thunderbird 1.0.2 ではできない。
ラベルなら検索の条件として指定することができる。しかし、ラベルの設定や解除をするには、右クリックで出てくるメニューの2階層目までたどらなければならない。これも非常に面倒だ。
Thunderbird Help: キーボードショートカット
http://www.mozilla-japan.org/support/thunderbird/keyboard
便利そうなものを抜粋。
Ctrl/Cmd+Shift+C の「すべてを既読にする」は Netscape Messanger 4.x のころからお世話になっている。フォルダごと一気に既読にできるので非常に便利。
プロポーショナルフォント環境では盛大にずれてると思うけど、気にしないでおく。
- TODO ラベルは 4キーで設定できる
仕事場で Mozilla Thunderbird をメインの MUA (Mail User Agent) として使っている。Thunderbird にはメールに「フラッグ」を設定することができる。メール一覧で該当メールのフラッグのカラムをクリックするだけで設定と解除ができる。似たような機能で「ラベル」というものもある。「重要」「仕事」「私事」「ToDo」「あとで」といったラベルを設定することができるというものだ。
いままでは設定と解除が簡単なフラッグを使っていた。しかし、フラッグには欠点がある。フラッグを設定したメールを検索で抽出することができない。これは致命的だ。事実、フラッグが設定されているが、処置がなされずに埋もれているメールが2通ほど見つかった。大した案件ではなかったが、仕事ではこれらは命取りになる。Mozilla Thunderbird には検索条件にヒットするメールを仮想のフォルダとして扱う「検索フォルダ」という機能があるので、検索条件に「フラッグを設定したメール」を指定できるのならば、それがそのまま TODO リストになるので便利だが、現行の Mozilla Thunderbird 1.0.2 ではできない。
ラベルなら検索の条件として指定することができる。しかし、ラベルの設定や解除をするには、右クリックで出てくるメニューの2階層目までたどらなければならない。これも非常に面倒だ。
- キーボードショートカットを使えばいい
何か良い方法はないかと思っていたところ、キーボードショートカットを使えばいいことに気づいた。ラベル「ToDo」を指定するキーボードショートカットは、数字の 4 キー。ラベルを解除するには数字の 0 キー。これは Thunderbird の上部メニューからたどれる所には書いていない。キーボードショートカットの一覧は、Mozilla Thunderbird のウェブページに掲載されている。Thunderbird Help: キーボードショートカット
http://www.mozilla-japan.org/support/thunderbird/keyboard
便利そうなものを抜粋。
動作 キー
ラベル: ToDo 4
すべてを既読にする Ctrl/Cmd+Shift+C
スレッドを既読にする R
迷惑メールとしてマーク J
迷惑メールマークを解除 Shift+J
メッセージのソース Ctrl/Cmd+U
返信 (送信者のみ) Ctrl/Cmd+R
全員に返信 (受信者全員) Ctrl/Cmd+R
すべてのメッセージを送受信 Ctrl/Cmd+T
Ctrl/Cmd+Shift+C の「すべてを既読にする」は Netscape Messanger 4.x のころからお世話になっている。フォルダごと一気に既読にできるので非常に便利。
- Thunderbird キーボードショートカット全リスト
以下、全キーボードショートカットのリスト。動作 キー
新しいメッセージ Ctrl/Cmd+M または Ctrl/Cmd+N
(新しいウィンドウで) メッセージを開く Ctrl/Cmd+O
ウィンドウを閉じる Ctrl/Cmd+W
印刷 Ctrl/Cmd+P
コピー Ctrl/Cmd+C
切り取り Ctrl/Cmd+X
削除 Del
貼り付け Ctrl/Cmd+V
すべて選択 Ctrl/Cmd+A
元に戻す Ctrl/Cmd+U
やり直し Ctrl/Cmd+Y
キャレットブラウズモード F7
新しいメッセージとして編集 Ctrl/Cmd+E
すべてのスレッドを広げる *
すべてのスレッドをたたむ \
次を検索 Ctrl/Cmd+G または F3
Find As You Type (リンクのみ) '
前を検索 Ctrl/Cmd+Shift+G または Shift+F3
このメッセージを検索 Ctrl/Cmd+F
メッセージを転送 Ctrl/Cmd+L
現在のアカウントの新着メールを受信 Ctrl/Cmd+T
すべてのアカウントの新着メールを受信 Ctrl/Cmd+Shift+T
メッセージペインの表示・非表示切り替え F8
次のメッセージ F
次の未読メッセージ N
次の未読スレッド T
前の未読メッセージ B
前の未読スレッド P
次のペインへ移動 F6
検索バーへ移動 Ctrl/Cmd+K
文字サイズを拡大 Ctrl/Cmd++
文字サイズを縮小 Ctrl/Cmd+-
文字サイズを元に戻す Ctrl/Cmd+0
ラベル: なし 0
ラベル: 重要 1
ラベル: 仕事 2
ラベル: 私事 3
ラベル: ToDo 4
ラベル: 後で 5
メッセージの未読・既読切り替え M
スレッドを既読にする R
すべてを既読にする Ctrl/Cmd+Shift+C
送信日時で既読にする C
迷惑メールとしてマーク J
迷惑メールマークを解除 Shift+J
メッセージのソース Ctrl/Cmd+U
返信 (送信者のみ) Ctrl/Cmd+R
全員に返信 (受信者全員) Ctrl/Cmd+R
メッセージを名前を付けて保存 Ctrl/Cmd+S
メッセージを検索 Ctrl/Cmd+Shift+F
メッセージを今すぐ送信 Ctrl/Cmd+Enter/Return
メッセージを後で送信 Ctrl/Cmd+Shift+Enter/Return
すべてのメッセージを送受信 Ctrl/Cmd+T
停止 Esc
終了 Ctrl/Cmd+Q
プロポーショナルフォント環境では盛大にずれてると思うけど、気にしないでおく。
NUnit GUI を起動した後、RUN ボタンを押すことなしに自動でテストを実行する方法。
2005-06-08 に書いた「NUnit を使った開発とテスト」で、Visual Studio2003 で デバッグ実行したときに NUnit を自動起動する設定をした。そのとき、RUN ボタンをいちいち押さなくても、自動的にテストを開始してくれれば良いのになと書いたが、NUnit 2.2.0 には初めからそのオプションが用意されていた。
以下はコマンドラインから NUnit をヘルプオプション付きで起動したときの出力。
/run が該当のオプション。
構成プロパティを選択。
デバッグを選択。
開始オプションのコマンドライン引数を選択。
テストプロジェクトの DLL ファイル名の後に /run を付ける。たとえば、テストプロジェクトの DLL が CruiseTest.dll だったら以下のようにする。
NUnit - CommandLine
http://www.nunit.org/commandLine.html
/run オプション付きで nunit-gui.exe を単体起動したらできるかも、と思って試したけど、最初の一回目だけしか自動実行してくれない。リビルドしてもアセンブリを自動リロードするだけだった。まあ、Visual Stduio から起動するのも単体起動するのも NUnit にとっては同じなので当たり前だけど。NUnit はソースが公開されているので、機能を追加しようと思えばできるな。そのうちやってみようかな。
2005-06-08 に書いた「NUnit を使った開発とテスト」で、Visual Studio2003 で デバッグ実行したときに NUnit を自動起動する設定をした。そのとき、RUN ボタンをいちいち押さなくても、自動的にテストを開始してくれれば良いのになと書いたが、NUnit 2.2.0 には初めからそのオプションが用意されていた。
以下はコマンドラインから NUnit をヘルプオプション付きで起動したときの出力。
Help Syntax
NUNIT-GUI [inputfile] [options]
Runs a set of NUnit tests from the console. You may specify
an assembly or a project file of type .nunit as input.
Options:
/help Display help (Short format: /?)
/config=STR Project configuration to load
/noload Suppress loading of last project
/run Automatically run the loaded project
/fixture=STR Fixture to test
Options that take values may use an equal sign, a colon
or a space to separate the option from its value.
/run が該当のオプション。
- Visual Studio .NET 2003 で NUnit GUI の自動起動と自動テスト実行を設定する
プロジェクトのプロパティを開く。構成プロパティを選択。
デバッグを選択。
開始オプションのコマンドライン引数を選択。
テストプロジェクトの DLL ファイル名の後に /run を付ける。たとえば、テストプロジェクトの DLL が CruiseTest.dll だったら以下のようにする。
CruiseTest.dll /run
- テストの自動実行はマニュアルにも書いてある
以下のマニュアルにもちゃんと書いてあった。NUnit - CommandLine
http://www.nunit.org/commandLine.html
Load and Run Tests
Normally, nunit-gui only loads an assembly and then waits for the user to click on the Run button. If you wish to have the tests run immediately, use the /run option:
nunit-gui nunit.tests.dll /run
- 更新の検出と自動テストをやってくれると最高なんだけどなあ
一応設定してはみたが、やはり 2005-06-15 の「NUnit はテストコードの更新を自動検出してくれる」で書いた、NUnit を Visual Studio から起動せずに個別に起動しておくやり方の方がいい。NUnit の起動を待たなくて済むから。でも、コンパイルとテストの実行を F5 キー一発でやってくれるのは魅力的だ。「NUnit がアセンブリの更新を検出したら、自動的にテストを実行する」みたいなオプションがあればいいのにね。/run オプション付きで nunit-gui.exe を単体起動したらできるかも、と思って試したけど、最初の一回目だけしか自動実行してくれない。リビルドしてもアセンブリを自動リロードするだけだった。まあ、Visual Stduio から起動するのも単体起動するのも NUnit にとっては同じなので当たり前だけど。NUnit はソースが公開されているので、機能を追加しようと思えばできるな。そのうちやってみようかな。
いくつかパッチが出ていたので、試しにテストサーバで MicrosoftUpdate したら不具合発生。アップデート途中でパッチ適用に失敗する。
テストサーバ群のうち、Windows2000 SP4 がインストールされたものは全滅。Windows2000 SP4 ロールアップ 1 適用時に失敗していた模様。Windows2003 Server では失敗しなかった。
Windows Update や Microsoft Update サイトにアクセスすると 0x800700C1 エラーが表示される
http://support.microsoft.com/default.aspx?scid=kb;ja;904392
Windows 2000 SP4 ロールアップ 1不具合情報 : 投稿 : HotFix Report BBS
http://bbs.hotfix.jp/ShowPost.aspx?PostID=3358
リネーム後、もういちど MicrosoftUpdate を実行したら無事適用完了。リネームした後にリブートしなくても OK だった。
- 現象
MicrosoftUpdate に失敗する。再試行すると以下のメッセージが出て MicrosoftUpdate できない。[エラー番号: 0x800700C1]
Web サイトに問題が発生したため、このページを表示できません。次のオプションが、問題の解決に役立つ可能性があります。
テストサーバ群のうち、Windows2000 SP4 がインストールされたものは全滅。Windows2000 SP4 ロールアップ 1 適用時に失敗していた模様。Windows2003 Server では失敗しなかった。
- 対応策
既に MS のサイトに情報がある。Windows Update や Microsoft Update サイトにアクセスすると 0x800700C1 エラーが表示される
http://support.microsoft.com/default.aspx?scid=kb;ja;904392
概要
この資料は、Windows Update や Microsoft Update サイトにアクセスした際に、エラー 0x800700C1 が発生する現象について説明しています。
現象
Windows Update や Microsoft Update サイトにアクセスした際にエラー 0x800700C1 が表示され、Windows Update や Microsoft Update サイトの利用ができない場合があります。
原因
この現象は、Windows 2000 のコンピュータにおいて、Windows Update や Microsoft Update サイトで、[高速] インストールより、Windows 2000 SP4 対応の更新プログラム ロールアップ 1 (KB891861) をインストールした際に、Windows Update および Microsoft Update に必要な一部のシステムファイル (msxml3.dll および msxml3r.dll) がファイルサイズ 0KB の破損したファイルに置き換えられることが原因で発生します。
解決方法
以下のいずれかの方法にて、この問題を解決することができます。
方法1.
システムフォルダ (%systemroot%\system32) にあるファイルサイズ 0KB の msxml3.dll および msxlm3r.dll のファイル名をそれぞれ msxml3.old、msxml3r.old に変更します。この作業を行うことによって、システムフォルダに正常な msxml3.dll および msxml3r.dll が再生成されます。
方法2.
XML Parser (MSXML) 3.0 SP5をダウンロードセンターより入手して、msxml3.dll および msxml3r.dll を再インストールします。
Microsoft XML Parser (MSXML) 3.0 Service Pack 5 (SP5)
http://www.microsoft.com/downloads/details.aspx?FamilyID=4a3ad088-a893-4f0b-a932-5e024e74519f&DisplayLang=ja
Windows 2000 SP4 ロールアップ 1不具合情報 : 投稿 : HotFix Report BBS
http://bbs.hotfix.jp/ShowPost.aspx?PostID=3358
- 方法1 で対処
方法1 を試してみる。まずはリネーム。コマンドプロンプトで以下を実行。ren %systemroot%\system32\msxml3.dll msxml3.old
ren %systemroot%\system32\msxml3r.dll msxml3r.old
リネーム後、もういちど MicrosoftUpdate を実行したら無事適用完了。リネームした後にリブートしなくても OK だった。
C# で MUA (Mail User Agent) を作っていて、文書の保存フォーマットを検討している。それぞれの形式についてメモ。
複数のメールを一ファイルにまとめるため、メールを区切る区切り文字が必要。以下のように From ENVELOPE_FROM DATETIME_STRING を使う。
本文中に上記文字列がある場合、> でエスケープされる。
一つ以上の > と それに続く From で始まる行にも > を付加する。そうしないと可逆にならない。mbox 形式はこのエスケープとアンエスケープの仕様にいくつかの流派があるようで、互換性やデータの可逆性を損なっている。
可逆なエスケープとアンエスケープを正規表現で書くと以下のようになるかな。
参考。
mbox(5)
http://man.qmail.jp/jman5/mbox.html
maildir(5)
http://www.qmail.org/qmail-manual-html/man5/maildir.html
日本語訳。
maildir(5)
http://man.qmail.jp/jman5/maildir.html
ユーザが自分でさらにサブディレクトリを作ったらどうなるんだろう? 特に問題ないような気もするけど、Maildir を扱う MUA は使ったことないのでよくわからないな。
Outlook Express dbx file format by Arne Schloh
http://oedbx.aroh.de/
- mbox 形式
一般的かつ伝統的。複数の文書を一ファイルに連結して扱う。Mozilla Thunderbird や Unix 系の MTA/MUA の多くでサポートされている。複数のメールを一ファイルにまとめるため、メールを区切る区切り文字が必要。以下のように From ENVELOPE_FROM DATETIME_STRING を使う。
From example@example.com Thu Jul 14 14:35:40 2005
本文中に上記文字列がある場合、> でエスケープされる。
>From example@example.com Thu Jul 14 14:35:40 2005
一つ以上の > と それに続く From で始まる行にも > を付加する。そうしないと可逆にならない。mbox 形式はこのエスケープとアンエスケープの仕様にいくつかの流派があるようで、互換性やデータの可逆性を損なっている。
可逆なエスケープとアンエスケープを正規表現で書くと以下のようになるかな。
# mbox > エスケープ
s/^(>*)From /$1>From /
# mbox > アンエスケープ
s/^>(>*From )/$1/
参考。
mbox(5)
http://man.qmail.jp/jman5/mbox.html
- MH 形式
一メール一ファイルで構成する。仕様はどこにあるんだろう? mh 配布アーカイブ内かな?- Maildir 形式
qmail で使える形式。MTA じゃなくて MUA でも使うメリットはあるけど、シングルユーザーを前提とした MUA 環境ではオーバースペックな気がする。優れた形式だとは思うけど。maildir(5)
http://www.qmail.org/qmail-manual-html/man5/maildir.html
日本語訳。
maildir(5)
http://man.qmail.jp/jman5/maildir.html
ユーザが自分でさらにサブディレクトリを作ったらどうなるんだろう? 特に問題ないような気もするけど、Maildir を扱う MUA は使ったことないのでよくわからないな。
- Outlook Express の dbx 形式
dbx という拡張子。中身はバイナリ。インデックスファイルなし。このフォーマットって公開されてるんだろうか? 調べても MS のサイトがヒットしない。リバースエンジニアリングして公開してる人がいるくらいかな。Mozilla Thunderbird のソースとかも参考になりそう。Outlook Express dbx file format by Arne Schloh
http://oedbx.aroh.de/
- RDBMS を使う
フォーマットを考えたりアクセス用のファサードクラスを実装するのが面倒なら、DB を使ってメールを格納してしまうのが手っ取り早い。たぶんこの方法はやらないけど。Windows なら MSDE など。ライブラリがあってライセンス的に問題がなければ QDBM とか BerkeleyDB なども候補になる。 ASUS A8V-E Deluxe NW でオンボードの SPDIF 入力を使うためのパーツとその動作報告。
ASUS A8V-E Deluxe NW は Socket939 のマザーボード。2005-06-18 の「Athlon64 マシンを自作する」で作った Athlon64 マシンで使っている。SPDIF については今までレポートがなかったので、貴重で有用な報告だ。でも、このパーツって宇都宮で手に入るんだろうか? 通販なら買えるだろうけど、それならサウンドカードやオーディオカードを購入した方が、手っ取り早くて高音質かも。
ASUSTeK A8V/K8Vシリーズ総合スレ Rev1.05
http://pc7.2ch.net/test/read.cgi/jisaku/1116501193/732-
対応している入力は 48KHz だけなのかな?
ASUS A8V-E Deluxe NW は Socket939 のマザーボード。2005-06-18 の「Athlon64 マシンを自作する」で作った Athlon64 マシンで使っている。SPDIF については今までレポートがなかったので、貴重で有用な報告だ。でも、このパーツって宇都宮で手に入るんだろうか? 通販なら買えるだろうけど、それならサウンドカードやオーディオカードを購入した方が、手っ取り早くて高音質かも。
ASUSTeK A8V/K8Vシリーズ総合スレ Rev1.05
http://pc7.2ch.net/test/read.cgi/jisaku/1116501193/732-
732 :Socket774 [sage] :2005/07/05(火) 21:21:59 ID:eQkR6rmr
A8V-E DELUX NWのSPDIFの追加コネクタについての質問です。
コネクタ追加したら、デジタル入力で録音できるようになりますか?よろしくお願いします。
817 :732 [sage] :2005/07/10(日) 18:57:21 ID:FT2JVqb3
どなたもいらっしゃらなかったようなので、自分で人柱突撃してみました。このレポートもあまり興味かもしれませんが、
とりあえず。
ASUSのオプションでSPDIF-ALL(ttp://www.watch.impress.co.jp/akiba/hotline/20020413/ni_i_sc.html)ってのが
昔あったらしいのですが、エロエロ探しても見つからず。しかたがないので青筆のSPDIFCONNECTOR
(http://www.watch.impress.co.jp/akiba/hotline/20020831/ni_i_sc.html)を購入。
ピン配列がそのままではないので、そこは事前に調べておいて、マザーの配列とあわせる。
青筆コネクタは+5V 空き SPDIFOUT GND SPDIFINのピン配列。
で、結果。
soundeffectのSPDIFタブ(S/PDIF-in)に、いままで表示されなかった48kHz-PCMという項目が表示され、実際に
録音コントロールでSPDIFを選択した後、SoundEnginefreeで録音してみたら、ちゃんと録音されてました。
対応している入力は 48KHz だけなのかな?
セガの三国志大戦。バージョン1.0.3では弓兵の乱戦時戦闘力が上がったことで、今まで騎兵中心のデッキを構築していたプレイヤーたちが弓兵の使用を検討し始めた。そもそも弓の射程ってどのくらいなのか、という疑問が湧いてくる。
三国志大戦 2品以上専用論議スレ 兵法LV3
http://game10.2ch.net/test/read.cgi/arc/1117201550/587-
UC 程イク の反計の効果範囲と同じく、範囲を把握していれば弓を有効に使える。あ、ていいくの漢字が Perl 通すと化ける・・・。仕方ないのでカタカナで。
三国志大戦 2品以上専用論議スレ 兵法LV3
http://game10.2ch.net/test/read.cgi/arc/1117201550/587-
587 :ゲームセンター名無し [sage] :2005/06/17(金) 03:12:58 ID:cV8nzQGO
漏れは弓というか呉をサッパリほとんど使ったこと無いので
多分超初心者質問なんだろうけど聞いちゃうが
遠弓ってそんなに狙い打てる物なのか?
射程が長くなればその分射程圏内の敵も増えるだろうから
その中で、遠弓状態だとどっから狙いをつけて打ってくもんなんだ?
588 :ゲームセンター名無し [sage] :2005/06/17(金) 03:13:51 ID:LSZu9pCj
まだ俺が低品だったころR惇とカイエツの二重計略は役に立った
範囲が違うしどっちかが撤退していても弱体できるので
まぁ所詮は低品の頃の話だけどな
589 :ゲームセンター名無し [sage] :2005/06/17(金) 03:18:21 ID:6WOq+eMQ
>>585
皇后先に出して待機させてたら遠弓ぶっ放して来た人もいたけど
さすがにそれは参考にならんだろうがw
程普で何とかしようとしてる人は程普がちょこまか動くからなぁ
土煙出したりすると。
踊る体勢出来たら程普の射程上に誰か出してターゲットずらしてから踊るとか
その間に楽進なり徐晃なり夏侯惇なりで掃討する事もできるし
そもそも悲哀だから初手に踊らなけりゃならんわけでもない。
張宝入りなら落としてもいいしトン兄の睨みから武力差で押し返しでもいい
徐晃の神速で掃除してもいいしゴリ突っ込ませてバナナでもいい
590 :ゲームセンター名無し [sage] :2005/06/17(金) 03:18:50 ID:CXq+pMTL
>>587
弓の通常射程は城門前から自陣ぎりぎりまでの半径の半円
遠弓使うと 直線距離で城門から敵陣3分の1まで伸びる
つまり自陣との境目ぎりぎりで遠弓使えば
多少左右に動かすことで相手の城壁前ギリギリから敵を射撃できる。
UC 程イク の反計の効果範囲と同じく、範囲を把握していれば弓を有効に使える。あ、ていいくの漢字が Perl 通すと化ける・・・。仕方ないのでカタカナで。
手元に eml ファイルが50個ほどある。これを愛用のメールクライアントである Mozilla Thunderbird にインポートしたい。
当該 eml ファイルは、Outlook Express で受信したメールをエクスポートしたもの。
しかしながら、今回は直接 Mozilla Thunderbird にインポートする方法を見つけられなかったので、一度 Outlook Express にインポートしてから Thunderbird にインポートする手順を踏む。
Outlook Express 6 を起動し、受信トレイを開く。
右上のメール一覧ペインに該当ファイルを全部ドラッグ & ドロップすると、Outlook Express にインポートできる。
Mozilla Thunderbird 1.0.2 を起動し、上部メニューの ツール(T) の インポート(I) を選択。
インポートする内容の選択で「メールボックス」を選択。
インポート元のプログラムの選択で「Outlook Express」を選択。
Mozilla Thunderbird の「ローカルフォルダ」にインポートしたメールが生成される。
当該 eml ファイルは、Outlook Express で受信したメールをエクスポートしたもの。
- 一度 Outlook Express にインポートしてから、Thunderbird にインポートする
eml ファイルはテキストファイルなので、いろいろと方法はあると思う。専用のツールがあるかもしれないし、eml インポートのためのインターフェイスが Mozilla Thunderbird に用意されているかもしれない。しかしながら、今回は直接 Mozilla Thunderbird にインポートする方法を見つけられなかったので、一度 Outlook Express にインポートしてから Thunderbird にインポートする手順を踏む。
Outlook Express 6 を起動し、受信トレイを開く。
右上のメール一覧ペインに該当ファイルを全部ドラッグ & ドロップすると、Outlook Express にインポートできる。
Mozilla Thunderbird 1.0.2 を起動し、上部メニューの ツール(T) の インポート(I) を選択。
インポートする内容の選択で「メールボックス」を選択。
インポート元のプログラムの選択で「Outlook Express」を選択。
Mozilla Thunderbird の「ローカルフォルダ」にインポートしたメールが生成される。
find コマンドの -mtime は +1 でも2日前のファイルが対象となる。つまり、(n + 1) 日前のファイルが対象。n は +0 を指定しても、一日以上前のファイルが対象になる。
毎日午前0時6分に起動。一日以上経過したバックアップファイルを find で探しだし、xargs から起動する rm に渡して削除するというシンプルなコマンド。2003-04-16 の「n 日以前のタイムスタンプを持つファイルを消す」にも書いた。cron と find があるマシンでは重宝している。なんで今になってうまく動かないことが発覚したんだろう? 実行環境が Windows2000 + cygwin だから? まさか。
まずは原因を切り分けよう。xargs に渡す前の find だけを実行してみると、古くなったバックアップファイルが find の対象になっていない。なんでだろう? mtime の指定が間違っているのだろうか? find の man を見てみる。
Manpage of FIND
http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.htm ...
うーん、間違ってないよね。試しに -mtime +1 を -mtime 1 にしたところ、古いバックアップファイルが find の検索対象となった。ここが間違ってるのかな?
別におかしくないよなあ。-mtime +1 なら、24時間以上前なら真ってことでしょ? それとも何か勘違いしてる? ちょっとテストしてみるか。
その前に、該当マシンのマシンデイトの確認。
Windows エクスプローラで確認すると、該当のファイルのタイムスタンプ情報は以下の通り。
-mtime は更新日時のことなので、-mtime +1 の「一日以上前のファイル」という 条件には合致するはずだ。
まず touch で当該タイムスタンプを持ったファイルを生成し、ls -l でタイムスタンプを確認。
問題なく生成された。ファイル名も 200507041400.16 にした。
では find 実行。
あれ? なんで? 明らかに一日以上経過しているファイルなのに、+1 だと find の対象にならず、1 だと find の対象になる。この Windows2000 + cygwin 環境の find がおかしいのか? 念のため TurboLinux Server 6.5 でも同じことをやってみる。
同じだ・・・。なんでだろう?
+1 の条件を変えて +0 でやってみると検索対象になった。そういうことか。つまり、+0 を指定したら、0 * 24 = 0 なので、全てのファイルが対象になると思うところだが、そうはならないんだろう。
試してみる。touch now で現在時刻の mtime を持つファイルを作成し、mtime +0 で find の検索対象になるか試す。
find の検索対象にならない。そういうことか。
mtime +0 今から24時間以上前のファイル
mtime +1 今から48時間以上前のファイル
mtime +2 今から72時間以上前のファイル
(n + 1) * 24 ってことだね。man にそう書いてあれば良かったのに。あとでスクリプトを書いて試してみよう。
いきなり200個のファイルを作っても結果の検証がしにくくなるだけなので、まずは 35個だけ作ってみる。
よしできた。ls のオプションに指定した -ltr の意味は、-l がおなじみのパーミッションとタイムスタンプを表示の有効化、-t は「アルファベット順ではなく修正時刻 (inode の `mtime') でのソートの有効化、-r が逆順にするオプション。
ちなみに現在時刻と、実行環境と find のバージョンは以下の通り。
で、find . -mtime +0 してみる。私の予想通りなら、24時間以上経過しているファイルのみが対象になるはずだ。
うーん、これじゃ24時間以上経過したファイルかどうなのかがよくわからないよね。find の出力結果をファイル名じゃなくてタイムスタンプにしてみよう。
うん、"Tue Jul 5 23:39:57 2005" のタイムスタンプを持つファイルは対象になっておらず、確かに現在時刻から24時間以上経過したものだけ対象になってるね。なんでこういう仕様なんだろう? 仕様さえわかればまあいいか。
テストを終えてふと思ったこと。ここまでテストするんだったら find のソースを読んだ方が早い気がする。周りから攻めようとするのはエンジニアらしくないよね。次からはソースを読むようにしよう。
- find が古いファイルを検索してくれない
とあるテスト用 DB があり、定期的にバックアップを取っている。バックアップ先はディスク容量に余裕がないので、以下のような古くなったバックアップファイルを消す cron を設定しておいたのだが、どうもうまく動いていない模様。今日は7月6日なのに、7月4日のファイルがまだ残っているのだ。6 0 * * * /usr/bin/find /cygdrive/c/DB_BACKUP -maxdepth 1 -type f -mtime +1 |/usr/bin/xargs /bin/rm -f
毎日午前0時6分に起動。一日以上経過したバックアップファイルを find で探しだし、xargs から起動する rm に渡して削除するというシンプルなコマンド。2003-04-16 の「n 日以前のタイムスタンプを持つファイルを消す」にも書いた。cron と find があるマシンでは重宝している。なんで今になってうまく動かないことが発覚したんだろう? 実行環境が Windows2000 + cygwin だから? まさか。
まずは原因を切り分けよう。xargs に渡す前の find だけを実行してみると、古くなったバックアップファイルが find の対象になっていない。なんでだろう? mtime の指定が間違っているのだろうか? find の man を見てみる。
Manpage of FIND
http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.htm ...
-mtime n
ファイルのデータが最後に修正されたのが n*24 時間前なら真。
うーん、間違ってないよね。試しに -mtime +1 を -mtime 1 にしたところ、古いバックアップファイルが find の検索対象となった。ここが間違ってるのかな?
判別式
数値の引き数を
+n
と表わすと n より大きいことを示し、
-n
と表わすと n より小さいことを示す。
n
はちょうど n と等しいことを示す。
別におかしくないよなあ。-mtime +1 なら、24時間以上前なら真ってことでしょ? それとも何か勘違いしてる? ちょっとテストしてみるか。
- テスト
find の削除対象にならないタイムスタンプを持つファイルを作成してみる。その前に、該当マシンのマシンデイトの確認。
$ dateよし、合ってるね。NTP で合わせてるんだから当たり前だけど。
Wed Jul 6 10:25:14 2005
Windows エクスプローラで確認すると、該当のファイルのタイムスタンプ情報は以下の通り。
作成日時: 2005年7月4日、14:00:16
更新日時: 2005年7月4日、14:00:16
アクセス日時: 2005年7月6日、10:06:52
-mtime は更新日時のことなので、-mtime +1 の「一日以上前のファイル」という 条件には合致するはずだ。
まず touch で当該タイムスタンプを持ったファイルを生成し、ls -l でタイムスタンプを確認。
$ touch -m -t 200507041400.16 200507041400.16
$ ls -l
-rw-r--r-- 1 Administ なし 0 Jul 4 14:00 200507041400.16
問題なく生成された。ファイル名も 200507041400.16 にした。
では find 実行。
$ find -mtime 1
./200507041400.16
$ find -mtime +1
あれ? なんで? 明らかに一日以上経過しているファイルなのに、+1 だと find の対象にならず、1 だと find の対象になる。この Windows2000 + cygwin 環境の find がおかしいのか? 念のため TurboLinux Server 6.5 でも同じことをやってみる。
[hiroaki@pro ~/test/find_test]$ find -mtime 1
./200507041400.16
[hiroaki@pro ~/test/find_test]$ find -mtime +1
同じだ・・・。なんでだろう?
+1 の条件を変えて +0 でやってみると検索対象になった。そういうことか。つまり、+0 を指定したら、0 * 24 = 0 なので、全てのファイルが対象になると思うところだが、そうはならないんだろう。
試してみる。touch now で現在時刻の mtime を持つファイルを作成し、mtime +0 で find の検索対象になるか試す。
$ touch now
$ find -mtime +0
./200507041400.16
find の検索対象にならない。そういうことか。
- find の -mtime +n のまとめ
find の -mtime +n の検索対象となるファイルは以下の通り。mtime +0 今から24時間以上前のファイル
mtime +1 今から48時間以上前のファイル
mtime +2 今から72時間以上前のファイル
(n + 1) * 24 ってことだね。man にそう書いてあれば良かったのに。あとでスクリプトを書いて試してみよう。
- 一時間ずつずらしたタイムスタンプを持つファイル群を生成する Perl One Liner を使ってテスト
以下を実行すると、200個のファイルが生成される。ファイルのタイムスタンプはそれぞれ、一時間前、二時間前、三時間前・・・と200時間前までさかのぼったものを utime 関数を使ってセットする。ファイル名は epoc time そのもの。で、これを find に検索させて、どこが検索対象の境界になるかを調べようと言うわけだ。$ perl -le 'for (1..200) { $fname = (time - $_ * 3600); open(FH, ">$fname"); print FH ''; close(FH); utime($fname, $fname, $fname); }'
いきなり200個のファイルを作っても結果の検証がしにくくなるだけなので、まずは 35個だけ作ってみる。
$ perl -le 'for (1..35) { $fname = (time - $_ * 3600); open(FH, ">$fname"); print FH ''; close(FH); utime($fname, $fname, $fname); }'
$ ls -ltr
total 35
-rw-r--r-- 1 aqua なし 3 Jul 5 12:39 1120534797
-rw-r--r-- 1 aqua なし 3 Jul 5 13:39 1120538397
-rw-r--r-- 1 aqua なし 3 Jul 5 14:39 1120541997
-rw-r--r-- 1 aqua なし 3 Jul 5 15:39 1120545597
-rw-r--r-- 1 aqua なし 3 Jul 5 16:39 1120549197
-rw-r--r-- 1 aqua なし 3 Jul 5 17:39 1120552797
-rw-r--r-- 1 aqua なし 3 Jul 5 18:39 1120556397
-rw-r--r-- 1 aqua なし 3 Jul 5 19:39 1120559997
-rw-r--r-- 1 aqua なし 3 Jul 5 20:39 1120563597
-rw-r--r-- 1 aqua なし 3 Jul 5 21:39 1120567197
-rw-r--r-- 1 aqua なし 3 Jul 5 22:39 1120570797
-rw-r--r-- 1 aqua なし 3 Jul 5 23:39 1120574397
-rw-r--r-- 1 aqua なし 3 Jul 6 00:39 1120577997
-rw-r--r-- 1 aqua なし 3 Jul 6 01:39 1120581597
-rw-r--r-- 1 aqua なし 3 Jul 6 02:39 1120585197
-rw-r--r-- 1 aqua なし 3 Jul 6 03:39 1120588797
-rw-r--r-- 1 aqua なし 3 Jul 6 04:39 1120592397
-rw-r--r-- 1 aqua なし 3 Jul 6 05:39 1120595997
-rw-r--r-- 1 aqua なし 3 Jul 6 06:39 1120599597
-rw-r--r-- 1 aqua なし 3 Jul 6 07:39 1120603197
-rw-r--r-- 1 aqua なし 3 Jul 6 08:39 1120606797
-rw-r--r-- 1 aqua なし 3 Jul 6 09:39 1120610397
-rw-r--r-- 1 aqua なし 3 Jul 6 10:39 1120613997
-rw-r--r-- 1 aqua なし 3 Jul 6 11:39 1120617597
-rw-r--r-- 1 aqua なし 3 Jul 6 12:39 1120621197
-rw-r--r-- 1 aqua なし 3 Jul 6 13:39 1120624797
-rw-r--r-- 1 aqua なし 2 Jul 6 14:39 1120628397
-rw-r--r-- 1 aqua なし 2 Jul 6 15:39 1120631997
-rw-r--r-- 1 aqua なし 2 Jul 6 16:39 1120635597
-rw-r--r-- 1 aqua なし 2 Jul 6 17:39 1120639197
-rw-r--r-- 1 aqua なし 2 Jul 6 18:39 1120642797
-rw-r--r-- 1 aqua なし 2 Jul 6 19:39 1120646397
-rw-r--r-- 1 aqua なし 2 Jul 6 20:39 1120649997
-rw-r--r-- 1 aqua なし 2 Jul 6 21:39 1120653597
-rw-r--r-- 1 aqua なし 2 Jul 6 22:39 1120657197
よしできた。ls のオプションに指定した -ltr の意味は、-l がおなじみのパーミッションとタイムスタンプを表示の有効化、-t は「アルファベット順ではなく修正時刻 (inode の `mtime') でのソートの有効化、-r が逆順にするオプション。
ちなみに現在時刻と、実行環境と find のバージョンは以下の通り。
$ date
Wed Jul 6 23:40:41 2005
$ uname -a
CYGWIN_NT-5.1 a64 1.5.17(0.129/4/2) 2005-05-25 19:38 i686 unknown unknown Cygwin
$ find --version
GNU find version 4.2.11-CVS
で、find . -mtime +0 してみる。私の予想通りなら、24時間以上経過しているファイルのみが対象になるはずだ。
$ find . -mtime +0
./1120534797
./1120538397
./1120541997
./1120545597
./1120549197
./1120552797
./1120556397
./1120559997
./1120563597
./1120567197
./1120570797
./1120574397
うーん、これじゃ24時間以上経過したファイルかどうなのかがよくわからないよね。find の出力結果をファイル名じゃなくてタイムスタンプにしてみよう。
$ find . -mtime +0 -printf "%t\n"
Tue Jul 5 12:39:57 2005
Tue Jul 5 13:39:57 2005
Tue Jul 5 14:39:57 2005
Tue Jul 5 15:39:57 2005
Tue Jul 5 16:39:57 2005
Tue Jul 5 17:39:57 2005
Tue Jul 5 18:39:57 2005
Tue Jul 5 19:39:57 2005
Tue Jul 5 20:39:57 2005
Tue Jul 5 21:39:57 2005
Tue Jul 5 22:39:57 2005
Tue Jul 5 23:39:57 2005
うん、"Tue Jul 5 23:39:57 2005" のタイムスタンプを持つファイルは対象になっておらず、確かに現在時刻から24時間以上経過したものだけ対象になってるね。なんでこういう仕様なんだろう? 仕様さえわかればまあいいか。
テストを終えてふと思ったこと。ここまでテストするんだったら find のソースを読んだ方が早い気がする。周りから攻めようとするのはエンジニアらしくないよね。次からはソースを読むようにしよう。
マイクロソフトのマウスとかキーボードが値下げされたとのこと。
Microsoft Users | 高機能製品が更にお求めやすく! マイクロソフトのマウス、キーボード
http://www.microsoft.com/japan/users/hardware/
IntelliMouse Explorer は37% 引き。CD 一枚くらいの値段で買えるんだ。amazon ではいくらで売ってるのかなと思って amazon で IntelliMouse Explorer を検索 してみたが、まだ新価格が反映されてないみたい。
買うとしたら対象のモデルはワイヤレスじゃない方の IntelliMouse Explorer って決めてるから、以下の2つのどちらかだ。
クリムゾンファイア。2004-07-12 に買ったケータイ ボーダフォン V401D と色を合わせるならこれかな。ケータイとマウスの色を合わせても、ディスプレイやキーボードが白系なので中途半端だけど。
Landscape のテーマカラーに近いのはこっち。でも、輝度を落とした私のディスプレイでは、青というよりは黒っぽく見えるなあ。
ん? というか、ワイヤレスの方が安かったりするの? でも、ワイヤレスは電池切れがあるし、無線は混線や応答性の面で不安がある。荒巻素子に「なんであいつは有線するの好きかなー」と言われようが、私は無線の利便性よりも有線の信頼性を取る。
そのうち使うだろうから、と買い置きしておいたプラネックス製 LAN カードがある。6年くらい前に3000円くらいで買ったのに、結局使わなかった。なぜか。その後、3Com や Intel の LAN カードが中古で 500円くらいで売ってたからだ。信頼性、性能、いずれも 3Com や Intel にはかなわない。また、最近のマザーボードだと最初から LAN は オンボードで搭載している。ネットワークのインターフェイスがないことはまずあり得ない。で、プラネックスのカードは結局使わずじまいになってしまった。
それに、2004-05-22 の「チルトホイール付 IntelliMouse Explorer レビュー」で書いたように、現行の IntelliMouse Explorer はホイールのクリック性に難がある。つまり、安いからといって今すぐ飛びつくのは良くない。どうせすぐに次のモデルが発表されるからだ。
そう考えると、今回は見送った方がいいな。現行使用品が壊れたときに備え、予備として買っておくのもいいだろうけど、だったら近くのコジマやヤマダに車を飛ばして買いに行けばいい。予備の2ボタンのマウスならあるので、PC を操作できないという最悪の事態は避けられる。操作性は大きく劣るだろうけど。
Microsoft Users | 高機能製品が更にお求めやすく! マイクロソフトのマウス、キーボード
http://www.microsoft.com/japan/users/hardware/
IntelliMouse Explorer
■旧価格
¥5,400(税込 ¥5,670)
■新価格
¥3,400(税込 ¥3,570)
IntelliMouse Explorer は37% 引き。CD 一枚くらいの値段で買えるんだ。amazon ではいくらで売ってるのかなと思って amazon で IntelliMouse Explorer を検索 してみたが、まだ新価格が反映されてないみたい。
買うとしたら対象のモデルはワイヤレスじゃない方の IntelliMouse Explorer って決めてるから、以下の2つのどちらかだ。
クリムゾンファイア。2004-07-12 に買ったケータイ ボーダフォン V401D と色を合わせるならこれかな。ケータイとマウスの色を合わせても、ディスプレイやキーボードが白系なので中途半端だけど。
Landscape のテーマカラーに近いのはこっち。でも、輝度を落とした私のディスプレイでは、青というよりは黒っぽく見えるなあ。
ん? というか、ワイヤレスの方が安かったりするの? でも、ワイヤレスは電池切れがあるし、無線は混線や応答性の面で不安がある。荒巻素子に「なんであいつは有線するの好きかなー」と言われようが、私は無線の利便性よりも有線の信頼性を取る。
- 買い時?
モノはほしいと思ったときが買い時。ほしいと思ったときと、必要なときに買う方がいい。コンピュータ関連製品については買い置きは凶と出ることが多い。進化の速度が非常に早いからだ。とくに、簡単に入れ替えられるものはその傾向が強い。そのうち使うだろうから、と買い置きしておいたプラネックス製 LAN カードがある。6年くらい前に3000円くらいで買ったのに、結局使わなかった。なぜか。その後、3Com や Intel の LAN カードが中古で 500円くらいで売ってたからだ。信頼性、性能、いずれも 3Com や Intel にはかなわない。また、最近のマザーボードだと最初から LAN は オンボードで搭載している。ネットワークのインターフェイスがないことはまずあり得ない。で、プラネックスのカードは結局使わずじまいになってしまった。
それに、2004-05-22 の「チルトホイール付 IntelliMouse Explorer レビュー」で書いたように、現行の IntelliMouse Explorer はホイールのクリック性に難がある。つまり、安いからといって今すぐ飛びつくのは良くない。どうせすぐに次のモデルが発表されるからだ。
そう考えると、今回は見送った方がいいな。現行使用品が壊れたときに備え、予備として買っておくのもいいだろうけど、だったら近くのコジマやヤマダに車を飛ばして買いに行けばいい。予備の2ボタンのマウスならあるので、PC を操作できないという最悪の事態は避けられる。操作性は大きく劣るだろうけど。
Microsoft IntelliMouse Explorer Crimson Fire B75-00107
IntelliMouse Explorer Cobalt Basin
Microsoft Wireless IntelliMouse Explorer レザーブラック