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

Dashcode 2.0でWebアプリ

iPhone SDKを含むXcode 3.1では、各種開発ツールが新しくなっていることを昨日書いたけど、Dashcode 2.0に見逃せない機能が備わっていますね。新しいプロジェクトのテンプレートとしてWeb ApplicationのBrowserやRSSを選ぶと、そのものズバリのインターフェースが現れます。ビビっちゃいますね〜(笑)。前からありましたっけ?

dashcode-browser.jpg

ここから憶測できるのは、この手の用途、つまりテキスト主体のアプリケーションをネイティブ開発する意味はない(=より簡単な方法=HTML/Ajaxがある)、ってことです。テキストだけじゃなくって、イメージとかムービーとか、Web上で展開できるメディアは同様ですね。現状ではオフラインで使えないという弱点がありますが、遅かれ早かれWebアプリ&データをローカル保存&実行できるようになるでしょうからね。

逆に言えば、ネイティブ開発すべき用途は、カメラやマイク、センサーなどハードウェアへのアクセス、iPodやPhotoなどの内部ライブラリへのアクセス、エレガントなマルチタッチ処理、数字喰いの高速処理、といったWeb/Ajaxでは実現できない事柄になりそう。これらも、ある程度はWebアプリに取り込まれるかもだけど、プラットフォームへの依存性を抑える観点からすれば、その可能性は低いような気がするな。

aka.iphone.appsでも、ローカル実行できればWebアプリで構わないものがありますね。10×10.app、Compass.app、LEDBanner.app、TapTheBeat.app、Yes|No.appあたりがそうかな。もともと、その手のことには興味がないので(だから、その手のアプリは少ない)、むしろ優秀かつ大勢のWebプログラマさんに活躍して欲しいところ。それでこそ「音楽と映像をダイナミックに創造する!」ことに集中できるワケです。お後がよろしいようで(笑)。

iPhone SDKの第一印象

先のポストでお茶を濁しつつ、ようやく姿を現したiPhone SDK & iPhone Dev Centerを探索していました。第一印象としては、ベータ版とは言え、とても充実したSDKのようです。ドキュメントからサンプル・コードまで、夜も眠れないくらいドド〜ンと大量にあります。ザッと見た限りでは、非公式SDKでのコーディングと(ほぼ)一緒。心配されていた適応範囲・配布条件もリーズナブルだし、US1億ドル(約103億円)の支援体制iFundにもビックリ。後出しジャンケンみたいですが(笑)、これで完全にAndroidがかすんじゃいました。

iphone-sdk-icon.png

iPhone SDKの概要はニュース・サイト等をチェックしていただくとして、気になった点をいくつか挙げておきます。精査しているワケじゃないから、間違いがあったら教えてね。

・Audio Unitあり!
・OpenALもあるらしい。
・Image Unitはないらしい。
・現在位置取得のCore Locationあり!
・Objective-C 2.0が使える!
・ガベージ・コレクションは使えないらしい。
・無償SDKでシミュレータが動く! Safariもあり!
・Aspenって何? スキー場か?Moviemapか?(古い〜)
・実機動作には認証コードが必要で、iPhone Developer Programの加入が必要。
・そのiPhone Developer Programは現在US在住者のみが対象。
・Instrumentsでチューニング測定可能!
・Interface BuilderでのGUIデザインが可能になるらしい。
・フレームワークは1.2らしい(現行最新のフレームワークは1.1.4)。
・Quartz Composer 3.1、Dashcode 2.0など、各種ツールも新しくなっている。

個人的には、現時点ではシミュレータでしか動かないのが痛いな。シミュレータはとっても良くできているんだけど、テキストやイメージ表示で済むような用途だけじゃ寂し過ぎる。今アプリを作っても、当面は実機では誰も(本人も)使えないしね。

それから、昨夜パーティで同時期に来たらブッ飛んじゃうよ〜と冗談を言っていたら、今朝になって本当に2〜3時間違いでコレとアレが同時に来ました。コレはiPhone SDKで、アレはNDAがあって明言できませんが、ご想像の通りです(Cocoaアプリではないみたい〜笑)。こちらもお楽しみに〜だけど、下手な冗談は言わない方がいいみたいですね。

avTracks.app登場

