Hatena::Groupiphone-dev

Ni chicha, ni limona - 平均から抜けられない僕

2010-11-06

[Metronome PRO][books] 書籍「iPhone, iPad and Music」にアプリが掲載されました 00:45  [Metronome PRO][books] 書籍「iPhone, iPad and Music」にアプリが掲載されました - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [Metronome PRO][books] 書籍「iPhone, iPad and Music」にアプリが掲載されました - Ni chicha, ni limona - 平均から抜けられない僕  [Metronome PRO][books] 書籍「iPhone, iPad and Music」にアプリが掲載されました - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

音楽関係のアプリを精力的に紹介しているサイト「iPhone・iPad and Music App blog」の方が、様々な音楽シーンで役立つアプリや、iPhone/iPadを活用した音楽活動を行っている方へのインタビューなどを載せた書籍「[ http://amzn.to/aQUtCj:title=iPhone, iPad and Music]」を出版されています。



この本の「ユーティリティ」カテゴリにて、なんと拙アプリMetronome PRO」を紹介していただきました!

同じメトロノームアプリである「Tempo」と共に「正確なテンポの振り子アニメーションを忠実に再現したメトロノームアプリ」として載っています。

ううう、ありがとうございます。


それ以外のアプリも、音楽系の厳選したアプリがたっぷりと載っていますので、非常に読み応えのある、ワクワクする本になっています。開発者にとっても、音楽を専門にしている方がどういうアプリを望んでいるかを垣間見ることの出来る内容ですので、ぜひお手にとってみてはいかがでしょうか。


もちろん、私も買いました。記念にします。


  f:id:paella:20101107003556j:image:w300


ちなみに、後ろに写っているのは先月号のnon-noです。ここでも拙アプリを「作曲家おすすめのアプリ」として紹介して頂きました。桑原ゆうさんという、現代音楽の作曲を手がけている方です。


皆さんにこうして使っていただけるのは、本当にありがたいことです。

2010-10-30

今回は2つの大きなニュースがあります!

[OpenGL ES2.0] Jeff Lamarche氏のOpenGL ES2.0本がブログに掲載され始めました 08:24  [OpenGL ES2.0] Jeff Lamarche氏のOpenGL ES2.0本がブログに掲載され始めました - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [OpenGL ES2.0] Jeff Lamarche氏のOpenGL ES2.0本がブログに掲載され始めました - Ni chicha, ni limona - 平均から抜けられない僕  [OpenGL ES2.0] Jeff Lamarche氏のOpenGL ES2.0本がブログに掲載され始めました - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

先日、出版が無期限延期になったと記事に書いたOpenGL ES2.0本ですが、同氏のブログにてさっそく原稿が公開され始めまています。

現在、1〜3章までが公開されています。



PDF形式の元ファイルをHTMLに変換して掲載しているようで、図版などもしっかり載っています。もちろん、同氏の最大の特徴である文章の分かりやすさはそのままです。


本当に頭が下がる思いです。

追記ログ

【マルチタスキングとGLES2.0のPDF

10月にフィラデルフィアで発表したというスライドが紹介されていました。Open GL ES2.0絡みですので、こちらでも紹介しておきます。



[iPhone][app] Metronome PRO2.2がリリースされました! 08:24  [iPhone][app] Metronome PRO2.2がリリースされました! - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone][app] Metronome PRO2.2がリリースされました! - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone][app] Metronome PRO2.2がリリースされました! - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

皆様のおかげでご好評をいただいているiPhone/iPod touchアプリ、Metronome PROのバージョン2.2が、本日公開されました。

f:id:paella:20101030081805p:image:h300:right


