WWDC、E3、Objective-C のブロックと変数

WWDC 2012 基調講演が、11日午前10時 (日本時間、翌12日午前2時) に開催されました。Mac Book Air / Pro、iOS 6、OS X Mountain Lion の発表がありましたが、一番の関心は、Retina ディスプレイ MacBook Pro の発表です。iPadiPhone アプリ開発のために、iMac 27 インチを使用してきましたが、Retina ディスプレイ MacBook Pro でも問題なさそうです。所有してる iMac (Mid 2010) 27 インチは、Thunderbolt、USB 3.0 に対応していないので、購入時期も迫ってきています。Retina ディスプレイ iMac が発表されていたら、間違いなく購入していました。もう一年、我慢しようか、悩みどころです。

基調講演は、Apple のサイト

Apple - Apple Events - Apple Special Event March 2012
http://events.apple.com.edgesuite.net/123pibhargjknawdconwecown/event/index.html

で見れます。Podcast でも配信されています。

iTunes - Podcast - Apple Inc.「Apple Keynotes」
http://itunes.apple.com/jp/podcast/apple-keynotes/id275834665
iTunes - Podcast - Apple Inc.「Apple Keynotes (1080p)」
http://itunes.apple.com/jp/podcast/apple-keynotes-1080p/id509310064
iTunes - Podcast - Apple Inc.「Apple Keynotes (HD)」
http://itunes.apple.com/jp/podcast/apple-keynotes-hd/id470664050

1080p、HD 版も配信されています。

E3 も開催されていました。

E3 2012 - GameSpot.com
http://e3.gamespot.com/

上のサイト、左上の赤の背景に白色の文字で E3 2012 と表示されている部分をクリックし、Press Conferences を選ぶとそれぞれの基調講演を見ることができます。また、任天堂の基調講演は

任天堂 E3 2012情報 | E3レポート
http://www.nintendo.co.jp/n10/e3_2012/report/index.html

でも見れます。

以前、[id:KYoshiaki:20120429] iCloud プログラミングで書いた

Creating iOS 5 Apps: Develop and Design

Creating iOS 5 Apps: Develop and Design

[Kindle 版] と復習のために買った

Objective-C Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)

Objective-C Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)

[Kindle 版] を読み終えました。

Blocks とスコープ外の変数について、理解が深まりました。

typedef void (^ArrayEnumerationBlock)(id, NSUInteger, BOOL *);
ArrayEnumerationBlock devowelizer;
NSMutableArray *newStrings = [NSMutableArray array];
devowelizer = ^(id string, NSUInteger i, BOOL *stop) {
NSMutableString *newString = [NSMutableString stringWithString:string];
for (NSString *s in vowels) {
NSRange fullRange = NSMakeRange(0, [newString length]);
[newString replaceOccurrencesOfString:s withString:@"" options:NSCaseInsensitiveSearch range:fullRange];
}
[newStrings addObject:newString];
};
[oldStrings enumerateObjectsUsingBlock:devowelizer];

上のように、block 内で

[newStrings addObject:newString];

とスコープ外の変数 newStrings の内容を変更することができます。これは、メソッドを呼んでいるからです。プロパティで代入する場合も、同じです。

typedef void (^SampleBlock)();
__block NSString *two = [NSString stringWithString:@"two"];
SampleBlock sampleBlock;
FooClass *fooClass;
fooClass = [[FooClass alloc] init];
sampleBlock = ^() {
NSString *three = [NSString stringWithString:@"three"];
fooClass.foo = [NSString stringWithString:@"Orange"];
two = three;
changeValue(8);
};
sampleBlock();

ブロック内で

fooClass.foo = [NSString stringWithString:@"Orange"];

と代入することができます。ここでは、説明しやすいように

self.foo = bar;

とします。

実際には、ドット演算子を使ったプロパティは

