10月2007

Image Kit

先日ようやくLeoaprdが発売されました。評判はなかなかいい感じで、特にIntel Macで動きが速くなったというのを耳にします。ちなみに、iBook G4(最終型 1.33GHz,メモリ増設1G以上)でTigerより重くなったという話は耳にしないので、近いうちにLeopardを買うことにします。

さて、やはり気になるところは開発環境ですが、ADCにLeopardの開発環境の概要が載っています。

Leopard Technology Overview

Leopardでは開発環境にもかなり力が入っていて、Xcode,Interface Builder,Objective-C、これら主要のものが全てメジャーバージョンアップし、特にInterface Builderは全く新しくなっているようです。さらに便利なツールや、Core Animationなどの新たなフレームワークも搭載されていますが、その中で気になったのがImage Kitというものです。

Image Kitは簡単に画像を編集する機能を提供するフレームワークですが、もう一つとして、画像をブラウズするビューを作成することもできるようで、これがiPhotoのようなビューで、まさに私が欲しかったビューなのです。いずれiPhotoと似たインターフェースを持ったアプリケーションを開発しようとしていたのですが、なかなかビューに関するドキュメントまで目を通せず、作るに至らなかったわけです。このImage Kitのおかげで、そのような独自のビューを作る必要がなくなったのは、うれしい限りです。しかも検索まであって高機能、詳しくは下のリンク先に載っています。興味のある方は見てみましょう。

【特集】 Mac OS X Leopardの開発環境 | エタープライズ | マイコミジャーナル

他にもたくさんありますが、それはLeopardを購入して実際に使ってから書こうと思います。やってる時間があるかわかりませんが…

なんとかイテレータが動くようになったようです

最近コンパイラの改良でインターフェースが複数継承できるようになったりしましたが、いつの間にかイテレータも問題なくコンパイルできるようになりました。というのも、いつもEnumeratorを実装してコンパイルすると、意味不明なところでエラーを指摘されたり、コンパイラが強制終了してしまったりして、実装することができなかったからです。

Imports System.Collections

Dim array As ArrayList
array.Add("string1")
array.Add("string2")
array.Add("string3")
array.Add("string4")

Dim enumerator = array.GetEnumerator()
While enumerator.MoveNext()
	MessageBox(0, enumerator.Current.ToString(), "title", MB_OK)
Wend

これはいいループですね。

これを実装する前はSystem.Collections.Generic.Listの方のEnumeratorを作ろうと思っていたのですが、どうやらジェネリックなインターフェースは定義できない模様…

Objective-C 2.0のプロパティについて

Objective-C 2.0についてちょっと調べてみると、プロパティに関する日本語の文章があって、Objective-C 2.0で採用されるプロパティというものをはじめて見ました。

Clues to Objective-C 2.0[568KB PDF](きりかリポーツ)

Objective-C 2.0のプロパティについてはさまざまな議論が行われていたようで、特にSmalltalk的ではないというところに批判があったようです。簡単に下のリンク先で説明されています。

Objective-C 2.0 のプロパティてばダメなんじゃねーの?

私も今までObjective-C的にプロパティは合わないような気がするし、なんとなく美しくない気がして、やはりSmalltalk的ではないと思っていましたが、今日Objective-C 2.0のプロパティを実際に見て考えが改まりました。

上記PDFでプロパティの具体的な文法を見ることができますが、少し考えると、Smalltalk的ではなくCocoa的になったなと思えるようになってきました。というのも、今更プロパティが追加されたのは、やはりCocoaのKVC(キー値コーディング)や、それを使ったCore Data,Cocoa Bindingなどの技術で、KVCがより多く使われるようになったことにあると考えるからです。

それからもう一つ。@propertyの文法はメソッドを指定しない場合、アクセサメソッドが自動的に生成される仕組みになっています。このことがよりプロパティをCocoa的にしていると言えるでしょう。なぜなら、Cocoaでアクセサメソッドを作るときは必ずメモリ管理を気にしなければならず、単なるアクセサでさえ開発者の負担を強いていたからです。もちろん、Objective-C 2.0はガベージコレクションが搭載されたので、今までに比べればそう難しくないにせよ、同じようなコードを書かずに済むようにCocoa Bindingが作られたように、プロパティも同じようなメソッドを何度も書く必要がないように、言語を改良して開発者の負担を軽減させたものと言えるのではないでしょうか。

でもやはり私はObjective-Cのコード中に「object.var」というコードは何か変な気がするので、@propertyで宣言されたメソッドがメッセージ式でも呼び出せるのなら、アクセサメソッドだけ自動生成してもらう、といった使い方になりそうです。

@property NSString *name;
[object name:@"Name"];

name = [object name];

こんなコードが書けるようになるのか、どうなのか…

追記:07/10/31
どうやらプロパティの自動生成には、上記のように@interfaceに@property宣言と、@implementationに@synthesizeを宣言する必要があるようです。よって、次のようになります。