今回のアップデート内容は以下のとおりです。基本的には、ユーザーの皆様からいただいたご要望に応えた内容になっています。

  • 日本語UIに対応(皆様、大変お待たせしました)
  • 本物のメトロノームのサウンドセットを追加(皆様、お待たせしました)
  • 多数のリズムを追加(Szabihs様、いかがでしょうか?)
  • アプリケーションバックグラウンドから復帰させたときにサウンド再生が行えなくなる問題に一部対処(Hiatori様、ありがとうございます)
  • 各サウンドの音圧を上げました(kazotsu様、piece of guitar様、きら★こーた様、ありがとうございます)
  • ボリューム調整ボタンの初期画像が実際の音量と異なっていた不具合を修正

連絡:

きら★こーた様のBluetooth対応ですが、Bluetooth通信規格の仕様上どうしてもサウンド再生に2-3秒の遅れが発生してしまいます。申し訳ありませんが、ご了承頂けると幸いです。また、サウンド再生の位置については現在検討中です。ご迷惑をおかけします。


   Metronome PRO 2.2サイトへのリンク


まだまだ企んでいる機能がありますので、継続して開発作業を続けます。

こうして開発を続けられているのも、ひとえに皆様のお陰です。本当にありがとうございます。


使いやすいアプリを目指して頑張ります。

2010-10-28

[iOS][OpenGL ES2.0][Books] 密かに期待していたJeff Lamarche氏のGL ES2.0本が無期限延期に 01:31  [iOS][OpenGL ES2.0][Books] 密かに期待していたJeff Lamarche氏のGL ES2.0本が無期限延期に - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iOS][OpenGL ES2.0][Books] 密かに期待していたJeff Lamarche氏のGL ES2.0本が無期限延期に - Ni chicha, ni limona - 平均から抜けられない僕  [iOS][OpenGL ES2.0][Books] 密かに期待していたJeff Lamarche氏のGL ES2.0本が無期限延期に - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

残念なニュースが飛び込んできました。心待ちにしていたJeff Lamarche氏のOpenGL ES2.0本が、同氏の多忙を理由に無期限延期になってしまったようです。


  ブログが見つかりません


私がiOSで開発を始めたとき、いつもJeff Lamarche氏の「Beginning iPhone Development」を手元に置いて読んでいました。軽妙な語り口にも関わらず丁寧な記述は、iPhone SDKプログラミングを始めたばかりの私にとっては最高の入門書でした。日本でも「はじめてのiPhoneプログラミング」「はじめてのiPhone3プログラミング」と和訳版が相次いで出版され、いずれも人気の本になるほど完成度だったのです。


そんな方がある日「実はOpen GL ES2.0についての本を書いているんだ」という内容の記事をブログに載せていたので、楽しみにならないはずがありません。

時折彼のブログを覗いては、状況を知ろうとしていました。


As a result, today, I made the difficult decision, along with my editor at Prags, to indefinitely shelve the OpenGL ES 2.0 book project.


そんな折のこのニュース。非常に残念でなりません。書籍執筆に要するエネルギーは相当なものだと最近自覚していますが、忙しさが問題であれば、誰か他の方との協業でうまく進めてくれないかなあとも思います。

すでに執筆した数章はブログに公開できるよう調整しているとのことですが、ぜひ出版を願いたいところです。


2010/10/29追記

同氏のブログ新しい記事がポストされました。それによると「出版元との調整もすみ、もうしばらくしたらブログ上でこれまでの記事を紹介できそうだ」とのこと。


書籍出版の機会を逸したにも関わらず、すばらしい姿勢です。見習うところが多いですね。

2010-10-26

[iPhone][Icon][info.plist] info.plistでのアイコン指定で勘違いしやすいこと 11:14  [iPhone][Icon][info.plist] info.plistでのアイコン指定で勘違いしやすいこと - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone][Icon][info.plist] info.plistでのアイコン指定で勘違いしやすいこと - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone][Icon][info.plist] info.plistでのアイコン指定で勘違いしやすいこと - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

iOSのアプリケーションで使用するアイコンについて、注意しておきたいことを書きます。

その前に読んでおいてほしいサイトとか

