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 仕様’ で確認できます。

DSi Ware 'プチコン' 、3月2日開催 Apple Special イベントと任天堂 Game Developer Conference 2011、ニンテンドー3DS 発売、iPhone アプリ iYKRSS バージョン 1.0.3 公開

3月11日(金)、東日本大震災 (東北地方太平洋沖地震) が発生しました。幸いなことに、私が住んでいる地域には影響がありませんでした。このブログに求めているものは、パソコンに関する技術的な情報だと思い、普段通り書きたいと思います。被災地の皆さん、災害に負けず頑張ってください。早い復興を心よりお祈りいたいます。

本題に入る前に、最近熱中していうものがあります。それは、ニンテンドーDSiダウンロード販売している専用ソフトウェア DSi Ware ‘プチコン‘ です。

プチコン
http://smileboom.com/special/petitcom/sample.html
任天堂ページ プチコン DSi Ware
http://www.nintendo.co.jp/ds/dsiware/kkoj/index.html

ニンテンドーDSi 上で動作する BASIC です。ニンテンドーDSi では現在 800 ポイントでダウンロードできます。ニンテンドー3DS上でも動作します。ニンテンドー3DSの場合、配信は5月末頃になるようです。

年齢がばれてしまいますが、BASIC は ポケコン PC-E500、PC-98MacintoshX68000Zaurus、PC-G850VS といろいろ経験してきたので、楽しみにしていました。X68000 の X-BASIC 上のスプライトについては、最後まで理解できませんでした。’プチコン‘ では、スプライトに対応しているので理解できるか心配していたのですが、大丈夫そうです。

プチコン
http://smileboom.com/special/petitcom/sample.html

上記 URL の ‘コマンド一覧’ と ‘サンプルギャラリー’、’プログラムリスト集’ の一部を印刷してバインダーに綴じて理解に励んでいます。特に印刷したプログラムリストの命令を調べるのに、’コマンド一覧’ だけだと不便なので、索引 (インデックス) を Python で作成しました。

追記: [ 2011/03/23(Wed) ] Twitter で知りましたが、プチコンのホームページ上に 'コマンド一覧' は残っているそうです。リンク先の URL は、http://smileboom.com/special/petitcom/command.htmlです。
プチコン - 'コマンド一覧'
http://smileboom.com/special/petitcom/command.html

残念ながら、’コマンド一覧’ は ‘仕様/ダウンロード’ の Web版・PDF ファイルに変更になりました。折角作ったので、何かの役に立つかもしれないと思い ‘索引 (インデックス) レファレンスと Python プログラム’ を公開しておきます。

【 プログラム名 】 プチコン 'コマンド一覧' 索引(インデックス) 作成プログラムと索引リファレンス
ダウンロード: PetitIndex.zip (12KB)
http://kyoshiaki.sakura.ne.jp/osx/Download/PetitIndex.zip


いろいろなプラットフォームに移植しているマインスイーパーでも作ってみたいですね。

本題に入ります。

2月26日、ニンテンドー3DS 発売、3月2日に Apple Special イベントと任天堂 Game Developer Conference 2011 Keynote が開催されましたね!

まず、Apple Special イベントから

3月2日午前10時(日本時間3月3日午前3時) the Yerba Buena Theater in San Francisco, California にて、Special イベントが開かれました。予想通り iPad 2 が発表されました。

Apple - Press Info - Apple Launches iPad 2
http://www.apple.com/pr/library/2011/03/02ipad.html

基調講演は、

Apple Special Event March 2011
http://events.apple.com.edgesuite.net/1103pijanbdvaaj/event/index.html
Apple Keynotes (iTunes Podcast)
http://itunes.apple.com/jp/podcast/apple-keynotes/id275834665

上記 URL でストリーミングや iTunes Podcast で見ることができます。スティーブ・ジョブスが元気そうで何よりです。

また、3月10日に iOS 4.3 アップデートも配信されました。詳しくは

Apple - Press Info - Apple Introduces iOS 4.3
http://www.apple.com/pr/library/2011/03/02ios.html

を参照してください。

私個人としては、iPad 2 が Retina ディスプレイに対応していたら、自作の iPad アプリを対応させるために購入しないといけないと思っていたのですが、その必要がないので、今回は見送るつもりです。公開するかわかりませんが、iPod touch のカメラ機能を利用したアプリも試しに作成してみたので、必要になったら iPad 2 を購入するかもしれません。

ニンテンドー3DS は、2月26日の発売日に手に入れるつもりはありませんでした。ただ、Amazon で定価 25000 円で発売されるのを午後1時頃、夕方午後6時頃、一日に2回チェックしていました。Yahoo! オークションでも値段の推移も確認していました。たまたま確認した 2月24日午後6時頃に入荷していました。ニンテンドー3DS アクアブルーを購入しました。3月5日に到着しました。ニンテンドー 3DS の供給は十分なようで、比較的手に入れやすいようですね!

遊んでみた感想は、ARゲームズニンテンドー3DSカメラは面白かったです。私は眼鏡をかけているのですが、3D についてはそれほど気になりませんでした。

任天堂公式ライセンス商品 ピタ貼り for ニンテンドー3DS は、すごく丁寧に作ってあって iPhoneiPod touchiPad 版も欲しいと思ったぐらいです。ソフトは nintendogs 柴&フレンズを購入しました。

ARゲームズの 3D 効果も驚いたのですが、ニンテンドッグスも負けていないと思います。

また、Apple Special イベントと同じ 3月2日に、任天堂 Game Developer Conference 2011 Keynote が開催されました。基調講演については

Nintendo @ GDC2011
http://gdc2011.nintendo.com/

で見ることができます。詳細については

