RemoteKey

RemoteKey
カテゴリ/ユーティリティ
\230
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=301472359&mt=8

技術的に興味があったので購入してみました。無線 LAN 環境が必要です。(Mac に AirMac カードが内蔵されていれば、利用できます。設定方法は、下の URL の右下 ‘外出先での接続方法’ を参考にしてください。)

RemoteKey
http://hmdt.jp/remotekey/index-jp.html

iPod touch 上で RemoteKey を動作させた後、上の URL から ダウンロードし、Mac 上にインストールした RemoteKey Connect を起動します。
Devices (私の場合は iPod touch) を選んで Connect ボタンを押します。これで Mac の RemoteKey Connect で入力した文字が iPod touch の Remotekey に表示されます。
RemoteKey Connect で Mail ボタンを押せば iPod touch 上のメールが起動し、入力した文字列が本文として入力されています。RemoteKey Connect を終了するには、メニューバーの右端のアイコンからメニュー ‘Quit RemoteKey Connect’ を選択してください。

動作原理を調べてみました。間違っている記述もあると思いますが、メモとして残しておきます。

RemoteKey は Bonjour を利用して Mac と iPhone または iPod touch 間で動作します。
サンプルコード WiTap が参考になりそうです。(ソースを覗いてみましたが、私には理解するのに苦労しそうです。) WiTap は Bonjour を利用して2台の iPhone で 動作します。もちろん iPhoneiPod touch でも動作します。

WiTap
http://developer.apple.com/iphone/library/samplecode/WiTap/index.html
(iPhone Dev Center に登録していないと閲覧できません。)

私自身、iPod touch 1台しか所有していないので、WiTap を iPod touch 32GB、iPhone Simulator.app にそれぞれインストールして、両方の WiTap を実行し動作確認しました。WiTap は、カラーパッドをタップすると、もう一方の端末の WiTap のカラーパッドが点滅します。

iPod touch 上の ‘メール’、’マップ’ を起動するには NSURL、NSApplication を利用します。
‘メール’ を起動する例です。

	UIApplication *application;
NSURL *url;
url = [NSURL URLWithString:@"mailto:foo@me.com"];
application = [UIApplication sharedApplication];
[application openURL:url];

また、自分が作成したアプリケーションに Custom URL Schemes を登録して、他のアプリから起動させることもできます。動作確認には iPod touchiPhone Simulator.app 上の Safari の URL に Custom URL Schemes を含んだ URL を入力して試すと良いようです。下の例では URL は “xyzlist://Sample.koyama.jp/?test#20090221” です。

-- 起動されるアプリケーションの Info.plist (今回の例ではアプリケーション名 Sample) --
▼ Information Property List
▼ URL types
▼ Item 1                    : jp.koyama.Sample
URL identifier
▼ URL Schemes
Item 1               : xyzlist
//アプリケーション Sample を起動させるソースコード
UIApplication *application;
NSURL *url;
url = [NSURL URLWithString:@"xyzlist://Sample.koyama.jp/?test#20090221"];
application = [UIApplication sharedApplication];
[application openURL:url];

下記の URL が参考になります。(ただし、以降に出てくる Apple の URL は iPhone Dev Center に登録していないと閲覧できません。)

iPhone Application Programming Guide: Customizing Your Application’s Behavior
http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ApplicationEnvironment/chapter_3_section_6.html#//apple_ref/doc/uid/TP40007072-CH7-SW22
The Core Application
Customizing Your Application’s Behavior
Communicating with Other Applications

The iPhone Developer's Cookbook: Building Applications with the iPhone SDK (Developer's Library)
Erica Sadun
10 Connecting to Services
Recipe: Subscribing Application to Custom URL Schemes
P303

上の本も参考にした方が理解しやすいと思います。また、’The iPhone Developer’s Cookbook’ [ asin:0321555457 ] は、

日本語に翻訳された本 ‘iPhone デベロッパーズ クックブック’ [ asin:4797352418 ] が発売されています。

他のアプリケーションから起動されたアプリケーションは

UIApplicationDelegate Protocol Reference
http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html
Opening a URL Resource
- application:handleOpenURL:  optional method  

が呼び出され、起動します。

//   アプリケーション Sample の UIApplicationDelegate
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
//   url = @"xyzlist://Sample.koyama.jp/?test#20090221"
NSString *taskName = [url query];
NSString *dateString = [url fragment];
NSLog(@"%@ %@", taskName, dateString);
}

