2009-09-23

iPhone OS上のPyObjCアプリのボトルネック

PyObjCはPythonで手軽にアプリを開発するのにはとても良いのですが、iPhone/iPod touch上では起動にとても時間がかかります。

ちょっと調べてみたところ、常に使われる、"import objc" と "obj.loadBundle ("UIKit",...)" のコードの処理に、それぞれ約3秒かかっていることが分かりました。
Python自体は遅くないのですが、PyObjCを使用するための初期化の処理に5秒以上かかってしまいます。

また、PjObjCはとても大きなライブラリなので、メモリ容量の面からも不利です。
例えば、ネイティブのMobileAddressbook.appは5.7MBなのに、HelloPythonは11MBにもなります。
このことから、メモリのオーバーヘッドが5MBほどもあることが分かります。

いずれのオーバーヘッドもPyObjCとUIKitを使用したとき固有のものです。

[English version]

2009-09-22

私の気付いたiPhone 3.1の変更点

自分のiPod touchをiPhone OS 3.1.1に上げました。
以下が私の気付いた変更点ですが、良い面と悪い面があります。
  • パスワード解析バグへの対処
    パスワード入力フィールドを、一文字消し、シェイクしてUndoすると、その文字がエコーバックして見えてしまう問題がありました(気になる、記になる...の記事Neowin.netの記事)。この問題は3.1ではきっちり対応され、Undoした文字はエコーバックされなくなりました。これはとても良い改善点です。
  • ミュージックアプリ (iPodアプリ) が起動していないと、ホームボタンのダブルクリックで [iPodコントロール] を呼び出せない
    以前紹介した、ビデオPodcastをバックグラウンドで聞く裏技が使えなくなってしまいました。同じ操作をゲームの音量調整のためも使っていたのですが、こちらもだめになりました (iPod touch first generation)。
    以前はホームボタンをダブルタップすると、いつでもポップアップの [iPodコントロール] を呼び出せて、音量調整や再生、停止、早送りを行えていたのですが、iPhone OS 3.1では、音楽の再生中しか、呼び出せません。音楽を再生していない状態では、ホームボタンのシングルクリックと同じで、実行中のアプリが終了してしまいます。
    これは、とても困ります。
    (ちなみにホームボタンの設定は、[一般] の [ホーム] にあります。)

あなたの大切なiPhone/iPod touchを即座にロック : Passcode Lock Now

iPhone/iPod touchのパスコードを長くして、パスコードロックを強化する対策を以前紹介しました。
多くの人は、パスコードの設定と一緒に [パスコードを要求] するまでのタイマーを設定して、短い時間の間に自動ロックされても、再度パスコードを入力しなくても良いようにしていると思います。
これが結構不安で、同期の最中など、iPhone/iPod touchを置いてその場を離れなければならないようなケースには、他の人にあなたのiPhone/iPod touchがパスコードなしでのぞき見られてしまう恐れがあります。
この不安を解消するために、パスコードロックを即座に行うアプリを作成しました。
PasscodeLckNw (Passcode Lock Now) (build #001 2009-09-22) [Download]

インストールの仕方
  • App Storeからはインストールできません。
  • 上記キットをiPhone/iPod touchに適当な方法でmobileユーザのホームディレクトリなどにコピーします。
  • iPhone/iPod touchにログインして、rootユーザになります(suコマンドなど)。
  • unzipコマンドで、/Applications/ フォルダの配下に展開します。
    cd /Applications/ ; unzip ~mobile/PasscodeLckNw-001.zip
  • respring コマンドを実行して、iPhone/iPod touch に新しいアプリを認識させます。
仕組み
  • 久しぶりのシェルスクリプトアプリです。
  • SpringBoard プロセスをkillallしています。リブートするよりはずっと早く、確実にパスコードロックすることができます。

2009-09-08

Snow Leopard/Leopardでメモをよりお手軽に作成

iPhone/iPod touchのメモアプリはすぐに呼び出せて、とっさにメモがとれて便利です。
それに比べてMac OS Xのメモはまだまだ冷遇されています。
Mailを立ち上げて、メモボタンあるいは、メニューから [新規メモ] を選ばなければなりません。
メモをとりたいのにメールを開くという、心理的な変換がバリアとなってしまいます。

そこで、ワンクリックでメモアイテムを作成して、入力状態にする方法を考えました。
こうすることで、Mac OS X 上のメモ機能の地位も少しは上がると思います。
iPhone/iPod touchのメモと(何らかの方法で)同期している場合は、連携して使えて便利さ倍増です。

とても初歩的なAppleScriptです。
Macの [アプリケーション] フォルダの [ユーティリティ] の [AppleScriptエディタ] を開いて、以下のスクリプトをコピペします。
そして適当な名前で [ファイルフォーマット] を [アプリケーション] として保存します。
そのアイコンをドックに置けば、ワンクリックでメモを作成できます。
tell application "Mail"
activate
end tell
tell application "System Events"
tell process "Mail"
-- click the menu item "New Note" of the menu "File" of menu bar 1
click the menu item "新規メモ" of the menu "ファイル" of menu bar 1
end tell
end tell
アイコンを設定したい場合の方法は次のようにします。
右上の画像(など)を適当な名前のファイルに保存し、プレビューアプリで表示して、全てを選択(cmd-A)したのち、画像をコピー(cmd-C)します。上で作ったアプリをファインダで選択し、 [情報を見る cmd-I] して、表示されたウィンドウの中のアイコン画像をクリックした状態で、ペースト(cmd-V)します。
(本当は、全て設定済みのAppleScriptアプリを作りたかったのですが、AppleScriptアプリパッケージの中のicnsリソースを入れ替える方法が見つからなかったので、このような手動手順の紹介となりました、すみません。)

[English version]

Snow Leopardのメールアプリのメモ機能の仕様変更

Snow Leopard (Mac OS X 10.6)のメモ機能(Note of Mail.app)の仕様が変わっているようです。
(正確にはLeopardを再インストールして確かめなければなりませんが。)
  • メモアイテムはNotesフォルダにないと認識されなくなりました。
    IMAPサーバでも、ローカルフォルダでも同じです。
    いずれもメールアプリからは隠されて見えませんが、右クリックメニューから呼び出せる [アカウント情報を見る] ではちゃんと「メモ」(Notes)フォルダが表示されます。
    (なお、To Doはカレンダに保存されるようです。)
  • 以前(Leopard)はどのフォルダにあってもメモ一覧に統合して表示されていたはずですが、遅いのでやめたのでしょう。
  • 逆に、Notesフォルダにあれば、通常のメールアイテムもメモ一覧に表示されます。