本日の成果

本日の成果を記録していきます。

カテゴリー: Computer

コンピュータ関係

  • 本日の成果:GetSpecialFolderPath.bat を作った

      私はWindowsのコマンドプロンプトのバッチファイルをかなりヘビーに使い倒してる方だと思います。バッチファイルは私はMSX-DOSの頃から使ってました。MSX-DOSでは単に順番にコマンドを実行する(たまに一時停止する)くらいの機能しかないのですが、MS-DOSでは環境変数やERRORLEVELを使った制御もでき、Windows NTからはcommand.comでなくcmd.exeになってまた大幅に拡張され、その後Windowsのバージョンアップに伴って少しづつ機能が増えたり仕様変更されたりしているようです。

      ただ、そういう屋上屋の歴史の結果として例によって仕様が破綻してまして、やや複雑なことをやろうとすると仕様なのかバグなのか判らない謎の挙動を示したりします。個人的にはバッチファイルはかなり上手く行っていない方ではないかと、ややこしいバッチファイルを作る度に思います。UNIXと違ってプログラムのパラメータは1個の文字列として渡されるだけで、切り分けはプログラム側で行わなければならない、ということがさらに話をややこしくしていると思います。
      まぁその辺も踏まえて出してきたのがWindows Script HostとかWindows PowerShellだと思うんですが、それらは古い環境だと入ってなかったりするんですよね・・・。

      話が逸れました。バッチファイルを作る話でした。バッチファイル内では環境変数でWindowsのシステムディレクトリとかProgram Filesとかの位置を知ることができますが、その類の全部環境変数に入ってるわけではないので、例えばスタートメニューやSendToの位置は判らないのです。そして悪いことにそれらの位置はWindowsのバージョンによって異なるうえに、その手のツールを使えば任意のフォルダに設定できたりするので、バッチファイルからそれらをアクセスしようとすると、本来やりたい処理よりも操作する先のディレクトリを決めることの方が大変なくらいでした。
      しょうがないのでその辺を楽にするバッチファイルを作りました。バッチファイルなのでWindows 2000以降ぐらいなら多分どこでも動きます! しかし、中身は実はRubyスクリプトなので、パスの通ったディレクトリにruby.exeが必要です!! (ダメじゃん)

      GetSpecialFolderPath.zip

      バッチファイルなので、他のバッチファイルから呼び出すときは、callコマンドと組み合わせて使います。

    call GetSpecialFolderPath CSIDL_STARTMENU

    などとすると、スタートメニューのパスを標準出力に出力します。

    call GetSpecialFolderPath CSIDL_STARTMENU STARTMENU

    などと、2つ目のパラメータを与えると、環境変数(この例では%STARTMENU%)に結果を格納します。

  • 本日の成果:ZumoDrive をやめて Dropbox にした

      複数マシンで同期を取るストレージサービスとして、私はこれまでZumoDriveを使っていたのですが、あまり有効に使えていませんでした。というのは、私のニーズとこのサービスの特徴があまりマッチしていなかったということだと思うのですが、ZumoDriveが作成した仮想ドライブは、その中のファイルを読み書きしようとしたときに初めてクラウドから取ってくる(その際キャッシュにあれば再利用する)という仕組みなので、レスポンスが遅く、しかもその時にネットに接続していないとダメということになるのです。もちろんこれは、全ファイルをPC上にキャッシュしておく必要がなく、実ドライブよりも大きな仮想ドライブを作成できるという、ZumoDriveの利点の裏返しなので原理上当然なのですが。その他、なんだか書き込んでから他のマシンに反映されるまでの時間が長く感じました。

      そこでZumoDriveをやめて、Dropboxを使うことにしました。DropboxはZumoDriveと逆に、全ファイルをあらかじめ常に最新の状態に保っておくようにしている代わりに、その分それらファイルの容量を各マシンでまるまる消費します。これで単独のドライブにして固定のドライブ文字を割り当てられるとなお良かったのですが、最近はWindowsでも自分のホームディレクトリ以下に何でも置くのが主流なのね・・・。

  • 本日の成果:WinMerge Portable 改造版 v1.03

      昨日、普段使わない環境で、私が改造して公開しているところのWinMerge Portable 改造版を起動したところ、起動時のスプラッシュスクリーンを非表示にしていた筈なのに表示され、しかもそれが消えない(笑)という現象に遭遇しました。これまでそのようなことはなかったので、何が原因なのか判らないのですが、とりあえず対策を施して新版をリリースしました。

  • 本日の成果:AutoHotKeyでポインタ跳び防止した

      会社のPCに、自前のキーボードとマウスを繋いで使っています。情報漏洩防止の観点からは問題ないと思いたい(笑)。ところでこのマウスが、ポインタがたまににピョと飛ぶのです。常に正確に右に512ドット飛ぶのです。故障しているのではないかとも思われますが(ていうか多分そう)、めんどくさいのでそのまま使ってました。大抵は忘れた頃にピョと飛ぶ程度なので。
      でも最近、たまに機嫌が悪いとおそろしい頻度で飛びまくるようになってきたのです。それも仕事が忙しいときほど飛びまくりモードが発動しやすいような気がする(多分気のせい)。作業のリミットが近づいて焦っているときにピョピョピョピョとポインタが飛んで、うっかり違うところをクリックしてしまったりすると、温厚な私でもだんだん怒りがこみあげてきます。ムキー!!

      というわけでそのような状況を改善するソフトはないものかと、探してみると見つかるもので、最近までカーソルリミッタというフリーソフトを使ってました。これはどちらかというとイメージセンサのご乱心を防ぐためのソフトのようで、異常に高速なマウスポインタの動きを検知したら元の場所にポインタを戻してくれるというものです。これのおかげでかなり怒りが治まったものの、このソフトの作者も言うとおり、完全ではありませんでした。まず、「異常に高速」なのを検出するのに、ポインタの過去の座標と現在の座標とを比較するのですが、これが実際に画面に表示されたポインタの座標なので、例えば「画面右端付近で操作をしているところでピョと右に512ドット飛ぼうとしたが、すぐに画面の端にぶつかり、実際には例えば20ドットしか移動しなかった」ような場合、このソフトはこれを20ドットの移動としか認識しないので「異常に高速」とは見なしてくれません。逆に20ドットの移動を「異常に高速」と見なしてもらうように設定変更することもできますが、今度は普通にマウスを素早く移動しただけでも「異常に高速」とされて元の位置に戻されてしまうようになってしまいます。それと、この「異常に高速」だったら「元の位置に戻す」という動作は、一旦マウスポインタが表示された後で行われるので、よく見ると一瞬だけピョとポインタが飛んでいるのが判ってしまうという問題もありました。
      そのようなわけでその辺まで含めて解決してくれるツールは見つけられず、自作するか現状で我慢するかしかないのかと思っていたところに、AutoHotKeyでマウスの動きを監視するスクリプトというのを見つけまして、試してみたところ前述の問題をクリアすることができそうで、これを参考にしてマウスの加速度と かかる重力を逆算して、異常値を検出したらそのメッセージを捨てるスクリプトを作ってみたところ、かなり良好な結果が得られました。もう、今までのストレスが嘘のよう。
      c++でDLL作ってメッセージフックして・・・としなければいけないかと思っていたところが、スクリプト一本で目的を達成してしまいました。AutoHotKey強力ですね。でもお前さん、ホットキーのツールだった筈なのに、何でそんなことまでできちゃうんだい?

  • 本日の成果:むかしのブックマークを整理した

      5年ぐらい前のブックマークフォルダを発見したので、Deliciousにマージしたよ。いろいろと、もう繋がらなくなっているサイトがあって、時代の流れを感じるなぁ。友達の昔の掲示板とか。今ではほとんど名前を聞かなくなったチップセットのメーカーとか。