Development」カテゴリーアーカイブ

Appleへの公開書簡、オラたちにAPIを!

Ori Inbar氏の呼びかけで、Appleへ公開書簡「Open Letter to Apple: Let us Augment Reality with the iPhone!」が送られました。頓智・他AR関係者10余名の共同署名。iPhone用のARアプリケーションのためにカメラAPI(特にライブ・ビデオ・ストリーム関連)を公開して欲しい!というのが趣旨ですね。

openletter-ar

よく知られているように、iPhone SDKではiPhone OSのすべての機能が使えるわけではありません。おもだったところだけでも、バックグラウンド動作、スプリングボード(ホーム画面)、携帯電話機能、グローバルなファイル操作などはAPIが公開されていません。VoiceOver(スピーチ合成)やVoice Control(スピーチ認識)もダメですね。

Appleの言い分としては、セキュリティや安定動作を保障するために公開APIの範囲でアプリケーションを作ってね、ってことでしょうけど、それでは納得できない人たちも沢山(?)いるわけです。私もリジェクトされたアプリケーションを何個も作ってますから(笑)。

考えてみれば、初代iPhone発売当初はネイティブ・アプリケーションの開発自体がNOだったところを、幾多の要望が寄せられた結果としてiPhone SDKとApp Storeが提供されました。だから、今回の動きも無駄には終わらないと期待したいところです。それに、このような拮抗関係こそが、発展の原動力になると思いますよ。

Thirty Webs

今日のiPhone勉強会で出たネタ(笑〜学生にとっては個人制作)は、ひとつのアプリケーションで複数のWebを開くことができるか?でした。それはダメかもって思いながら、UIWebViewを2つ載せてみたら、これがバッチリ動作します。知らなかったな〜(ってUIWebViewを使うこと自体が初めてだったかも)。

それでは!ってことで、ひとつのビューに6個のUIWebViewを載せて、TabBarで5つのビューを作成、合計30個のUIWebViewを作ってみました。余談ながら、この手の作業は、UIWebViewのサブクラスを定義すれば、後はInterface Builderだけで済んじゃうので、とってもラクチン。

さてさて、その結果ですが、これまた何事もなかったようにすべて動作します。メモリとしての限界はあるでしょうが、UIWebViewとしての制約はないってことですよね。素晴らしい! Safari 4のTop Sitesモドキもできそう。

thirty-uiwebviews

これはiPhone Simulatorの画面キャプチャーですが、iPhone実機でも問題なく動作します。

速報!Maxの教科書、発刊

今月号のSound & Recording Magazineをパラパラとめくっていたら、こんな広告がでてました!

max-textbook-on-srm

当事者なので、近く公になるのは分かっていたんですが、先行広告が出るとは知らず、不意をつかれました(笑)。装丁も立体的に見たのは初めてなので、なんだか新鮮です。今回は白本と呼ばれたい。

と言う訳で、お馴染み佐近田さんとのノイマンピアノ名義による新しい書籍です。もちろん最新Max5をターゲットに、これまでの2061:Maxオデッセイ等とは趣向を変えて、初心者向きのライト・ウェイト感覚の内容になっています。なので、Maxに興味があるけど、まだ手を出していない人や、取り組んでみたけど、イマイチよくわからないって人にピッタリです。どうぞ、よろしくお願いします。

書籍「Maxの教科書」
著者:ノイマンピアノ(赤松正行+佐近田展康)
予価:5,040円(本体4,800円+税5%)
発行:リットーミュージック
B5変型版/440ページ(予定)
ISBN978-4-8456-1702-9
(7月発売予定)

【追記】Amazonで予約可能になっていました。発売日は7/10みたいですね。今度は入手困難にならないことを祈ります。

iPhone SDK 3.0の教科書

先日リリースされたiPhone SDK 3.0 GM (Golden Master)を使って、「iPhone SDKの教科書」に掲載したサンプル・コードをビルド&進行。その結果、すべてがそのままビルドでき、正しく動作しました。素晴らしい。

iphone-sdk-30

書籍のサンプル程度で修正が生じるようなら逆に困っちゃうわけですが、後方互換性もよろしいようです。ざっと見た感じでは、XcodeやInterface Build回りの操作系もほとんど一緒みたい。下手をして大量書き直しになるとヤだなと思っていただけに、ひと安心。

ちなみに、コード署名IDでAutomatic Profile Selectorsが指定できるようになったので、サンプル・コードを配布する場合には便利ですね。これを利用すると、適切なプロファイルが自動的に選ばれるので、プロファイルを指定する手間がなくなります。

NADA Mobileでフィジコン