アイコンについての詳しい説明が載っている記事です。

もちろん、公式資料である「iPhone Application Programming Guide」とか、「Information Property List Key Reference」とかも読んでおきましょう。

アイコンにはどんな種類があるのか。

iOS上で動くアプリケーションは3種類のアイコンを持つことができ、それぞれについて標準解像度版と高解像度版、あるいは大小サイズの2タイプが定義できます。

色んな資料から引っ張ってきて、全種類を一覧にするとこんな感じ。

#用途タイプ画像サイズ
1ホーム画面用iPhone標準解像度57x57
2ホーム画面用iPhone高解像度114x114
3ホーム画面用iPad標準解像度72x72
4Spotlight/設定画面用iPhone標準解像度29x29
5Spotlight/設定画面用iPhone高解像度58x58
6Spotlight/設定画面用iPad標準解像度50x50
7ドキュメントアイコン用iPhone標準解像度22x29
8ドキュメントアイコン用iPhone高解像度44x58
9ドキュメントアイコン用iPad小サイズ64x64
10ドキュメントアイコン用iPad大サイズ320x320

7-10で紹介しているのは、.pdfや.txtなどの特定の拡張子によってアプリと関連づけられたドキュメントに使用するアイコンです。デスクトップOSでのドキュメントアイコンと同じですね。こちらはCFBundleIconFile(s)キーではなく、CFBundleTypeIconFilesキーで指定します。


それともう1つ、AppStoreで表示される512x512の画像も。合計なんと11種類!

なんだかものすごい量です。心がくじけてしまいそうです。


とはいうものの、幸いiOSは少しだけ賢くて、一番似ているサイズを自動で選んでくれます。用意していないサイズでも近いものを選んでリサイズした上で使ってくれます。なので最低限あれば良いファイルというのは決まっています。

全部がMUSTだったら、アプリを作るための最大の障壁になっていたかもしれませんので、助かりますね。


※ちなみに、どれがMUSTでどれがSHOULDなのかは、AppleのQA(Guides and Sample Code)にバッチリ載っていますので、そちらを見ておくと良いです。"required"なファイルが、ケースバイケースで書かれています。


しかし、id:nakamura001 さんの記事で書いてあるとおり、これらをinfo.plistに設定する場合は順序が重要になるというバッドノウハウが存在します。

7-10のドキュメントアイコンはともかくとして、iOSは少しだけしか賢くないので、順番が内部の選択基準(当然非公開)からずれていると、目的のファイルとは別サイズの画像がマッチしてしまうのです。

この点はIconsサンプルプロジェクトやnakamura001さんの記事をよく読んでおいてください。


で、本題の勘違いしがちなこととは?

ようやく本題です。


info.plistに指定するアイコンファイルですが、実はこれ、UIImageの読み込み系とは異なり「ファイル名に何を指定しても大丈夫」です。苦労して~ipadとか@2xとか-smallとか-57とか名付けても、全然関係ないのです。

定義順と画像サイズだけで判断しているようです。


この点、勘違いしやすいので注意してください。「あれ?画像を名前付けて指定してるのに何か違うのが選ばれているぞ?」というときは、たいてい順番かサイズに問題があります。

というわけで

竜頭蛇尾な感覚を拭いきれない文章になってしまいましたが、開発者がアイコン指定するときの、一助になるといいなと思います。

Special Thanks

この記事を書く上で参考になる情報をいただきました。ありがとうございました!

MatildaMatilda2011/09/18 12:05You are so awesome for helping me solve this meytsry.

srvphfsrvphf2011/09/18 16:40qOkWW0 <a href="http://xhddoeumrymy.com/">xhddoeumrymy</a>

