Home>History>

2009.10

2009-10-31

2009-10-31T18:22:13+09:00

ps コマンドおよび sysctl でプロセスの環境変数を正常に取得できない件を bug report してみた。

Apple Bug Reporter に以下のように報告した。へたくそな英語で恥ずかしいけど、公開してみる。

Bug Title: A shell command ps -E does not output correct enviroment variables of processes.
-------------------------------------------------------
Summary:
A shell command "ps" with "-E" option can display environment variables of user processes.
The output is not correct. It looks "ps -E" output reflects current environment variables.

Steps to Reproduce:
Run following shell commands in bash.

export newenv=aaa # define a new environment variables.
printenv | grep newenv # confirm "newvar" have been defined.
# output :
# newenv=aaa
ps -p $$ -E | grep newenv # no output


Expected Results:
"ps -p $$ -E" should output environment variables including "newenv".

Notes:
It looks ps -E output a snapshot of environment variables when a process is launched.

そしたら、以下のようにいつもと同じ返答があった。

After further investigation it has been determined that this is a known issue, which is currently being investigated by engineering.

bug report しても、いつもこんな返事しかこない。分かっているならとっとと対処しなさいよ、と bug report するたびに思う。まあ、返事くれるだけでもありがたいか。

2009-10-30

2009-10-30T17:04:24+09:00

トラックバック始めました。

すこし、サイトデザインと機能を変更してみた。

  • コメントを各トピックごとに記入できるようにした。
    • 日付の横に配置したコメント記入リンクは、どのコメントがどのトピックに対応しているのか分かりにくいかと思って。間違えられた方もいらっしゃいましたし。
  • トラックバックに対応してみた。

ちなみに、各トピックへのリンクは、トピックのタイトル行の アイコンから取得できます。容赦なくリンクを張ってください。

2009-10-29

2009-10-29T13:08:08+09:00

Rename It 1.0.5

前面のアプリケーションで開いているファイルの名前を変更する AppleScript です。Finder が最前面のアプリケーションの場合は Finder で選択されている項目の名前を変更します。

ファイル名は重要です。内容を表す名前にしておかないとと後で見つけるのが大変になってしまいます。検索する際にも不便です。たとえば、何らかのファイルを編集していて、ファイル名を変更したくなったとしましょう。すると、

  1. ファイルを保存
  2. ファイルを閉じる
  3. Finder でファイル名を変更
  4. 再度、開く

という手順を踏むかと思いますが、めんどくさいですね。Rename It はこのプロセスを自動化します。

2009-10-29T10:44:43+09:00

LaunchBar を購入した

頂いた寄付の使用報告です。

以前は、Quicksilver を愛用していたけど、今後のメンテナンスは望みが薄いので仕様がなく乗り換えることにしました。一時は Spotlight メニューだけで生きていけるかと思ったけどやっぱいろいろ物足りない。

Quicksilver の凋落を見て思うに、やっぱソースコードを公開したからといって、どっかの誰かがなんとかしてくれるというのは、つくづく考えが甘いのですね。一瞬、自分も開発に参加しようかと思ったけど、お金出せば LaunchBar が手に入るし、自分のソフトの開発をしたい。

実際、自分もソフトのソースは全部公開しているけど、ソースコードレベルでフィードバックくれるのは極めて少ない。一世を風靡した Quicksilver でさえ、そのソースにコミットする人は非常に少ないのだから、自分ごときのコードにコミットしてくれるのは望むべくも無い。さらに、自分自身も、他のソフトのコードにコミットすることは極めて少ないです(無い訳じゃないですよ)。なんでって、自分のコードをいじるので忙しいから。

2009-10-28

2009-10-28T17:47:29+09:00

InsertionLocator 1.2.6

Finder で選択されている場所を取得する AppleScript モジュールです。

Finder の insertion location プロパティは、常に Finder ウィンドウのトップレベルを意味します。選択されているフォルダやリスト表示で表示されているサブフォルダを取得したい場合もあるでしょう。InsertionLocator はそれらを取得することができます。そして、アプリケーションにあわせて細かい振る舞いをカスタマイズすることができます。

2009-10-27

2009-10-27T23:17:21+09:00

Transmission に寄付した。

頂いた寄付の使用報告です。

2009-10-27T14:19:04+09:00

FileClipper, Rename It, Trash It のバグ

