メモ」タグアーカイブ

x264でエンコード中にFPSが低下する

動画をx264で変換中、後半になるとFPSが急激に下がる現象が発生したので原因を探りました。
結論から書くとCPUの温度が高温になったためでした。

以下、調べた内容をまとめて記録

タスクマネージャーの「パフォーマンス」タブのリソースモニターにて

  • CPU使用率は高い
  • メモリはまだ空きがある
  • ディスクI/Oは余裕がある

この段階で、ボトルネックになっているのがCPUだと推測

改めてリソースモニターのCPUの欄を見ると「最大周波数」の欄が「33%」になっている。
つまり、そもそもCPUの動作速度が引き下げられいる。
「じゃ、理由は?」ってことで以下の2つ考えた

  • 省エネモードが作動してCPUの動作速度を落としている
  • 熱によりCPUが破損するのを防ぐためCPUの動作速度を落としている

2つとも、存在する機能らしいってぐらいは知識としあるけれど実際しらないのと等しいので調べてみた。
(使用していたCPUはintel Core 2 Quad Q6600なのでintel CPUの内容となります。)

CPUの省エネ機能

  • C1Eステート
    CPUを休止状態にする機能。
    CPUは何もタスクを実行していない場合、消費電力を抑えた状態に移行し、CPUの動作クロックも一定の値まで下げられる
  • EIST(Enhanced Intel SpeedStep Technology)
    CPUの消費電力を抑える技術。
    CPUの使用状況にあわせて動作周波数と駆動電圧を落として消費電力を低減する。

CPUの熱からの保護機能

  • Thermal Monitor
    CPUを熱による破損から守る保護機能。
    TM1では異常時に周波数のみ、TM2では周波数と電圧を下げ、CPUの処理量を減らすことでCPUの発熱量を減らす。
    (サーマル・スロットリングと呼ばれることもあるようだが資料が見つからない・・・)

上記の事から今回の挙動がTM2の発動によると考え、CPU温度を見てみることに。
使用するソフトは「Core Temp」が無料で使用できる。
(standaloneとLanguage packをダウンロードした場合はCore Tempフォルダ内にLanguagesフォルダを作成し、言語ファイルを格納する)

見てみると95℃を超えておりたまに100℃に達している状况だった早急にPCケースのサイドパネルを外し、扇風機の風をCPUに対して、45°の角度で風を当てた。(垂直に当てるとCPUクーラーに負荷がかかると考えてこうしたけど、どうすれば一番いいのか知らないです。)
すると、温度が75℃付近になるとFPSも回復が見られたので、今回のFPSの原因はCPU温度で有ることが確認できた。

そもそも、CPUの適正温度ってどれくらいなのだろう
複数のサイトを見た感じ以下の温度が目安のようだ。

  • 40〜60℃:通常時
  • 60〜75℃:高負荷時

今回この現象が発生したPCのCPU Core 2 Quad Q6600はTM2は大体95℃ぐらいで働いた。
このあたりはもしかするとBIOSで設定できるのかも知れないが確認していない。

サクラエディタの更新ツールでv2系をチェックするように設定

「サクラエディタ」も内部文字コードをUnicodeにしたv2系が正式にリリースされました。
それに伴い、インストール支援ツール「SakuraDown」でもv2系をチェックできるように設定を変更してみたのでメモ。

ダウンロード先などを記述している「DownInfo.ini」のセクション[EDITOR]と[HELP]のところを下記のように編集する。

[EDITOR]
;ReleaseURI=http://sourceforge.net/api/file/index/project-id/12488/rss?path=%2Fsakura
ReleaseURI=http://sourceforge.net/api/file/index/project-id/12488/rss?path=%2Fsakura2
;FileRegExp=\d\.\d\.\d\.\d/sakura_[^\/\?<>=]+\.zip
FileRegExp=\d\.\d\.\d\.\d/sakura2[^\/\?<>=]+\.zip
ReleaseFindingPolicy=FROM_LAST
;DownloadURI=http://@MIRROR.dl.sourceforge.net/project/sakura-editor/sakura/@FILE
DownloadURI=http://@MIRROR.dl.sourceforge.net/project/sakura-editor/sakura2/@FILE
ReleaseType=SITE_SOURCEFORGE
;WildName=sakura_????-??-??*.zip
WildName=sakura2*.zip