Live from Nintendo's GDC 2011 keynote (Update: It's over!) | Joystiq
http://www.joystiq.com/2011/03/02/nintendo-gdc-keynote/

を参照してください。


iYKRSS
カテゴリ/ニュース
無料
http://itunes.com/apps/iYKRSS

iPhone アプリ iYKRSS バージョン 1.0.3 を公開しました。

ブログには書いていませんでしたが、第4世代 iPod touch を購入していました。iYKRSSHD を普段利用していたのですが、iPad の iOS が 4.2.1 になり、マルチタスキングに対応させないと使用しづらくなってしまいました。

iPhone 版 iYKRSS も、それなりにダウンロードされているので、もしかしたら使用しづらく困っている人がいるかもしれないと思い、私のアプリケーションの中ではユーザーの多い iPhone 版 iYKRSS を最初にマルチタスキングに対応させることにしました。iPad 版は iPad 2 の発表で Retina ディスプレイに対応する必要がないことがわかったので、今月中には取り掛かりたいと思います。Xcode 4 に慣れないといけないので、少し遅れるかもしれません。

追加した機能は、簡潔に説明すると

1.0.3
- iPhone 4、iPod touch 4世代のRetinaディスプレイに対応。
- RSSフィードの更新をマルチタスキング機能に対応させた。
バックグラウンドで RSS フィードの更新が終了すると画面に通知する。
- RSS フィードの更新中以外の時に、バックグラウンド処理に移ると RSS フィードデータを保存。

です。

注意

私は RSS フィード 60個ぐらい登録しています。iYKRSS を使用中に反応がすごく鈍くなることがあります。メモリ不足が原因のようです。その時は、ホームボタンをダブルクリックして、バックグラウンドにあるアプリケーションを表示し、アイコンを押し続けると ‘-‘ 記号がアイコンに付き揺れ始めるので、’-‘ 記号をタップして iYKRSS 以外のアプリを終了してください。

簡単な使い方を説明しておきます。

基本的な使い方は、下記 URL を参考にしてください。

2009-07-29 - KOYAMA Yoshiaki の日記
http://d.hatena.ne.jp/KYoshiaki/20090729

iYKRSS をタップして起動させます。最初は ‘アップルホットニュース’ というタイトルの RSS フィードが登録されています。

最初は RSS フィードを登録する必要があります。右下の ボタンをタップして RSS フィードの URL を入力してください。RSS フィードの URL は、iPhone 上の Safari ではなく、パソコン上のブラウザを使って表示された URL を使用してください。どうやってブログなどの RSS フィードを見つけるのかについては、iPad 用 iYKRSSHD の説明ですが、 iPhone 用 iYKRSS でも同じなので

2010-10-31 - KOYAMA Yoshiaki の日記
http://d.hatena.ne.jp/KYoshiaki/20101031

が参考になります。

右下の URL ボタンを押すとサンプル RSS フィードを選択できます。

URL を入力し、左下の 更新ボタンをタップするとタイトルなどが自動入力されます。この画面での更新は、保存期間が影響しません。

トップ画面左下の 更新ボタンをタップするとすべての RSS フィードが更新されます。更新に失敗した RSS フィードは、以前ダイアログで表示されましたが、今回から RSS フィード名を赤色で表示するようにしました。更新中は iPhone はスリープしません。ホームボタンを押してバックグラウンドに移るとスリープ解除が無効になるので注意してください。

更新中にホームボタンを押してバックグラウンドに移っても、更新処理は継続されています。すべての RSS フィードの更新が終了すると画面に通知されます。

RSS フィードの更新に失敗すると赤色で表示されます。個別に失敗した RSS フィードを選択して更新するとエラーの詳細をダイアログで表示します。

iYKRSSHD は、まだマルチタスキングン対応していません。注意してください。

iTunes の デバイス App ファイル共有で表示されるファイル RSSArchive.iYKSS は iPhone 用 iYKRSS と iPad 用 IYKRSSHD で互換性があります。iYKRSS の RSS フィードデータを iYKRSSHD に移行したい場合は、iYKRSS のファイル RSSArchive.iYKSS を iYKRSSHD のファイル共有に移動してください。逆に iYKRSSHD のファイル RSSArchive.iYKSS を iYKRSS のファイル共有に移動することもできます。

通常は、必要ないと思いますが、文字列を URL エンコードする Python スクリプトを作成しました。

文字列:  ニンテンドー3DS
URL エンコードした文字列: %E3%83%8B%E3%83%B3%E3%83%86%E3%83%B3%E3%83%89%E3%83%BC3DS
~ $ cd Desktop/
~/Desktop $ ./escape.py ニンテンドー3DS
%E3%83%8B%E3%83%B3%E3%83%86%E3%83%B3%E3%83%89%E3%83%BC3DS
~/Desktop $ ./unescape.py %E3%83%8B%E3%83%B3%E3%83%86%E3%83%B3%E3%83%89%E3%83%BC3DS
ニンテンドー3DS
~/Desktop $ 

登録する RSS フィード

feed://k.hatena.ne.jp/keywordblog/ニンテンドー3DS?mode=rss

ではなく

feed://k.hatena.ne.jp/keywordblog/%E3%83%8B%E3%83%B3%E3%83%86%E3%83%B3%E3%83%89%E3%83%BC3DS?mode=rss

なので注意してください。

公開するのも恥ずかしいプログラムではありますが、良かったら、ダウンロードしてください。

URL エンコード/デコードするプログラム escape.py, unescape.py
ダウンロード: Escape.zip (4KB)
http://kyoshiaki.sakura.ne.jp/osx/Download/Escape.zip

また、私が公開している HatenaDiaryAssistance に追加してみました。

要望があれば公開したいと思います。