@interface Object : NSObject
{
    NSString *name;
}
@property NSString *name;
@end

@implementation Object
@synthesize name;
@end

Leopardの地味にうれしい新機能

今月26日に発売の決まったMac OS X Leopard。いよいよAppleのWEBサイトにLeopardの新機能一覧も見れるようになり、たくさんあるのでそれを見ているだけで1時間くらいは使ってしまいそうな勢いです。

Apple – Mac OS X Leopard

さて、目玉の機能としてはStacks,Quick Look,Time Machine,Spacesなどがありますが、その辺はもう十分わかっていると思いますので、300以上の新機能一覧ページをざっと見て、個人的に地味にうれしい新機能をピックアップしてみました。

Apple – Mac OS X Leopard – 新機能 – 300を超える新機能

1.Path Bar
Finderがやっとパスの表示に対応するみたいです。実際画像が見当たらなかったので、どこにどう表示できるのかはわかりませんが、今までのパスを確認する為に情報を開く動作をする必要がなくなりそうです。

2.Webの履歴検索
SpotlightでWeb履歴の検索ができるようになるみたいです。たまに検索したくなるようなものなので、便利そうですね。

3.Spotlightの計算機能
またSpotlightですが、数式を入力することで計算を行うことが出来るようになったようです。地味に便利ですね。ちなみに、辞書も検索できるようになったみたいです。

4.OpenDocumentとWord 2007フォーマット
テキストエディットがOpenDocumentとWord 2007フォーマットの読み書きできるようです。今まで標準で読み込める物がなかったので、これはうれしい対応です。でもまさかテキストエディットで対応するとは…。

5.バックアップの自動停止と再開
新機能として有名なバックアップのTime Machine。気になるのは外付けハードディスクや、ノートPCの場合。外付けハードディスクの場合、接続を解除するとその状態でバックアップを中断し、再度接続すると、その中断した位置からバックアップが再開されるようです。(ってことは、一時的に内蔵ハードディスクにバックアップされるのか??

6.Webに完全対応
上記の300の新機能以外の、開発ツールの新機能ですが、HTMLエディタ,CSSエディタも付属しているようです。これは普通の人でも使えるツールですね。

Apple – Mac OS X Leopard – Mac OS Xでの開発が好きになる理由

以上、いくつか紹介しましたが、単にOSの新機能だけでなく、開発環境のアップデートも注目できます。特にLeopardではObjective-C,Xcodeともにメジャーバージョンアップ、さらにDashcodeなどの開発ツールも追加し、開発環境に力が入っている感じが十分に見られるので、開発者も注目できる内容となっています。

これ書いていたら、うっかりオンラインストアでLeopardを予約する勢いになってしまいました…

ついに来るか!? Cocoaの時代

Apple、「iPhoneネイティブ」アプリ開発用のSDK公開へ

ついにiPhoneのネイティブアプリが解放されるとのこと。もちろんiPod touchもです。最初はSafariだけと言っていたのにこの対応。Appleはよくわかりませんね。これも戦略のうちだったのか…とにかく、素直にうれしいことです。

SDKはおそらくObjective-Cで、ほぼCocoaで、開発ツールはXcodeでしょう。これでCocoa人口も増えて、そしてドキュメントが増えてくれればうれしい限りです。

気になる点は、どこまで利用できるか、またインストール方法です。直接iPhone上でインストール可能なのか、それともiTunesを通してインストールしなければならないのか。

えーと….. Leopard+iPod touch = 14800 + 35000 = 49800[円]
ちょっと厳しいですね…

How to ニコニコ動画

以前、Nico Nico Dougaで取り上げましたが、最近ようやく英語版のwikipediaでもNico Nico Dougaが見つかるようになりました。つい先日追加されたページのようです。

さらに、以前よりもHow to nico nico douga的な記事を多く見かけるようになりました。例えば、以下の二つのようなページです。

How to ニコニコ動画 (Nico Nico Douga)
It registers in “niconico douga”.

このようなページが出てくるということは、それなりに広まり始めているということですね。

アカウントを取っても時間が限定されるのでどうなのかと思っていましたが、よく考えると海外とは時差がありますから、夜は問題なく視聴できたりもしますね。場所によってはそうでないかもしれませんが…

本当はもう一つニコニコに関することをついでに載せようと思いましたが、時間がないので後日書くことにします。

こんなことをしていないで、 早く最新のActiveBasicのデリゲートとインターフェースについての記事をまとめて( = デリゲート,インターフェースを試し)たいところですが、プログラミングをするほどの精神力,体力,時間がないのが惜しいです。どちらにしろ来年には余裕ができるので、そこで今の分を取り返したいですね。

今書いているときにRSSから拾いましたが、いきなりLeopard発表ですか。
http://www.apple.com/jp/news/2007/oct/16leopard.html

20年以上も変わらないGUI

最近忙しくてなかなか本屋へ行けないのですが、今日行ってみるとMac Peopleで連載していた「Mac再発見の旅」が書籍化されているのを見て、ついつい立ち読みしてしまいました。

Mac再発見の旅 ~Leopardに生かされる素晴らしきユーザーインターフェース<p>~ Mac再発見の旅 ~Leopardに生かされる素晴らしきユーザーインターフェース~
柴田 文彦 アスキー 2007-09-27
売り上げランキング : 57603
Amazonで詳しく見る by G-Tools

 GUIについてこれ以上にないほど語ってくれる本です。中を見ると分かりますが、初期のMacのGUIにはデスクトップ,メニューバー,アイコン,ウインドウ,ダイアログ,ボタン,ラジオボックスやチェックボックといったものが既に存在しており、今のGUIとほとんど変わらないことが分かります。これが20年以上も前のものというのも十分驚きですが、全てのSystemが数百KBのファイルで構成されていたということもびっくりです。これだけ長い間使われているGUIを見直すことで、これからの開発に役立つことがあるかもしれません。 

アドホックネットワーク専用端末出ないかなー

Advanced/W-ZERO3 [es]とZEROProxyでどこでもiPod touchでネットする。

 この記事見て思ったんですが、WillcomでiPod touch用アドホックネットワークを作成する専用端末なんて出ないかなーと。一応最小限に電話機能くらい付けて。

wordpressバージョンアップ中…

表示が乱れることがあるかもしれません。そういう場合はしばらく待ってからアクセスし直してください。新しいプラグインも導入予定です。

NSDictionary

CocoaにはNSDictionaryと呼ばれる、キーと値をペアにして配列にできるコレクションクラスがあります。いわゆる連想配列,辞書配列などと言わるやつです。CocoaのNSDictionaryのアクセスはこのようにやります。

id anObject = [dictionary objectForKey:@"key"]; //取得
[dictionary setValue:anObject forKey:@"key"]; //設定

キーには文字列以外も入ると思いますが、やったことがありません。それで、このメソッドどこかで見覚えないでしょうか?そう、これはキー値コーディングと全く同じアクセス方法なのです。ちなみに、キー値コーディングについては以前一度書いているので、そちらの記事をご覧下さい。(キー値コーディング)

さて、キー値コーディングでNSDictionaryにアクセスできるということで、これもCocoaのNSDictionaryの面白い点になりますが、NSDictionaryにはもうひとつ面白いところがあるのです。

実は、NSDictionaryは辞書配列と同じくらい重要な別の機能を、もうひとつ持っているのです。それはNSDictionaryの保存です。別の言葉で置き換えれば、オブジェクトのシリアライズということになります。NSDictionaryのリファレンスを見ればわかりますが、配列に関するメソッドと同じくらいのシリアライズに関するメソッドが用意されています。

NSDictionary Class Reference

やり方は非常簡単です。

NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:filename];  //読み込み
[dictionary writeToFile:filename atomically:YES]; //書き込み