The Objective-C Programming Language: Declared Properties
https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1
▼ Declared Properties
▼ Property Declaration and Implementation
Property Declaration
Key-Value Coding Programming Guide: Key-Value Coding Fundamentals
https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html#//apple_ref/doc/uid/20002170-BA
▼Key-Value Coding Fundamentals
Dot Syntax and Key-Value Coding

を利用しているので

[self setFoo:bar];

または

[self setValue:bar forKey:@"foo"];

と同一です。故にメソッドを使っているので、block 内で代入できます。

foo = bar;

は、block 内で使えないので注意してください。foo が Objective-C のオブジェクト、または int、double などのスカラー型いずれの場合でも、__block を宣言しない限り、ブロック内では代入できません。

sample(bar);

上のような C の関数は、ブロック内で使えます。

結局、Cの関数、Objective-C の method は、ブロック内で使うことができます。また、プロパティを使ったドット表記も、実際には method を使っているので、ブロック内で使えます。ブロック内でスコープ外の変数に = (イコール) を使った代入は、__block を宣言しないと使えません。

サンプルとして zip ファイルを公開します。

VowelMovement.zip
http://kyoshiaki.sakura.ne.jp/osx/Sample/VowelMovement.zip
Creating iOS 5 Apps: Develop and Design

Creating iOS 5 Apps: Develop and Design

[Kindle 版] で見つけた面白い Blocks の使い方のサンプルも下記 URL で公開します。

Weights.zip
http://kyoshiaki.sakura.ne.jp/osx/Sample/Weights.zip

サンプルは、[ Creating iOS 5 Apps: Develop and Design ] [Kindle 版] のソースから、面白い使い方の箇所を抜き出して修正したものです。

//
//	Weights.m
//
- (void)processWeightEntryUsingBlock:(void (^)(NSNumber*)) block
{
NSLog(@"Weights.entries: %@", self.entries);
for (NSNumber* entry in self.entries) {
block(entry);
}
}
//
//	States.m
//
-(void)doStates
{
NSMutableArray *array;
array = [NSMutableArray array];
[self.weights processWeightEntryUsingBlock:^(NSNumber *number) {
int value;
NSNumber *num;
value = [number intValue];
num = [NSNumber numberWithInt:value*2];
[array addObject:num];
}];
NSLog(@"processWeightEntryUsingBlock: %@", array);
}

E3、WWDC、ニンテンドー3DSの本体機能更新、プチコン上でのファイルの送受信

毎年恒例の E3 や WWDC など、イベント尽くしでしたね。

最初に WWDC から

Apple - Press Info - Apple to Unveil Next Generation Software at Keynote Address on Monday, June 6
http://www.apple.com/pr/library/2011/05/31wwdc.html

上記 URL のように、あらかじめ内容が告知された珍しい基調講演でした。

基調講演は、アップルのサイト

Apple - Apple Events - Apple Special Event June 2011
http://events.apple.com.edgesuite.net/11piubpwiqubf06/event/

で、ストリーミングで見ることができます。iTunesPodcast でも

Apple Keynotes
http://itunes.apple.com/jp/podcast/apple-keynotes/id275834665

配信されています。

Lion、iOS 5、iCloud などの発表がありましたが、一番興味を引いたのは iCloud です。NDA (秘密保持契約) で詳しくは話せないのですが、公開している自作ソフトにいろいろ利用できそうです。自作の Twitter アプリも作り直そうと思っています。その前に、マルチタスキングに対応した iPadRSS リーダーを iTunes Connect に申請しないといけないのですが!

次は E3 にについてです。

E3, E3 2011 - GameSpot.com
http://e3.gamespot.com/

上記ページの上部、水色の部分 ‘Videos’ にマウスカーソルを合わせると下のようなメニューが表示されます。

Press Conferences
・Microsoft
・Sony
・Nintendo
・EA
・Ubisoft

見たい会社名をクリックすることで基調講演を見ることができます。