フィジコンって勝手に略しちゃってゴメン!なんだけど、NADA MobileはiPhoneでフィジカル・コンピューティングを実現するツールキットでございます。より正確には、iPhoneのマイク&ヘッドフォン端子に繋いだセンサー類を使ってゴニョゴニョしましょうってことです。ケーブルはお馴染み(?)の4極ミニプラグのAVケーブルを使います。マイク入力やヘッドフォン出力は高精度なA/DおよびD/Aコンバータですからね。これ王道かも。

nadamobile-1

プログラムはMacのDashcodeを使ってJavaScriptで記述、そいつをSketchServerを通じてiPhoneのRunSketchに送り込んで実行、という流れです。iPhone上でプログラムが書けるともっとイイんですけど、何かと面倒があるのかもね。

nadamobile-2

フィジカル・コンピューティングという言葉に語弊があるし、iPhone自体がフィジカル・コンピュータでしょ!とも言えますが、このような試みはiPhone OS 3.0以降は活発化しそうです。Bluetooth接続できるArduinoMindstorms NXTあたりに注目ね。Gainer/Funnelも対応して欲しいな!

後は、電子回路の設計が問題かな(少なくとも私にとって)。NADA Mobileのチュートリアルでも可変抵抗(ボリューム)を使うだけなのに、それ以外に固定抵抗が必要だったりして、それ方面の知識がなければできないよね。

【From: Make: Japan

バランスのシミュレータ動作

「iPhone SDKの教科書」のサンプル・コードの「バランス」は、iPhone実機で動作させる必要があります。iPhone Simulatorでは加速度センサーが動作しないので、ボールが中央に留まったまま動かないからです。そこで、iPhone Simulatorでも擬似的に一定の速度でボールが動くようにしてみました。加速度センサーのような面白みはありませんが、ボールが壁に衝突した時の動作を確認できます。

速度の初期値を設定する

速度の初期値を適当に設定します。加速度の初期値を設定しても構いません。

【P.258の012〜013行目】
speedX = 0.7;
speedY = 0.5;

タイマーでmoveメソッドを呼び出す

加速度センサーのデリゲートが呼び出されないので、タイマーでmoveメソッドを呼び出します。タイマーは「スマッシュ」で説明した通りですが、時間間隔を0.02にすることと、呼び出すメソッドがmoveであることが異なります。

【P.258の033行目あたりに挿入】
#if (TARGET_IPHONE_SIMULATOR)
[NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(move) userInfo:nil repeats:YES];
#endif

TARGET_IPHONE_SIMULATORはiPhone Simulatorでの実行を示すマクロですね。これがないと、実機動作させた場合に二重にmoveメソッドが呼び出されるのでタイヘンです。速度の初期値設定にもマクロ判断を入れるとモアベタ。

サンプル・アプリケーションがApp Storeに勢揃い

ようやく「iPhone SDKの教科書」で解説している6種類のサンプル・アプリケーションがApp Storeに並びました。それぞれの審査期間は1週間前後でしたが、フル・ラインナップまでには少々時間がかかりました。

読者にとっては、完成型のサンプル・アプリケーションを試せるのはグッドなんじゃないかな。今から作ろうとするものを明確に把握することは、とっても大事なことですから。それに、一般の人が開発に興味を持つきっかけになったりすると、素晴らし過ぎです。そのようなことはサンプル・コードの提供では不可能なので、App Storeの助けを借りる必要があったわけです。

ipst0-5-in-app-store

これで執筆責任(笑)は一応は果たせたかな。芸術のための芸術という言葉がありますが、サンプルのためのサンプルってのは、ことiPhoneに関してはふさわしくないですから。最小限の機能とは言え、App Storeに出せるレベルのサンプルでなくっちゃね。

その意味では、本当はApp Storeの審査が終わってから書籍を出版すべきだったかもですが、タイトなスケジュールの中ではちょいと無理でした。まぁ、アップロード不可とかリジェクト (その1その2)とかのAppleとの攻防戦も、iPhoneアプリケーション開発の醍醐味(苦しみ?)として、このサイトで報告できたことでお許しいただければと思います。

内蔵カメラ使用時の注意点

「iPhone SDKの教科書」の第3部第5章の「パイル」は、内蔵カメラまたは写真アルバムからの画像を合成します。そこで、iPod touch対応とするならばカメラの利用可否を確認しておく必要があります。その方法は書籍で説明した通りです。

ただ、カメラが利用できない場合は、それをユーザ・インターフェースとしても明確に示す必要があったようで、App Storeへの申請ではリジェクトを喰らっちゃいました。そこで、ビューを開いた時にカメラをチェックして、カメラが利用できない場合はカメラ・アイコンを使用不可に設定する(表示がグレイになる)ように変更しました。これで審査を通過。

具体的には、PileViewController.hに以下のアウトレットを追加し、Interface Builderでカメラのボタンに接続します。

IBOutlet UIBarButtonItem *cameraButton;

そして、PileViewController.mのviewDidLoadメソッドの最後に以下のコードを追加します。