既知のバグをご報告します。もちろん、直してアップデートするつもりなんだけど、そんなにすぐにはできないので。もし、困っている人がいましたらご報告ください。優先してアップデートします。

  • FileClipper
    • Finder でフローティングウインドウ(表示オプションとか)を表示しているとエラーが発せすることがあります。
  • Rename It, Trash It
    • Finder の環境設定で「すべてのファイル拡張子を表示」を ON にして、Finder が前面にある状態で起動するとエラーが起きます。

2009-10-26

2009-10-26T17:39:12+09:00

AppleScriptHTML 2.1

AppleScriptHTML はAppleScript のソ−スコードを、スタイルを再現する HTML に変換するアプリケーションです。

  • Mac OS X 10.6 に対応しました。
  • 生成するスタイルシートのクラス名を自由に設定できるようになりました。

誰か、カスタムアイコンを作っていただけないでしょうか。よろしくお願いします。

2009-10-25

2009-10-25T00:18:03+09:00

任意のユーザープロセスの環境変数の取得に挫折した話。

Open in Terminal で、ターミナルで起動しているシェルの環境変数 PWD を取得して working directory を確認し、同じ directory のターミナルがあったら新たにターミナルを開かずに、そのターミナルを前面に持ってくるという機能の追加を夢見ている。今のバージョンではターミナルタイトルに設定された3階層分のパスからターミナルの working directory を判断している。実際の所困ったことはないのだけど、原理的に不完全な仕組みです。

先日、ps コマンドの -E オプションを使用すると、任意のユーザープロセスの環境変数を調べられることを発見したので、これでできるじゃん!!と喜んでいたところでした。

Darwin の ps コマンドのソースコードを参考に、sysctl というシステムコールを駆使して任意のユーザプロセスの環境変数が取得できるようになりました・・・でも、値がおかしい。最初は、親プロセスの環境変数が取得されていて ps コマンド(及びそのソースコード)のバグだ!!と思ったけど、そうじゃない。

たとえば、一度子プロセスを起動し、親プロセスに戻って何か環境変数を変更してみても、その子プロセスの環境変数としてえられてる値は変化しない。あり得る解釈は、そのユーザープロセスの起動時に親プロセスから引き継いだ環境変数のスナップショットで、それらの値が現在どうなっているかは取得できないようです。

従って、ps コマンドの -E オプションはあんまり役に立ちそうにないですね。

無念。誰か、ユーザープロセスの working directory を外部から取得する方法を教えてください。

2009-10-24

2009-10-24T01:09:14+09:00

google AdSense を使ってみることにした。

正直、目立つ場所に広告を入れるのはかなり不本意です。見た目がごちゃごちゃするからね。

寄付をいただいてモチベーションを維持していくことを夢見ていたけど、到底力がおよばない。

僕自身、広告をクリックすることなどほとんどなく、有意な身入りが得られるか疑問なのだけど、何はともあれ試してみることにした。

2009-10-22

2009-10-22T13:00:38+09:00

AppleScriptHTML 2.0.8b2

AppleScriptHTML はAppleScript のソ−スコードを、スタイルを再現する HTML に変換するアプリケーションです。

生成するスタイルシートのクラス名を自由に設定できるようになりました。

予定していた改造は全部済みました。あとはローカライズしてマニュアル描いてから正式公開。あと、動作レポートを頂けると助かります。

でも、一つ足りないものが・・・・どなたか、カスタムアイコンをお願いします。

2009-10-21

2009-10-21T23:47:19+09:00

URL Escape 1.3/1.2.2 のダウンロードパッケージの差し替え

いろいろ不手際があったので、パッケージを差し替えました。

Marcus Jarrett さん、ご連絡いただきありがとうございました。

2009-10-20

2009-10-20T22:13:36+09:00

FrontAccess 1.1

最前面のアプリケーションの取得およびそのアプリケーションで開いている、最前面の書類のファイル参照を取得するモジュールです。

GUI Scripting を利用して、以下のことを簡単にできるようにします。

  • 最前面のアプリケーションのさまざまな情報の取得
  • 最前面のアプリケーションで開かれている最前面の書類のファイル参照の取得
  • 最前面のアプリケーションで開かれている最前面の書類を保存して閉じること

特定のアプリケーションに依存せず、現在注目しているファイルを処理するスクリプトの作成に役に立ちます。

2009-10-20T17:30:32+09:00

TerminalControl 1.2 のパッケージを入れ替え

たぶん、10/17 22:50 ごろから TerminalControl 1.2 のダウンロードパッケージがおかしなものとすり替わってしまっていました。ちゃんとしたものにパッケージを入れ替えました。

