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

picomemo.app登場

ホーム・スクリーンに表示できる極小のメモ、picomemo.appを公開しました。ナント、英数字なら4文字程度、日本語なら2文字のみ表示可能という前代未聞の仕様ですが、Appleデザインの素晴らしさで、とっても目立ちます。真面目なのか冗談なのか、実用的なのか無駄なのか、よく分からない感じがグッドなんじゃないかと思います(笑)。

iphone-picomemo-icon.png iphone-picomemo.jpg

この赤い部分はアプリケーション・バッチと呼ばれていて、メールの未読数表示とかにも使われていますね。数字だけでなく任意のテキストを表示できますが、画像としてのバッチはサポートされていないみたい。コードは本質的には1行だけ。selfはアプリケーションのことね。

[self setApplicationBadge:@”色即”];

当初は、Dock上のアイコンみたいにアイコンを描き変えようとしてたのですが、それなりに面倒だったり、操作性が良くなかったりして、イマイチでした。でも、これがスマートにできれば、表示できる文字数が増えるので、もうちょっとメモ(付箋)らしくなりそう。それはきっとnanomemo.appという名前になるんだろうな。

iPhoneのファクトリー・フォント

ファクトリー・イメージファクトリー・サウンドに続いて、今回はiPhoneのファクトリー・フォントです。手順は以前の記事を参考にしてもらうとして、フォントは/System/Library/Fontsフォルダにあります。Finderでもおおよその字体が確認できますが、QuickLookやFontBookを使うと尚良しですね。

iphone-factory-fonts_s.jpg

すべてのフォントのサムネール一覧はコチラ(356KB)。

明らかに日本語フォントであるのはヒラギノ角ゴシック(ProNW3とProNW6) だけみたいですが、arialuni(ArialのUnicode版)やSTHeiti/STXihei(簡易中国語)あたりでも日本語が使えそう。7セグメントLED風のDB_LCD_Temp-Black(すべてのアルファベットはない、残念)とか電話用に最適化されているらしいPhonepadTwoとかも面白い。

フォント選択用らしいUIFontChooserを使うと、こんなビューが現れます。

iphone-uifontchooser.png

コードはこれだけ。

UIFontChooser *fontChooser = [UIFontChooser sharedFontChooser];
[mainView addSubview:fontChooser];

このビューで選択可能なフォントは以下の通り。

.helvetica It mm
.times It mm
american typewriter
applegothic
arial
arial rounded mt bold
arial unicode ms
courier
courier new
db lcd temp
georgia
helvetica
helvetica neue
hiragino kaku gothic pron
lock clock
marker felf
phonepadtwo
stheiti
times new roman
trebuchet ms
verdana
zapfino

はい、お疲れさまでした。

TapTheBeat.app登場

ミュージシャン必携ツール、タップする時間間隔によってテンポを表示するBPMカウンタ、その名も懐かしのTapTheBeat.appを公開しました。四分音符、八分音符、三連八分音符、十六分音符での時間長(ミリ秒)も同時に表示されます。上下ボタンで表示するテンポを調整することも可能です。鼻歌でも歌いながら曲のテンポを確認したり、テンポに合ったディレイ・タイムを割り出したりして使ってください。

iphone-tapthebeat-icon.png iphone-tapthebeat.jpg

写真では分かりにくいかもしれませんが、このアプリのグラフィックスは必要以上にジャギー・ジャギーしています。実はコレ、元々はTapTheBeatというDA(デスク・アクセサリ)なのです。DAなんて、最早誰も知らないでしょうけど、まぁ、そーゆーものがあって、しかも、白黒(グレースケールではない)画面が一般的だった頃に、なんとかウィンドウやボタンを立体的に見せようとしていたのが、こーゆー表現でした。

これは、当時ウルトラ・モダーンだったNeXTSTEPの影響によるもので、この輝かしい後継者が現在のMac OS XおよびOS Xですね。いや〜時の流れを感じさせると言うか、巡り巡って今再びと言うか、もう演歌の世界ですね(笑)。つまり、iPhoneの源流は20年ほど前にあって、それが今日まで(きっと未来へも)滔々と流れていることになります。Knowledge Navigatorも同時期だけど、遥かに小さなデバイスとして実現されているし、バトラーみたいなプッシュ型サービスは要らないよね。