iPhoneのマイク入力を使ったオーディオ・トレース・ビジュアライザ、avTracks.appを公開しました。アプリケーションを起動すれば、自動的に表示が始まります。スクリーンをタップすれば、上部にボタン・バーが現れて、サイズ、描画方法、色調を設定することができます。

iphone-avtracks-icon.png iphone-avtracks.jpg

はい、av.app + Timetracks.app = avTracks.appって感じですね。画像はスクロールしませんけどね。

ちょいと不満なのは、ボタン・バーのデザインってか見え方。これは標準のUISegmentControlを使っていて、テキストを表示するのはカッコいい(akaRemote.appがそう)んだけど、画像にしたら、とたんにカッコ悪くなりました。Win系アプリによくある意味性の低い小アイコンのボタン・バーを思い出すせいかもしれないね。

Respring.app登場

iPhoneのスプリングボード(ホーム・スクリーンを表示しているアプリね)を再起動する(だけの)ユーティリティRespring.appを公開しました。Respring.appをタップすれば、お待ちくださいグルグル・マークが表示され、数秒後にスクリーンがロックされます。これでスプリングボードが再起動されていますので、slider to unlockをスライドして、ホーム・スクリーンに戻ってください。

iphone-respring-icon.png iphone-respring.jpg

処理は次の2行だけ。わざわざアプリにしなくても〜って気もしますが、本人にとっては便利なのです。

system([@”launchctl stop com.apple.SpringBoard” UTF8String]);
[self terminateWithSuccess];

Gangsa.app登場

バリ・ガムランの楽器のひとつであるガンサ(Gangsa)の似非シミュレータGangsa.appを公開しました。金属片や両端の木を指でタップすると、美麗(?)な音が鳴ります。ポリフォニック&マルチタッチなので、複数音のうなりも聞こえてきますし、金属片の上端または下端を押さえながら、中央部をタップすればミュート音になります。もっとも、本物の繊細さには遠く及びませんけどね。

iphone-gangsa-icon.png iphone-gangsa.jpg

ところで、このアプリには一部不都合があって、まだレポジトリには登録していません。と言うのも、中央部をタップして音を鳴らした後、上端または下端をタップすることで音をミュートしているつもりなのですが、実際には音は止まりません。Firmwareなどが原因かもしれないので、可能な人は追試していただけないでしょうか?

ちなみに、このオーディオ処理はAudio Queueじゃなくって、iPhoneSDKメーリング・リストで教えてもらったGraphicsServices.frameworkの機能を使っています。

GSEventPlayAlertOrSystemSoundAtPath
GSEventPlaySoundAtPath
GSEventPlaySoundLoopAtPath
GSEventPrimeSoundAtPath
GSEventStopSoundAtPath

これらは、オーディオ・ファイルのパスを渡すだけで、その音を鳴らしてくれるので、手間要らずラクチンです。しかも、ポリフォニックだし、(ほぼ)ギャップレス・ループもできます。だけど、GSEventStopSoundAtPathが効かないみたいなのです(涙)。あと、ループ再生できるのは1個だけみたいとか、音量調整ができないみたいとか、ナゾが一杯あります。

これまた公式SDK待ちですが、3月6日になったのかな?

【追記】音が止まらないのはFirmware 1.1.1でのバグ(?)のようで、1.1.3ではバッチリ止まります。なので、マルチ・タッチの処理を少し改善した上で、レポジトリに登録して、YouTubeにデモ(下手っぽい〜笑)をアップロードしました。フェードできないので、ブチッって切れちゃうのがイマイチですけどね。ハノイ・ロボットに叩いて欲しい。

10×10.app登場

現在を反映する100の写真と言葉を表示する10×10.appを公開しました。このアプリケーションは、100枚の写真をダウンロードして(よってインターネット接続が必要)サムネールとして表示します。サムネールに触れると、テキストとともに写真が拡大表示されます。これらは1時間ごとに現在の世相(?)を反映するように更新されているので、1時間程後に10×10.appを起動してみてください。

iphone-10x10-icon.png iphone-10x10.jpg

気が付かれた人もいらっしゃると思いますが、このアプリケーションのオリジナルは10×10というWebサイト(Webアプリケーション)で、何年か前に話題になりましたね。現在も律儀にデータの更新を続けていて、膨大なデータの再活用も許可されている素晴らしいサイトです。

