Snow Leopard で Dock の使い勝手が良くなったのだけど...

Snow Leopard から Dock の設定(「システム環境設定」にある)で「ウィンドウをアプリケーションアイコンにしまう」という設定が追加されました。従来まではウィンドウをしまうと Dock にずらずらっとウィンドウが並んで格納されていました。これだと Dock がウィンドウで埋められてみっともないことになっていました。

Snow Leopard から追加された「ウィンドウをアプリケーションアイコンにしまう」という設定を有効にすると、ウィンドウが Dock 内にある各アプリケーションに格納されるようになります。これで、Dock がいろんなアプリケーションのウィンドウで埋め尽くされることがなくなって、快適...なはずなのですが、問題はこのようにしてアプリケーションに格納したウィンドウをすべて元に戻したいとき。

ちょっと調べただけなのですが、どうもアプリケーションアイコンに格納したウィンドウ全てを一度で元に戻す方法はないようで...(調査不足かもしれませんが)。

最初のうちはウィンドウを一つずつ手動で元に戻していたのですが...これが、面倒。で、Dock に格納しているウィンドウをすべて元に戻す AppleScript を書く。

Script Editor で開く

tell application id "com.apple.systemevents"
    set front_application to a reference to (processes whose visible is true and frontmost is true)
    if (count front_application) is 0 then return
    set app_id to bundle identifier of (item 1 of front_application)
end tell

tell application id app_id
    try
        set window_list to a reference to (windows whose miniaturized is true)
        if (count window_list) is 0 then return
        set miniaturized of window_list to false
    on error msg number num
        activate
        display dialog (num & ": " & msg) as text with icon 1
    end try
end tell

こういうとき、System Events があると助かります。特定のアプリケーションだけではなく、すべてのアプリケーションを対象に処理を行うことができるから。

最前面にあるアプリケーションに対して実行しますが、アプリケーションによってはエラーがでるかもです。とりあえず、うちでは使えているので無問題。

application id を利用しているので Mac OS X 10.5 以降で利用可能。それ以前の環境では application id を指定している部分を変更すれば、利用できます。

スクリプトメニューなどに入れてご笑味くださいませ。

Google のコマンドラインツールを使ってみる

Google から Google の各種サービスをコマンドラインから操作できるツール(GoogleCL)が出たようで、さっそく試してみました。

とりあえず、インストールした環境などを...。

  • Mac OS X 10.6.4
  • Python 2.6.1(Mac OS X にインストールされているもの)
  • gdata 2.0.10

python や Google Data API は、日常的に利用しているので環境が整っているのだけど、そうでないと Python から利用できる Google Data API(gdata)のライブラリのインストールから始める必要があります。Python が必須ですが、これは Mac OS X に最初から入っているもので構いません。

Python は必要だけど、GoogleCL を利用するために Python の知識はとりあえず必要ありません。Python は GoogleCL が背後で利用しているだけです。

gdata for python のインストール

以前のことなので詳細は忘れてしまいましたが...まず、gdata-python-client - Project Hosting on Google Code から gdata-2.0.10.tar.gz(2010年6月19日現在)をダウンロードします。

gdata を利用するには ElementTree というパッケージが必要なのですが、Mac OS X 10.6 にインストールされている python には既に ElementTree が入っているため、ElementTree をインストールする必要はありません。

以降、Terminal での作業になります。

Terminal を起動し、gdata-2.0.10.tar.gz のある場所に移動します。

$ tar zxvf gdata-2.0.10.tar.gz 
$ cd gdata-2.0.10/
$ sudo python setup.py install

これで Python 用の gdata ライブラリがインストールされます。

gdata さえあれば、Google の各種サービスを Python で利用することができるのですが、GoogleCL は gdata を意識せずに Terminal から Google の各種サービスを利用できるようになります。

直接 Python から gdata を利用するより処理は制限されますが、GoogleCL は gdata を実際に利用するより、気楽に利用できます。

GoogleCL のインストール

googlecl - Project Hosting on Google Code から googlecl-0.9.5.tar.gz(2010年6月19日現在)をダウンロードします。

以降、Terminal での作業になります。

Terminal を起動し、googlecl-0.9.5.tar.gz のある場所に移動します。

$ tar zxvf googlecl-0.9.5.tar.gz 
$ cd googlecl-0.9.5/
$ sudo python setup.py install

以上で GoogleCL を利用するためのライブラリはインストールできました。

実際に使ってみる

GoogleCL は、Terminal から利用します。最初にヘルプを参照しておくといいと思います。

$ google -h