pzthnsknmapzthnsknma2011/09/19 19:39cufZcK , [url=http://bvpbyqtnfobp.com/]bvpbyqtnfobp[/url], [link=http://nmmcxhkevyxq.com/]nmmcxhkevyxq[/link], http://hxxrjecrdwqg.com/

vbuulnhjzkvbuulnhjzk2011/09/24 01:24oA9PW5 <a href="http://ohsntmyltstu.com/">ohsntmyltstu</a>

2010-10-14

[AssetsLibrary] フォトライブラリの写真にExif情報を付けて保存する 00:40  [AssetsLibrary] フォトライブラリの写真にExif情報を付けて保存する - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [AssetsLibrary] フォトライブラリの写真にExif情報を付けて保存する - Ni chicha, ni limona - 平均から抜けられない僕  [AssetsLibrary] フォトライブラリの写真にExif情報を付けて保存する - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

iOS4.1から、カメラロールにデータを保存する際に画像のメタデータも一緒に保存できるようになりました。

つまり、iOS3以前ではトリッキーな方法でしか実現できなかったExif情報の付与も、ごく簡単にできるようになったわけです。


具体的には、ALAssetsLibraryクラスのwriteImageToSavedPhotosAlbum:metadata:completionBlock:メソッド、あるいはwriteImageDataToSavedPhotosAlbum:metadata:completionBlock:メソッドを使用します。両者の違いは画像データがCGImageRefか、NSDataかです。


イメージピッカーで選んだ写真を元に、コメントとシャッター速度の2つのExif情報を付けて保存するサンプルコードを以下に記します。

#import <AssetsLibrary/AssetsLibrary.h>
#import <ImageIO/ImageIO.h>

-(IBAction)takeButton:(id)sender {
  UIImagePickerController *picker = [[[UIImagePickerController alloc] init] autorelease];
  picker.sourceType = UIImagePickerControllerSourceTypeCamera;

  picker.delegate = self;
  [self presentModalViewController:picker animated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];

    if (assetURL) {
        ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset *asset) {
            ALAssetRepresentation *representation;
            representation = [asset defaultRepresentation];

            // 元から付いているメタデータも残す
            NSMutableDictionary *metadata;
            metadata = [[NSMutableDictionary alloc]
                         initWithDictionary:[representation metadata]];

            // コメント、シャッター速度をExif情報として設定
            NSDictionary *exif = [NSDictionary dictionaryWithObjectsAndKeys:
                                  @"コメント",
                                  (NSString*)kCGImagePropertyExifUserComment,
                                  [NSNumber numberWithFloat:0.125f],
                                  (NSString*)kCGImagePropertyExifExposureTime,
                                  nil];
            [metadata setObject:exif
                         forKey:(NSString*)kCGImagePropertyExifDictionary];

            // カメラロールにメタデータを付けて書き込み
            ALAssetsLibrary* l = [[ALAssetsLibrary alloc] init];
            [l writeImageToSavedPhotosAlbum:[representation fullScreenImage]
                                      metadata:metadata
                            completionBlock:^(NSURL* url, NSError* e){
                                NSLog(@"Saved: %@<%@>", url, e);
                            }];
                            [metadata release];
            [l release];
        };
        
        ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
        [library assetForURL:assetURL
                 resultBlock:resultBlock
                failureBlock:^(NSError *error) {
                    NSLog(@"error:%@", error);
                }];
    } else { NSLog(@"error"); }
    
    [picker dismissModalViewControllerAnimated:YES];
}

事前にAssets Libraryフレームワークをプロジェクトに追加し、さらにExif情報を文字列リテラルで扱えるImageIOフレームワークも追加するのを忘れないようにお気を付けください。


こうして保存した画像をMac OS X上のプレビューアプリで見れば、Exif情報が付与されていることが分かります。


ちなみにAssets Libraryフレームワークでは、既存の写真を変更したり、削除したりすることはできません。新しいデータをカメラロールに保存できるのみです。

カメラロールくらいは変更・削除を許可してくれてもいいのになあと思いますが・・・。


それにしてもAssets Libraryフレームワークは超便利です。独自のイメージピッカーも自由に作れるようになりますし、ますます便利になりましたね!

