2005-12-27
目次
「WebObjects Dev Report」 第34回 田畑 英和
これまでダイレクトアクション内での処理については解説してきましたが、今回はダイレクトアクションへのパラメータの指定方法について解説します。
まずはどのようなときにダイレクトアクションに対してパラメータを指定するかをみてみましょう。前回ご紹介した特定のユーザ情報を表示するためのダイレクトアクション(browseCareerAction)ですが、ダイレクトアクションを単純に呼び出しただけでは、どのユーザ情報を表示してよいのか特定できません。そこでダイレクトアクションを呼び出すときに、パラメータも一緒に指定します。具体的には次のようなダイレクトアクションの呼び出し方をおこないます。
・パラメータ付きダイレクトアクションのURL
/cgi-bin/WebObjects/MOSAJobMatch.woa/wa/browseCareer?id=4
URLに指定したダイレクトアクション名(browseCareer)の後ろにある”?id=4″がパラメータです。このパラメータがユーザを特定するためのキーになり、ここではユーザのプライマリーキーを用いています。このパラメータをダイレクトアクション内で取得して、ユーザの検索処理に用います。
次に、このようなパラメータ付きのURLを生成する方法をみてみましょう。WOHyperLinkを使ってダイレクトアクションを呼び出すには次のようなバインドをおこないます(*1)。
actionClass = “DirectAction”;
directActionName = “browseCareer”;
actionClassには呼び出すダイレクトアクションが実装してあるクラスのクラス名を指定し、directActionNameにはダイレクトアクションのメソッド名から最後のactionを外したものを指定します。
つまりこの場合はDirectAction.javaに実装されているbrowseCareerActionメソッドを呼び出す設定になります。
ですが、これだけではまだパラメータの指定ができていません。パラメータの指定方法は何通りかあるのですが、browseCareerのように1組のパラメータしか指定しないのであれば次のようなバインドを追加することで対応できます。
?id = 4;
今回はidという名前のパラメータを指定していますが、idという名前はアプリケーション独自のものですので、あらかじめ定義されているactionClassやdirectActionNameとは違い、「WebObjects Builder」のInspector上では手動で追加する必要があります。
これでURLにパラメータを追加することができるようになりましたが、このままではidが”4″のユーザ情報しか取得することができません。ですので”4″の部分を動的に変化させる必要があります。ここではユーザのプライマリーキーを指定しますので、ユーザクラス(MOSAUser)にプライマリーキーを取得するメソッドを追加して、そのメソッドをバインドすることにします。
モデル上でプライマリーキーをクラスプロパティに指定している場合は、メソッドを追加する必要なく直接プライマリーキーの値にアクセスすることができますが、クラスプロパティに指定していない場合は次のようなメソッドを追加することによりプライマリーキーを取得することができます。objectForKeyの引数で指定している”mosaUserId”はプライマリーキーの名前です。
public Number primaryKey() {
NSDictionary primaryDict = EOUtilities.primaryKeyForObject(
editingContext(), this);
if(primaryDict != null) {
return (Number)primaryDict.objectForKey("mosaUserId");
}
return null;
}
これで各ユーザのプライマリーキーにアクセスできるようになりましたので先ほどのidのバインドを次のように書き換えます。このときmosaUserItemはいずれかのユーザのオブジェクトになります。
?id = mosaUserItem.primaryKey;
これでダイレクトアクションを呼び出すURLにパラメータを追加し、特定のユーザ情報が表示できるようになりました。
今回は1組のパラメータしかURLに追加しませんでしたが、複数のパラメータも指定できます。WOHyperLinkには”queryDictionary”というattributeが用意されていますが、ここにDictionary型の変数をバインドすればkey-valueのペアをパラメータとして指定することができます。
*1 wodファイルの形式で表記しています。
SqueakではじめるSmalltalk入門 第53回 鷲見 正人
本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。今回は、単に複数の仮想的なデスクトップを提供することだけにとどまらない「プロジェクト」が担う、他の二つの役割についてです。
▼チェンジセットの自動切り換え機構としてのプロジェクト
第50回でご紹介したとおり、チェンジセットは、システムに加えられた変更の箇所情報を管理するためのデータベースです。必要なら、いつでもいくつでも自由に作ることができますが、実際にシステム改変箇所に関する情報が記録されてゆくのは、原則として“デフォルト”として定められたチェンジセットに限られます。
どのチェンジセットを“デフォルト”にするかについては、じつは、デスクトップ(つまり、プロジェクト)ごとに割り振ることができるようになっています。したがってユーザーは、チェンジソーターなどの専用ツールを使っていちいち明示的にせずとも、ただデスクトップ(プロジェクト)を切り換えるだけで、暗黙のうちにシステム改変の記録先であるチェンジセットの変更も同時に行なうことが可能なわけです。
仮想デスクトップのような機構に「プロジェクト」などという似つかわしくない名前がついている理由は、この「チェンジセットとの連携」にあると言えそうです。Xcodeでは開発の作業単位である“プロジェクト”をファイル(あるいは関連ファイルを収めたフォルダ)として管理していますが、Squeakでは、そうした“プロジェクト”ひとつひとつに専用の仮想デスクトップという「作業スペースのメタファ」と、チェンジセットという「作業内容を裏で自動的に蓄積するデータベース」を割り当てている…というようなイメージでとらえていただければSqueakのこのプロジェクトという名前に対する違和感も、多少は払拭できるのではないでしょうか。
なお、Squeakのような古典的Smalltalk、つまりALTOのOSだったころの性格を色濃く残しているSmalltalkシステム(暫定ダイナブック環境)において、ソフトウエア開発とは、システムの拡張や改変の作業に他なりません。したがって、ソフトウエアも、Macをはじめとする現在主流のコンピュータシステムでは主に「実行可能なファイル」のかたちであるのに対し、古典的なSmalltalkではいわゆる“パッチ(差分情報)”のかたちで配布され、利用者は自分の仮想イメージにそれを読み込んで(ファイルインして)機能させるスタイルをとります。このパッチは、プロジェクトごとの作業内容を逐一記録した対応するチェンジセットをファイルアウトすることで、容易に得られます(拡張子は「.cs」)。
新しいプロジェクトを作ると、自動的に新しいチェンジセット(日本語では「名無しX」、英語では「UnnamedX」。Xは数字)が作られ関連づけられ、その名前が、そのまま新しいプロジェクトの名前としても使われます。なお、チェンジソーターなどを使ってデフォルトのチェンジセットを切り換えたときは、プロジェクトの名前もそれに伴って変わります。逆に、プロジェクトビューでプロジェクト名を変えたときは、そのプロジェクトの関連付けられているチェンジセットの名前も同様に変更されます。複数のデスクトップでひとつのチェンジセットをデフォルトとして共有することはできません。
▼デスクトップのモーフを保存する機構としてのプロジェクト
Squeakのプロジェクトには、チェンジセットを視覚的に切り換える役割のほかにも、もうひとつ、古典的なSmalltalkシステムにはないSqueak独自の機能が与えられています。それは、デスクトップに配置されたオブジェクト「モーフ」をそのままの状態でファイルとして出力する機能です。
モーフとは、数値やデータベースのような抽象的なオブジェクトではなく、丸や四角など、我々の目に見える“姿”を持った具象的なオブジェクトのSqueakシステムにおける呼称です。もとは、1990年代初頭にSmalltalkにインスパイアされて作られた「SELF」というオブジェクト指向環境向けに考案されたものですが、当初ビットマップ画像しか扱えなかったSqueakにマルチメディア機能を強化する目的で、開発の比較的早い時期に、Squeakプロジェクトに合流したオリジナルの考案者自らの手で移植され組み込まれました。簡単には、互いに連携が可能な仕組みを持つドロー系ソフトの基本図形オブジェクトのようなものを想像してもらえればよいと思います。
Squeakには、これらモーフに対して、動きや性質を変化させる指示をプログラムとして付加できる、非プログラマ向けのスクリプトシステムが「eToys」として提供されています。ユーザーは、デスクトップをキャンバス代わりにして、モーフを好きなように配置し、それらに動きをあたえることである種のソフトウエア作品を組み立てることが可能です。こうして作られた作品は、もちろん、仮想イメージに保存することは可能ですが、ひとつの作品の保存場所に巨大な仮想イメージをそのつど用いるというのは、現実的ではありません。そこで、Squeakのプロジェクトには、デスクトップの様子をそのままファイルとして出力し、別の仮想イメージでそれを読み込み再現できるような機能が追加されました。
一見、単なる仮想デスクトップに過ぎないSqueakのプロジェクトですが、Smalltalk言語によるソフトウエア開発ではチェンジセットと連携することで、また、eToysによるデジタル創作においては、作品のキャンバス代わりになることで、実は「プロジェクト」という名に相応しい機能を提供しているわけです。
バックナンバー:
http://squab.no-ip.com:8080/mosaren/
ニュース・解説
今週の解説担当:木下 誠
クリスマス休暇を前にして、Apple Developer Connectionの動きは、ほとんどなくなっています。来年の始めにあるExpoをにらんで、ひとまず静けさを保っているという状態でしょうか。
———————————————————————-
QuickTimeで、ムービーから音声を取り出す方法
———————————————————————-
QuickTime 7のAPIを使って、ムービーから音声を取り出す方法を解説したドキュメントが公開されました。音声を、生のPCMとして取り出すことができます。
これにより、iTunesのビジュアルエフェクトに使われているように、音声を可視化したり、Core Audioの信号処理を使って、音声の加工などが、行えるようになるようです。ドキュメントでは、ステップ・バイ・ステップで、ていねいに処理の手順を説明しています。
Using the Audio Extraction API in QuickTime 7
http://developer.apple.com/quicktime/audioextraction.html
MOSAからのお知らせと編集後記は割愛します