コマンドラインからの利用は以下のようになります。

google [picasa|blogger|youtube|docs|contacts|calendar] TASK [options]

コマンド名の後に利用するサービス、その後に行う処理、最後にオプションを記述します。単純にコマンド名だけを入力すると、対話モードに移行します。

$ google[return] # 対話モードへ
> picasa list title
headerbg-1.png
sidebarbg.png
postbg.png
...
> ^D # 終了(Control-D)

サービスにより利用できるタスクとオプションは異なります。この辺りのことはヘルプに詳しいです。

では、Blogger サイトのリストを取得してみます。

$ google blogger list

Terminal で上記のコマンドを実行すると、ユーザー名を尋ねられます。blogger で利用しているユーザー名(Google アカウントのメールアドレスの @ の前の部分。もしくは、メールアドレス)を入力します。

すると、OAuth による認証を促されます。

Please log in and/or grant access vis your browser at...の後に https で始まる URL が表示されると思います。この URL をコピーし、Safari などのブラウザでアクセスします。

ブラウザで認証を行った後、Terminal に戻り、Enter(Return)キーを押すと、Blogger での記事タイトル一覧と URL が取得できます。認証に失敗すると Failed to get valid access token! と表示されて、処理は終了します。

各サービスは初回実行時にのみ認証を求めます。この認証を行っておくと、以降の操作では認証は必要ありません。

設定ファイル

GoogleCL のインストールが完了すると、ユーザーのホームディレクトリに googlecl という Finder で表示されない非表示のディレクトリが作成されます。

$ open ~/.googlecl

このディレクトリの中に config というファイルがおさめられています。これはテキストファイルで GoogleCL で利用する各種設定が記述されています。この設定ファイルの説明は googlecl-0.9.5(googlecl-0.9.5.ter.gz を解凍したディレクトリ)にある README.config に記述されています。

各サービスにアクセスし、認証を行うとこの設定ファイルにユーザー名が保存されます。また、OAuth で行った認証もこのディレクトリに保存されます。

一度、ユーザー名を入力し、認証が行われると、次回からはそれらの入力は不要になります。別のユーザー名でログインを行いたい場合は、-u オプションを使うことで別のユーザーでログインすることができます。

$ google blogger list -u ユーザー名

設定ファイルはセクションに分割されており、各設定はキーと値のペアで記述されます。セクションは [GENERAL] といった感じで角括弧で囲まれており、直前のセクションとは空行で分割されます。例えば、以下のようになります。

[GENERAL]
regex = True
...

[CONTACTS]
list_style = title,email

regex がキーで True が値になります。このキーは -n(--title) オプションを指定するときに正規表現の使用を許可します。

$ google blogger list title --title=^WWDC # WWDC で始まるタイトルを表示
WWDC のサンプル

GENERAL セクションはすべてのサービスで利用する設定を記述しておく場所です。その他、各サービスごとにセクションは作成されます。

各サービスで利用できるタスクに list があります。これは各サービスの一覧(例えば、Google Docs のファイルの一覧や Blogger のブログタイトルの一覧など)を表示するタスクです。このタスクはオプションとして表示する項目を指定することができます。

例えば、blogger のタイトルと URL を表示させたいなら次のようになります。

$ google blogger list title,url-direct

list の後で title,url-direct と指定してしていますが、この表示する項目の指定を list_style と言います。

設定ファイルには GENERAL セクションでデフォルトの表示設定が次のように指定されています。

[GENERAL]
list_style = title,url-site

list タスクで list_style を指定しない場合、この設定を利用します。一方、Contacts セクションでは list_style は次のように設定されています。

[CONTACTS]
list_style = title,email

このサービスを利用するときはこちらの設定が優先されます。list_style の指定は、各項目を , で区切ります。各項目の間に空白を入れてはいけません。各サービスにより利用できる項目は異なります。詳しくは README.txt に書かれているので参照してみてください。

AppleScript からの利用

do shell script で利用できます。ただし、デフォルトでは google コマンドが /usr/local/bin にインストールされるため、絶対パスを利用します(インストール場所を変更しているときは適宜修正してください)。

do shell script "/usr/local/bin/google blogger list"

Automator からの利用

AppleScript の do shell script から利用できるということは Automator からでも利用できるということです。

コマンドラインから Picasa に画像をアップロードするには次のようにします。

$ google picasa post --title='アルバムの名前' *.jpg

--title オプションで指定するのは既存のアルバムの名称です。上記のコマンドを実行すると、カレントディレクトリ内にある拡張子 jpg のファイルをすべて指定のアルバムにアップロードします。

