2バイト目に ASCII コードがくることを想定していないコンソールアプリなど、標準出力を UTF-8 として使用するコンソールアプリは少なくない。
しかし、PowerShell は標準では UTF-8 の標準出力をそのまま読み取ることができない。
(後述するが、単純な方法はある)
そういった場合でも、.NET Framework を駆使すれば、ちゃんと文字列として取得できる。
2バイト目に ASCII コードがくることを想定していないコンソールアプリなど、標準出力を UTF-8 として使用するコンソールアプリは少なくない。
しかし、PowerShell は標準では UTF-8 の標準出力をそのまま読み取ることができない。
(後述するが、単純な方法はある)
そういった場合でも、.NET Framework を駆使すれば、ちゃんと文字列として取得できる。
DOM level3 に対応したブラウザで使える、 javascript の document.evaluate であれば、XPath ですべてのコメントを抜き出すときに、
var result = document.evaluate("//comment()", document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
等としておけば問題ないが、一部の HTML パーサでは、HTML の DOCTYPE 宣言もコメントとして扱ってしまうものがある。
…と言うより、 "<!" で始まって、">" で終わるものはすべてコメントとして扱ってしまうような場合について。
JavaScriptでは、varによる変数宣言をしていない場合、グローバルオブジェクト(window)のプロパティとして扱われる。
IEでは、htmlのid属性が、このグローバルオブジェクトのプロパティになってしまうらしい。
以下のコードで、「click!」というアラートが出たら、 window.btn01 に button の DomElement が入っているということになる。(Firefox や Chrome 等では、エラーになってなにも表示されないはず)
<button id="btn01" onclick="alert(btn01.innerHTML);">click!</button>
しかも jQuery が有効な状態で、
btn01 = null;
などとやろうとすると、btn01 変数にはすでに button の DOM が入っているのと、IE8とjQueryの相性の問題で、IEではエラーになってしまう。
まぁ、
var btn01 = null;
と、var つけてやるだけでOKだし、そもそもIE9ではエラーにならないので、古いブラウザ使うなってコトでFAでもよい気がしないでもないけどね…
とはいえ、9/1現在、IE8がシェア35%と圧倒的なので無視できないのよねぇ
参考: 日本のバージョン別ブラウザシェアグラフ (StatCounter Global Statsより)
Google Chart Tools の中に、QRコードを動的に生成するAPIがある。
特定のURLにGETリクエストを渡すだけでPNG画像を返してくれるので、非常に便利だ。
続きを読む
Intel Data Migration Software がアンインストールできなくなった根本の原因は、こいつをインストール直後に起動したら、snapman.sys のエラーでブルースクリーンになったせいなのだが、いろいろ試したところ、このツールがRAM Diskと相性が悪いご様子。
Dataram RAMDisk を入れていたのだが、これをアンインストールした後、Intel Data Migration Software を実行したところ、ブルースクリーンにならずうまく実行できた。
久々にブルースクリーンから抜けられなくなって焦った。
使い終わったら、intel data migration software をアンインストールしてから、RAMDisk 入れることをおすすめする。
まぁ、起動時につながってるドライブ走査するから、そんときにRAMDiskがあるとエラーになるんだろう。
インストールに失敗して、Intel Data Migration Software がアンインストールできなくなってしまった。
どうやら、インストールに失敗した上、アンインストーラ用のmsiが登録されなかったようだ。
「プログラムの機能」からアンインストールしようにも、IntelDataMigrationSoftware.msi が見つからないとエラーになる。
続きを読む
Logicool マウスを使うのに、SetPoint 等のマウスツールが欠かせない。
私はサイドキーの手前をダブルクリック、奥をエンターに割り当てるのが好きだ。
ところで、このSetPoint、バージョン5以降は、インストール時にインターネットに繋がっていないとエラーになってしまう。
「インストールを完了することができませんでした。インターネット接続を確認してもう一度実行してください。」
セットアップにオンライン環境が必須とか…
しかも最近のマウスにはインストーラCDすらついていない。
そして最大の問題点は、今時「プロキシに対応していない」と言うことだ。
続きを読む
PowerShellのなにが便利って、.NETアセンブリが読み込めちゃうので、
もう何でもかんでもできてしまうところ。
Windows7から標準で入っているので、業務用ツール作るのに最近よく使う。
それは置いといて…
表題の、引数が配列のメソッドが呼べない件。
2019-06-12 追記:
いつからか不明だが、少なくとも Windows 10 の最近のバージョンでは、 comp.exe に /M その他のファイルを比較するメッセージを表示しない オプションが追加されている。
以下は、 Windows 7 当時の話。
コマンドプロンプトで、2つのファイルまたはファイルセットの内容を比較するコマンド、comp.exe
しかしこのコマンド、終了時にいちいち
「ほかのファイルを比較しますか」
と聞いてきてかなりウザい。
これを表示させないオプションがなぜか存在しないのだ。
特にバッチでループさせ対するときに、毎回毎回停止してしまうので、
すこぶる迷惑なのだが…
で、これを回避する方法だが、 "N"
を自動で入力させるほか無い。
つまるところ、
echo n | comp Data1 Data2
という風に、echoを使って "n"
と改行をパイプしてやれば、めでたくcompでループすることができる。
仕組みがわかればなんてことはないのだが、気づかないとちょっと悩んでしまうところだ。
横幅がぐりぐり変わり、複数行表示可能なエディットコントロールを、文字列にあわせて、高さを調節したい。
DrawText 関数に、 DT_CALCRECT フラグを設定することで、指定した幅に収まる文字列を表示するのに必要な矩形の取得だけをすることができる(描画されない)。
コレを使ってコントロールの高さを計算し直せば実現できる。
上のエディットコントロールを書き換えると、その文字列が下のエディットコントロールに反映され、サイズが変更されるようなサンプルを作った。
ばりばり ATL/WTL 使ったコードだが、基本的に普通にWin32API呼んでも同じようにできる。