PaTrash2.0を作る - その7 [プログラミング]
最近、集中できる時間がなくてPaTrash2.0がなかなか進まない。もうちょっとなんだけど、時間が経つと何をしていたのか忘れてしまって、自分のコードを見て思い出すという作業が最初に必要になる。他のみんなはどうしてるのかなあ。普通の人はそんな早く忘れないのかなあ。
今日はバックグラウンドアプリのユーザインターフェイスのためにシステム環境設定を使うことについて。
今日はバックグラウンドアプリのユーザインターフェイスのためにシステム環境設定を使うことについて。
SpaghettiMazeMakerのレビュー [プログラミング]
もうずいぶん前に書いて、すでにすっかり忘れていた曲線迷路生成アプリSpaghettiMazeMakerのレビューをなぜかいまごろ上げてくれた。他所のコピペではなくて、ちゃんと自分でアプリを動かしてコメントをしてくれているので作者としてはうれしい。AdvantagesよりDisadvantagesのポイントのほうが多いのは、まあそれぞれのコメントを見れば納得できる。でも、一番のポイントであるアナログな曲線の迷路を生成する(non-cell based)と言う点にコメントがないのは残念である。その旨コメント追加した。
しかし、まあ、そんなもんだろ。これでも十分ありがたい。
しかし、まあ、そんなもんだろ。これでも十分ありがたい。
実行時にOSのバージョンを調べる7つの方法(PaTrash2.0を作る - その6) [プログラミング]
アプリがどのバージョンのOSで動作しているか知りたいときがある。Mac OS XはAPIの追加削除が激しいのでいろいろなバージョンをサポートしようとすると実行時に知る必要がある。
たとえば、このときのNSFileManagerの簡単メソッドは10.6以降でないと使えない。使えるバージョンならこれを呼んで、使えないバージョンなら拡張子を調べるというふうに分岐させる必要がある。Cocoa/Objective-Cなら、メソッドが定義されているかどうかを実行時に直接調べればいいけど、メソッドの仕様変更がある場合やCore FoundationやCarbonではその手は使えない。
また、アプリによっては古いバージョンでは機能が限定されてしまう場合、ユーザにその旨報告する必要がある。そのとき「あんたのMac OS Xはこれこれなのでなになにの機能が使えません」と表示する必要があるかもしれない。この場合、単にAPIが動作するかどうかではなく、ユーザに理解できる形でOSのバージョンを表示する必要がある。
Mac OS Xのバージョンを調べる方法をまとめてみる。
たとえば、このときのNSFileManagerの簡単メソッドは10.6以降でないと使えない。使えるバージョンならこれを呼んで、使えないバージョンなら拡張子を調べるというふうに分岐させる必要がある。Cocoa/Objective-Cなら、メソッドが定義されているかどうかを実行時に直接調べればいいけど、メソッドの仕様変更がある場合やCore FoundationやCarbonではその手は使えない。
また、アプリによっては古いバージョンでは機能が限定されてしまう場合、ユーザにその旨報告する必要がある。そのとき「あんたのMac OS Xはこれこれなのでなになにの機能が使えません」と表示する必要があるかもしれない。この場合、単にAPIが動作するかどうかではなく、ユーザに理解できる形でOSのバージョンを表示する必要がある。
Mac OS Xのバージョンを調べる方法をまとめてみる。
PaTrash2.0を作る - その5 [プログラミング]
Mac OS XのユーザがFinderでみると普通のファイルなんだけど、プログラミング上はディレクトリに見えるバンドルとパッケージ。前回はこれらを区別する方法が何通りかあることを確認した。
今日は、これらがどういう結果を返すかを調べて、それがそれぞれ微妙に違っているということを示すことにする。
今日は、これらがどういう結果を返すかを調べて、それがそれぞれ微妙に違っているということを示すことにする。
PaTrash2.0を作る - その4 [プログラミング]
間があくとどんどん忘れてしまうので、早く片付けたい。前回はMac OS Xの「バンドル」について調べた。バンドルは実はディレクトリで、いろいろなリソースをひとまとめにしておくための手段だった。これは古いMac OSの「リソースフォーク」の「よいところ」と「わるいところ」を昇華するように、その代替として考えだされたものだと思える。
バンドルはFinderで見るとひとつのファイルとして表示される。
プログラミング上は、NSFileManagerやBSDレイヤではフォルダとバンドル/パッケージの区別はつかない。
では区別したいとき(すなわちFinderと同じ見方をしたいとき)どうすればいいか、というといくつかの方法がある。
バンドルはFinderで見るとひとつのファイルとして表示される。
プログラミング上は、NSFileManagerやBSDレイヤではフォルダとバンドル/パッケージの区別はつかない。
では区別したいとき(すなわちFinderと同じ見方をしたいとき)どうすればいいか、というといくつかの方法がある。
- NSWorkSpaceを使ってUTIを調べる
- NSFileManagerの新しいメソッドを使う
- CoreServicesのFile managerを使う
- ApplicationsServicesのLaunch Serviceを使う
PaTrash2.0を作る - その3 [プログラミング]
普段の日は帰ると晩飯を食べて酒を飲んで寝てしまうだけになってしまったので、あまり進まない。1週間経つと忘れてしまう。前回を思い出すと「dll地獄の話」だった。Mac OS Xではそれを避けるためのメカニズムが考えられている。そのひとつ、バンドルの話。バンドルは自分で使うライブラリやフレームワーク(Windowsななdllファイル)を自分自身の中に格納できる。今日はその構造について。
PaTrash2.0を作る - その2 [プログラミング]
ちょっと完成度が低くて恥ずかしいのでPaTrashの2.0を作ることにした。それほど大変な作業というほどではない。さくっと終わらせてさくっと公開したい。
昨日は、1.0からどこを修正するかをまとめた。ゴミ箱に入った日はちゃんと覚えておくようにして、ゴミ箱の中身のサブディレクトリまでスキャンするためにNSDirectoryEnumeratorというクラスが使えることを確認した。NSDirectoryEnumeratorはNSEnumeratorのサブクラスだけど、「タコツボサブクラス化」の典型のようなクラス。NSEnumeratorとNSFileManagerとを組み合わせれば、メソッドの再帰呼び出しで実装できるだろう、と思える。わざわざFoundationフレームワークの中に含まれているのは、やっぱり効率的な実装がされているのかもしれない。それとも単にFoundationの他のクラスが内部的に使っているからだけかもしれない。まあ、使えるなら文句はない。
今日はそのNSDirectoryEnumeratorの使い方をレビューして、そのあとを続ける。
昨日は、1.0からどこを修正するかをまとめた。ゴミ箱に入った日はちゃんと覚えておくようにして、ゴミ箱の中身のサブディレクトリまでスキャンするためにNSDirectoryEnumeratorというクラスが使えることを確認した。NSDirectoryEnumeratorはNSEnumeratorのサブクラスだけど、「タコツボサブクラス化」の典型のようなクラス。NSEnumeratorとNSFileManagerとを組み合わせれば、メソッドの再帰呼び出しで実装できるだろう、と思える。わざわざFoundationフレームワークの中に含まれているのは、やっぱり効率的な実装がされているのかもしれない。それとも単にFoundationの他のクラスが内部的に使っているからだけかもしれない。まあ、使えるなら文句はない。
今日はそのNSDirectoryEnumeratorの使い方をレビューして、そのあとを続ける。
PaTrash2.0を作る [プログラミング]
先日作ったPaTrashはいちおう動作するものができたのでアップしたけど、僕のアプリとしては完成度がちょっと低いと言わざるを得なかった(もちろん僕の基準において、だけど)。それ以外にも、僕の思い込みのせいで非標準的なコーディングになっている部分もある。
そこでやっぱり、2.0を作ることにしよう。PaTrash1.0とはどういうアプリだったかというと、ゴミ箱の中の指定されたタイプのファイルだけを、一定時間後に選択的にゴミ箱から消去するユーティリティだった。設定用のアプリと実際に消去を実行するヘッドレス(コマンドライン型)のアプリとの組み合わせで動作していた...
そこでやっぱり、2.0を作ることにしよう。PaTrash1.0とはどういうアプリだったかというと、ゴミ箱の中の指定されたタイプのファイルだけを、一定時間後に選択的にゴミ箱から消去するユーティリティだった。設定用のアプリと実際に消去を実行するヘッドレス(コマンドライン型)のアプリとの組み合わせで動作していた...
ゴミ箱監視ユーティリティ - その4 [プログラミング]
ということでできたアプリがこれ。
名前は「PaTrash」。ゴミ箱(Trash)を監視(Patrol)してちょとだけ掃除するので。アイコンは犬がゴミ箱あさりしてるところ。あまり犬に見えない(でもかわいく描けたのでちょっと気に入ってる)。例の「フランダースの犬」のパトラッシュ(そっちはPatrascheという優雅な綴り。発音は同じだけど)とは他人のそら似である。