このとき注意しないといけないのはアルバムの名前です。アルバムの名前の一部が重複しているとアルバムを選択する必要があります。Picasa に「Summer 2008」、「Summer 2008」という名前のアルバムが既に存在し、次のコマンドを実行すると、どちらのアルバムかを確認するために入力を求められます。

$ google picasa post --title='Summer' *.jpg
More than one match for title Summer
0) Summer 2008
1) Summer 2008
Please select one of the items by number: 1 # 数値を指定し、enter

つまり、アルバムの指定をこのように行っていると AppleScript や Automator などからでは実行できないのです(AppleScript や Automator などからでは数値の入力ができないため)。アルバムの名称は一意のものにしておくのが無難です。

一例として Finder の選択項目を Picasa にアップロードする Automator サービスを。このサービスでは「AppleScript を実行」アクションを利用します。「AppleScript を実行」アクションに以下のコードを記述します。

Script Editor で開く

-- アップロード先(Picasa ウェブアルバムで作成したアルバムの名前)
property album : "ALBUM_NAME"
-- アップロードの対象とするファイルの拡張子
property file_extensions : {"png", "jpg", "jpeg", "tiff", "tif"}

on run {input, parameters}

    if input is {} or input is {""} then
        error -128 -- 終了
    end if

    tell application "Finder"
        set file_list to {}
        repeat with this_item in input
            if name extension of this_item is in file_extensions then
                set end of file_list to quoted form of (POSIX path of (this_item))
            end if
        end repeat
    end tell

    if file_list is {} then
        --ファイルがない場合、終了
        error -128
    end if

    set AppleScript's text item delimiters to space
    set file_list to file_list as text
    set AppleScript's text item delimiters to {""}

    set the_command to "/usr/local/bin/google picasa post --title="
    set the_command to the_command & quoted form of album & space
    set the_command to the_command & file_list

    do shell script the_command

    return file_list
end run

最後に

GoogleCL のすべては README.txt、README.config および、コマンドのヘルプに記述されています。これらを熟読することをお勧めします。

わざわざ Python から gdata を 直接たたく必要がない分(Python を知らなくても使えるし)、かなり気楽に Google の各種サービスを利用することができます。また、コマンドラインからの利用なので、AppleScript や Automator との組み合わせも簡単です。

反面、利用できないサービスもありますし、利用できたとしても操作には制限があります。この辺りは今後のアップデートに期待しましょう。

Safari 機能拡張の証明書を取得する

Google Chrome を使い始めて約 2 週間。いくつか拡張機能を入れ、それなりに使い勝手が良くなり、色々な操作が Google Chrome に集約でき始めた昨今。なんで、Safari 5 が公開されて、しかも拡張機能に対応しているのでしょうか。再度、Safari を使い始める理由ができてしまった...。

今回の Safari、AppleScript 的にはなにも変わりはありません。しかし、なんといっても Safari リーダーの機能はすばらしい。利用できるページとそうでないページがありますが(これはどのようなページを作れば Safari リーダーは利用できるのでしょうか?)。

そして、正式な拡張機能への対応があります。で、早速拡張機能を使ってみようと思ったのですが...、Safari 5 のデフォルトの設定では拡張機能が隠されていますね。

拡張機能を有効にするには、最初に環境設定の「詳細」タブにある「メニューバーに開発メニューを表示」にチェックを入れます。

safari_preference.png

そして、「開発」メニューの「機能拡張を有効にする」を選択します(Safari では「機能拡張」なのですね。Google Chrome では「拡張機能」ですが)。

safari_dev_menu.png

すると、環境設定に「機能拡張」タブが追加されます。ここでインストールされた機能拡張の管理ができるようになります。

safari_extension_preference.png

ユーザーが機能拡張を利用するには、これで利用できるようになります。拡張子「safariextz」のファイルをダウンロードし、ダブルクリックすれば Safari にインストールされます。インストールされる場所は ~/Library/Safari/Extensions です。

さて。

多くの人は機能拡張をどうやって作るのか?の方に興味があると思います。機能拡張を作るには Safari の「開発」メニューにある「機能拡張ビルダーを表示」を選択します。

safari_extension_builder_menu.png

このメニューを選択するとウィンドウが表示さるのですが...多くの人は「証明書」をまだ入手していないと思います。機能拡張を作成する前に証明書を Safari Dev から入手する必要があります。そして、証明書を入手するには Safari Developer Program に入会する必要があります。

以下の手順は Mac での場合になります。