起動されるアプリケーション (上の例では Sample) の UIApplicationDelegate に上のソースを追加し、iPhone Simulator.app の Safari で URL “xyzlist://Sample.koyama.jp/?test#20090221” で起動させると、/アプリケーション/ユーティリティ/コンソール.app の ‘ログ・データベース・クエリー/コンソールメッセージ’ で下のメッセージを見つけることができます。

09/02/21 18:49:35 Sample[3392] test 20090221

また URL を利用して渡される値は下記の URL を参考にしてください。’メール’、’マップ’ を起動する時に渡すパラメーターが、Mail、Phone、Text、 Map、YouTubeiTunes Links としてそれぞれ説明してあります。

Apple URL Scheme Reference: Introduction
https://developer.apple.com/iphone/library/featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007891
NSURL Class Reference
https://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html#//apple_ref/doc/uid/20000301-4355
RFC 1808 - Relative Uniform Resource Locators
http://tools.ietf.org/html/rfc1808

たのしいCocoaプログラミング[Leopard対応版]

Apple - September 2008 Special Event
http://events.apple.com.edgesuite.net/0809dt4bs89/event/index.html
Apple Keynotes (iTunes Podcast)
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=275834665

Apple – September 2008 Special Event で iPod シリーズが一新されましたね!

私は、古い第4世代 iPod をいまだに使用しています。iPod nano にも少し興味があります。

以前にも、ブログに書いたように、私の利用方法だと iPhone より iPod touch が最適です。早速、アップルストアで iPod touch 32GB を注文しました。出荷予定日 は 2008/10/10(Fri) です。楽しみです。

話は変わりますが、

を購入しました。Mac 関連のプログラミング本は、ほとんど購入しています。暇を見つけて二日ぐらいかかって読み終えました。Mac でプログラミングしようと思っている人が、最初に購入する日本語で解説されている本としては最適だと思います。

Part 2 Lesson 5
チュートリアル:Hello World!
5-7 アウトレットとアクションの接続

で説明されているアウトレットとアクションの接続方法以外にも、Inspector Panel を使った方法があります。詳細は Inteface Builder Version 3.1.1 (672) (最新バージョンは iPhone SDK に含まれています。) の Help メニュー から Inteface Builder Help を選んでください。

Interface Builder User Guide
Connections and Bindings
Creating and Managing Outlet and Action Connections
Making Connections Using the Inspector

に説明があります。Creating and Managing Outlet and Action Connections を読めば Connection についての知識としては十分だと思います。

また

Part 4 Lesson 11
チュートリアル:RSSリーダ

は、ソースについての説明は

Part 4 Lesson 15
XML と RSS
Part 4 Lesson 16
テーブルビュー

などで出てきますが、ソースについて一行一行の説明とそれぞれ利用しているクラスの説明があるといいなと思いました。Part 4 Lesson 11 で、つまずく人が一番多いと思います。とにかく、クラス名

NSURL
NSXMLDocument
NSXMLNode
NSTableView

Xcode のメニュー ‘ヘルプ/製品ドキュメント’ を選択し、検索してください。Class Reference を見つけたら、Companion guide のリンクをクリックして内容を理解していけば良いと思います。

NSURL場合

NSURL Class Reference
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html

Companion guide の URL Loading System

URL Loading System: Introduction to the URL Loading System
http://developer.apple.com/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html

です。

Xcode のヘルプは検索などは便利ですが、体系的に理解するには

Apple Developer Connection
http://developer.apple.com/

にログインして Safari で見たほうが、ドキュメントの画面の占有率も広いですし、理解しやすいと思います。

また、フレームワークのクラスの説明は、古い書籍も参考になります。ただし、最新の環境 Mac OS X Leopard などでは、以前利用されていたメソッドが推奨されないメソッドになっている場合があるので注意してください。

私が持っている本で参考になったものを何冊か挙げておきます。入手困難な本もあります。

Cocoa Life Vol.1 ~ Cocoa Life Vol.4
Cocoa勉強会(関東)
http://www.cocoa-study.com/
Cocoa本インフォメーション
http://www.cocoa-study.com/book/