ともあれ、懐古趣味であることは承知しつつ、そんな歴史的な意味もあって化石発掘的に疑似立体GUIを再現した訳です。以前にはWebの時代だってことで、Shockwaveプラグイン版も作ったけど、今じゃ動かないしね(苦笑)。それに、違和感タップリで変なインパクトがあって、何よりグラフィックスに悩まなくて済むのは有り難い(でも、リソース取得は大変でした)。まぁ、ニヤニヤしながら楽しんでください。

LEDBanner.app登場

LEDマトリックス風のメッセージ・ディスプレイ、LEDBanner.appを公開しました。設定したメッセージを延々とスクロール表示するもので、スクリーンをタップすればテキスト入力が現れます。部屋の片隅に置いてもいいし、腕に付けたりバックルに付けたりして、薄暗いクラブで遊んでください。

iphone-ledbanner-icon.png iphone-ledbanner.jpg

英数字だけでなく日本語表示もできるし、サポートされている言語なら何でもOKなハズです。ただ、逆スクロールはしないので、アラビックな人はゴメンナサイですね。日本語や中国語なら垂直スクロールって手もあったな。

LEDっぽい光の表現がイマイチだし、フォント関係の指定が分からないままなんだけど、まぁ、こんなものでしょうってところでリリースしました。アンチ・エイリアスがかかった多階調LEDバナーってのは、ちょっとイケてませんから、なんとかしたいところですが、これまた公式SDK待ちです。って、旧作をアップデートするのは面倒なので、そのままになりそうな予感大ですけどね。

Sinewave.app登場

些細なバグを潰して(それを見つけ出すのは難しい場合が多い)、まともにサイン波が鳴るようになったので、Sinewave.appとして公開しました。GUIも元祖Sinewaveに似せつつ、iPhone風に仕上げています。メーリング・リストへの元祖ポストも見つけました。なんてことをしていると、どこぞのマニアさんみたいですが(笑)、2001年オリジナル版と2008年ポーティング版とを仲良く並べて記念撮影です。

iphone-sinewave-icon.png iphone-sinewave.jpg

ともあれ、安定して動作するようになったものの、その結果は、当然のことながらサイン波です。凶暴な音が出ていたバグ入りバージョンに比べると、ちょっと気が抜けちゃいますね。ひとつのバグは安定動作させながら再現できるけど、もうひとつのバグはAPIを間違って多重呼び出ししていたので、復活させるとフリーズが再発します。うむ、困ったな〜。

【追記】書き忘れてました。iPodで音楽を流しながら、サイン波を鳴らすことができます。カラオケ・トラックを用意して、テルミンっぽく演奏してください…って、周波数がリニア・スケールなので(何故って元祖Sinewaveがそうだから)メロディをとるのは難しかもね。

Sinwave.app登場

iPhone用の凶暴なカオス的オーディオ・オシレータ、Sinwave.appを作成しました。なかなか素晴らしいサウンドなのですが、操作するうちに確実にiPhoneがフリーズするので(笑)、取り敢えず公開したのはYouTubeでのデモ・ムービーだけです。偶然だと思うけど、ファイルの一部が破損したこともあって、音だけでなく動作も狂暴なのかもしれません。タイトルもSinewave(サインウェーブ、サイン波)じゃなくって、Sinwave(シンウェーブ、罪悪波?過失波?)ですよ。

iphone-sinwave-icon.png iphone-sinwave.jpg

元々は、そろそろ(面倒っぽいけど)Audio Queueをやらなきゃな〜ってことで、James McCartney氏が作成したSinewaveなるCocoaアプリをiPhoneに移植しようとしていました。JamesはSuperColliderのオリジナル開発者で、SuperColliderをMac OS Xに移行させる前段階として試作したのがソレね。移植と言っても、Cheetah(Mac OS X 10.0)時代のHALとLeopardから導入されたAudio QueueとではAPIが違うので、サイン波生成部分をいただいて、GUIを似せた程度ですけどね。ちなみに、サイン波生成は単純にsin()関数ですね。プログラミング言語では伝統的にsine()じゃなくってsin()です。

