2010年6月20日日曜日

Automator アクションでの子プロセスの扱い

Automator のアクションで子プロセスを走らせたとき、子プロセスを管理するのはアクション側の責任になります。Automator のワークフローはユーザの操作によって停止することがありますが、その場合、子プロセスを終了させるのは、アクションの実装者の責任です。

AppleScriptObjC で自作アクションを書けますが、ナイーブに do shell script を使って子プロセスを起動させると、停止させる術がありません。NSTask を使って自分で管理するのが良さそうです。

ユーザの停止操作によって、AMAction から継承した stop メソッドが呼ばれますので、そこで動いている子プロセスを停止させます。テンプレートとしては、こんな感じでしょうか。

script my_Automator_Action

  property parent : class "AMBundleAction"
  property NSTask : class "NSTask"
  property NSFileHandle : class "NSFileHandle"
  property task : missing value
 
  -- @override
  on runWithInput_fromAction_error_(input, anAction, errorRef)
    ...
    set command to POSIX Path of "..."
    set args to {}
    set the end of args to "argument 1"
    set the end of args to "argument 2"
    ...
    my runExternalTask(command, args)
    ...
  end runWithInput_fromAction_error_

  -- @override
  on |stop|()
    if task is not missing value then
      task's terminate()
    end if
  end |stop|
 
  -- Instead of 'do shell script', use this method to prepare for abortion by user operations.
  on runExternalTask(command, args)
    set nulldev to NSFileHandle's fileHandleWithNullDevice()
    set task to (NSTask's alloc)'s init()
    task's setLaunchPath_(command)
    task's setArguments_(args)
    task's setStandardInput_(nulldev)
    task's setStandardOutput_(nulldev)
    task's setStandardError_(nulldev)
    task's |launch|()
    task's waitUntilExit()
    task's autorelease()
    set task to missing value
  end runExternalTask

end script

気付いた点をいくつか。

  • NSTask の setArguments: は NSArray を受け取ることになっていますが、以下のようにAppleScript の文字列のリストをそのまま渡しても問題ないようです。ただし、リストの中に数値などが入っていた場合、自動的に文字列に変換してくれず、エラーになります。
  • 標準出力と標準エラー出力を /dev/null へつないでおかないと、コンソールに全部出てしまいます。
  • do shell script は一旦シェルを経由するので、リダイレクトやパイプの指定ができます。同様のことを行うには、NSPipe や NSFileHandle 等を使って自力でやるか、一旦シェルを呼び出すようにします。
  • do shell script は標準出力の内容を戻り値として取得できますが、NSPipe を使って自力で取得する必要があります。

iPadで仕事をしてみる

セミナーに参加する機会があったので、ノートをとるのにiPadを使用してみました。

iPadの標準メモアプリを縦位置で使いました。縦位置ではキーボードがやや狭いので、使いにくいかと思ったのですが、特にストレスなく使えました。タッチパネルに指で触れるだけなので、キータイプの音がしないので、静かな会場ではよいと思います。机の上に iPad をべたっと置いて使うと、暗い会場では下から顔が液晶バックライトで照らされる格好になるので、もしかすると異様な光景になっているかもしれません。

日本語の変換精度が悪く、iWork などのレビューでも散々に書かれています (iWork は全然関係ないですが…) 。iOS 4 ではユーザ辞書登録機能が追加されるなどのロードマップが示されているので、今後、改善されていくものと思います。

2010年6月18日金曜日

VLC は諦めて HandBreak にします

しばらく前に、VideoLAN、OSX版VLCプロジェクト終了の危機 - 開発者不足が原因と報じられていましたが、いよいよこれが現実のものになったようです。VLC 1.0.6 がリリースされていますが、Mac OS X 版のバイナリは一向に公開されません。

VLC は巨大なソフトウェアで、ソースコードから自分で make するのは途方もなく大変です。正直、そこまでやる元気はないです。

また、私が使用していた VLC 1.0.3 から 1.0.5 までMPEG4-AAC エンコーダのバグ (※) で、音が割れるという障害が発生していましたが、これも一向に修正される気配がありません。

※ 同一の .ts ファイルから MPEG2 Video + MPEG Audio の設定で MPEG2 プログラムストリームを生成したときは、音は割れませんでした。

生 .ts を保存し続けるには HDD の容量が厳しくなってきたので、これからはHandBreak というソフトでエンコードすることにします。日本語版もあります。コマンドライン版も配布されているので、こちらを使えば Automator を使ってエンコードできます。

HandBreadkCLI は /usr/local/bin にインストールされているものと仮定します。以下のようなサービスを Automator で作って、「iPhone 用にエンコード」とでも名前を付けて保存しておきます。

以下はコピペ用のコードです。お好みで、ビットレートをいじるなり、2パス解析をやらせるなりしてください。

HANDBRAKE=/usr/local/bin/HandBrakeCLI
SIZE='--width 480 --height 272'
VIDEO='--format m4v --vb 896'
AUDIO='--ab 128 --arate 48'
FILTER='--deinterlace slow'
ENCODER='--encoder x264 --aencoder faac'
X264_OPTS="--x264opts 'level=30:cabac=0:ref=2:mixed-refs=1:analyse=all:me=umh:no-fast-pskip=1'"

while [ $# -gt 0 ] ;
do
    FN=`basename "$1" .mpg`.m4v
    DIR=`dirname "$1"`
    cd "$DIR"
    $HANDBRAKE $ENCODER $VIDEO $X264_OPTS $SIZE $AUDIO $FILTER -i "$1" -o "$FN" \
        > /dev/null 2> /dev/null
    shift
done

2010年6月13日日曜日

iPad 在庫あったー!

品薄が続いているiPadですが、幸運にも予約なしで購入することができました。16GB WiFiモデルです。

使い方については、まだこれといったアイデアはないのですが、一応、持ち歩くことを想定しています。結局、iPhoneも同時に持ち歩くので、音楽やムービーはiPhoneに任せることにしたので、iPadの容量は16GBで十分と判断しています。MacBook Airを持ち歩かないで一週間くらい過ごす、というのもやってみたいと思います。

地鎮祭として、例によってパワーサポートのアンチグレアフィルムを貼り、保護ケースを付けました。ケースは BELKIN の Grip Vue クリアを選びました。背面と周辺部分を覆うタイプのものです。Apple 純正ケースのような、二つ折りのタイプのものも考えたのですが、横向きでは使いにくいのではないか、という懸念が払拭できず、やめました。

まだ必要なアプリが出揃ってない感じです。とりあえず、iOS 4 のリリースを待ちたいと思います。

2010年6月9日水曜日

WWDC 2010 の感想

Apple の WWDC 2010 が開催中です。大方の予想通り iPhone 4 が発表されました。これまで iPhone の弱点と言われていた、マルチタスク機能、液晶解像度、電池の持ちなどを改良し、より魅力的な端末になりました。一番驚いたのは、値段です。このスペックで 32GB モデルが $299 は安い。ガラパゴスケータイ陣営の皆様はどうするんでしょう、本当に。

Safari もアップデートされました。Safari 5 になって、より軽くなりました。意外なことに Flash アプリも軽くなりました。Flash プラグインは 10.0r42 のままなので、Safari 側で何かがんばったのでしょう。それでも処理や内容に比べて CPU を占有しすぎの感は拭えませんが…。

一番ショックだったのは Mac 本体や次期 Mac OS X について、何のアナウンスもなかったことです。新型 MacBook Air を期待していたのに…。

以上、WWDC 2010 に対する感想でした。

2010年5月30日日曜日

SONY デジタル一眼 NEX-3/NEX-5

世界最小、最軽量、フルハイビジョン動画も撮れるデジタル一眼。というフレコミのミラーレスの一眼レフ?です。6月3日発売予定、久しぶりに物欲を刺激されるカメラです。
http://www.sony.jp/ichigan-e/products/NEX-5D/

機動力

NEX-5D は 16-55mm のズームレンズ付き (35mm換算) ですので、通常のスナップ撮り中心なら十分です。メモリーカードとバッテリ装着状態で、本体が 287g、ズームレンズが 194g、合計 481g です。確かに軽い。今使っている EOS Kiss X2 と比べても半分くらいです。本体が激薄なので、これなら持ち運べるという感じがします。

27-300mm のズームレンズ (35mm換算) も登場予定です。こちらは 524g で本体と合わせて 811g です。このズームレンズ 1本があれば、常用範囲を十分カバーできます。今、Canon 製のほぼ同スペックのレンズを持っていますが、レンズ自体の重さはそう変わりません。

光学ファインダー

標準では光学ファインダーがありません。液晶ファインダーではピントがどこに合っているかわかりにくいですし、ワンテンポ遅れてしまう液晶ファインダーで流し撮りをするのは無理でしょう。

300mm のズームレンズはかなり重たいですが、光学ファインダーは両手と目の 3点支持になるから、この重さでもギリギリ手持ちで撮れるのです。光学ファインダーはデジカメであっても重要な機能です。

NEX-5D では、光学ファインダーが別売りで登場するようです。これを買うと二眼レフのように使えるという理解でいいのでしょうか。光学ファインダーは 34g とさほど重くないです。

対象ユーザ

ホワイトバランス、ISO感度などの設定ですが、ややストレスを感じる UI となっているようです※。対象ユーザーはコンデジでは不満だけど、一眼レフはちょっと、カメラにおまかせで撮る人、を対象にしているようです。

私は自分で設定したいので、少し不安が残ります。これは実際に触ってみないと何とも言えません。

他の懸念としては、手ブレ補正機能があります。Canon の手ブレ補正機能はとても優秀で、流し撮りの時はそれを検知して、流れていない方向だけ手ブレ補正してくれるます。こうしたサポートがなくなって、どれくらい使用に耐えるのか、と思いますが、そもそも対象ユーザーとしては想定されていない使い方なのでしょう。ただ、色々な懸念を差し引いても、常用カメラとしての魅力を感じます。

ミラーレスα、ソニー「NEX」を丸裸にする(後編) ── ITmedia
  ミラーレスα、ソニー「NEX」を丸裸にする(後編) ── ITmedia

2010年4月16日金曜日

実験中の電波は出さないで

WiFi で使われている 2.4GHz 帯は規制は緩いですが、

研究施設だから実験をするのは仕方ないですが、

変な電波を出さないでいただけないでしょうか。マルウェアを仕込まれたかと疑ってしまいました…。

不幸なことに、Touch Diamond & WiFiSnap が調子悪かったという偶然と重なったため、原因を特定するまでに時間がかかってしまいました。調子悪い原因も、実験中の電波が出ていたせいなのかもしれませんね…。