参考サイト

イメージピッカーから選んだ写真の、Exif情報を取り出すときのサンプルコード。 @sumihiro さん。

ImageIOフレームワークとCoreGraphicsを使って、バンドル内にExif付きのデータを保存するサンプルコード。 @nakamura001 さん。

wavdevwavdev2011/01/10 09:39iOS4.2から [info objectForKey:UIImagePickerControllerReferenceURL]がNULL返すようになっちゃいましたね。iOS4.1ではOKだったんですが...ちょっと苦戦してます。

2010-08-17

[Device] デバイス/シミュレータの切り分け 08:57  [Device] デバイス/シミュレータの切り分け - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [Device] デバイス/シミュレータの切り分け - Ni chicha, ni limona - 平均から抜けられない僕  [Device] デバイス/シミュレータの切り分け - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

便利な表をどこかで見つけたので、ここにもメモしておきます。


Mac OS XiOS deviceiOS simulator
TARGET_OS_MAC111
TARGET_OS_IPHONE011
TARGET_OS_EMBEDDED010
TARGET_IPHONE_SIMULATOR001

マルチタスキングの調査でバックグラウンドオーディオの振る舞いを調べていたらどうにもうまくいかない、何故だろうと調べていたら「iPhoneシミュレータでは基本未サポート」だったという自戒です。

2010-06-04ここ最近の出来事

[misc] アプリバージョンアップしたり本に名前が載ったりなど 13:36  [misc] アプリをバージョンアップしたり本に名前が載ったりなど - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [misc] アプリをバージョンアップしたり本に名前が載ったりなど - Ni chicha, ni limona - 平均から抜けられない僕  [misc] アプリをバージョンアップしたり本に名前が載ったりなど - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

ここ最近の出来事を書きます。

1. Metronome PRO 2.0リリースと、機能追加に伴うよもやま話

本日、MetronomePROのバージョン2.0が無事にAppleの審査をとおり、リリースされました。申請したのが5月26日(水)で、認可されたのが今日ですので、実質9日ほど掛かっています。

最近はiPad人気やWWDCなどの準備で忙しいのかもしれないですね。


  「Metronome PRO ver2.0」(iTunesへのリンク)


  ■AppBankでのレビュー記事:

  「PROの冠は伊達じゃない!全ミュージシャン必携の逸品メトロノームアプリ。1862」(ver.1.1)

  「新機能、新デザイン追加。着実に進化している逸品メトロノームアプリ。81」(ver.1.2)


f:id:paella:20100604122037p:image:w160:right

今回のアップデートでは以下の機能改善が行われています。


  • サウンドエンジンの精度が若干落ちていたのを修正
  • クリック音を従来の左右だけでなく、中央にも設定変更できるようになった
  • アクセントに合わせてバイブレーションさせる機能を追加

実は改善された項目の2番目(音の鳴らす位置を変えられる)は、以前からレビューで沢山の要望をいただいていたものです。

これはもともと実現可能な機能ではあったものの、「Metronome Proアプリとしてのリズムの刻み方」という当初決めたポリシーに反していたので、敢えて対応していませんでした。


しかし発売から時間が経って、勉強を重ね、そしてより多くのユーザーの声を聞き続けるうちに、だんだん私のリズムの刻み方に対する知識が広がってきました。また、もう1つのポリシーである「奏者の空気になること」を実現する上で、余計な意固地さを見せることはかえって目立ってしまうことになり良くないことに気づかされました。


Metronome Proはメトロノーム機能だけという地味なアプリとはいえ、すでに世界の4500人以上*1の皆様にご利用頂いているソフトになっています。こうした方々からもっと「見えなく」するため、そしてアプリのポリシーをもっと良い形で貫くために、今回の機能追加を判断しました。


皆様、ありがとうございます。今後も宜しくお願い申し上げます。


