2013年6月17日月曜日

IIS6以上CGIでのstderr落ち問題

502 - Web サーバーがゲートウェイまたはプロキシ サーバーとして動作しているときに、無効な応答を受信しました。

検索中のページに問題があるため、ページを表示できません。Web サーバーがゲートウェイまたはプロキシ サーバーとして動作し、上位のコンテンツ サーバーと通信しているときに、コンテンツ サーバーから無効な応答を受信しました。


(2016/8/2 追記) ISAPI 拡張では stdout/stderr を使いませんので、存在しません。GetStdHandle を呼び出しても恐らく NULL が返ってくるだろうので、NULL アクセスで Access Violation になり、エラー落ちするのだと考えられます。
What is an ISAPI Extension? に記述のある EXTENSION_CONTROL_BLOCKReadClient WriteClient を代わりに呼び出すだけです。

さて、エラーは次の条件下で発生するようです:
  • IIS6以上を使っている。
  • phpやperlなどを使っている。CGI/ISAPIに関係なく。
  • stderrに何かを出力する。 

可能性の高い例として、外部プログラムがstderrに出力する場合が挙げられます。

対策例:

exec("pdftk.exe 2>&1", $output, $retval);

コマンドの末尾に"2>&1"をくっ付けて、stderrからstdoutにリダイレクションするか、
"2>NUL"で、Nullデバイスに捨てるのが手っ取り早い対策です。。。

参考:

PHP StdErr after Exec()
http://stackoverflow.com/questions/2320608/php-stderr-after-exec

php5でのexecとstderr
http://dd-kaihatsu-room.blogspot.jp/2013/03/php5execstderr.html

2013年6月12日水曜日

IE10が起動できない。GPUレンダリングをオフに

IE10が起動できない… 数日前までは問題なかったのに…

WinDbgで追跡した結果… DirectX関係で失敗している事が判明。

「GPUレンダリングではなく、ソフトウェアレンダリングを使用する*」をオン(チェック入れる)にしたら、起動するようになりました。


IEを起動できない場合は、「コントロールパネル」から「インターネット オプション」を開きます。

---

Microsoft社のサポート情報がヒットしましたので、参考までに。

初心者でもわかる! IE で GPU レンダリングを無効にする (IE10/IE9)
http://support.microsoft.com/kb/2618121/ja

2013年6月6日木曜日

アバストは疑わしいプログラムを分析しています

アバストは疑わしいプログラムを分析しています
このプログラムはアバストサンドボックス内で稼動しています。これにより、仮にソフトが悪意のあるものであったとしても、コンピュータにダメージを与えることはできません。

設定を変更する

自動サンドボックスを有効にする→オフ

これでもう警告が出なくなりました。

業務用パソコンだと、運用するにはしんどいです。


2013年6月3日月曜日

事務用パソコンの選択は、デスクトップかノートか?

「ノートを推したい」派の意見

  • ケーブル類が少ないので、3Sの適用が手軽。
  • LANは無線化できて、
  • 外には電源ケーブルとマウスの線ぐらいしか出ない。

「ノートを推しているんじゃありませんよ」派の反対意見

  • マルチモニタが想定されていない。できない訳ではないが、ディスプレイを増設すると、目の高さが合わないそういうことを気にせず増設している会社が有った。。。
  • ノートには、テンキーを装備して居ない機種が多い2013年現在、横長ワイドが流行っていて、テンキー装備の物が多い。
  • 買い替えの場合、前と同じキーボードを使う、という訳にはいかない。
  • 社長が買い替えに至る動機、ストーリーや美談が、ない。。。

ネットで調べた情報(デスクトップ PC は絶対に無くならない? )

  • デスクトップの良さ:
    • 処理能力が高い
    • 周辺機器をより多く接続できる
    • モニタのサイズが大きい
    • マルチモニタに適する
    • 臨場感(ゲーム・映画)
    • 故障時は自分で修理したり、部品交換ができる

2013年5月28日火曜日

QRコードを業務利用する上で陥ったワナ

最大フィールド長でテスト

  • QRコードは情報量が多くなれば大きくなるほど、寸法も大きくなります。
  • 情報量に比例して、読み取り可能性が反比例します。
  • という事で、最も情報量が多くなる状態でQRコードの読み取りテストを実施致します。
  • スキャン画像のワンセルが5ピクセルを下回ると厳しい戦いになる恐れが有ります。
  • そういう場合は独自でQRコードデコーダに手入れしたり等の追加作業が必要になるでしょう。