Safari Dev Center に移動し、Safari Developer Program に入会します。既に入会されているなら、ログインしてください。この辺りの手順は割愛。

ログインすると、(おそらく)ページの右の方に「Safari Extension Certificate Utility」と書かれている部分があります。

safari_extension_certificate_utility.png

「Get Started」をクリックして証明書の作成を始めます。最初に「Request a Safari Extension Certificate」というページが表示されると思います。このページに「Launch Assistant」というボタンがあります。これをクリックします。

safari_certificate_utility.png

すると、ページ内に次のようなパネルが表示されます。

safari_certificate_utility_panel.png

このパネルの手順に従って証明書を発行してもらいます。証明書の要求書を作成するため、キーチェーンアクセス.app を起動します。「キーチェーンアクセス」メニューの「証明書アシスタント...」に「認証局に証明書を要求...」というメニューがあります。

keychain_access_ceritification.png

このメニューから「証明書アシスタント」を起動します。メールアドレスと通称を入力します。「要求の処理」は「ディスクに保存」にチェックを入れます。

keychain_certificate_assistant.png

「続ける」をクリックすると保存場所を尋ねてくるので場所を選択し、保存します。これが証明書の要求書になります。保存が完了すると Safari に戻り、「Continue」をクリックします。ファイル選択ボタンが表示されるので、先ほど保存した要求書を選択し、「Generate」ボタンをクリックします。

すると、証明書を生成し始めます。少しの間待っていると証明書が生成されるのでダウンロードします。拡張子「cer」のファイルがダウンロードされるのでキーチェーンアクセスに読み込ませます(cer ファイルをダブルクリックするとキーチェーンアクセスが読み込んでくれます)。

これで Safari 機能拡張を作成する準備ができました。この証明書がないと、機能拡張のビルドができないのですね。

Safari Dev Center からは機能拡張のリファレンスやガイド、いくつかのサンプルがダウンロードできます。まずは、この辺りのサンプルを眺めてみるといいと思います。

「あなたもマジックができる」というけれど...

たまには AppleScript とは違う話題などを。iPhone アプリあなたもマジックができるについて。まぁ、iPhone アプリのことですが、マジックに関することを少し。殴り書きですが。

実は、買うつもりはなかったのです...。

AppBank さんのレビュー([iPad, iPhone] あなたもマジックができる: 誰でも手品がマスターできる!1460)を見てから、App Store でレビューを見ていてボタンを押し間違えてしまいました。

せっかく買ったのですからレビューと思ったのですが、読み返してみてレビューというより、問題提起、疑問の提示みたいになってしまいました。

このアプリのレビューを書いているサイトは AppBank さんを始め、いくつかあり、おおむね高評価なのですが、それらとは全く違うレビューになります。たまたま、少しマジックのことを知っているので、レビューというより批判です。

ところで、こういったアプリ(基本的には動画を表示するだけのアプリ。アプリというより、こんなもの Web ページでもいいでしょ、わざわざアプリにする必要ないでしょ)のレビューはどこまで内容に突っ込んでいいのでしょうか。このようなアプリだけではなく、例えば、電子書籍のようなもの。最近、読んだものでは iPhoneとツイッターは、なぜ成功したのか?

こういうものって内容のレビューをすればいいのでしょうか。それとも、アプリの使い勝手をレビューすればいいのでしょうか。アプリの使い勝手ということでいえば、両者とも最低です。なぜ、iPhone や Twitter の使い心地を論じている書籍のアプリがあれほど使いにくいのかがいまだに分かりません。

どうして、誰も使いにくいって言わないのだろう。

iPhoneとツイッターは、なぜ成功したのか?のレビューではないので多くは書きませんが、どうして、林信行さんがあの内容であのアプリを承諾したのかが理解できません。あの内容なら、ぜひ、こだわってほしかったです。使い勝手に。

あれじゃ、書籍をそのまま流し込んだだけじゃないの?一つ言うなら、時々、注釈が入るのだけど、その注釈は注釈の説明に移動するリンクが張られているのだけど、その注釈の説明はおおむね、章の最後に記述されている。多くの書籍はそのようになっていますし、このアプリでも踏襲されています。

問題は、書籍と同じ構成のため、ページをめくっていくと再度同じ注釈に出くわすということです。こんなもの、飛ばせよ。一度、見たのだから。断言するけど、これは書籍のデータをそのまま流し込んだだけ。iPhone には iPhone の見え方、見せ方があるでしょ。これだけのことで内容は良くても、読む気はなくなってしまいます(特に内容が内容なだけに)。