ただ、このWebアプリは少々挙動がおかしいので作者に連絡したところ、サイトは別の会社が運営していて、作者は関与していないそうです。データは正しくアップロードされているみたいだから、Flashで作られたWebアプリやCGIがイマイチなのかもしれません。

ところで、オリジナルのWebアプリにはヒストリー機能がありますが、10×10.appには備わっていません。過去を振り返るのはイヤって訳ではなくて、単に面倒だったからですけどね(笑)。思いっきりヒマになれば、バージョン・アップするかもしれない(たぶん、しない)ってことでご了承ください。

Shaver.app登場

まったく役に立たないけど(笑)、シェーバー(電気髭剃りね)をシミュレートするShaver.appを公開しました。使用法は単純極まりなくって、スクリーンに表示されるスイッチをスライドするだけ。グウィ〜ンと唸って震えます。

音と振動!って昔ながらのボディ・ソニックみたい。でも、こんな小さなデバイスで体験できるのは、やはり新鮮。ただ、iPhoneでなくっても、これまでこーゆーのってなかったのかな? ケータイに興味がない私が知らないだけかもなので、あれば教えてください。

iphone-shaver-icon.png iphone-shaver.jpg

さて、このアプリ、ジョークと言えばジョークだけど、それでもイロイロ苦労があります(笑)。元々はバイブレーション機能を試したくって、それはスグに出来たものの、オーディオ再生と同時に振動させることができない。しかも、Celestialでのループ再生は、一瞬音が途切れてスムースじゃない。

結局、Audio Queueでサンプリング音(PCMオーディオ)を再生できるようにSinewave.appのコードを拡張。ここでもループ再生にクリップ・ノイズが入るというバッドな状況に陥ったんだけど、サンプルの先頭から1024バイト目をスタート・ポイントにすることで対処療法的に解決。普通のwavファイルなので,ヘッダ的な情報はないハズなんだけどな〜謎。

それにしても、この調子で自前のオーディオ処理を拡張するのは泥臭過ぎます。そういったことに興味があるなら、MSPとかSuperColliderとかを使っていないワケで、ちょいとはマシなオーディオ処理ライブラリを使いたいです。例えば、PocketGuitarはCCRMAのSTK (The Synthesis ToolKit in C++)を使ってるね。

星屑のJiggy

Jiggy Stardustってのはイマイチな駄洒落だけど、JiggyはJavaScriptでiPhone/iPod touch用の(ほぼ)ネイティブ・アプリケーションが作れちゃう開発環境です。結構前から登場していたものの、あまり興味が無くって、最近、簡単な開発環境はないの?と尋ねられて、思い出した次第です。

iphone-jiggy.png

JiggyおよびJiggyで作られたアプリケーションはiPhoneで動作しますが、開発自体はMacのSafariで動作するJiggy IDE上で行います。簡単に手順を書いておくと、以下のような感じ。

Get Jiggyに従ってJiggy RuntimeとJiggyをiPhoneにインストールする(Red Pillがオススメ)。

・Jiggyを起動し、下部に表示されるiPhoneのIPアドレスを、MacのSafariにアドレスとして入力して、Jiggyに接続する。デフォルトでは、ユーザ名はJiggy、パスワードもJiggyになっている。

・Jiggy IDEが表示されるので、Create new applicationをクリックする。

・TitleやIdentifire(ドメイン名の逆並びね)などアプリケーション情報を入力し、Saveをクリックする。

・スプリングボードをリスタートする旨のアラートが表示され、iPhoneがホーム・スクリーンに戻るので、再度Jiggyを起動してから、OKをクリックする。

・Jiggy IDEの左側に作成したアプリケーションが表示されるので、これをクリックして、ファイル構成などを表示する。

・main.jsをクリックし、プログラム・コードを入力する。サンプル・コードあたりを参照ね。

・上部のツールバーのSave(フロッピー・アイコン)をクリックして、ファイルを保存し、Run(右向き三角形アイコン)をクリックして、アプリケーションを実行する。

・Jiggy IDEからの実行では動作確認できない場合は、iPhoneのホーム・スクリーンに戻り、作成したアプリケーションを起動する。

