Jul 20, 2008

RMath

今年1月に書いておきながら、 そのまま忘れて半年放置していた 3D CG 向けの数学関数の拡張ライブラリを公開しておこうと思います。
RMath といいます。
RMath は行列(3x3,4x4)、ベクトル(3要素,4要素)、クォータニオンの各クラスを含んだ拡張ライブラリです。 デバッグ用に同じインタフェースを持った Ruby 実装版も同梱しています(RMath.rb)。
ライセンスは zlib/libpng としました。
リファレンスやサンプルが少ないので、それらの充実が当面の課題ですね。
(2009-12-26 URLを新しいものに修正しました)

Jul 6, 2008

takeown, icacls コマンド

Windows Vista での chown / chmod コマンドに相当するものです。
訳あって C ドライブの Vista (Home Premium) をインストールしなおしたところ、 以前から D ドライブ側に置いていたファイルへのアクセスに支障が出てしまいました。
具体的には:
  • 消せないファイルが多発。
  • Cygwin 系コマンドでの操作が軒並み ``Permission denied'' に。
OS からは別な(しかももう存在しない!)ユーザーの所有物とみなされているのが原因です。
この問題を次のようにして解決してみました。
1. コマンドプロンプトを「管理者として実行」する
``C:\Windows\System32\cmd.exe'' のアイコンを右クリックし、「管理者として実行(A)」で起動。

2. 作業するディレクトリに移動
ここでは ``D:\cygwin'' とします。
C:\Windows\system32>d:

D:\>cd cygwin

D:\cygwin>
3. ファイルの所有権を取得
takeown コマンドを実行します。 ``/f '' がファイル名の指定。``/r'' は再帰的に実行することを指定するものです。
D:\cygwin>takeown /f * /r

成功: ファイル (またはフォルダ): "D:\cygwin\bin" は現在ユーザー "lt140-PC\lt140" によって所有されています。

成功: ファイル (またはフォルダ): "D:\cygwin\cygdrive" は現在ユーザー "lt140-PC\lt140" によって所有されています。

成功: ファイル (またはフォルダ): "D:\cygwin\Cygwin.bat" は現在ユーザー "lt140-PC\lt140" によって所有されています。

成功: ファイル (またはフォルダ): "D:\cygwin\Cygwin.ico" は現在ユーザー "lt140-PC\lt140" によって所有されています。

成功: ファイル (またはフォルダ): "D:\cygwin\dev" は現在ユーザー "lt140-PC\lt140" によって所有されています。

...(以下略)
4. アクセス権を操作
icacls コマンドを実行します。 複雑なオプションを多数受け付ける高機能なコマンドですが、「ユーザーに指定したパス以下のフルコントロールを与える」のであれば ``icacls <パス名> /grant <ユーザー名>:F /t'' だけで終了です。 フルコントロール可能な状態にしたくない場所での実行には注意してください。その場合は ``:F'' とした部分を変更することになります。``icacls /?'' で詳細を確認してください。
D:\cygwin>icacls D:\cygwin /grant lt140:F /t
処理ファイル: D:\cygwin\bin
処理ファイル: D:\cygwin\cygdrive
処理ファイル: D:\cygwin\Cygwin.bat
処理ファイル: D:\cygwin\Cygwin.ico
処理ファイル: D:\cygwin\dev
処理ファイル: D:\cygwin\etc
処理ファイル: D:\cygwin\lib
処理ファイル: D:\cygwin\setup.exe
処理ファイル: D:\cygwin\tmp

...(以下略)
これで無事に読み書きできるようになりました。
…OS は忠実に自分の仕事をこなしているだけなのですが、自分がPCの管理者かつ唯一の利用者であるという状況では正直切ないですね。