;ヘルプファイル
[HELP]
;ReleaseURI=http://sourceforge.net/api/file/index/project-id/12488/rss?path=%2Fhelp
ReleaseURI=http://sourceforge.net/api/file/index/project-id/12488/rss?path=%2Fhelp2
;FileRegExp=\d\.\d\.\d\.\d/help_[^\/\?<>=]+\.zip
FileRegExp=\d\.\d\.\d\.\d/help2[^\/\?<>=]+\.zip
ReleaseFindingPolicy=FROM_LAST
;DownloadURI=http://@MIRROR.dl.sourceforge.net/project/sakura-editor/help/@FILE
DownloadURI=http://@MIRROR.dl.sourceforge.net/project/sakura-editor/help2/@FILE
ReleaseType=SITE_SOURCEFORGE
;WildName=help_????????*.zip
WildName=help2*.zip

正規表現ライブラリもUnicode版を利用するように「DownInfo.ini」のセクション[BREGEXP]のところを下記のように編集する。

[BREGEXP]
ReleaseURI=http://homepage3.nifty.com/k-takata/mysoft/bregonig.html
;FileRegExp=bron[0-9]+\.zip
;FileRegExp=bron2[0-9]+\.zip
FileRegExp=bron3[0-9]+\.zip
;DownloadURI=http://homepage3.nifty.com/k-takata/mysoft/@FILE
DownloadURI=http://cloud.github.com/downloads/k-takata/bregonig/@FILE
ReleaseType=SITE_NORMAL
WildName=bron???.zip;bron???.lzh

拡張子関連づけツールおよびサクラダウンは使用可能かどうかわかりませんが、とりあえず取得できるように「DownInfo.ini」のセクション[SAEXT]と[SDOWN]のところを下記のように編集する。

;拡張子関連づけツール
[SAEXT]
;ReleaseURI=http://sourceforge.net/apps/trac/sakura-editor/wiki/ExtTools
ReleaseURI=http://sourceforge.net/api/file/index/project-id/12488/rss?path=%2Fwiki
ReleaseFindingPolicy=FROM_LAST
;FileRegExp=SakuExt-[0-9\.]+.zip
FileRegExp=SakuExt[^\/\?<>=]+\.zip
;DownloadURI=http://sourceforge.net/apps/trac/sakura-editor/attachment/wiki/ExtTools/@FILE
;ReleaseType=SITE_NORMAL
DownloadURI=http://@MIRROR.dl.sourceforge.net/project/sakura-editor/wiki/@FILE
ReleaseType=SITE_SOURCEFORGE
WildName=SakuExt*.zip

;サクラダウン
[SDOWN]
;ReleaseURI=http://sourceforge.net/apps/trac/sakura-editor/wiki/SakuraDown
ReleaseURI=http://sourceforge.net/api/file/index/project-id/12488/rss?path=%2Fwiki
ReleaseFindingPolicy=FROM_LAST
;FileRegExp=SakuraDown[0-9]+[a-z]+.exe
FileRegExp=SakuraDown[^\/\?<>=]+\.zip
;DownloadURI=http://sourceforge.net/apps/trac/sakura-editor/wiki/SakuraDown/@FILE
;ReleaseType=SITE_NORMAL
DownloadURI=http://@MIRROR.dl.sourceforge.net/project/sakura-editor/wiki/@FILE
ReleaseType=SITE_SOURCEFORGE
WildName=SakuraDown*.exe

[wpdm_file id=3]

正しくないところがあると思うけれど、一応これで動いたので、暫定対応ってことで自己責任でお願いします。

>>記事更新(2012/10/13)
helpファイルと正規表現ライブラリの取得を更新しました。

>>記事更新(2012/11/18)
拡張子関連付けツールとSakuraDownの取得がエラーとなっていたので修正しました。

>>記事更新(2012/12/07)
正規表現ライブラリの取得がエラーとなっていたので修正しました。