といった雰囲気かな。少々動作が不安定なところもありますが、なかなか快適な開発環境が提供されています。Jiggy Runtimeさえインストールすれば、普通のネイティブ・アプリケーションのように動作するので、見た目も操作感もバッチリです。

と言う訳で、Objective-Cは敷居が高いと感じている人、特にAjaxやMaxでJavaScriptを書いた経験のある人は、試してみる価値がありそう。もっとも、JaggyはOS Xのごく一部のフレームワークしかサポートしていないし、JavaScriptだから動作速度が問題になる場合もあるってことは要注意ね。

個人的には、Objective-Cって意外と簡単!だと思うので、toolchainベース、あるいは間もなく(のハズ)の公式SDKでの開発をオススメしますけど、ちょっと雰囲気を味わってみたい向きには、Jiggyもヨロシゲです。

Timetracks.app登場

iPhoneのカメラを使ってスリットスキャン方式で画像を生成するTimetracks.appを公開しました。このアプリを起動すれば、自動的に1秒に1ラインずつカメラ画像を蓄積して、合計1800ライン(30分)の画像を作り出します。右上のinfoボタンをタップすれば、固定スリットスキャンか移動スリットスキャンか、いずれかの処理方法を選択できます。画像は実サイズで表示されているので、スクロールして見てくださいね。

iphone-timetracks-icon.png iphone-timetracks.jpg

元々のTimetracksはビデオ映像の時間的遷移を紙片に印刷する作品で、数メートルのロール紙に印刷したり、リアルタイムに短冊状の紙片に次々と印刷して展示していました。オリジナル版に比べて、iPhone版は機能や表現において部分的な実装に留まっているんだけど、そのエッセンスをなんとか盛り込もうとした訳です。

まぁ、コンピュータはオシマイと散々言っているので、少しずつでもAi紀(After iPhone Era)の表現を実践しなきゃね〜とつぶやく今日この頃でございます。さて、どうなりますことやら(笑)。

パフォーマンスを最適化せよ

Maxではサクサクとプログラムを作って行けるのが素晴らしいのですが、そのうちにパッチが肥大化・複雑化して音が途切れたり、フレーム・レイトが落ちたりってことが多々ありますよね。他のプログラミング言語でも同じようなことが起こりますが、Maxの場合は簡単にプログラミングできるが故に、下手なプログラムを作ってしまいがちですね。しかも、パッチ・コードがスパゲッティ状態で、どこをどう直せば良いか分からない。下手な鉄砲も数撃ちゃ当たる、とは限らないですから。

このような場合の対処法は、すっきりしたパッチに作り直すことがキホン(美しいパッチは美しく動作する!)ですが、もうひとつ役立つ(かもしれない)ことは、パッチの実行状態を分析することです。ただし、現在のMaxは分析機能をほとんど備えていないので、他のツールを使うことになります。

まず、手軽に試せるツールは、アクティビティモニタです。アクティビティモニタを起動して、MaxMSPを選んで表示メニューの「プロセスをサンプル収集」を選びます。これで、MaxMSPが実行しているプロセスを分析した結果が表示されます。この表示は階層化されているものの、スレッドの山盛り状態なので、これを読み解くのは結構大変です。

activitiesmonitor-sampling.png

もう少し賢い(いや、とっても賢い)ツールがDeveloper Toolsに用意されていて、それは/Developer/Applications/Performance ToolsにあるShark(サメ!)です。Sharkを起動したら、Time ProfileのProcessとしてMaxMSPを選んでStartボタンをクリック。しばらくすると分析結果が表示されます。以下の例では、jit.argb2uyvyとjit.slideの実行時間が長いので、このあたりを改善すればパフォーマンスが向上するかも?といったことが分かります。

shark-time-profile.png

SharkはMac OS Xの至宝のひとつで、それだけに高機能・多機能なSharkを使いこなすのは大変です。ただ、ヘナチョコ開発者の私でも適当にいじっているうちにヒントが見つかることが多いので、トライする価値はあります。Sharkの他にもDeveloper Toolsには、メモリ関係やOpenGL関係などの分析ツールが揃っていますから、イロイロと試してみると良いと思います。下手な鉄砲も道具を揃えれば当たる(かもしれない)ってことです。

ともあれ、Max5にもパフォーマンス分析ツールが備わって欲しいですよね。強く強く希望(って日本語で書いても届かない〜笑)。