それで、何度かのビルド・エラーとランタイム・エラーを乗り越えて、初めてiPhoneから出た音がコレだったんです。もう一発でシビレました(低脳表現だな〜笑)。おそらく、バッファにデータを書き込む時に馬鹿をしていて、そのせいで凶暴音になるし、場合によってはフリーズしちゃうんですね。でも、そんなことはどうでも良いくらいにグレートな音だったので、それ以上コードを直すことを止めて、ビルドしたアプリを永年保存することにしました。

ミスやエラーが創造に繋がることは多々指摘されているけど、このケースもその典型ですね。一方で、公式SDKや公式実行環境では、こんな無謀が許されないかもしれず、その点が心配になります。セキュリティ絡みで窒息している馬鹿Flashが良い(悪い)例ですから。砂場(サンドボックス)では、創造性は萎びてしまいます。無茶をやりましょう。無茶ができる環境を求めましょう。無茶な世界でも、紳士淑女として振る舞えるからね(ってのは性善説、セキュリティは性悪説)。

Mirrorscope.app登場

iPhoneのカメラを用いたミラー的なリアルタイム映像エフェクタ、Mirrorscope.appを公開しました。機能的には単純なので説明を付けていませんが、起動すれば自動的に映像が表示され、スクリーンをタップすれば一時停止、iPhoneを振ればエフェクトが変わります。

iphone-mirrorscope-icon.png iphone-mirrorscope.jpg

エフェクト自体はどこにでもあるようなものだけど、これがiPhoneで動作すると、世界が一変します。散々言っているコンピュータ終焉論が、私の本業(?)である表現の世界でも確実になったと実感しちゃいました。コンピュータはもちろん、PAやプロジェクタを使っている場合ではないです(と言いながら、まだまだ使うんですけどね〜笑)。

だから、Time Machine!ATOMxGALAXIESのような表現が、もうすぐiPhoneで動きます…と言いたいものの、映像処理の詳細がまるで分かっていません。カメラのプレビュー映像を表示することは簡単だけど、その画像にアクセスできない(涙)。それは通常のビットマップではないようで、ハードウェアがスクリーンに直接描画しているのかもしれないです。これまた2月待ちですね。公式SDKがサンドボックスだったら、本当に泣いちゃいますよ。

Compass.app登場

iPhoneを使って方角を知るためのツール、Compass.appを公開しました。日時計とは逆の仕組みで、時刻が分かっていれば太陽の光によって方角が分かるので、それをアプリケーション化した訳です。Yes|No.app並みに単純&お馬鹿っぽいものの、それなりに有用なツールでございます。

iphone-compass-icon.png iphone-compass-howtouse.png

原理もプログラミングも簡単だけど、これってコンピュータ用には作らないよね。ディスプレイを水平に置くのは、タブレット型以外は大変だからね。その意味では、iPhoneなどの掌デバイスらしいアプリだと思います。

ちなみに、Firmware 1.1.3でMapsにロケーション機能が付くので、ちょいと有用性が薄れました。でも、Wi-Fi電波が届かない山岳や荒野で道に迷った時には使えますよ。夜はどうするのかと言えば、画面上の「N」の方向を北極星に向けます…ってのは、余りにも寒いのでREADMEには書いていません(笑)。

あと、日本じゃ関係ないけど、サマー・タイムや南半球には未対応です。iPhoneでは日付やタイム・ゾーンを設定するので、それから情報を得られるハズなんだけど、iPhoneのAPIとして何が使えるのかは探求できていません。まぁ、公式SDK待ちですね。

iPhoneのファクトリー・サウンド

iPhoneのファクトリー・イメージの次は、当然、ファクトリー・サウンドですね。こちらも、ほぼ同様の手順です。

1. iPhoneのディスク・イメージをマウント
Firmware 1.1.2の場合、ファームウェア・ファイルのダウンロードはココから。ターミナルでのコマンド入力は以下の通り。