[VS]ソフトウェア発行元証明書の作成と署名

作成物に証明書を署名するための作成方法と署名方法をメモ。

自己署名証明書とか、オレオレ証明書とかいわれるものでVSTOのインストールにClickOnceを使用する場合、必要なもの。
使用するツールはWindowsSDKに含まれている。

  • 作成方法
    
    rem 1.====
    rem CA:Certificate Authority:認証局証明書
    rem  会社名 : MoonWing
    rem  組織名 : MoonWing Authority Root CA
    rem  県  名 : Tokyo
    rem  国  名 : JP
    rem 有効期限: 2012.12.31
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\makecert" -r -n "C=JP, S=Tokyo, OU=MoonWing Authority Root CA, O=MoonWing" -e 12/31/2012 -a sha1 -cy authority -sv moonwingCA.pvk moonwingCA.cer
    rem 秘密キーのパスワードの作成:Subject Key:rootCA
    rem 秘密キーのパスワードの入力:Subject Key:rootCA
    
    rem 2.====
    rem EE:End Entity:署名用証明書
    rem コモン名: MoonWing
    rem  会社名 : MoonWing
    rem  組織名 : MoonWing Development
    rem  県  名 : Tokyo
    rem  国  名 : JP
    rem 有効期限: 2012.12.31
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\makecert" -n "CN=MoonWing, C=JP, S=Tokyo, O=MoonWing, OU=MoonWing Development" -e 12/31/2012 -sv moonwing.pvk -ic moonwingCA.cer -iv moonwingCA.pvk -nscp -cy end moonwing.cer
    rem 秘密キーのパスワードの作成:Subject Key:endEntity
    rem 秘密キーのパスワードの入力:Subject Key:endEntity
    rem 秘密キーのパスワードの入力:Issuer Signature:rootCA
    
    rem 3.====
    rem SPC:Software Publisher's Certificate:ソフトウェア発行元証明書
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\Cert2SPC" moonwing.cer moonwingCA.cer moonwing.spc
    
    rem 4.====
    rem PFX:Personal Information Exchange:PKCS#12
    rem  -pi(pvkpassword):endEntity
    rem  -po(pfxpassword):SPC
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\pvk2pfx" -pvk moonwing.pvk -pi endEntity -spc moonwing.spc -pfx moonwing.pfx -po SPC
    
  • 署名方法
    
    rem 5.====
    rem target.exeへ署名
    rem  -t(time stamp server):http://timestamp.verisign.com/scripts/timstamp.dll
    rem  -p(pfxpassword):SPC
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\signtool" sign /f moonwing.pfx /a /t http://timestamp.verisign.com/scripts/timstamp.dll /p SPC target.exe
    

[Tool]Mercurial(マーキュリアル)の導入

GoogleCodeでも使用されている分散型バージョン管理システム。
以前は、集中型バージョン管理システムのSubversionを使用していたが
個人用途なのにいちいちサーバーとして動作させるのが好きではなかったので
そそくさと、こちらに移行。

導入といっても、「TortoiseHg(with Mercurial)」をインストールし、下記のレジストリを追加

  • %ProgramFiles%\TortoiseHg\i18n\cmenu\thg-cmenu-ja.reg

この時点で、右クリックで表示されるコンテキストメニューは日本語になっていたが、
設定画面は英語だったので日本語化するためにユーザー環境変数に下記の設定を追加する。

  • 変数名:LANG
  • 変数値:ja

リポジトリをコンテキストメニューで作成して利用開始。
「$Id$」をコミット時に展開するためにコマンドプロンプトから
リポジトリ内(“.hg”があるディレクトリ)で下記のコマンドを実行

hg kwexpand


エラーが出ていないことが確認できたらコミットして展開されるか確認。

“hgrc”に下記の指定が必要だったかどうかは覚えていないがメモ。

[extensions]
hgext.keyword =

[keyword]
* =

[VS]Office AddinのインストーラがVSTOのインストールに失敗する

VisuatlStudio2010 + .NetFramework3.5でOffice2007のアドインを作成し、Setupを下記のサイトを参考に作成したときのメモ。

