Category: 覚え書

今回も自分用の覚え書きネタ。

Webサイトの更新日時なんかを調べたい場合、URLに以下を入力するとメッセージボックスが表示される。
もちろん、動的に作成されるWebページは正しく取得できない。

javascript:alert(document.lastModified)


# とある件で更新日時を調べたくなったけど、やり方忘れて少し苦労したのでメモ。

かつてVisual Basic 6.0にはコントロール毎にIndexプロパティが存在し、
簡単にコントロールの配列を扱うことができた。
例えば、

TextBox1(0).Text = "1"
TextBox1(1).Text = "2"

など。

が、VB.NETからIndexプロパティが無くなり簡単には使用できなくなった。
(正確に言うと互換のため残されているが)
オブジェクト指向なんだから自分で作れと言わんばかりに無くなっている。

VB.NETにも無いものはC#にも無い。
C# 2005にも配列用のコントロールは用意してあるようだけど。
(例:TextBoxArray、PictureBoxArrayなど)

で、いざコントロールを配列で使ってみようと思ったところ使い方が分からず
少し悩んでしまった。
またきっと忘れるんで覚書きに追加しておこう。
(さらに…)

最近よく度忘れするので覚書き

C#でデバッグ時に[出力]ペインに情報を書き出す方法
1. Debugモードに切り替え
2. ソース中に
  System.Diagnostics.Debug.WriteLine(“出力される文字”);
3. 実行

前に、とある処理でこんなコーディング(VC++)をしたことがあった。

// 別スレッド
UINT sampleThread(LPVOID pParam)
{
  CSampleDlg* pDlg = (CSampleDlg*)pParam;
  for( ; 0<pWait ; pWait--){
    // ループ内の処理
  }
  :
}

しかし、これが何故か無限ループに陥ってしまう。
同様のミニプログラムを作成しても再現しない。
なぜか、これを使用している某プログラムのみ発生する。

でも、デバッグモードでは問題なく動作する。

う~ん、怪しい。
試しにこのスレッド処理だけをコンパイラの最適化を無効にしてみた。

// 別スレッド
#pragma optimize( "g", off )
UINT sampleThread(LPVOID pParam)
{
  CSampleDlg* pDlg = (CSampleDlg*)pParam;
  for( ; 0<pWait ; pWait--){
    // ループ内の処理
  }
  :
}
#pragma optimize( "g", on )

すると動くではないか。。。

最適化によってコードのサイズを小さくし実行速度を向上しているようですが、
たまに、こういった不具合にも突き当たります。
# 不具合というか仕様なんでしょうけど。

前に、最適化有無によって倍精度浮動小数点の演算結果(べき乗)が異なるって問題にもぶち当たったことがあったけど、これも最適化有無によるものでした。
浮動小数点の値自体、もともと誤差を含んでいるので、どちらも正しい値なんですが。。。

ちなみに、あとから分かったことは、

for( ; 0<pWait ; pWait--){

for(wkWait=pWait ; 0<wkWait ; wkWait--){

に変更するだけで問題は解決しました。

よく上級の人のソースや、本で、

for(;;)

なんて書き方も紹介してますが、あまり懲りすぎると痛い目にあいます。
特に、複数人で開発している製品なんかは、他人にも分かりやすいコーディングをしなければ、バグ作り込みの原因にも成りかねません。
あまり、性能に影響が無い部分は、なるべく見やすい一般的なコーディングをした
方がよいのでしょう。

最近、物忘れが激しいんでブログに書いておきます。

Windows XPで、ネットワークスピードを調べる方法

知っている限りでは二種類の方法があります。

  • 其の壱
    1. [Ctrl]+[Shift]+[Esc]キーを同時押下。
    2. Windowsタスクマネージャのダイアログが表示されるので[ネットワークタブ]を選択。
    3. 右側のスクロールバーを上下することにより、各アダプタのネットワーク使用率を表示することができる。

(さらに…)