2.ドイツのAppStoreでレビューをいただきました。

great app. thank you very much for a last update. changes in sound - exactly what I was expecting.

I am professional musician and I was checking all metronom apps. this is the best one for sure!

というコメントをいただきました。つまり「全メトロノームアプリの中で最高のappだよ(ドイツ在住 プロミュージシャン)」というわけで*2、頑張ってきた甲斐があったなあと。


レビューにお礼が書けるといいなあと思ったり。


3.アプリの謝辞欄に名前が載りました。

企業法務について」というブログを書いていらっしゃるkatax氏が、「ITエンジニアのための契約入門(iTunesへのリンク)」というアプリをリリースされています。


 ITエンジニアのための契約入門(iTunesへのリンク)

 AppBankでのレビュー記事:ITエンジニアのための契約入門: テキストとストーリーの構成で契約に関する基礎知識を学べる電子書籍です。1306 | AppBank – iPhone, スマホのたのしみを見つけよう

このアプリの文章査読で少しだけですがお手伝いさせてもらい、謝辞欄に名前が載りました。


   f:id:paella:20100604130311p:image:w160


アプリの請負やシステムの受託開発など、コンピュータ系のお仕事をするときに約束事を決める場面でのノウハウがびっしり詰まった良書です。

たかだか缶ジュース3本ほどの金額で、これだけのノウハウを身に付けられることはそうそうないと思います。分かりやすい文章もオススメの1つですので、ぜひ買って読んでみてください。

後悔はしないと思います。


ちなみに、このアプリのビューワ部分のエンジンはGitHubにて公開されています。こうした積極的な姿勢は私も見習いたいです。


4.書籍「そのまま使えるiPhoneアプリプログラミング」に名前が載りました

で、One more thing.


毎日コミュニケーションズから先頃出版されて、やねうらお 氏もブログで取り上げている話題の本、「そのまま使えるiPhoneアプリプログラミング」でも、微力ながらお手伝いさせてもらいました。


   

そのまま使える iPhoneアプリプログラム

そのまま使える iPhoneアプリプログラム


なんとこちらも謝辞欄に名前が載りました。


執筆者のSeasons氏岸川氏のお二人ともすごい開発者で、ほとんどお手伝いすることもなかったのですが、査読を少し。


献本頂いた本はさっそく田舎の両親に見せて、自慢したりするのに使っています。


というわけで、まとめ

あれもこれも、みなさんのおかげです。本当にありがとうございます。

*1:少し前の情報なので、今はもうちょっと増えているかもです

*2:意訳ですよね分かってますとも。

2010-05-05

[Tips][image] プレビューで作成した画像のサイズを削減する方法 00:20  [Tips][image] プレビューで作成した画像のサイズを削減する方法 - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [Tips][image] プレビューで作成した画像のサイズを削減する方法 - Ni chicha, ni limona - 平均から抜けられない僕  [Tips][image] プレビューで作成した画像のサイズを削減する方法 - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

f:id:paella:20100506000815p:image:right


画像を作成する際、私はよく


  1. 画像編集アプリで高解像度のイメージを作成
  2. プレビューアプリでサイズを変更して保存

という手順で必要なサイズの画像を作成しています。

ところがSnow Leopardになって以来、2のプレビューアプリで保存する際、勝手にColorSyncプロファイルがファイル内に埋め込まれてしまうようになりました。


色をデバイスに対して正確に出力するためには必要なプロファイルですが、iPhoneアプリを作るときのように、少しでもファイルサイズを減らしたい場合には困ることもあります。プロファイル情報が不要な場合もあるでしょう。

けれども、プレビューアプリの範囲ではプロファイルを除去することは不可能らしく、別の方法をとらなければいけません。


そこでいろいろと調べたところ、今回のような状況ではMac OS Xで標準提供されているsipsコマンドを使うことが簡単だと判りました。