cameraButton.enabled = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

この変更により、openCameraメソッドやopenPhotoLibraryメソッドでチェックしていたif文自体は省略することができます(あっても実害はないですけど)。

pile-on-ipod-touch

サンプル・コードの改良・発展

「iPhone SDKの教科書」には各サンプル・コードの章末に改良・発展を提案していますが、これがどの程度の作業で実現できるかは分かりにくいかもしれません。なので、各項目の難易度を書いておきます。プログラミング初心者はレベル【A】から取り組むと良いと思います。また、カウンターについては改良・発展案を書いていなかったので、これも補っておきますね。

【A】非プログラミング・レベル〜画像やサウンドの差し替え、レイアウト変更など。
【B】簡易プログラミング・レベル〜ソースコードの変更・追加が必要。
【C】高度プログラミング・レベル〜ソースコードの大幅な変更・追加が必要。

カウンター

【A】ボタン画像や背景画像を差し替えて、異なる雰囲気のカウンターを作ろう。
【B】ボタンをタップした時に音を鳴らし、動作が分かるようにしよう。
【B】10個および100個数える度に音を鳴らし、数えている状況が分かるようにしよう。
【B】複数のカウンターを表示し、異なる数を同時に数えられるようにしよう。
【B】カウンターの数値を記憶し、アプリケーションを再起動した場合にも、前回の数値から数を数えられるようにしよう。

スマッシュ

【A】背景画像とUFOの画像を差し替えて、異なる雰囲気のゲームに仕立てよう。それに合わせて効果音も差し替えよう。
【B】UFOを叩き潰した回数を数えてスコアを表示する機能を追加しよう。UFOを逃した場合は減点することも考えられる。
【B】1分間や3分間などゲームの時間制限を設けてみよう。スコア機能と合わせて、制限時間内の得点を競うことができる。
【C】得点を競うなら、ハイスコアも表示したい。ハイスコアを打ち立てたプレーヤの名前もあれば完璧だ。
【C】UFOが1機だけでなく、2機、3機と出現するようにしてみよう。ボーナス点が稼げる特別なUFOや、叩き潰してはいけない味方の宇宙船も考えられる。

バランス

【A】画像や効果音を差し替えて、まるで違う雰囲気で異なる用途に使えないだろうか?
【B】現在のボールの重みはどれくらいだろうか? もっと軽いボールや、もっと重いボールにしてみよう。
【B】ボールと盤面や空気との摩擦抵抗をプログラム・コードに盛り込んでみよう。
【C】目を閉じていてもボールの動きを感じられるようにできないだろうか?
【C】Z軸の加速度を利用して、ボールを3次元的に動かしてみよう。一人で羽根つきができるかもしれない。

クロック

【A】背景画像や針の画像を入れ替えて、オリジナル・デザインの時計を作ろう。
【B】24時間制の時計や鏡像のように逆回転する時計を作ろう。
【B】1秒ごとに秒針が小刻みに動くのではなく、連続的にスムースに動くようにしよう。
【B】アラームが鳴っている時に、盤面が点滅するなど視覚的な効果を加えよう。
【C】アラームを12時直前に設定した場合、アラーム動作に不都合が生じる場合がある。この原因と解決策を考えよう。

エイジ

【B】年齢を時間単位、分単位、秒単位でも表示してみよう。
【C】任意の日における年齢が表示できるようにしよう。
【C】起点となる日付と日数を設定すると、終了日となる日付を表示できるにしよう。
【B】グレゴリオ歴以外の暦のカレンダーを表示してみよう。
【C】時分秒単位の時間計算機を作ってみよう。

パイル

【B】パイルを多言語対応させ、日本語でも表示されるようにしよう。
【B】合成時のブレンド・モードやアルファ値を選択できるようにしよう。
【B】最初に読み込んだ写真に合わせて、合成画像のサイズが設定されるようにしよう。
【B】撮影時や選択時に写真の一部を抜き出せるようにしよう。これはイメージ・ピッカーのプロパティで設定可能だ。
【B】写真の縦横比が4:3でなくても、正しい比率で写真を合成できるようにしよう。

ofxiPhone

ドタバタで先送りにしていたofxiPhoneをインストールしてみました。メディア・アートのビジュアル系(笑)として、Processingに続くopenFrameworksのiPhone版ですね。生粋のObjective-C派はイヤがるでしょうけど、C++派で手軽にグラフィッカーになりたい人には良いかも。

ofxiphone graphics example

このofxiPhoneはココからダウンロードするだけ。pre released v0.06のiphone:x-code / iphone sdkってとこね。appsのexamplesに3つほどサンプルが入っています。最新版はsvnしてください。

ライブラリ自体はソース・コード提供&相対パス指定なので、フォルダ階層を変えないのが無難。OfxiPhone comprehensive guideは必読ね。