ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

Appleのお茶目なプログラマーがiOSに隠し持たせたアスキーアート自動生成命令がギークっぽくて面白い

   

Uiimage asciidescriptionwithwidth height 00002

iOS用の世界一実用度の高いPython統合開発環境、Pythonistaを開発しているOle Zornさんが面白いものを発見していました。

それは画像をアスキーアートに変換するiOSに隠された命令。

カメラロールにアクセスするときに使うフレームワーク、AssetsLibrary.frameworkをロードするとUIImageに付加されるカテゴリメソッドのようです。

- (id)ASCIIDescriptionWithWidth:(int)arg1 height:(int)arg2;

Pythonistaを自身で使っている際に、UIImageのメソッドの補完候補の中に偶然見つけたのだとか。

PythonistaApp
カテゴリ: Productivity
販売元: Ole Zorn(サイズ: 225.2 MB)
全てのバージョンの評価: (46 件の評価)

Pythonistaにあるモジュール objc_util は、Objective-CのクラスをPythonから呼び出すためのもの。Pythonistaユーザーからリジェクトを心配されるほど強力です。

Pythonistaはまた、インテリセンスのような補完機能を持っていて、文脈を理解して補完候補を出してくれるのです。iOS上で動作するXcodeと言っても過言ではありません。

使ってみるとどんな感じ?

シミュレーターで実際に試してみました。

UIImage *img = [UIImage imageWithContentsOfFile:@"/Users/hoge/Dropbox/Twitter/avatar.png"];
NSLog([img ASCIIDescriptionWithWidth:80 height:80]);

結果はこんな感じです。左上のものが、元々の画像です。

Uiimage asciidescriptionwithwidth height 00003

こんな命令がどこかで使われているわけもなく、使う予定もなく作られたものでしょう。

Pythonista的にはこんな感じです。PILのImageからUIImageにキャストする方法がよく分からなかったので、一度画像を保存するようにしてみました。UIImagePickerControllerを直で使うにはdelegateがらみが面倒そうだったので横着しました。

Uiimage asciidescriptionwithwidth height 00004

実行結果。イメージピッカーで任意の写真を選んだ後、コンソールにプリントされると同時にクリップボードにもコピーするようにしてみました。

Uiimage asciidescriptionwithwidth height 00005

バーストモードで撮影した画像を処理すると……。

さらに発見は続きました。このことを聞きつけた @omichde さんが、この命令にバーストモード(iOS標準の写真.appでシャッターボタンを長押し)で撮影した写真を処理させると、アニメーションGIFを生成することに気づいたのです。

Ce8feee3f5

実用性は皆無ですが、この無駄な作り込みが何とも愉快です。

これを作ったのはだれなのか? もちろん、Appleのプログラマーにほかなりません。それが、この話の面白味のキモ。

AssetsLibrary.frameworkのプログラミングを担当したプログラマーが、イースターエッグ的に作った命令なのでしょうね。これを隠し持たせたまま、まんまとリリースすることに成功した当人の、ほくそ笑みが思い浮かぶようです。

世の中に億という単位で普及しているiOSデバイスの一つ一つに、アスキーアート自動生成機能が潜んでいると考えると、これは”帆場暎一”を超える偉業を成し遂げた、というと言いすぎでしょうか?

PythonistaApp
カテゴリ: Productivity
販売元: Ole Zorn(サイズ: 225.2 MB)
全てのバージョンの評価: (46 件の評価)

 - iOS