vfdecrypt -i 022-3725-1.dmg -o decrypted112.dmg -k 70e11d7209602ada5b15fbecc1709ad4910d0ad010bb9a9125b78f9f50e25f3e05c595e2

2. マウントしたディスク内でサウンド・ファイルを検索
サウンド・ファイルはアプリケーションなどの内部にも納められているので、パッケージ内部も検索できるEasy Findなどを使い、.caf、.m4f、.aif、.wavなどを検索すると良い。Firmware 1.1.2の場合、Oktoberfest3B48b.UserBundleディスクには106個のサウンド・ファイルが含まれている(みたい)。

3. 見つかったサウンド・ファイルを別のフォルダにコピー
Easy Findの場合、リストのファイルをすべて選択してコピーする。次いで、Finderで新しく作成したフォルダを開いて、編集メニューの「項目をペースト」を選ぶ。

以上の手順で、iPhoneに納められたサウンド・ファイルを入手できます。

iphone-factory-sounds.png

当初は.m4aや.movだった着信音は、現在は.m4rファイルになっています。この.m4rファイルや一部の.cafファイルはFinderやQuickTime Playerでは再生できません。.m4rファイルは.m4aに拡張子を変えれば開くことができますが、認証が必要と言われてしまいます(涙)。音ネタに使いたい場合は、古いFirmwareファイルを使うしかないみたいです。変換と言うか、認証破りの方法があるのかな?

iPhoneのファクトリー・イメージ

iPhoneの勝手アプリで難しいことのひとつは、GUIデザインですね。インタラクションはもちろんのこと、グライフィック・デザインだけでも大変。iPhoneの強烈な世界観から逸脱せず、明確さと妥当さを失わず、しかし個性を主張するデザインって、ホント難しい。勝手アプリとは言え、デザインまで勝手では、いくら機能が優れてても使う気にならないよね。そんな自己規律性がiPhoneをiPhoneたらしめている訳です。

それは、Apple自身も時々失敗している(笑)くらいなんだけど、私のような素人には「真似る」のが最初の一歩。そこで、iPhoneが標準で持っている画像ファイルを参照&応用しています。iPhoneに入っている画像はすべて(たぶん)pngファイルですが、これらは一般的なフォーマットではないので、そのままでは画像として表示できません。そこで、以下のようにしてファイル収集とフォーマット変換を行ないます。

1. iPhoneのディスク・イメージをマウント
Firmware 1.1.2の場合、ファームウェア・ファイルのダウンロードはココから。ターミナルでのコマンド入力は以下の通り。

vfdecrypt -i 022-3725-1.dmg -o decrypted112.dmg -k 70e11d7209602ada5b15fbecc1709ad4910d0ad010bb9a9125b78f9f50e25f3e05c595e2

2. マウントしたディスク内でpngファイルを検索
画像ファイルはアプリケーションなどの内部にも納められているので、パッケージ内部も検索できるEasy Findなどを使って、.pngを検索すると良い。Firmware 1.1.2の場合、Oktoberfest3B48b.UserBundleディスクには1,071個の.pngファイルが含まれている(みたい)。

3. 見つかったpngファイルを別のフォルダにコピー
Easy Findの場合、リストのファイルをすべて選択してコピーする。次いで、Finderで新しく作成したフォルダを開いて、編集メニューの「項目をペースト」を選ぶ。

4. iPhonePNGでファイル変換
iPhonePNGの書式は以下の通りで、この場合pngファイルをコピーしたフォルダを指定する。

iPhonePNG < 処理するディレクトリまたはファイルの名前>

これで、名前の最後に「-Decoded」が付いたフォルダ(またはファイル)が作られ、変換されたpngファイルは一般的なファイル・フォーマットになっています。

iphone-factory-images.jpg

すべての画像ファイルのサムネール一覧はコチラ(1.6MB)。

それにしても、私にはデザイン才能がないことは明々白々。GUIがほとんどないav.appやYes|No.appはともかく、真似っこ路線の典型Pericam.appとか、結構逸脱しちゃっているakaRemote.appとか、2〜3回はデザインを練り直しているにもかかわらず、あの体たらく。T4Two.appのグラフィックスもイケてないですね(涙)。どなたか助けてください(笑)。