2012-01-29

Hauptwerk で遊んでみるなど。

パイプオルガンの音源に Hauptwerk というものがあるのですが、こいつをえっちらおっちらダウンロードして、自分の環境で使って鳴らす方法を確認していました。そのために即興的に打ち込んだものを。
明らかにノイズが聞こえます。どうしたものか。
ノイズはペダルがピアニッシモになってたっぽく、それをノーマライズしたから当然というポカ

2012-01-28

Lunar Eclipse

去年の 12 月だっけかに月食があったと思うのだけど、そのときにコード進行と曲全体の構成だけ決めて放置していたのがあったので適当にメロディつけてみた。
ベタ打ちなのはいつも通り。
ひとつめのテーマが嬰ト短調、ふたつめのテーマが嬰ハ長調、これらを適当に繰り返したあと、ニ長調の間奏っぽいものを挟んで、ふたつめのテーマを変イ長調で、最後にひとつめのテーマをイ短調で再現して終わり。

2012-01-22

大量のファイルを Windows ファイル共有先からコピーするとき

エクスプローラーからファイルをコピーしようとすると、まずはじめにファイルをスキャンして容量をチェックするということをやり始めるので、ファイル数が数千から数万個以上あるようなときには、無駄な時間ばかりかかる。
どうせこっちは先に容量を調べているのでコピー可能なことはわかっている。
まあなんというか Windows 特有のお節介というやつなので、そのお節介を焼かせなければいいのである。そういうときは xcopy なりを使えばいいのだけど、Vista 以降はもっと便利な robocopy というツールがある。

his-pc という別の PCの共有名 docs のファイル群をツリーを維持してまるまるコピーするには
  • robocopy \\his-pc\docs .\ /mir /r:10 /w:1
などとすればよい。オプションが最後尾につくのが *nix 使いからするとものすごく気持ち悪いがまあそれはさておき。
このコマンドによって his-pc の共有名 docs からカレントディレクトリに、その中身のファイル郡がそのままコピーされる。厳密にいうと /mir オプションによってミラーリングをするので、コピー先にファイルがあるとコピー元と同期されたり削除されたりする。
ファイルのコピーの失敗にはあらゆる原因が考えられる。たとえばアクセス権がなかったとか、ネットワークが一時的に不調だったとか、そういう時に robocopy はご丁寧にリトライをやってくれるのだけど、デフォルトでは 1 ファイルにつき 30 秒待機したり 100 万回やりなおしたりするので、 /r や /w スイッチで指定してやる。r はリトライの回数、w が待機の秒数だ。

2012-01-21

Windows における chmod とか chown

のようなツールってなんだろな、という話。
chmod にあたるのは icacls で、chown のようなことは takeown でできるようです、うーん、せっかく GUI ベースの OS なのになんでこう大量のファイルに対する処理を GUI でできるようにしてくれないのかと。
それはさておき、以下、ものすごくいい加減な記述になりますが、ファイルの所有者が me で、現在のユーザが me だったとすると:
  • icacls hoge /grant me:F が chmod u+rwx hoge
  • icacls hoge /grant me:F が chmod -R u+rwx hoge
みたいな感じになります、気分的には。
さらに、以下いい加減な記述が続きますが、
  • icacls hoge /deny me:WD が chmod u-w hoge
みたいな感じです。icacls では書き込みと削除権を明示的に否定していることになります。
さて、takeown は所有権の獲得なんですが、
  • takeown /U me /F hoge が chown me hoge
  • takeown /U me /F hoge /R が chown -R me hoge
のようなイメージです。あくまでイメージで厳密にはところどころ違います。

2012-01-10

GTK# を Visual Studio から使う

ということをしようとしているのでちょっとメモ。 Gtk 名前空間のクラス群は IDE から references に gtk-sharp.dll を追加すれば使える。atk-sharp.dll, glib-sharp.dll もまた依存しているので一緒に追加する必要がある。
using Gtk;

class Program
{
    public static void Main(string[] args)
    {
        Application.Init();

        var window = new Window("GTK# on Visual Studio");
        window.DeleteEvent += (sender, e) => Application.Quit();

        var box = new HBox(true, 0);
        box.WidthRequest = 320;
        box.HeightRequest = 240;

        window.Add(box);
        window.ShowAll();
        
        Application.Run();
    }
}
出力の設定は Windows アプリケーションにしておくとコンソールがでない。まあこの辺は当然。
それはともかく mono のライブラリのクラス名とかその他命名規則が .NET からすると異質で気持ちが悪い。イベントは例えば Deleted とか Deleting だよねという。