ターミナルアプリ*1から以下のコマンドを入力するだけで、同情報がファイルから取り除かれ、結果としてファイルサイズが小さくなります。


# プレビューアプリで付くプロファイルは-dオプションでのみ除去出来ますが、
# 同じようにプロファイルを除去する場合の、他のオプション:
# 「--deleteColorManagementProperties」も記しておきました。
$ sips -d profile --deleteColorManagementProperties orig.png

手元のファイルでは1.4KBだったPNGファイルが、637bytesまで小さくなりました(19x23ピクセルの小さな画像です)。いくつも画像を持つような場合には効果があるのでは、と思います。


以上、ご参考まで。

*1:私はiTermを使っています

2010-03-30

[NSAutoReleasePool][CFRunLoop] NSAutoReleasePoolの管理者は誰であるべきか 19:03  [NSAutoReleasePool][CFRunLoop] NSAutoReleasePoolの管理者は誰であるべきか - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [NSAutoReleasePool][CFRunLoop] NSAutoReleasePoolの管理者は誰であるべきか - Ni chicha, ni limona - 平均から抜けられない僕  [NSAutoReleasePool][CFRunLoop] NSAutoReleasePoolの管理者は誰であるべきか - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

昨晩、スレッドを使いこなすために「NSAutoReleasePoolをどこで作るか」というのを調べていました。


プロジェクトを新規作成するとmain()内に以下のコードが記述されています。

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;

これに対し、「なぜランループ内ではなく、main()に直接書いてあるのだろう?これだと記入漏れやうっかり削除もあり得るのでは?」と思ったわけです。

そこでTwitterで呟いたところ、投稿が物書堂さんとnorio_nomuraさん、cqa02303さんの目に留まり、色々とアドバイスをしてもらいました。


そのときの内容をとTogetterで纏めましたので、ここにリンクを貼っておきます。


 NSAutoReleasePoolの作成&解放タイミングについて - Togetter


最後はnatsun_happyさん*1にも混じっていただいたおかげで、うまい具合にまとめることが出来ました。

皆様、ありがとうございました。


TLで出てきたTips

上記タイムラインで出てきたTipsをここにも記しておきます。


NSAutoReleasePoolの中味をログ出力させる

クラスメソッド[NSAutoReleasePool showPools]を使います。Unpublished Methodなのでビルド時に警告が出ますが問題はありません(Objective-Cはすごいですね)。

これにより以下の情報を確認できます。

  • NSAutoReleasePoolが何層構造になっているか
  • 各階層では何のクラスのオブジェクトが保持されているか

あまり詰まっているようだとメモリ活用として問題があると思いますので、参考にすると便利です。

NSAutoReleasePoolが作られていないときにautoreleaseされるオブジェクトがあるかどうかの識別方法

自分の作ったスレッドでプールがきちんと使われているか心配になったときは、ログに

…autoreleased with no pool in place - just leaking

と出力されていないかをチェックしてみてください。もしプールを用意していなければ、autoreleaseしたタイミングで上の文字列が問題のクラス名と共に出力されます。

通常は設計の時点でこんな不具合は潰されているべきですけれど・・・。


MetronomePROに関するお詫び 19:03  MetronomePROに関するお詫び - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  MetronomePROに関するお詫び - Ni chicha, ni limona - 平均から抜けられない僕  MetronomePROに関するお詫び - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

最後に、お詫びです。


拙作のメトロノームアプリMetronomePRO(iTunesが開きます)」ですが、現行の1.3で見られる幾つかの不具合を修正した1.3.1のレビューがなかなか終わりません。現在5日目に突入です。


アップルiPadアプリ審査に注力しているせいかなとも思いますが、ユーザーの皆様、どうぞもう少しだけ修正版のリリースをお待ちください。

ご迷惑をおかけいたします。

*1:CoreData周りにとてもお詳しい方です。

2010-03-19

しばらくぶりですので、色々と書くことがあります。ただ、まずは以下の記事。