かなり役に立つので必読です。

上記の記事を参考にすることで、AddinとSetupがパッケージぽい形になるかと思います。
自分が作成した際には熟読してないがために下記の2点が抜けていました。

  • レジストリへ登録の作成
  • Inclusion Listへの登録処理作成

ちなみに起動条件の作成時にVSTOの日本語ランゲージパックを追加しようとしたのですがうまくいきませんでした。
Oracで取得したComponentIDが正しいかどうかすら確認できず、とりあえず、必須制限からはずしました。

VM上でインストーラのテストを行ったところインストールは完了するもののうまくアドインが動作しません。
ログを出すためにユーザー環境変数に以下の2つを追加しました。

  • VSTO_SUPPRESSDISPLAYALERTS:0
  • VSTO_LOGALERTS:1

(参考:アプリケーション レベルのプロジェクトのデバッグ

ログを追いかけてみてわかったことは2つありました。

  1. Setup.msiでは必須コンポーネントがインストールされない
  2. VSTO4.0ランゲージパックのダウンロードに失敗する

1つ目は、最初に示した参考サイト内にちゃんと書かれていました。

Setup.exe をダブルクリックしてソリューションをインストールする代わりに、.msi ファイルをダブルクリックしてソリューションをインストールする方法も選択できます。このモードでは、ユーザーはブートストラップを実行しません。そのため、セットアップは依存関係を検出できず、必要に応じた必須コンポーネントのインストールも行いません。

つまり、Setup.exeでインストールしないといけないということで、Setup.exeは必須コンポーネントインストール後にSetup.msiを実行すると。
といわけで、VisualStudioのSetupプロジェクトの「必須コンポーネント」プロパティはSetup.exeに作用するだけで、別途Setup.msiが必須コンポーネントの存在しない場合に起動しないようにするための起動条件は手動で作成しなければならないとのことです。しっかり読んでいたならこんなところでは引っかからなかったのでしょうが。

2つ目はインストーラのログを読んでVSTO4.0日本語ランゲージパックのダウンロードに失敗していました。
具体的には下記の2つのURLです。

  • http://go.microsoft.com/fwlink/?LinkId=158919&clcid=0x411
  • http://go.microsoft.com/fwlink/?LinkId=158920&clcid=0x411

上記のURLは確かにリダイレクト先が存在しないようで、このURLはどこで設定されているかを調べてみました。
その結果、レジストリの

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\3.5

に記載されているPath内(多分WindowsSDK内)にあるBootstrapperと呼ばれるものの中で定義されているようです。

実際に自分の環境のBootstrapper/VSTO4.0日本語ランゲージは

  • C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\VSTOR40\ja\package.xml

にURLが記載されていていました。

ここは、本来手を入れるべきではない場所でしたが実験でURLを下記のように書き換えてみたところ、無事インストールを成功させることができました。


--- before/package.xml
+++ after/package.xml
@@ -61,7 +61,7 @@
     Microsoft Visual Studio 2010 Tools for Office Runtime (x86 および x64) Language Pack - 日本語のインストール中にエラーが発生しました。
     http://go.microsoft.com/fwlink/?LinkId=158917
     http://go.microsoft.com/fwlink/?LinkId=158918
-    http://go.microsoft.com/fwlink/?LinkId=158919&clcid=0x411
-    http://go.microsoft.com/fwlink/?LinkId=158920&clcid=0x411
+    http://download.microsoft.com/download/8/D/1/8D139084-948F-45F7-A014-71A90E2572EC/vstor40_LP_x86_jpn.exe
+    http://download.microsoft.com/download/8/D/1/8D139084-948F-45F7-A014-71A90E2572EC/vstor40_LP_x64_jpn.exe
   
 

とりあえず、Microsoftからの修正がでるまではこの対応ではこの対応で乗り切れると思います。
たしか、VSTO3.0でも同様にv6.0A内のBootstrapperの日本語ランゲージへのURLも同じように存在しない場所を指してたような。
(参考:まなBlog)

それと、小さな注意点がありました。
Windows7で開発していたため、package.xmlを書き換えるには管理者権限が必要でした。
ふだん使っているエディタを管理者権限で起動しなおすのは手間だと思い、メモ帳を管理者権限で立ち上げ、URLを修正したのが問題となりました。
というのも、このpackage.xmlはUTF-8のBOMなし(UTF-8N)で作成されているのですが、Windows付属のメモ帳ではBOMありでUTF-8を保存してしまうようで、
Setupをリビルドした際に下記の警告が表示され、実際インストーラはランゲージパックをインストールしない挙動に変わってしまいました。


警告: カルチャ 'ja-JP' を項目 'Microsoft Visual Studio 2010 Tools for Office Runtime (x86 and x64)' に対して一致できませんでした。カルチャ 'en' を使用します。

package.xmlをUTF-8Nで保存し、BOMがないことと文字化けしていないことを確認して再ビルドしたところ警告もなくなり、ランゲージパックのインストールも主なわれるようになりました。

また、今回は必要とならなかったけれど関連のある参考サイトもメモ

[Tool]Gnu On Windows

LinuxやMacOSXなどと比べるとWindowsだけコマンドが違うとかコマンドが足りないとかクロスコンパイル時に困ることもあった。
こういった場合、今まではCygwinを利用したり、用途によってはMSYSで作業していたがCygwinはレジストリの変更などが多くできれば入れたくない。
そこで、見つけたのがGOW。シンプルなコマンド群でCygwinと比べれば簡易的なものだろうけれど、多くの場合において十分使える。

[Tool]exciteメールを保存

昔はよく使っていたexciteメールだけれど、使い勝手からか使わなくなってしまった。
転送メールの設定もできず、保存するのにツールを使用したのでそのメモ。

  • 準備
  • 使用方法
    1. 「Jupiter5」を起動するとセキュリティ警告が表示される場合があるが、通信を行う必要があるので「ブロックを解除する」を選択
      セキュリティ警告
    2. メニュー[設定]->[スクリプト]->[インストール]を選択する
      スクリプトのインストール01
    3. ダウンロードしたExciteメール Ver. 2.12の[Excite_yobane.js]をドラッグする
      スクリプトのインストール02
    4. ドラッグした[Excite_yobane.js]をダイアログにドロップし、スクリプトをインストールする
      スクリプトのインストール03
    5. メニュー[設定]->[アイテムの追加]を選択する
      設定画面01
    6. ユーザIDやパスワード、メールアドレスを入力する
      設定画面02
    7. 設定したアイテムを右クリックし[このアイテムを実行する]を選択し、取得を開始する
      実行画面

AmazonSearchをHTMLで設置する

Amazonで作成したウィジェットではJavascriptが利用されるうえ、HTML構文エラーやデザイン的問題があったので、HTMLで実装してみた。
正しく動作するかまだ確認できてないが、とりあえず検索としてはちゃんと動いてるみたいなのでメモ。
以下、サイドメニューに追加したHTML構文


<dt>AmazonSearch</dt>
<dd>
<form action="http://www.amazon.co.jp/exec/obidos/external-search" method="get">
<fieldset>
<legend>
<label for="AmazonSearchKeyword">Amazon検索</label>
</legend>
<div>
<strong>サーチ:</strong>
<select id="searchDropdownBox" style="font-size: 0.8em;" title="次の中からサーチ" name="url">
<option selected="selected" value="search-alias=aps">すべてのカテゴリー</option>
<option value="search-alias=stripbooks">和書</option>
<option value="search-alias=english-books">洋書</option>
<option value="search-alias=dvd">DVD</option>
<option value="search-alias=popular">ミュージック</option>
<option value="search-alias=classical">クラシック音楽</option>
<option value="search-alias=mi">楽器</option>
<option value="search-alias=videogames">TVゲーム</option>
<option value="search-alias=software">PCソフト</option>
<option value="search-alias=electronics">家電&amp;カメラ</option>
<option value="search-alias=office-products">文房具・オフィス用品</option>
<option value="search-alias=kitchen">ホーム&amp;キッチン</option>
<option value="search-alias=food-beverage">食品&amp;飲料</option>
<option value="search-alias=hpc">ヘルス&amp;ビューティー</option>
<option value="search-alias=beauty">コスメ</option>
<option value="search-alias=baby">ベビー&amp;マタニティ</option>
<option value="search-alias=toys">おもちゃ</option>
<option value="search-alias=apparel">服&ファッション小物</option>
<option value="search-alias=shoes">シューズ&バッグ</option>
<option value="search-alias=jewelry">ジュエリー</option>
<option value="search-alias=watch">時計</option>
<option value="search-alias=sporting">スポーツ&amp;アウトドア</option>
<option value="search-alias=automotive">カー&バイク用品</option>
<option value="search-alias=diy">DIY・工具</option>
</select></div>
<div>
<input id="AmazonSearchKeyword" style="width: 10em; font-size: 0.8em;" name="AmazonSearchKeyword" type="text" />
<input name="tag" type="hidden" value="dambe-22" />
<input name="encoding-string-jp" type="hidden" value="日本語" />
<input style="vertical-align: middle;" name="Go" src="http://wms.assoc-amazon.jp/JP/img/go-rd-sec_tpng.png?tag=dambe-22" type="image" value="Go" /></div>
<div>
<a href="http://www.amazon.jp/?&amp;camp=759&amp;linkCode=wsw&amp;tag=dambe-22&amp;creative=3867">
<img style="border: none;" src="http://wms.assoc-amazon.jp/JP/img/amazon-logo-b_tpng.png" alt="Amazon.co.jpアソシエイト" />
</a></div></fieldset>
</form>
</dd>

ディレクティブ

クロスプラットフォーム対応コードを書くときにプラットフォーム依存部分を切り分けるプリプロセッサディレクティブのメモ。

  • Compiler
    • GCC
      • #ifdef __GNUC__
        • #if __GNUC__ >= 3 // GCC3.0以上
    • Borland C++
      • #ifdef __BORLANDC__
    • intel Compiler
      • #ifdef __INTEL_COMPILER
    • Microsoft Compiler
      • #ifdef _MSC_VER
        • #if _MSC_VER >=600 // C Compiler 6.0以降 VC++含む
        • #if _MSC_VER >=700 // C/C++ Compiler 7.0以降 VC++含む
        • #if _MSC_VER >=800 // VC++1.0以降
        • #if _MSC_VER >=900 // VC++2.0以降
        • #if _MSC_VER >=1000 // VC++4.0以降
        • #if _MSC_VER >=1010 // VC++4.1以降
        • #if _MSC_VER >=1020 // VC++4.2以降
        • #if _MSC_VER >=1100 // VC++5.0以降
        • #if _MSC_VER >=1200 // VC++6.0以降
        • #if _MSC_VER >=1300 // VC2002(VC7.0)以降
        • #if _MSC_VER >=1310 // VC2003(VC7.1)以降
        • #if _MSC_VER >=1400 // VC2005(VC8.0)以降
        • #if _MSC_VER >=1500 // VC2008(VC9.0)以降
        • #if _MSC_VER >=1600 // VC2010(VC10.0)以降
  • UNIX system
    • UNIX
      • #ifdef __unix
      • #ifdef __unix__
    • Linux
      • #ifdef __linux
      • #ifdef __linux__
    • FreeBSD
      • #ifdef __FreeBSD__
    • NetBSD
      • #ifdef __NetBSD__
    • Cygwin
      • #ifdef __CYGWIN__
      • #ifdef __CYGWIN32__ // 32bit版Cygwin
    • MinGW (-mno-cygwin)
      • #ifdef __MINGW32__
  • Windows system
    • CUI
      • #ifdef _CONSOLE
    • GUI
      • #ifdef _WINDOWS
    • 32bit Windows
      • #ifdef WIN32
      • #ifdef _WIN32
    • 64bit Windows
      • #ifdef _WIN64
    • Windows version
      • #ifdef WINVER
        • #if (WINVER >= 0x030a) // Windows 3.1以降
        • #if (WINVER >= 0x0400) // Windows 95/ NT4.0以降
        • #if (WINVER >= 0x0410) // Windows 98以降
        • #if (WINVER >= 0x0500) // Windows Me/ 2000以降
        • #if (WINVER >= 0x0501) // Windows XP/ Server 2003以降
        • #if (WINVER >= 0x0502) // Windows XP SP2/ Server 2003 SP1以降
        • #if (WINVER >= 0x0600) // Windows Vista/ Server 2008以降
        • #if (WINVER >= 0x0601) // Windows 7以降
      • #ifdef _WIN32_WINDOWS // Windows9x
        • #if (_WIN32_WINDOWS >= 0x0400) // Windows 95以降
        • #if (_WIN32_WINDOWS >= 0x0410) // Windows 98以降
        • #if (_WIN32_WINDOWS >= 0x0500) // Windows Me以降
      • #ifdef _WIN32_WINNT // WindowsNTx
        • // Windows 2000以降(0x0500)
          #if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
        • // Windows XP/ Server 2003以降(0x0501)
          #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
        • // Windows XP SP2/ Server 2003 SP1以降(0x0502)
          #if (_WIN32_WINNT >= _WIN32_WINNT_WS03)
        • // Windows Vista以降(0x0600)
          #if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
        • // Windows Server 2008以降(0x0600)
          #if (_WIN32_WINNT >= _WIN32_WINNT_WS08)
        • // Windows 7以降(0x0601)
          #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
      • #ifdef _WIN32_WCE // WindowsCE
        • #if (_WIN32_WCE >= 0x0420) // Windows Mobile 2003(PPC2003)
        • #if (_WIN32_WCE >= 0x0421) // Windows Mobile 2003 SE(PPC2003SE)
        • #if (_WIN32_WCE >= 0x0501) // Windows Mobile 5.0
        • #if (_WIN32_WCE >= 0x0502) // Windows Mobile 6 Professional / Classic
        • #if (WINCEOSVER >= 0x0300) // WindowsCE3.0(PPC2002)以降
        • #if (WINCEOSVER >= 0x0420) // WindowsCE4.2(PPC2003)以降
        • #if (WINCEOSVER >= 0x0500) // WindowsCE5.0(WM5.0)以降
    • Internet Explorer version
      • #ifdef _WIN32_IE
        • #if (_WIN32_IE>=0x0200) // Windows 95/NT 4.0(Comctl32.dll 4.00, Shell32.dll 4.00)
        • #if (_WIN32_IE>=0x0300) // Internet Explorer 3.0, 3.01, 3.02
        • #if (_WIN32_IE>=0x0400) // Internet Explorer 4.0
        • #if (_WIN32_IE>=0x0401) // Internet Explorer 4.01
        • #if (_WIN32_IE>=0x0500) // Internet Explorer 5.0, 5.0a, 5.0b
        • #if (_WIN32_IE>=0x0501) // Internet Explorer 5.01
        • #if (_WIN32_IE>=0x0550) // Internet Explorer 5.5
        • #if (_WIN32_IE>=0x0600) // Internet Explorer 6.0
        • #if (_WIN32_IE>=0x0601) // Internet Explorer 6.0 SP1
        • #if (_WIN32_IE>=0x0603) // Internet Explorer 6.0 SP2
        • #if (_WIN32_IE>=0x0700) // Internet Explorer 7.0
        • #if (_WIN32_IE>=0x0800) // Internet Explorer 8.0

注意
プリプロセッサは、未定義の識別子を0として扱うため、#if __GNUC__ >= 3はGCC3以上として使えるが、
GCC2系かどうかを#if __GNUC__ < 3で判定しようとすると、GCCでないものも含まれる。
参考

mimo UM-740のインストール

同梱されているドライバCDは文字化けする上、UM-740が存在せず、UM-750となっており、
しかも、インストールを行うとAvira AntiVirに引っかかる危なさ。
これではまったくもって、信用できないため、Webから新しいドライバを入手してインストールした。

  • ドライバの入手
  • 注意
    グラフィックボードのドライバに依存してるため、グラフィックドライバのバージョンが古いとディスプレイアダプタのエラーを起こす場合がある。
    上手く動作しない場合は、グラフィックスドライバを更新してみること。