折角ダウンロードしたのに、リンクファイルだけしか入っていないということでしたら、もう一度ダウンロードしてください。お手数かけて、誠に申し訳ありません。

ムーミンさん、お知らせ頂いて、誠にありがとうございます。

2009-10-20T08:33:30+09:00

AppleScriptHTML 2.0.8b1

AppleScriptHTML はAppleScript のソ−スコードを、スタイルを再現する HTML に変換するアプリケーションです。

Snow Leopard で動かなくなっていたけど、動くようにしたつもりです。このベータ版はMac OS X 10.5 以降で動作します。

Snow Leopard で動かなくなった原因は次の二つ。

  • スクリプトエディタの名前が AppleScript エディタに変わった。
    • アプリケーション名に依存している部分は bundle identifer に依存するように変更。
  • AppleScript ソースコードのフォーマッティングスタイルがバカみたいに細分化された。
    • 使っていた API が deprecated になっており、スタイルの増加に対応できなかった。
      • 新しい API を使うようにした。そのかわり、Mac OS X 10.4 では動かなくなります。
    • スタイルの種類/数を決め打ちして coding していた。
      • スタイルの数が増減しても対応できるように変更。

さて、とりあえず Snow Leopard での動作に支障はなくなったはずだけど、まだ未完成。ソースコードのフォーマッティングスタイルが細分化されてしまったので、従来と互換性のある CSS の生成は望むべくも無い。ユーザー側で良きにはかれるように、各フォーマッティングスタイルに対する CSS のクラス名を自由に設定できるようにしたい。

誰か励ましてください。

2009-10-19

2009-10-19T14:01:06+09:00

Open in Terminal 1.6 の download リンクの修正

先ほどまで、Open in Terminal のページからダウンドードできるのが version 1.5.1 でした。

もし、昨日から今までに download しくださった方がいらっしゃいましたら、再度 download していただけませんでしょうか。よろしくお願いします。

2009-10-19T10:23:06+09:00

GUIScriptingChecker 1.1

GUI Scripting が使用可能かどうか調べる AppleScript モジュールです。GUI Scripting を使ったスクリプトの最初で使います。

GUI Scripting が使用不可の場合は、GUI Scripting を ON にする許可を求めます。

2009-10-18

2009-10-18T22:44:50+09:00

Open in Terminal 1.6

最前面のコンテキストに対応した working directory をターミナルで開きます。

  • 最前面のアプリケーションが Finder である場合、Finder で選択されている場所を working directory としたターミナルを開きます。
  • 最前面に何らかのファイルを開いているアプリケーションがある場合、そのファイルがある場所を working directory としたファイルを開きます。

Mac OS X 10.6 に対応しました。

wakaba さんのバグ報告/動作テストに大変助けられました。改めて、お礼を言いたいと思います。

さて、Open in Terminal の機能の一つとして、同じ working directory のターミナルが存在したら、新しいターミナルを開かずに、そのターミナルを前面に持ってきます。ターミナルの working directory の判定は、ターミナルのタイトルで判断します。Open in Terminal はターミナルを開く時に working directory の3階層分をタイトルに設定しますが、その3階層分のタイトルだけでターミナルの working directory を判断します。

cd したらタイトルも追従させなければいけませんが、そのような用途には SmartTitle をご使用ください。

ところで、タイトルに設定された3階層分のパスだけで working directory を判断するというのは乱暴ですね。常々、任意のユーザープロセスの working directory もしくは環境変数を取得できないかと思っていました。先日、ps -E でできちゃうことを発見し、小躍りしましたが・・・マルチバイト文字列は化けます。でも、とりあえず ps コマンドのソースを見ればやり方が分かることは大きな収穫です。将来、ちゃんとした仕組みを設けたいと思っています。

でも、この辺を深追いするより先に AppleScriptHTML を Snow Leopard に対応させるのが先のような気がします。

2009-10-16

2009-10-16T18:34:22+09:00

HelpBook.osax 1.1/1.0.2

任意のバンドル内の Help Book を ヘルプビューアへ登録、表示を行うスクリプティング機能追加です。

Mac OS X 10.6 に対応しました。

2009-10-16T09:31:50+09:00

URI Escape.osax 1.3/1.2.2

AppleScript で文字列の URI Escape/unescape を行うスクリプティング機能追加です。

Mac OS X 10.6 に完全対応しました。そのため、Mac OS X 10.5 用と Mac OS X 10.6 用は別のバンドルになります。

しかしですね。この二つの違いは Info.plist の OSAXHandlers の記述だけ。