[Metronome PRO] Metronome PRO ver.1.3がリリースされました 18:48  [Metronome PRO] Metronome PRO ver.1.3がリリースされました - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [Metronome PRO] Metronome PRO ver.1.3がリリースされました - Ni chicha, ni limona - 平均から抜けられない僕  [Metronome PRO] Metronome PRO ver.1.3がリリースされました - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

拙作メトロノームアプリ「Metronome PRO」の最新版が本日、リリースされました。

今回のバージョンアップでは、

  • レビューで「ブックマーク編集中に落ちる」と指摘のあった不具合の修正
  • 従来1-9拍だったbeatに0拍を追加
  • プリセットリズムとして各種リズムを提供(従来のサンプル方式ではなく、別途枠を設けて提供するようにしました。これでバージョンアップ時のリズム追加にも追従できるようになりました)

といった点が改善されています。精度は相変わらず随一!ですので、ぜひぜひご利用くださいませ。


[UIScrollView][UIView] UIViewで作っていたビューを後からUIScrollViewに変換する方法 18:48  [UIScrollView][UIView] UIViewで作っていたビューを後からUIScrollViewに変換する方法 - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [UIScrollView][UIView] UIViewで作っていたビューを後からUIScrollViewに変換する方法 - Ni chicha, ni limona - 平均から抜けられない僕  [UIScrollView][UIView] UIViewで作っていたビューを後からUIScrollViewに変換する方法 - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

UIViewの上にGUIを作っていたら、そのうち画面に入りきらなくなったのでUIScrollViewに変更する、というケースがあるかもしれません。

(loadViewメソッドをオーバーライドしてGUIを作り込んでいる場合など)


その場合、UIViewをUIScrollViewに変更するだけでなく、

scrollView.contentSize = CGSizeMake(320,760);

というように、元のビューで実現しようとしているサイズを明示するようにしてください。


こうしておかないと、フレームワークがどこまでスクロールできるのかを判断できないため、スクロール機能が一切動作しません。

ご注意ください。


[UIScrollView] ステータスバーへのタッチイベントを取得する 18:48  [UIScrollView] ステータスバーへのタッチイベントを取得する - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [UIScrollView] ステータスバーへのタッチイベントを取得する - Ni chicha, ni limona - 平均から抜けられない僕  [UIScrollView] ステータスバーへのタッチイベントを取得する - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

通常、ステータスバーはUIScreen mainScreen] bounds]で取得出来る値の範囲「外」なので、ステータスバーへのタッチを検知することはできません。


しかしUIScrollViewを使用している場合だけは例外で、ステータスバーへのタップイベントをscrollViewShouldScrollToTop:デリゲートメソッドで取得することができます。


そこでこの方法を応用して、UIScrollViewを使わないGUIのときにもステータスバーへのタッチを検知できる仕組みを作ってみました。


- (void)viewDidLoad {
    [super viewDidLoad];
	// 必須
	UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero]; // ユーザーには触らせない
	scrollView.delegate = self;
	scrollView.contentSize = CGSizeMake(0.0f,1.0f); // スクロールを発生させる(上の記事を参照)
	[scrollView setContentOffset:CGPointMake(0.0f,1.0f) animated:NO]; // 少し動かしておかないとイベント自体が発生しない
	// 補助(なくても良い)
	scrollView.scrollsToTop = YES; // デフォルトでYESなので、敢えて設定する必要なし
	[self.view addSubview:scrollView];
}

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
	NSLog(@"Detect status bar is touched.");
	/* ここで独自処理を行わせる */
	return NO; // YESにすると元に戻ってしまい、イベントが発生しなくなる
}

非常に力業ですが、見えないスクロールビューを配置しておき、さらにずらしておくことでメソッドが呼ばれるようにする、という方法です。


ステータスバーを触らせるユーザーインタフェースが良いか悪いかはさておき(ここ重要)、1つの方法としてご紹介です。