F1キーでヘルプファイルがないと怒られる
ので、何とかしようと調べたら、キーバインド排除しようとのこと。
参考は「MFC アクセラレータとF1キーのヘルプの抑制 」。
アプリケーションクラス定義 CPP の上のほうにある Message Map から、F1キー(ID_HELP)のマップを排除する。
BEGIN_MESSAGE_MAP(MyApp, CWinApp)
/* HELP なし ON_COMMAND(ID_HELP, &CWinApp::OnHelp) */
END_MESSAGE_MAP()
ちなみに Message Map そのものをなくしてしまうと、ビルドエラーが出る。
エラー 1 error LNK2001: 外部シンボル ""protected: virtual struct AFX_MSGMAP const * __thiscall MyApp::GetMessageMap(void)const " (?GetMessageMap@MyApp@@MBEPBUAFX_MSGMAP@@XZ)" は未解決です。
RAID を組んでみる - SAPARAID-PCI
7月に節電でお亡くなりになった基幹システムサーバ。
復旧に当たって耐久性というか復旧性を上げようってことで、RAID を組むことに。
当初はRAID 組んだサーバマシンをDELL に注文しようって話だったが、予算の関係で余ったマシンで再構築することになったので、玄人志向のSAPARAID-PCI を購入して実装してみた。
とりまRAID ボードに同容量のHDD をぶっさして起動。起動画面で Ctrl-Z を3連打*1して、「手動」でミラーリング設定。ブートフラグはつけない。じゃないとなぜかうまくいかない。
Gentoo インストールCD を入れて再起動。コマンド gentoo dodmraid 。
インストールの手順はほぼ従来通り。
ただしデバイスが /dev/hda とか /dev/sda とかじゃなくて、/dev/mapper/* になる。このマシンでは /dev/mapper/via_cdfajgcjga ってのが、RAID ボードの認識。
fdisk /dev/mapper/via_cdfajgcjga
デバイスのパスが特殊な以外は、いつもと同じようにパーティションを切れる。ちなみにこのとき、/dev/dm-0 とか /dev/dm-1 とか言うデバイスがあるが、これは dmraid 用のエイリアスみたいなものらしく、ここをいじるとおかしくなるので注意。
パーティションを切ったらフォーマット。ここでもデバイス指定は /dev/mapper/* になる。
mkfs.ext2 /dev/mapper/via_cdfajgcjga1 mkfs.ext3 -b 1024 -i 1024 /dev/mapper/via_cdfajgcjga3 mkswap /dev/mapper/via_cdfajgcjga2
ブロックサイズや inode の指定が上記みたいになるのは、これがサーバマシンだから。デフォルトのままでフォーマットすると、大抵 inode が枯渇する。
続いてさくさくインストールを進めていくと、次の特記事項になるのは dmraid のインストール。これがないとインストールしたカーネルが dmraid を利用できない。
emerge -pv dmraid
そしてカーネルコンパイル。一々が面倒なので genkernel 1択。dmraid を指定する。
genkernel --dmraid all
/etc/fstab でも、上記のように /dev/mapper/* を指定。
/dev/mapper/via_cdfajgcjga1 /boot ext2 noauto,noatime 1 2 /dev/mapper/via_cdfajgcjga2 none swap sw 0 0 /dev/mapper/via_cdfajgcjga3 / ext2 defaults 0 1
最後に GRUB の設定。カーネルオプションに dodmraid をつける。また grub-install がうまくいかないのでGRUB コンソールを立ち上げて、/dev/mapper/via_cdfajgcjga にちまちま設定していく。
GRUB インストールが終わったら再起動。
これでなにもかもうまくいくはずだった。
だが起動しない
というかBIOS がRAID ボードをbootable として認識しない。
色々調べていくと、そもそもDELL に発注した際に RAID オプションを指定していないと、BIOS も対応していないものになるらしい。
はははのは。
そもそも boot は RAID じゃなくてヨクネ?
というわけで、お亡くなりになったマシンのHDD を挿して boot することに。
サーバマシンというか Web サーバマシンなので、データは /var に集約されている。
だから /var に RAID をマウントすればよい。boot やシステムファイルは hda で十分。
- インストールCD で起動。
- hda のルートパーティションを /mnt/gentoo にマウント
- RAID を適当にマウント
- hda の /var を RAID にまるっとコピー
- RAID アンマウント
- hda の /etc/fstab で /var に RAID をマウントするよう指定
- インストール時と同様に各種 boot/var/proc/dev をマウント
- chroot /mnt/gentoo /bin/bash
- dmraid をインストールして genkernel --dmraid all
- GRUB のカーネルオプションに dodmraid を追加して、/dev/hda に再インストール
所要2時間。問題なく起動して稼動して運用中。
はじめっからこうしときゃよかった。
boot 用のHDD が近々お亡くなりになる可能性もあるが、データはRAID で保護しているのでクリティカルではなかろう。基幹システムとはいえ3ヶ月止まってても問題なかった会社だし。
gentoo のインストールだけなら1日もかからない。
参考文献
- すけすけ。[http
- //d.hatena.ne.jp/pideno/20080624/1214340620:title=GentooでオンボードRAIDを使ってみる] : http://d.hatena.ne.jp/pideno/20080624/1214340620
非常に助かりました。Special Thanks!
おまけ - tar でまるっとコピー
cd /mnt/gentoo/var tar cf - . | (cd /mnt/gentoo/mnt/RAIDforVAR; tar vxf -)
*1:Please って言われた瞬間に3連打。それ以外の方法ではなぜか起動しない
Form Post の結果を素敵に表示
function formPreview(form) { var query = $(form).toQueryString(); var facSubmit = new Request(); facSubmit.onSuccess = function(responseText, responseXML) { SqueezeBox.initialize({size:{x:600,y:400}}); SqueezeBox.setContent('string', responseText); } facSubmit.send({data:query, url: form.action}); }
CMS(Joomla!)で書いてる途中の記事をLightBox 的にプレビューしたくて、色々調べた結果、mooforumに行き着いて真似してみた。
ところが、IE で「modal.js: 種類が一致しません」とか意味が分からないエラーが出る。
仕方ないのでソースを解析して自分なりに解決してみた。現時点での最新 IE/FF (Windows) で動作を確認。
主な流れとしては、
- Ajax でフォームの内容を送信
- success イベントで結果を取得
- 取得した結果を、string ハンドラで SqueezeBox に渡す
散々、悩まされた割にはシンプルな出来になった。
PHP5.3.3 のバグ? アクセス権がなにやらおかしい
class Hoge { protected $fuga = 'piyo'; public function display() { echo $this->fuga; } } $hoge = new Hoge(); $hoge->display();
上記のようなソースで結果が空になることがある。
「ことがある」というのが重要で、そうなるクラスファイルとならないクラスファイルがある。
一度発生すると、そのクラスでは発生しっぱなし。
上記で display() を
$fuga = $this->fuga;
echo $fuga;
ってすると、直ったりするし直らなかったりする。
またあるファイルを修正すると、他のファイルでまた起こったり。
コンパイルの問題か
おれが何か間違ってるのか
節電、熱暴走の夏
部品メーカーに納品した在庫管理システムが動かないと連絡を受けて見に行ったら、HDD がクラッシュしていた。
非公開の内部システムなので、社内に設置したサーバマシンで運用していたのが仇に。
節電、室温30度超。
木金休み明け、土曜の昼下がり。
Graph API で改行を使えない?
https://graph.facebook.com/me/feed へのPOST で、link/name/caption/description/picture を指定すると、リンクへの投稿となり、リンク先の説明を設定できる。
このリンク先の説明となる description 内で改行を使いたいのだが、br も CRLF も利かない。
ドキュメントを読み漁っても Line Break の説明は見当たらないし、Google で検索しても、「どうすればいいんだー!」って記事しか出てこない。
どうしようもないんかなぁ。