2010年1月18日月曜日

サーバー移転の際、役立つかもしれないコマンドやtips

今回、サーバーを移転した際にDNS設定変更が反映されたか確認する際のtips

  • (可能であれば)ルーターを再起動する。
    ADSLや光でブロードバンドルーターを使用している場合、PCが参照するDNSサーバーはルーターのアドレスを指定している(参照している)ケースが多いと思います。
    一定時間待っても反映されない場合は、一度再起動することで更新されるようです。

  • (可能であれば)PCを再起動する。
    もしくは、DNSキャッシュをクリアする(Windows)
    PCもまたDNSをキャッシュしているようです。
    PCを再起動するか、Windowsであれば ipconfig /flushdns でクリアできるようです。

  • DNSレコードの状態を問い合わせる(Mac)
    Mac(およびBINDツールが導入されたLinuxなど)で、 digコマンドを使うことでDNSレコードを問い合わせて反映されているか、まだ不安定状態かの様子を知ることができます。

    例)dig example.com CNAME
    とすると、安定していれば同じ値のINレコードを返しますが、不安定状態では問い合わせるたびに新しい値と古い値を返してきます。

【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。

[VB.NET] SerialPortクラスでUSBシリアルを使った場合

自分の備忘録。
VB2005以降で対応した、SerialPortクラスでUSBシリアルを使った場合において、ポートオープン状態でUSBシリアルI/FのUSBポートを抜いた場合、抜かれた時点でイベントが発生せずに送受信を行った時点やしばらくして例外が発生し、アプリが終了してしまいます。
この例外は、try-catchで補足できない領域で起きているようで、通常のコーディングでは回避できません。

ネットで調べたところ、SerialPortクラスを利用してUSB接続する際の不具合についてで報告があがっているものの、現時点では回避は難しそうです。

【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。

[VC8] UNICODEでコンパイルする際、TRACE()マクロがエラー

Visual Studio 2008で、MFCプロジェクトをUNICODEでコンパイルする際、TRACE()マクロのところでエラーになってしまう場合があります。

アプリの起動エントリ(InitInstance()など)で、
#include
をインクルードした上で、
_tsetlocale(LC_ALL, _T(""));
を追記することで回避できるようです。

【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。

[VB.NET]リモートオブジェクトでインタフェースと実装の分離手法の一案

サーバー/クライアント間通信を実装するのはいつも面倒です。
前に作ったコードをベースに新たにサーバーを起こしてみたり。

.NETになって「.NETリモート処理」なるものが実装されました。
結構お手軽なのですが、ここで問題になるのが「クライアントにもリモート処理可能オブジェクト(DLL)」が必要なこと。

これは、コンパイル時に型を参照する為ばかりでなく、実行時にも必要です。
せっかくサーバ側とクライアント側を分離したはずなのに、リモート処理可能オブジェクトと共にサーバ側だけでしか必要の無いDLL等が必要なことを意味します。
また、クライアント側に実装の詳細が見えてしまいかねません。

[C++]キャスト

これは、自分の備忘録^^
C/C++でプログラミングしているとキャストは避けられない物の一つです。
なるべく使わないほうがいいのですが、警告レベルを最大に上げてコンパイルしている場合どうしても発生してしまいます。
(無視するのはもっと気持ち悪い)
その場合はキャストすることになるのですが、最新版のC++ですと従来の(char)形式からstatic_cast()やreinterpret_cast()形式が採用されています。
無論従来形式も使えるのですが、従来形式だとあとでエディタで検索かけるときに、単なる変数や引数宣言と区別が付きにくいという欠点があります。
けど、新しい形式では'_cast'で検索すればOK!
古くからC++使っている人なんかだと、意外と知らないケースも多いのでは?
たまには最新版の文献も読みましょう...(と自己反省^^;)

【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。

[WIN]タスクバーを隠す

一般的なことではありませんが、Windowsの画面下(普通)にあるタスクバーを強制的に隠してしまう方法です。ついでに出す方法も。
タスクバーのウィンドウハンドルをどうやって取得するかが勘所。
これの応用で、いろんなことが出来そうです...

[WIN]NT系OSでシャットダウンする

これも、定石の一種かもしれませんが...
制御系など、専用システムではOSの振る舞いを極力見せないのが肝要です。
起動は、スタートアップでアプリをダイレクトに起動するのでいいんだけど、終了が問題。
では、単純にExitWindowsEx()を使用してもシャットダウン出来ません。
ヘルプに書かれているように「シャットダウン特権」が必要なのです。
では、その特権をどうやったら得られるか...

[WIN]Visual C++ MFCでワーカースレッド関数をクラスメンバにする

スレッドを使用する場合、スレッド化する関数は静的に宣言されている必要があります。
しかし、諸般の事情で動的に生成したり、スレッド内でクラスメンバーにアクセスしたい場合の手法の一つです。もっと楽な方法もあるかもしれませんが...

[WIN]Visual C++ MFCで多重起動を防ぐ

定番の処理ですが、備忘録として...
手法としてはミューテックスを使用し、派生したアプリケーションクラスのコンストラクタでミューテックスを定義、デストラクタで開放、InitInstance()内でロックされているかをチェックします。

[WIN]イベントビューアのログにメッセージを出す。

イベントビューアにログを吐き出すだけなら、ReportEvent()を使えば出来るのですが、ただ何もせずにReportEvent()でメッセージを吐き出すと、イベントビューア上では下記のように言われてしまいます。

「イベント ID (0) (ソース ***内) に関する説明が見つかりませんでした。
リモート コンピュータからメッセージを表示するために必要なレジストリ情報またはメッセージ DLL ファイルがローカル コンピュータにない可能性があります。」

イベントビューアにMS製のやつみたいにちゃんとしたメッセージを出すには、次のような手順が必要です。

サーバー移転のお知らせ

2010/1/7より、メール&Webのホスティングサービスを引っ越ししました。
DNS設定の関係上、メールの遅延などが発生する可能性があります。
お取引先の方でお急ぎの方は、電話などでご連絡いただけると幸いです。

[WIN]定期的に起動するスレッド-CreateWaitableTimer()

マルチスレッドプログラミングで、定期的に何か処理をしたいというケースがあります。

他にすること無ければSleep()で寝ていればいいんですが、一定時間内に通信が無かったら何か処理をする(状態問い合わせ)といった処理を実装する場合、Sleep()では困ってしまいます。

こういった場合、CreateWaitableTimer()でタイマイベントを生成し、SetWaitableTimer()で時間設定をした上で、WaitForMultipleObjects()で他のイベントと待つことが出来ます。