また、同時通訳版 任天堂プレゼンテンションは

任天堂 E3 2011情報
http://www.nintendo.co.jp/n10/e3_2011/01/index.html

で見ることができます。任天堂Wii U、Sony の Play Station Vita、どちらも楽しみですね!

任天堂 E3 2011情報 - Wii U
http://www.nintendo.co.jp/n10/e3_2011/02/index.html
PlayStation®Vita | プレイステーション® オフィシャルサイト
http://www.jp.playstation.com/psvita/

ニンテンドー 3DS の ‘Nintendo eShop’ 用 本体更新が 6月7日にありました。これで、ニンテンドー DSi ウェアの ‘ニンテンドーDSi 用 BASIC プチコン‘ を ニンテンドー3DS で遊ぶことができます。

プチコン - 株式会社スマイルブーム
http://smileboom.com/special/petitcom/index_a40.html
プチコン - DSi Ware
http://www.nintendo.co.jp/ds/dsiware/kkoj/index.html

ニンテンドー DSi の DSi Ware を ニンテンドー3DS に引っ越しすることができます。ただし、セーブデータは引っ越しできません。

ニンテンドー3DS|その他(ソフトとデータの引っ越しについて。)|Nintendo
http://www.nintendo.co.jp/3ds/support/transfer/index.html

ニンテンドー 3DS 本体更新は

ニンテンドー3DS|サポート トップ|Nintendo
http://www.nintendo.co.jp/3ds/support/index.html
ニンテンドー3DSニンテンドー3DSの本体機能更新について|Nintendo
http://www.nintendo.co.jp/netinfo/3ds/JPN/ja.html

が参考になります。HOME メニューで更新の案内が表示されない時は、ニンテンドー 3DS の下画面 ‘本体設定’ ソフトアイコンをタッチしたあと、’はじめる’ か ’本体設定’ ソフトアイコンをもう一度タッチします。上画面、右下に本体のバージョンが表示されます。最新版は Ver. 2.1.0-3J です。下画面の ‘その他の設定’/’本体の更新’ を選ぶことで、本体を更新することができます。

DSi Ware のセーブデータを引っ越しできないので、ニンテンドー3DS 用に ‘プチコン‘ を再度購入しました。6月16日に DSi Ware ‘プチコン‘ の不具合修正版が配信されました。ソフトウェアの更新方法は

ニンテンドー3DS
’Nintendo eShop'/'設定・その他'/'購入済みソフト' から 'プチコン' を選び、 'このソフトの情報' ボタンの右隣の '更新' ボタンをタップして更新できます。私の場合、'更新ソフトの確認' では表示されませんでした。
ニンテンドーDSi
'DSiショップ'/'ショッピングへ'/'設定メニュー'/'購入済みソフト' から更新できます。

です。

ニンテンドー DSi ‘プチコン’ のプログラムを ニンテンドー3DS に送信するには SENDFILE、RECVFILE 命令を使います。ニンテンドー3DS、ニンテンドー DSi の両方で ‘プチコン’ を起動し、ニンテンドーDSi 側で FILES 命令を使って送信したいプログラムの ‘リソース名:ファイル名’ を確認します。送信するファイルのリソース名は、SPU0、BGU0 ではなく、FILES 命令で表示される。PRG、CHR なので注意してください。

FILES
PRG:MINE
CHR:SPDATA
CHR:BGDATA

例として ‘PRG:MINE’ ファイルで説明したいと思います。ニンテンドー3DS 側で

RECVFILE "PRG:MINE"

と実行し、待機状態にします。ニンテンドーDSi 側で

SENDFILE "PRG:MINE"

と実行すると ‘ファイルを送る相手を選択してください’ と表示されるので、ニンテンドー3DS側の名前を選択して送信してください。