情報量が多くなると、寸法を大きくしないといけなくなります

  • 弊社の実績では、
    「発注書に印刷しますQRコード(バージョン数24、誤り訂正レベルL)を、
    300 dpi 白黒のPDFスキャンで有効に読み取るには、
    35mm以上の寸法が必要、という結果が得られました。」

用途に向き不向きが有ります

この度採用致しました、zxingの場合…
  • 向いている用途は、携帯電話でQRコードを認識する:
    • カラーCCDカメラ搭載で、カラー画像を使用できる
      • カラー画像は、ピクセル境界を補間する際に都合が良いです。
    • 速度優先、読み取り精度は重視しない実装になっている
      • ストリーミング的な使用に適しています
    • 何度でも画像の角度を変えて読み取りできるので、数十回のうち一回でも認識できたらOk
  • 向いていない用途は、スキャンした画像のQRコードを認識する:
    • モノクロスキャナで読み取り、モノクロ画像しか使用できない。
      • ピクセル境界が補間しにくく都合が悪い
    • 読み取り精度を優先したい、速度は要求されない実装、にはなっていない。
      • 流れ作業(ストリーミング)で、検出→認識 という流れになっている。
      • 検出の段階でミス、例えばバージョン番号の想定間違い等、を起こしたら、後工程は必ず失敗する。
    • 読み取りは一回のみで、一回でも認識できなかったらダメ、な用途には向かない。
      • ストリーミング構造なので、前工程での失敗が許されない、という用途は想定外。

テストデータだけだと、必要項目の漏れに気づきにくいです

  • 納品してから、あの項目、この項目が入っていない、という事が有りました。

空行も想定します

  • 改行でフィールドを区切る場合、フィールドに何も内容が無い場合、つまり空行が有る事も想定します。

QRコード入りの用紙かどうか、判別する方法も検討します

  • QRコード入り伝票が1枚以上有り、更に途中で図面が入ったりとかする場合、
  • QRコードの認識ミスの解釈が複数できてしまう
    • それは図面だ!
    • QRコードを読み取りできなかった。
  • 機械で判別できるようにするには、更に別のバーコードなり、QRコードが必要。
  • 又は、「ページ数/ページ総数」を各ページのQRコードに含むことで、歯抜けが判るような工夫も考えられる。例えば、1/3と2/3があって、3/3がなければ、抜けている、ということは機械的に判別できます。

2013年4月9日火曜日

IIS7.5で、証明書の関連付けに失敗する

「サイトバインドの編集」
「詳細:指定されたログオンセッションは存在しません。そのセッションは既に終了している可能性があります。(HRESULTからの例外:0x80070520)」

いずれかに該当する場合、失敗するようです:
  • MMC IIS Managerの「サーバ証明書」を使わずに、MMC 証明書スナップインで証明書を取り込んだ。
  • 「この証明書のエクスポートを許可する」チェックを外してインポートした。

うまくいく手順:
  • %windir%\system32\inetsrv\InetMgr.exe を起動。
  • 左側ツリーにて「DD5(DD5\Administrator)」を開く。
  • 中央の機能ビューにて「IIS」→「サーバー証明書」を開く。
  • 右側操作パネルにて「インポート」をクリック。
  • 「証明書ファイル」と「パスワード」を入力し、「この証明書のエクスポートを許可する」チェック入れる。
  • 「OK」

参考:

Error HRESULT: 0x80070520 when adding SSL binding in IIS
http://blogs.msdn.com/b/kaushal/archive/2012/10/07/error-hresult-0x80070520-when-adding-ssl-binding-in-iis.aspx

2013年4月5日金曜日

ATL/MFC トレースツール…動作を停止しました


「ATL Trace Toolは動作を停止しました。」
「問題の解決策をオンラインで確認できます。」

MSDNのATLサンプルにソースコードが含まれるので、デバッグしました。

  kernel32.dll!_InterlockedIncrement@4()  + 0x9 バイト 
> AtlTraceTool8.exe!CAtlTraceSettings::TryAddRef()  行 92 + 0xd バイト C++
  AtlTraceTool8.exe!CAtlAllocator::TakeSnapshot()  行 450 + 0xe バイト C++
  AtlTraceTool8.exe!AtlTraceSnapshotProcess(unsigned long dwProcess=4164784)  行 462 C++
  AtlTraceTool8.exe!CTraceToolDlg::PopulateTree()  行 294 C++
  AtlTraceTool8.exe!CTraceToolDlg::OnInitDialog()  行 193 C++

どうやら相性問題のようです。

タスクマネージャーで、hkcmd.exeigfxpers.exeを強制終了すれば立ち上がるようになりました。