2010 年 6 月 18 日
会社でこんなソースを見かけた。所々端折ってるけど、処理の本質は抑えてある。
class Hoge
{
public:
static Hoge *Instance;
static Hoge *getInstance() { return Instance; }
Hoge() {
Instance = this;
};
void initialize() {
if (Instance == 0) Instance = new Hoge;
}
(略)
};
// シングルトン
static Hoge hogeInstance;
void doSomething()
{
hogeInstance::Instance->func();
} |
見かけたというか、同じ仕組みのクラスがあっちこっちに散らばってた。念のために言っておく、コードはこれで間違いない。何度も見直したからねw
色々と突っ込みどころはあるけど、まず、シングルトンを想定してるのにコンストラクタがpublicって…。
いやいやいや、グループ会社内で(自称)一番技術力が高いと公言してるところの、仮にも俺より高給取りで優秀なプログラマが書いたコードだ。きっと俺なんぞには考えもつかない、深遠なる理由があるに違いない。
でも、色々と考えてみたけど、やっぱり何がしたいのか解らなかった。しかし、メンバ変数を触らないメンバ関数は、クラスの実体が無くても正常に呼べるって事は解った(実験済み)。つまり、上のクラスのinitialize()は期待通りの動作をする。これがC++の仕様の範疇かどうかは知らない。
静的メンバ関数がヌルポで呼び出せる(static_cast<Hoge*>(0)->staticFunc();)のは知ってたけど、メンバ関数も大丈夫だとはねぇ…。よーく考えてみれば、確かに呼べてもおかしくないはない感じはするが、やっぱり気持ち悪い。
カテゴリー: 未分類 | コメントはまだありません »
2009 年 9 月 17 日
Mac mini鯖に繋いでるデータ置き用HDDがぶっ壊れた。ディスクユーティリティで修復を試みるも「Bツリーが壊れてて直せない」的なエラーで修復不能だった。
「それでもTimeMachineなら・・・TimeMachineなら何とかしてくれる・・・!!」と思ってバックアップを除いてみたら、最新のバックアップは2009年7月2日とか言ってるの。え?何それ?バカなの?死ぬの?
fsckを直接叩いてみると、BAD SUPER BLOCK: MAGIC NUMBER WRONGだとかLOOK FOR ALTERNATE SUPERBLOCKS? [yn]とか言われ、代替ブロックを探すも見つからず、newfsを使った方法でもダメで、もはやお手上げ状態。
壊れたHDDにはそれほど重要なデータは入ってないから、もし本当にデータが飛んだとしてもそんなに痛くはない(夜のお供(自重汁)が減る程度で済むwある意味一大事ではある)が、諦めるのも何なのでDiskWarrior 4をポチった。
結果、いとも簡単に修復完了。1分も掛かってないんじゃなかろうか。
そんなわけでDiskWarriorは神。それに引き換えDrive Geniusは………買ってはみたものの、どうすんのよこれ………。
カテゴリー: 未分類 | コメントはまだありません »
2009 年 8 月 12 日
MacPortsでSubversion 1.6を入れただけでは、Xcodeから上手く使えない(システム標準の1.4が使われてしまう模様)ので、使えるようにするメモ。
…と言っても、単にコマンドとライブラリを置き換えてるだけ。
Subversion 1.6のインストール
MacPortsから入れる。variantsは適当に。
sudo install subversion +bash_completion+mod_dav_svn+tools+unicode_path |
/usr/binの関連コマンドの置き換え
cd /usr/bin
#一応前のコマンドを退避
sudo mkdir svn_old
sudo mv svn* svn_old
sudo mv apr-1-config svn_old
sudo mv apu-1-config svn_old
sudo ln -s /opt/local/bin/svn* .
sudo ln -s /opt/local/bin/apr-1-config .
sudo ln -s /opt/local/bin/apu-1-config . |
/usr/libの関連ライブラリの置き換え
元からあるシンボリックリンクは、可能な限りそのまま活用する方針で。
cd /usr/lib
sudo mkdir svn_old
sudo find . -regex ".*libsvn_.*-.*1\.0\.0\.0\..*" -exec mv {} svn_old \;
sudo mv libapr-1.0.2.7.dylib svn_old
sudo mv libaprutil-1.0.x.x.dylib svn_old # バージョン番号を失念してしまったので、適当に補完して下さい。
sudo find . -regex ".*libsvn_.*-.*1\.0\.0\.0\..*" -exec rm {} \;
sudo rm libapr*
sudo find /opt/local/lib -regex ".*libsvn_.*-.*1\.0\.0\.0\..*" -exec ln -s {} . \;
sudo ln -s /opt/local/lib/libapr-1.0.3.5.dylib .
sudo ln -s libapr-1.0.3.5.dylib libapr-1.dylib
sudo ln -s libapr-1.0.3.5.dylib libapr-1.0.dylib
sudo ln -s /opt/local/lib/libaprutil-1.0.3.7.dylib .
sudo ln -s libaprutil-1.0.3.7.dylib libaprutil-1.dylib
sudo ln -s libaprutil-1.0.3.7.dylib libaprutil-1.0.dylib |
swingとかperl用のモジュールが足りてないような気がするけど、うちでは関係なさそうなので気にしてない。無いと困るって人は、上手い事対処して下さい。
SubversionのサーバとしてMac OS Xを使用し、svn+sshでアクセスする場合はサーバ側でも同様の置換を行う。
カテゴリー: 未分類 | 1 件のコメント »