ニンテンドー3DS のブラウザは、ニンテンドーDSi ブラウザの特徴であった、1つのページを片方の画面で縮小し、もう1つの画面でそのまま表示する機能 ‘通常表示’ がなくなりました。上下の画面がつながった ‘タテ長表示’ だけになりました。スライドパッド、十字ボタンでスクロールします。

また、Opera から ACCESS の WebKit を利用した NetFront に変更になりました。

ACCESS、組込機器向けにWebKitベースの省メモリブラウザを発表 | エンタープライズ | マイコミジャーナル
http://journal.mycom.co.jp/news/2011/06/08/006/

WbKit の表示を ‘説明書’/’12 仕様’ で確認できます。

iPhone 4、iPad 発売、WWDC、E3

iPhone 4iPad 発売、WWDC、E3 とイベント尽くしでした。

まず E3 から

E3 2010 Latest Highlights at GameSpot
http://e3.gamespot.com/?tag=header%253Be3logo

上記ページの上部にある Video をマウスオーバーすると、ウインドウが下に表示され、

Press Conferences
Microsoft | Nintendo | Sony

その中の Press Conferences から、それぞれの会社名をクリックすることで基調講演を見ることができます。最初に生年月日を入力する必要があります。CM の後、基調講演が始まります。

任天堂の基調講演については

任天堂 E3 2010情報
http://www.nintendo.co.jp/n10/e3_2010/index.html

の ‘E3 レポート’で日本語吹き替えを見ることができます。

3D (裸眼立体視機能) 対応の Nintendo 3DS はぜひ見てみたいですね。

次は WWDC 2010 です。基調講演 (Monday, June 7 at 10 a.m.) は

Apple - QuickTime - WWDC 2010 Keynote Address
http://www.apple.com/quicktime/qtv/wwdc10/index.html

で見ることができます。Apple のトップサイトに

Apple
http://www.apple.com/

WWDC 2010 基調講演、iPhone 4 Video、FaceTime Video のリンクが張られています。

また、WWDC 基調講演は iTunesPodcast

Apple Keynotes
http://itunes.apple.com/jp/podcast/apple-keynotes/id275834665

でも配信されています。

アップル、WWDC 2010開催--ジョブズ氏基調講演をライブカバレッジ - CNET Japan
http://japan.cnet.com/news/service/story/0,3800104747,20414685,00.htmPC Watch】 【WWDC 10レポート】基調講演速報、iPhone OS 4あらためiOS 4を正式アナウンス 〜デベロッパ向けにはプラットフォームの優位性を強調
http://pc.watch.impress.co.jp/docs/news/event/20100608_372849.html
フォトレポート:S・ジョブズ氏のWWDC 2010基調講演 - CNET Japan
http://japan.cnet.com/apple/story/0,2000076557,20414769,00.htm
速報:WWDC 2010 スティーブ・ジョブズ 基調講演
http://japanese.engadget.com/2010/06/07/wwdc-2010/

も参考になります。

iPhone Developer Program に加入しているので、随分前に iPhone SDK 4 beta、iOS 4 GM はダウンロードしたのですが、インストールはしていませんでした。

そうこうしているうちに iPhone 4 が発売され、iOS 4 アップデータも公開されたので iTunes 経由で iPod touchiOS 4 にアップデートしました。iPhone SDK 4 final もインストールしました。

私の使用方法だと iPhone 4 は必要ないのですが、次世代 iPod touch が楽しみですね。

iPad は、発売日 (5月28日) に運送会社から届きました。iPad アプリは1万円近く購入してしまいました。

私の iPad の利用目的は、PDF ファイルの閲覧、ブログなどのウェブページ閲覧、Kindle 読書です。

iPod touch の利用のほとんどが、自作の iPhone アプリ Twitter クライアント iYKTwitter、拙作 RSS リーダー iYKRSS です。

拙作 iYKTwitter は認証方式が Basic 認証ですが、Twitter が OAuth認証必須になったので、対応する必要があります。ただし、OAuth 認証への移行が