2009-10-16T02:22:25+09:00

SmartActivate 1.1/1.0.7

指定したアプリケーションプロセスを、そのアプリケーションで最前面のウィンドウだけを前面に持ってくる形でフロントプロセスに切り替えるスクリプティング機能追加と、コマンドラインツールです。

通常、アプリケーションプロセスをアクティブにすると、アプリケーションすべてのウィンドウは前面にでてきます。例えば、AppleScript から操作対象のウィンドウを表示させるために、 activate イベント等を使うと、そのプロセスのすべてのウィンドウが前面に出て来てしまいます。しかし多くの場合、対象としているウィンドウは1枚だけですから、よけいなウィンドウが前面に出て来て画面を覆い尽くしてしまうのは避けたい物です。SmartActivate はそんな問題を解決します。

Mac OS X 10.6 をフルサポートしました。Mac OS X 10.5 と Mac OS X 10.6 用の SmartActivate.osax は別のバンドルになります。

2009-10-13

2009-10-13T17:57:01+09:00

Open in Terminal 1.5.1

最前面のコンテキストに対応した working directory をターミナルで開くアプリケーションです。

まだ、Snow Leopard 対応じゃないよ。Mac OS X 10.5 向けの(たぶん)最後のメンテナンスリリースです。

2009-10-13T12:20:13+09:00

SmartTitle 2.1.1

ターミナルのウィンドウのタイトルに、シェルの working directory のパスを自動的に表示するコマンドラインツールです。

Mac OS X 10.6 をサポートしました。Mac OS X 10.6 では、TerminalControl 1.2 、Mac OS X 10.5 では、TerminalControl 1.1.1 が必要です。

2009-10-13T12:15:00+09:00

TerminalControl 1.2

TerminalControl はターミナル.app の AppleScript に関するバグ/制限を回避する為のスクリプティング機能追加です。

また、Mac OS X 10.6 に対応しました。

2009-10-13T09:29:26+09:00

SmartActivate 1.0.6

指定したアプリケーションプロセスを、そのアプリケーションで最前面のウィンドウだけを前面に持ってくる形でフロントプロセスに切り替えるスクリプティング機能追加と、コマンドラインツールです。

64 bit をサポートしました。一応、Mac OS X 10.6 でも動くはずです。

2009-10-13T00:28:54+09:00

TerminalControl 1.1.1

TerminalControl はターミナル.app の AppleScript に関するバグ/制限を回避する為のスクリプティング機能追加です。

また、Mac OS X 10.6 には未対応。Mac OS X 10.5 でのバグが見つかったのでアップデート。

2009-10-10

2009-10-11T00:01:12+09:00

Snow Leopard のターミナルの AppleScript に関するバグ

Snow Leopard でターミナル.app の custom title に関するバグが復活している。ターミナル.app が起動していない状態で、次の AppleScript を実行してみると、前面のターミナルのタイトルだけでなく、そのターミナルの設定セットのタイトル設定まで変更されてしまう。

tell application "Terminal"
activate
set term_ref to tab 1 of window 1
set custom title of term_ref to "hey"
end tell

このバグは、Mac OS X 10.5 で導入された。Mac OS X 10.5.7 で修正されたのだけど Mac OS X 10.6 で復活してしまっているようだ。

このバグを回避する為に、TerminalControl.osax を作った。現在、Mac OS X 10.6 でも使えるように鋭意修正中。

ちなみに、次のように do script でウインドウを開くと設定セットのタイトル設定が変更されてしまうことはない。なんでだろう。

tell application "Terminal"
set term_ref to do script "ls"
set custom title of term_ref to "yo"
end tell

これで、バグが回避できるかもと思うかもしれないけど、そうはいかない。このスクリプトをターミナル.appが起動していない状態で実行すると、ターミナルウインドウが2枚開かれてしまう。1枚に制限したい。

TerminalControl.osax に依存している/依存する予定のアプリケーションは、Open in TerminalSmartTitleTeX Tools for miUnixScriptTools for mi など多数。要するに、これらは Snow Leopard 未対応ということだ。

悩ましいのは、Mac OS X 10.6 に対応すると、Mac OS X 10.5 と Mac OS X 10.6 の両方に対応できなさそうなこと。Info.plist の OSAXHandlers が互換性の無い形で拡張されているからだ。

Snow Leopard の対応に向けて、頑張っています。

2009-10-08

2009-10-08T11:13:26+09:00

URI Escape 1.2.1