たった1行のコードで、保存や読み込みの実行を行うことが出来るのです。ファイルはXML形式で保存されます。例えばこんな感じです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Major Version</key><integer>1</integer>
	<key>Minor Version</key><integer>1</integer>
	<key>Application Version</key><string>7.4.2</string>
	<key>Features</key><integer>1</integer>
	<key>Show Content Ratings</key><true/>
	<key>Music Folder</key><string>file://localhost/Users/*******/Music/iTunes/iTunes%20Music/</string>
	<key>Library Persistent ID</key><string>*****************</string>
	<key>Tracks</key>
	<dict>
		<key>100</key>
		<dict>
			<key>Track ID</key><integer>100</integer>
			<key>Name</key><string>Undine</string>

これは何のファイルの中身かというと、iTunesの設定ファイルの上の部分を抜き出したものです。先頭部分で既にかなり複雑になってきていますが、DictionaryのキーにさらにDictionaryを入れるとこうなる訳です。保存できる値は、NSNumber,NSStringなどの文字列から、NSArray,NSDictionaryなど、基本的な値オブジェクトは全てサポートされています。このような複雑な構造をしていても保存することができるので、何かデータを保存するときには特に適したものと言えるでしょう。

というわけで、これはiTunesの設定ファイルでしたが、実はOS Xはありとあらゆるところでこれと同じ方法で設定ファイルを保存しています。Cocoaアプリケーションのパッケージに含まれるアプリケーションの情報も、もちろんこの方法です。

で、この保存方法がOS Xで馴染みのプロパティリストというわけです。NSDictionaryはXMLでの保存をサポートしていましたが、別のクラスやdescriptionを使えば、他のフォーマットで保存することも出来ます。

ということで、NSDictionaryを単なる辞書配列と思っていた方は、ぜひ使ってみましょう。アプリケーションの設定ファイルはNSDictionaryで決まりです。