Twitterブログ: Twitter APIデベロッパー・コミュニティへのお知らせ (OAuthへの移行に関しての期限延長)
http://blog.twitter.jp/2010/06/twitter-api-oauth.html

2010年8月16日に延長になったようです。

Safari のウェブページ閲覧が快適なので、拙作 iPhoneRSS リーダー iYKRSS と iYKTwitter を 2、3日かけてとりあえず動作するように iPad 上に移植してみました。思いのほか便利です。iPad を持て余している人は RSS リーダーを使ってみるべきです。

本当は Google リーダー対応の RSS リーダーを使えばよいのですが、シンプルなものが良いので、拙作 iPad 対応 iYKRSS を使用しています。

書籍、電子書籍リーダーをいろいろ購入してみました。

書籍
Alice for the iPad
カテゴリ/電子書籍
\1000
WIRED Magazine
カテゴリ/ニュース
\600
数学ガールHD
カテゴリ/ブック
\900
AiR HD エア 先行配信版
カテゴリ/ブック
\350
Toy Story 2 Read-Along
カテゴリ/ブック
\1000
電子書籍リーダー
i文庫HD
カテゴリ/電子書籍
\700
CloudReaders pdf,cbz,cbr
カテゴリ/ブック
無料
GoodReader for iPad
カテゴリ/仕事効率化
\115

‘不思議の国アリス’ を読んだことがなかったので、Alice for the iPad は面白かったです。ただし、読んだ位置を覚えてくれないのが不便でした。途中で画面をタップして現れる Cheshire-Cat (チェシャーキャット) の顔をタップすると目次を表示できることを発見し、何とかなりましたが!

iPad の電子書籍リーダーに PDF 書類を移動するには iTunes 上で iPad デバイス名をクリックし、’アプリ’ タブ 下にある ‘ファイル共有/アプリケーション’ を選択して iPad にコピーしたい書籍 (PDF など) をドラッグ・ドロップします。

以前は NetWalker 上で PDF 書類を読んでいたのですが、iPad で十分です。NetWalker はお役御免になりそうです。また、PDF 書類のファイル内リンクに対応しているのは、GoodReader for iPad だけです。他の電子書籍リーダーより拡大・縮小しても文字がくっきりしている気がします。以前の GoodReader はページ送りが上下部分をタップだったのですが、左右にも対応しました。

CloudReaders pdf,cbz,cbr は、’しおり機能’ が付いていません。ただし大きなサイズの PDF 書類を読むには最適だと思います。

iBooks が PDF 書類に対応する前まで、’しおり機能’ が付いた ‘i文庫 HD’ が、個人的には一番快適でした。iOS 4 開発資料 PDF 書類を ‘i文庫HD’ で良く読んでいました。

iBooks も PDF 書類対応になったので、試してみました。iBooks に PDF 書類を読み込むには iTunes の ‘ライブラリ/ブック’ に PDF 書類をドラッグ・ドロップします (下図参考)。 デバイス名の ‘アプリ’ タブ ‘ファイル共有/アプリケーション’ や ‘ブック’ タブではないので注意してください。

自炊 (自分で本を裁断してスキャンすること) 用にスキャナーと裁断機が欲しくなりました。

iPad で雑誌を読んでみたく下記サイトで ‘4特集まとめ買いパック’

購入から読むまで|iPadで読む!週刊ダイヤモンド
https://item.diamond.co.jp/ipad/
週刊ダイヤモンド
\1000

を購入してみました。i文庫HD、CloudReaders pdf,cbz,cbr どちらでも読むことができます。書籍ファイルは 1ページを ‘1050 × 1400 ピクセル 72 dpi’ の JPEG 画像であらわし、ファイル名をページ数にした画像を Zip で圧縮したファイルでした。

iMaciPod touch の利用時間が大幅に少なくなり、iPad を使用することが多くなりました。