後、NSXMLDocument を理解すれば、Amazon から REST を利用してデータを取ってくることも簡単にできます。REST というと大げさですが、URL を使った簡単な仕組みです。
拙作、BookLibrary [ http://koyama-.cool.ne.jp/tiger.html#bl02 ] 、CDJacket [ http://koyama-.cool.ne.jp/tiger.html#cdj01 ]、DVDjacket [ http://koyama-.cool.ne.jp/tiger.html#dvj01 ] などのようなアプリケーションでも利用しています。Booklibrary などは作ってみると楽しいと思います。

拙作 OpenURLHatenaRSS [ http://koyama-.cool.ne.jp/tiger.html#opu01 ] も

Part 4 Lesson 11
チュートリアル:RSSリーダ

と同じ仕組みです。私が公開しているフリーウェアはソースも公開しています。きれいなソースではありませんが、よかったら参考にしてください。

Yoshiaki's HomePage
http://koyama-.cool.ne.jp/

Learning Python

Apple - QuickTime - WWDC 2008 Keynote
http://events.apple.com.edgesuite.net/0806wdt546x/event/index.html
iTunes Store Podcast - WWDC 2008 Keynote Adress
http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?i=26717006&id=275834665

ちょっと遅れましたが、WWDC 2008 基調講演 (Podcast版) を iTunes でダウンロードして見ました。iPhone SDKにも挑戦しているので、iPhone はぜひ購入したいですね!

話は変わりますが、書籍

詳解 Objective-C 2.0

詳解 Objective-C 2.0

を購入しました。

以前、発売されていた

Objective-C Mac OS Xプログラミング

Objective-C Mac OS Xプログラミング

Objective‐C―MacOS Xプログラミング入門

Objective‐C―MacOS Xプログラミング入門

の2冊も持っています。

私は、以前説明されていた重複箇所は読んでいません。おおまかに

CHAPTER 6 ガーベジコレクション
CHAPTER 11 プロコトル
11-04 高速プロコトルと列挙子
CHAPTER 12 宣言プロパティとアクセサ

を読みました。特に11章の ‘高速列挙の実装例’ は大変参考になりました。基本的に

The Objective-C 2.0 Programming Language: Introduction to The Objective-C 2.0 Programming Language
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/chapter_1_section_1.html

を読んで理解していることが正しいのか、確認に利用しました。日本語の資料は貴重なので、持っていて損しないと思います。

また、以前ブログ [ id:KYoshiaki:20080413 ] で書いたように

Practical Common Lisp (Books for Professionals by Professionals)

Practical Common Lisp (Books for Professionals by Professionals)

を読んでいる途中だったのですが、前々から Python に興味があったので、洋書

Learning Python

Learning Python

を購入してみました。Python に関しては

みんなのPython

みんなのPython

を読んだ知識しかありませんし、ほとんど忘れてしまいました。

Learning Python (asin:0596513984) は基本を学ぶには最適な本だと思います。

みんなのPython (asin:479733665X) では理解できなかった while 文の else の動作が理解できました。(他の言語では、あまり見かけない動作です。)

while :

if : break
if : continue
else:

の条件が False になり while ループから抜ける時に が実行されます。
が True で break した後 while ループを抜ける場合は は実行されません。

インタラクティブシェル (対話型シェル) を利用して、試すと

>>> x=5
>>> while x:
...     print x
...     x=x-1
... else:
...     print 'exit'
...
5
4
3
2
1
exit
>>> 
>>> x=5
>>> while x:
...     print x
...     x=x-1
...     if x==2: break
... else:
...     print 'exit'
...
5
4
3
>>>

のような動作になります。同様に for 文にも else があります。

また、何度も object reference、変更可能 (mutable)、変更不可能 (immutable) の違いを説明されます。

例えば、インタラクティブシェル (対話型シェル) を使って説明すると

>>> L = [1, 2]
>>> M = L
>>> L = L + [3, 4]
>>> L, M
([1, 2, 3, 4], [1, 2])
>>> 

ここで
L = L + [3, 4]
は、L = [1, 2] + [3, 4] となり、L に新しく作成したオブジェクト [1, 2, 3, 4] を割り当てています。
その結果
L = [1, 2, 3, 4]
M = [1, 2]
になります。

>>> L = [1, 2]
>>> M = L
>>> L += [3, 4]
>>> L, M
([1, 2, 3, 4], [1, 2, 3, 4])

この場合 L += [3, 4] は L、M が参照しているオブジェクトに [3, 4] を追加しているので L、Mの結果は同じ [1, 2, 3, 4] になります。下の append、extend を利用した例も同じ動作です。

>>> L = [1, 2]
>>> M = L
>>> L.append(3)
>>> L.append(4)
>>> L, M
([1, 2, 3, 4], [1, 2, 3, 4])
>>> L = [1, 2]
>>> M = L
>>> L.extend([3, 4])
>>> L, M
([1, 2, 3, 4], [1, 2, 3, 4])
>>> 

Learning Python (asin:0596513984) は暇を見つけて、こつこつ読んでいます。現在、420 ページほど読みました。Practical Common Lisp (asin:1590592395) は最後まで読んでいませんが、Learning Python (asin:0596513984]) は読破したいですね!