2の累乗かを判定する関数の顛末


 呼び出し側の構成を考え直した結果、標題の関数はassert()の中に入った。どんなコードでも良かった。今は反省している。

 で、今度は無駄にマルチスレッドの何やらを書いてるぜイェーイ。
 確かに罠が多そうだなあ。まあでも、どうせ慣れない最初の頃だけだろ、めんどくさいのは。ハードのパフォーマンスをガチで引き出すのに絶対必要なんだと思えばいくらでも、いや嘘ついた失礼、ある程度までのやる気は割と自然に出るぜ。
 でも、俺のPCのCPUって激しくシングルスレッドなんですが。これで開発すんのすげー無理があるんじゃね(笑)。しかもNUMBER_OF_PROCESSORS=1の時はスピンウェイトの処理とかも変えてる訳で、普通にデバッグ出来ない(笑)。でもぶっちゃけ例の変な電卓の変なソースよりは危なくないと思いました。
 まー、ちょっと足を伸ばせば隣の事務所にC2Dとかあるし。むしろ隣の部屋はNorthwoodだった気もするし。
 つーかバグっても誰も死なない奴だし。


懐かしい物を引っ張り出した


 2の累乗かどうかの判定が必要になって、そーいやDOS時代にTASM一本でゴリゴリ書いたコマンドラインの多倍長分数電卓っぽい奴にそんな処理があったかもなーと何となく思った。当時の俺なりに無駄に頑張ってたから、あればビット演算で書いてるだろうし、参考になるかも。どこにソース置いたか忘れてて見付かりにくかったけど、ちょっと探したら見付かったぜ。早速見てみるぜ。

 全然読めねーから。マジデ。
 つーか本気でコメント皆無だな昔の俺(笑)。まあでも、これコメントあっても全く読めねーからどうでもいいか。ハハハハハ。

 仕方ないので真面目に考えてみるか、と思ったけど、やっぱ面倒なのでその辺で検索してみる。ふむふむ。
inline bool is_power_of_2 ( unsigned int i ) { return ! ( i & i-1 ); }
 これでいいっぽいな。
 でも、これだと0もtrueになっちゃうんだよな。名前的にも用途的にも0はfalseでないと。
inline bool is_power_of_2 ( unsigned int i ) { return i && ! ( i & i-1 ); }
 これでいいのかな?
 どうせなら分岐も消したくなるなあ(笑)。まあでも、実のところ速度も何も不要な使い道なので、いい方法が思いついたら書き換えれば十分か。adc命令とかは駄目みたいだし。
 signedだとどうなるか、とかも軽く考えたけど、めんどくさそうだし別に使い道無いし、ってことでこれもパス。


どっこい生きていた


 ちょっとBOOST_SCOPE_EXIT使ってみたら何かすっきり書けてこれマジ便利なんじゃねとか思ってたらいつの間にかVC++2008EESP1のIntellisenseが効かなくなっててboost/scope_exit.hppのインクルード削ったら直ったから結局RAIIに戻ったんですよコンチクショウ何とかしろ。いや別にRAIIでいいけど。
 つーかC++とか久々なんですが、相変わらず狂った言語で最高ですね。いい意味で。ライブラリ無いと全然アレだけど。Boost頑張れ。今時C++大好きとか駄目ですかね。CLIに行くとしてもC#よりC++/CLIでいいじゃんとか思っちゃうくらいですが。主にC++とPerlしか書かない俺とか化石ですか。次に何か覚えるとしたらPHPとMySQLだろうけど。
 あとブログとかも久々なんですが、いい加減抹消したい過去のゴミが気になってきてたまりませんが、まあ一番致命的だった頃の奴は鯖移転で消え去ったからいいか。


バックアップ環境を整備したいこの頃


 HDDが何度となく吹っ飛んでる俺ですが、昔々IBMのHDDで突然死が相次ぐ不良品が出回って大変なことになった時があったんだぜーという話をネットで見掛けて、ああ、もしかしたらちょうどIBMを愛用してた頃だったかもなあと。今はWDを愛用気味だけど。
 まあ、半端なくHDD障害を食らってるんで、時々バックアップしたい病が出てくる。いや、いいことなんだけどさ。PCが壊れた時のストレスは半端じゃないから、その時を多少なりとも気楽に迎えられるようにしておかないと、普段から気疲れしてしまうし。

 で、今のバックアップ環境なんだけど、外付けHDDケースに余ったHDDを入れてボリューム単位のクローニング、となっている。
 外付けHDDに至った経緯は昔書いたけど、要はなるべく物理的に分離したい訳だ。RAID1がまとめて死んだしなあ。

 だが、最近どうも、ボリューム単位の一世代バックアップもストレスになっていることに気付いた。
 問題は、バックアップ中は外付けバックアップが一時的に潰れる、ということだ。バックアップ中の長ーい待ち時間が実に怖い。これのせいで「バックアップするかー」「でも怖いよなあ」ってことが多いのは確かなので、何かしら対策すべきだよなあ。
 ファイル単位で上書きコピーするバックアップなら、一つ一つやるから問題無いのかなあ、とも思うが、逃がせるものはどうしても限られるし、何より飛んだ時に楽に手を打てることを重視したい。そうすると、ツールも処理時間も何も無しにそのまま生き返るクローニングがやはり好ましく思える。

 では、具体的にどう改善するか。
 世の中に出回る色々な製品を見てみたが、どうもイメージが浮かばない。裸族の二世帯住宅は気になったが、「物理的に分離」コンセプトにそぐわない。それに電源もきつくなるだろうし。もちろん導入するならRAID1じゃなくて二台として運用する訳だが、それなら二台外付けにした方がいい。
 外付けをRAID1に出来るというのは面白い点だけど、それだと一世代バックアップなんだよな。世代数が増えないと意味が無い。逆に考えると、本体PCにRAID1入れただけでバックアップ取ってた気になってた頃は、言うなれば零世代バックアップという感じか。もちろんそれはバックアップになっていない。
 コンバイン機能はちょっと気になったが、手軽に戻せるクローニングの利点は半分失われる。まあ、ややこしいことはしない方がいいでしょう。避難袋みたいなもんなんだし。
 その他の製品も色々見てみたが、結論としては、もう一台外付けHDD入れればいいんじゃねーの、という方向にしかならなかった。だがしかし、今時HDD買うなら1TBとか行きたくなっちゃいますよね。うちのHDDって250GBなんですよ。どうしたもんだか。

 などと悩みつつ放置していた訳だが。
 何か部屋を少し片付けてたら、「250GB完動」とか俺の字のメモが貼られたHDDが出てきた(笑)。
 つーことで、また同じガワを買って二世代バックアップを開始する予定。