「%E3%82%82%E3%81%97%E3%82%82%E3%81%97.png」みたいな文字列を見たことはないでしょうか?URI(URL)には 決められた ascii 文字しか使ってはいけないらしく、URI 中に 2 バイト文字など決められた文字からはずれる部分は「% + 16進数で表現される文字コード」というように変換(パーセントエスケープ)されます。この、パーセントエスケープ、およびその逆変換を行うスクリプティング機能追加です。

64 bit をサポートしました。Snow Leopard でのテストはまだしていないけど(注文したけどまだ届いていない)、動くはず。

2009-10-07

2009-10-07T09:11:52+09:00

Open in Terminal 1.5 は Snow Leopard で問題があるらしい。

wakaba さんよりご報告いただきました。

残念ながら、Open in Terminal は Snow Leopard ではエラーが起きることがあるそうです。Finder が前面にある時に起動するとエラーが発生するようです。一方、サービスメニューなどはちゃんと動くそうです。

当てずっぽうで対処できなくもないけど、やっぱり Snow Leopard の開発環境をどうにかしようと思う今日この頃です。

2009-10-06

2009-10-06T17:46:50+09:00

Open in Terminal 1.5

最前面のコンテキストに対応した working directory をターミナルで開きます。

  • 最前面のアプリケーションが Finder である場合、Finder で選択されている場所を working directory としたターミナルを開きます。
  • 最前面に何らかのファイルを開いているアプリケーションがある場合、そのファイルがある場所を working directory としたファイルを開きます。

変更点は、

  • アプリケーションバンドル化
  • スクリプティング機能追加のインストールを不要にした。
  • サービスメニューに対応。
  • Sparkle フレームワークによる自動アップデート機能。

また、うれしいことに wakaba さんが非常に美しいアイコンを作ってくれました。どーん。

気が効いていることに、32 pixel のアイコンは、Finder ツールバーに登録した時に違和感が無いように、

となっています。

ところで、Open in Terminal は、SmartTitle と一緒に使うとうれしいことがあるのだけど、SmartTitle は Snow Leopard では、動かないかも。でも、何の報告も無いのでユーザーはいないという悲しい現実を思い知らされてしまいます。もっとも、Snow Leopard で SmartTitle なぞいらないという状況になるのが一番いいのだけど。

Open in Terminal は Snow Leopard でも動くでしょう。

2009-10-02

2009-10-02T22:37:34+09:00

次の Open in Terminal

現在、Open in Terminal の大きなアップデートを開発している。ちなみに、Open in Terminal は Finder で選択されている場所を working directory としたターミナルを開く AppleScript です。

似たようなソフトはいくらかあるけど、次のような機能は Open in Terminal だけでしょう。

  • 書類を開いているアプリケーションが最前面にある場合、その書類があるフォルダを woking directory としたターミナルを開きます。
    • Finder に選択されている場所だけじゃなく、現在のコンテキストに合わせて賢く振る舞うのだ。
  • 同じ working directory のターミナルがあったら、新しいターミナルを開かずに、既存のウインドウを前面に持ってくる。同じ working directory のターミナルがいくつも開かれるのは無駄でしょう?
    • 仕組みは、ウィンドウのタイトルにパスの3階層分を設定し、3階層分のパスが一致したら、同じ working directory だと判断して、新しいターミナルを開かず、そのターミナルを前面に持ってくる。
    • 当然、シェルで cd したら working directory も変わる訳で、ターミナルタイトルも追随させなければならない。そんな用途に SmartTitle をご用意しています。
    • 残念ながら、パスの3階層分だけで判断しているので、原理的に完全じゃない。
    • 任意のユーザープロセスの working directory もしくは環境変数を取得することができればいいのだけど、sysctl などを調べる限りでは、できないっぽい。
    • PowerPC Mac では、kvm_getenvv が使えて、できたみたい。linux でもできるみたい。
    • でも、x86 Mac ではやり方が見つけられんのだ。誰か教えて。

次の Open in Terminal の機能強化ポイントは・・・

  • アプリケーションバンドル化
    • スクリプティング機能追加をインストールする必要がなくなります。
  • サービスメニューの追加
    • Snow Leopard でコンテキストメニューから実行できるようになるでしょう。
    • Dock、Finder ツールバー、Sportlight メニュー、アプリケーションアイコンへのDrap & Dropも含めて、 ありとあらゆる方法で起動できるようになります。
    • つまり、とても柔軟に使える訳だ。
  • Sparkle Framework を使った、自動アップデート。

の予定。もし、ご支持いただけるなら、誰か励ましてください。