似たようなことはあなたもマジックができるにも言えます。マジックの手順の説明は 1, 2, 3...と番号順に進んでいくのですが、時々、他のマジックの手順 5 を参照してちょうだい、みたいなことが書かれている。書かれているのだけど、そこに移動するリンクはない。当然、参照して戻るためのリンクもない。

えっとね。マジック入門のようなアプリを作っているんでしょ。いってみれば、専門書。それが、なんでこういうところの使い勝手が悪いの?

マジックに関する書籍で一番面倒なのは、いろんなページに行ったり来たりしなければならないこと。アプリなんだし、相互参照ぐらい簡単でしょ。たとえ、それが動画でも。

iPhone や iPad などのモバイルアプリや電子書籍はまだまだ混沌とした状況だから玉石混淆...というのは分かります。しかし、手を抜いているようにしか見えないこれらの問題は必ず自分たちの首を絞めます(もちろん、真っ先にレビューしなければいけないはずのマジシャンの首もね)。

そして、これはあなたもマジックができるのレビューを掲載しているいくつかのサイトの問題でしょうけど、ほんとに買ったの?ほんとに買って中身を見てみたなら腹がたったと思うのですが、そういうレビューは見かけない。レビューを書くなら、いいところだけではなく、悪いところも書いてください。

で、なんで腹がたったかというと、解説の文章がアマチュア以下だから。少なくとも金をとって、マジックの演技をし、解説しているのなら、プロ根性を見せろと言いたい(マジックで演技を見せ、なんらかの報酬を得ればその人はプロです。本人の意思に関係なく。また、文章を書いて金をとっているのでしょ。もう少し、まともな文章を書いてください)。

で、内容なのですが...。

評価は分かれるでしょうね。おそらく、全くマジックをしたことのない初心者やマジックに興味のある人には、手頃な値段ということもあって受け入れられるでしょう。内容も数だけはありますし。

いわゆるマニアには酷評されるでしょう。紹介されているマジックが初心者向きだからではありません。作品のクレジットもなければ、誰が演じているのかも分からない。何を見せたいのかも分からなければ、パズルだけを紹介しているその姿勢(あの実演動画はいったいなにが不思議なのか?ビックリ箱としての驚きはあるでしょうが、それだけです)ゆえに。

客観的に見るなら、少しマジックをかじったことのある人が、小銭を稼ぐためにマジックの知識を切り売りしている...といった感じがします。

個人的には情報商材かよ、という気がします。

マジックをしたことがなく、マジックに興味ある、覚えたい、という人にはお勧めできるか?

マジックをすることはないけど、興味本位で見てみたいというだけなら購入されてもいいのでは?満足感は得られるでしょう。

意欲がある人には、お勧めしません。意欲がある人には初期投資が高くついても、書籍をお勧めします。英語でも構わないなら、Magic: The Complete Course (Book & DVD)。日本語でなら、華麗に決める本格マジック。どちらも DVD で一流のマジシャンによる演技、解説が見られます。

でも...こういうアプリってこれから増えるんだろうな。

収録されているマジックは以下になります。といっても、現象を書くと分かる人には分かってしまうので詳しく書くことはできません。

  1. 混沌な予言
  2. 4エース出現
  3. コイン移動
  4. 予想外のカード当て
  5. コイン消失
  6. ティッシュの復活
  7. 不思議な予言
  8. コイン貫通
  9. ミックスアップ
  10. 恋人の出会い

ところで、マジックで一番大事なものって何でしょうか。

それは、「マジックでなにを見せるか、なにを言いたいか、なにを表現したいか」だと思います。ごくごく当たり前のことを書けば、マジックなんてタネさえ知れば誰にでもできます。しかし、タネを知り Mr.マリックがやっていることと同じことをしても、同じように万雷の拍手を得ることはできません。Mr.マリックにはマジックを使って表現したいことがあります。マジックを使って伝えたいことがあります。

マジックというのはただの道具です。それ自体は面白くもなんともありません。面白くなるかどうか...人に感銘を与えるかどうかは、演技者が道具をどう扱うかにかかっています。

残念ながらあなたもマジックができるには「伝えたいこと」も「表現したいこと」も「自己主張」もありません。あったのかもしれませんが、伝わってきませんでした。どちらかというとマジックのタネ教えます、といった暴露サイトと同じレベルです。

もし、このアプリケーションの作成者がマジシャンを増やしたい、マジシャンの蒙を啓きたいと思ってこのアプリを作ったのだとしたら、やり方が間違っています。もっと、丁寧に作ってください。