MOSA Multi-OS Software Artists

MOSAはソフトウェア開発者を支援します

  • iPhone/iPod touch アプリ紹介
  • MOSA掲示板
  • 活動履歴
  • About MOSA(English)

MOSA Developer News[MOSADeN=モサ伝]第171号

2005-08-09

目次

  • 「WebObjects Dev Report」     第17回  田畑 英和
  • 藤本裕之のプログラミング夜話 #74
  • 高橋真人の「プログラミング指南」  第72回
  • ニュース・解説                小池 邦人

「WebObjects Dev Report」  第17回  田畑 英和

 いよいよ日本でもiTunes Music Store(以下iTMS)のサービスが開始されました。iTMSがWebObjectsで構築されていることはすでにご存知の方もいらっしゃるかと思いますが、iTMS本体以外にも例えばこんなところでWebObjectsが利用されていたりします。

・iTunes Link Maker
http://phobos.apple.com/WebObjects/MZSearch.woa/wa/itmsLinkMaker

 これはiTunes上に特定の曲などを表示させるためのリンク用HTMLを自動生成してくれるサービスです。日本版iTMSがオープンする以前から提供されていたサービスですが、さっそく日本版のiTMSへのリンクも生成できるようになっています。ですが、残念ながら日本語による検索には対応していないようです。
※ただし、検索結果に日本語は表示される
 日本でもiTMSがスタートしたことにより、WebObjectsへの注目度も上がってもらいたいものですね。

モデルファイルの検証

 さて、これまでデータベースやモデル、フレームワークについて取り上げてきました。これからいよいよアプリケーション本体の開発へと入っていきたいと思いますが、ここでモデルファイルの検証方法をご紹介しておきます。
 モデルファイルの情報が正しく設定されていませんと、データベースとオブジェクトのマッピングに問題が生じ、アプリケーションが動作しなくなってしまいます。
 モデルファイルが正しく機能するかを確認するには、実際にアプリケーションから利用してみるという方法があります。アプリケーション本体の開発はこれからだというのに、どうやってアプリケーションから利用するのだということになりますが、WebObjectsではモデルファイルさえあれば自動的にアプリケーションを構築できる機能があるのです。

Direct To Web

 具体的な方法ですが、Xcodeで”Direct To Web Application”(以下D2W)タイプの新規プロジェクトを作成します。このときプロジェクト作成のアシスタントで動作を確認したいモデルファイルを選択し、プロジェクトに追加します。プロジェクトが自動生成されたら後はビルドと実行をするだけで、検証対象のモデルファイルを利用したアプリケーションが起動します。
 このD2Wのアプリケーションはあらかじめ、データベースにアクセスするための基本的な機能をもっており、各Entityのデータの追加/変更/削除/検索などができてしまいます。また、リレーションの編集機能も備えていますのでデータベースに対して様々な操作を実際に試してみることができます。
 コードを1行も書かずに、モデルに応じたアプリケーションが出来上がりますので、なにか問題が生じたとなると原因はモデルファイルにある確率がかなり高いといえるでしょう。このようにしてモデルファイルを検証できるわけですが、なにもコードを追加しないデフォルトの状態では日本語データを正しく扱うことができませんので、最低限日本語エンコーディング処理のためのコードは追加してあげる必要があります。

 D2Wのアプリケーションは様々なカスタマイズもできるのですが、デフォルトの状態でデータベースにアクセスする基本的な機能を備えているため、モデルファイルの検証や、あるいはマスターデータのメンテナンスといった用途にも用いることができます。
 あくまでもアプリケーションが出来上がるため、モデルファイルの検証は手動でおこなう必要があり、テスト用のデータを登録したらしたで、そのデータをどのようにクリアするかといった課題もありますが、なんといっても手軽にアプリケーションを構築できますので、非常にお手軽です。
 検証対象のモデルファイルは直接プロジェクトに登録してもよいですし、すでにモデルファイルを含んだフレームワークが存在する場合は、フレームワークをプロジェクトに追加して検証をおこなうこともできます。
 D2Wではモデル情報に基づいたアプリケーションが動的に構成されますので、モデルを変更した場合、再ビルドするだけですぐに変更内容が反映されたアプリケーションを実行することができます。
 特にこれから初めてモデルファイルを作成するような方々は、今回紹介したD2Wを利用してモデルファイルが正しく機能することを確認してから、自信をもってアプリケーション本体の開発に移っていくのがよいでしょう。

藤本裕之のプログラミング夜話 #74

 いや毎日暑いねぇ。こう暑いと勤労意欲の減退もたけなわになる……というのは先般亡くなった永島慎二さんのマンガで覚えた言い回しだったなぁ確か。とにかく承前、レスポンダ・チェインの話を続ける。前回まで、ウィンドウ内に配置されたNSViewの mouseDown: をオーバーライドして、このテのイベントを「処理する順番」が、このチェインによって管理されていることをみた。
 そして同時にこんな、「ただ何かを表示するためだけ」のビューを重ねてその下(というか裏というか)にあるビューにイベントを処理させるなんてことを意識的にやることも少なそうだと指摘した。……意識しないでやってることはあるんだけどね。だって重ねた方のビューの イベントハンドリング・メソッド(mouseDown: など)をオーバーライドしなければ自然そうなるんだから。ここまでよろしいか。

 レスポンダ・チェインの今ひとつの活躍どころについて説明を始める前に、まず各ウィンドウごとに保持されている firstResponder というインスタンス変数について正しい理解をしていただく。これがわかんないとあとが全然わかんなくなるのだ。
 たとえばここに1つのダイアログがあるとする。ダイアログには5つ、NSView(のサブクラス)が配置されている。1つはNSButtonで、あとの4つはNSTextField、そのうちの2つは入力域だとする……。
 もすこし具体的でないとイメージが湧かないか。なんでもいいが、身近なところでいこう。最初の NSTextField はEditableではなく、「アカウント:」という文字列をそのstringValueとして保持している。その右に置かれたNSTextFieldはEditableで、初期値は指定されていない。これらと同じペアがその下にもうひとつありそのEditableでないほうの初期値は「パスワード」。NSButtonの表示は「ログイン」となっている。よく見かけるあれである。
 Interface Builderでこんなダイアログを作成し、まずは「Test Interface」で動かしてみてほしい。キーボードからの入力を受け取るキャレットは、2つのEditableなNSTextFieldのうち最初に作ったほう、すなわち「アカウント」という文字の横のヤツの中で点滅していると思う。いや、どっちを最初に作ったかもうわかんなくなっちゃったヒトは、キャレットがある方が先に作ったもんなのよ。信じてくれ(笑)。
 テストを終了し、このウィンドウのインスペクタ・ウィンドウを開いてほしい。コネクションをみると、アウトレットのところに「initialFirstResponder」というのがあるはずだ。今は何もつながってない。ここに「パスワード」の横のNSTextFieldを結びつけて再度「Test Interface」を行なうと……、キャレットは下の入力域で点滅するようになったでしょ?

 マウスのイベントは、それが発生した時にカーソルの下にあった……て言い方も変だが、ビューがまず最初にそれに応える機会を与えられる。前回みたように、そのビューが応じるつもりがない場合だけ(つうかそれに対応するメソッドをオーバーライドしていないと)、そのビューのインスタンス変数である_nextResponder が参照されイベントがパスされる。
 けれどキーボードからの入力の場合は事情がちょっと違う。上でみたように、ウィンドウに入力域が複数ある場合には、あらかじめどっちの入力域がそれを受け取るのか、ユーザーに見えていないといけないわけだ。いわゆる「アクティブなビュー」である。mouseDown: のように発生場所によって応答の優先権を持つビューが決まらない種類のイベントは、まずこのアクティブなビューに渡される(そしてもしそいつが応答しなければマウスイベントの時と同様、レスポンダ・チェインが辿られる)。このアクティブなビューが「ウィンドウのfirstResponder」であり、Interface Builderでウィンドウにあるアウトレットが「initial firstResponder」であることからも分かるようにこの変数はプログラムやユーザーによって変更されうる。そう、さっきのウィンドウでタブ・キーを押すとキャレットの位置が替わる、あれのことね。
 次回は「ウィンドウごとにfirstResponderがあるなら、アプリケーションのNibファイルを作ると最初っから出来てる『First Responder』ってのはなに?」という話をする予定。ではみなさんよい夏休みを。
(2005_08_06)

高橋真人の「プログラミング指南」第72回

UNIXとしてのMac OS X

〜Perlについて(18)〜

 こんにちは、高橋真人です。
 さて前回の最初の方で、「条件判断の中で使われるm//演算子にgオプションを指定することには余り意味がない」と言いました。検索する対象がいくつあろうがヒットすることには変わりがないというわけです。
 しかし、実はそうでもないのです。
 前回は、話を複雑にするのを避けるためにあえてこのような説明をしたのですが、if節で使われるような、つまりスカラーコンテキストでm//演算子が使われるときにgオプションを指定してあると、少し興味深い独特の動きをするのです。
 説明のために前回の例に少し手を加えてみます。

$string = 'aBcdefABCdefabcffabc';
if ($string =~ /(abc)/gi) {
    print $1, "¥n";
}


 注意してほしい変更点は、検索に使う正規表現のabcの前後を丸カッコで囲ってあるところです。正規表現部分をカッコで囲うと、マッチしたものを記憶するという機能があるのです。記憶されたものは$1という特殊変数(カッコで囲ったところが複数ある場合は、順に$2、$3…と増えていく)に記録されます。
 このカッコで囲って記憶する仕組みは非常に強力な機能なので、いずれ改めて説明しますが、今回は、print演算子に与えている$1という変数にはパターンマッチングの結果が入っているのだと理解してください。
 とりあえず、走らせてみましょう。結果は、

aBc

となりました。
 さて、ここでのm//演算子にはgオプションと同時にiオプションも指定されていたので、パターンマッチングには大文字と小文字が区別されず、照合結果として文字列先頭の’aBc’が記録されました。
 それでは、残りの部分はどうなってしまったのでしょう? gオプションを指定しているのだから、あと3回はマッチするはずです。
 実は、スカラーコンテキストで使われた場合、gオプション付きのm//演算子は、最初の一つしか照合しないのです。その代わり、「どこまで調べたか」を内部に記憶しています。そして、次に同様に呼び出された時には、今度は記憶されていた場所から照合を開始するのです。
 実際に試してみましょう。

$string = 'aBcdefABCdefabcffabc';
while (1) {
    unless ($string =~ /(abc)/gi) {
        last;
    }

    print $1, "¥n";
}
print "Done.¥n";

 結果は、

aBc
ABC
abc
abc
Done.

となりました。
 簡単にコードを解説します。ループするごとに、$stringとのパターンマッチングを行い、マッチした結果をプリントしています。マッチしなくなったら終了です。unlessは以前にも触れましたが、ifの逆で、条件判断が不成立の場合に処理を実行します。lastはCでのbreakに匹敵すると思ってください。
 ちなみに、以下のように書いても同じですし、慣れた人にはこちらの方が直接的な表現かもしれません。

while ($string =~ /(abc)/gi) {
    print $1, "¥n";
}

 いかがですか?
 上記の例は極めて単純なので、余り価値が分からないかもしれませんが、正規表現では、当然さらに複雑な文字列照合を行えますので、応用範囲は広いと思います。例えばhtmlの中から特定の条件に合うリンクを抽出して、ダウンロードするなどという処理も、このやり方を応用すればできるでしょう。

ニュース・解説

今週の解説担当:小池邦人

Carbon ドキュメント & サンプル & SDK ナビゲーション(2005/8/05)

【開発環境】

iPodユーザ待望の「iTunes Music Store日本版」の開始、2ボタン+ホイールマウスユーザ待望の「Mighty Mouse」の発表、そして「AppleStore渋谷店」の営業開始と、Apple社からの大きな発表が続いています。筆者も、速攻でMighty Mouseを購入して愛用しだしました。当然、将来的にはこのマウスがiMacやPowerMacに標準で添付されることになるでしょう。上部に追加された小さなトラックボールの使い勝手がとても良く、「これを自作アプリにどのように活用しようか?」と、さっそく作戦を練り始めました(笑)。

まずは、マウスドラッグで行っていたボクセルオブジェクトの3D回転を、このトラックボールに割り振れるようにアプリケーションを改良してみようと考えています。パソコン用の優秀(クール)な周辺機器は、今までのアプリのユーザインターフェースを再考し変化させるきっかけを与えてくれます。まあ、マウス自体の登場ががそうしたパラダイム変化を引き起こした一番の好例なのですが…。今回は、それほど大きな変化ではないのですが、まだまだそうした機会が訪れる可能性があると言うことを、「Mighty Mouse」は我々デベロッパーに教えてくれています。

【テクニカルドキュメント】

前回から8月5日の期間中、Apple社のDocumentationサイトには新規ドキュメントが2つ登録されました。加えて、デベロッパー向け読み物が2つ登録されています。最近発表された新機種については、iBookの仕様ドキュメントのみが発表され、Mac miniの方は出てきませんので、今回のMac miniは本当に何も仕様が変更されていないのでしょうね(笑)「Xsan Migration Guide for Xsan 1.1」と、読み物の「plasq’s Small Team Makes Comic Life Media-Rich and Fun」については、前号の木下さんの記事も参照してみてください。

「Xsan Migration Guide for Xsan 1.1」(PDFあり)SV
「iBook Developer Note」(PDFあり)HW

http://developer.apple.com/documentation/index-rev-date.html

「Introduction to Open Source Scripting on Mac OS X」(読み物)

http://developer.apple.com/internet/opensource/opensourcescripting.html

「plasq’s Small Team Makes Comic Life Media-Rich and Fun」(読み物)

http://developer.apple.com/business/macmarket/plasq.html

前回から8月5日の期間中、新規テクニカルノートはひとつだけ登録されましたが、新規テクニカルQ&Aの方は登録されませんでした。このテクニカルノートでは、QuickTimeコンポーネントをUniversal Binaryに対応させるための解説がなされています。途中で’thng’リソースについての話が出てきて、そこでリソース編集用として「Resourcerer」が使われています。リソースの必要性(現状でも)が理解できているのなら、Xcode Toolsにもちゃんとしたリソース編集用ツールを付けて欲しいものです(笑)。このテクニカルノートついては、前号の木下さんの記事も参照してみてください。

TN2012 「Building QuickTime Components for Mac OS X」

http://developer.apple.com/technicalnotes/index-rev-date.html

【サンプルソースコード】

前回から8月5日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが25登録されました。QuickTime APIをモダンAPIへと差し替えるためのサンプル提供が続いています。また、Cocoa用のQTKitに関連するサンプルも充実してきました。サンプルソースコードの中には、Universal Binary対応済みのプロジェクトも含まれていますので、試すことが可能な環境を所有されている方は、ぜひチャレンジしてみてください。

「AlbumToSlideshow」(Final Cut Pro関連)
「CIAnnotation」(Cocoa関連 )
「JavaSplashScreen」(Java関連)
「simpleJavaLauncher」(Java関連)
「QTKitCreateMovie」(QuickTime関連)
「QTKitFrameStepper」(QuickTime関連)
「QTKitProgressTester」(QuickTime関連)
「QTKitSimpleDocument」(QuickTime関連)
「QTKitAdvancedDocument」(QuickTime関連)
「VideoViewer」(QuickTime関連)
「CryptNoMore」(Security関連)
「KauthORama」(Security関連)
「SimpleDial」(Networking関連)
「SimpleReach」(Networking関連)
「ThreadsExporter」(QuickTime関連)
「ThreadsImporter」(QuickTime関連)
「ThreadsExportMovie」(QuickTime関連)
「ThreadsImportMovie」(QuickTime関連)
「BackgroundExporter」(QuickTime関連)
「CFLocalServer」(Core Foundation関連)
「CarbonTransparentWindow」(HIView関連)(初版)
「WhackedTV」(QuickTime関連)
「DropDraw」(QuickTime関連)
「ImageApp」(Core Image関連)
「Fiendishthngs」(QuickTime関連)

http://developer.apple.com/samplecode/index-rev-date.html

【デベロップメント SDK】

前回から8月5日の期間中、Apple社のSDKサイトには新しいSDKが2つ登録されました。両方ともAudio関連のSDKです。

「CoreAudio SDK v1.3.6」
「Apple Loops SDK 1.3.1 SDK」

http://developer.apple.com/sdk/

MOSAからのお知らせと編集後記は割愛します

MOSA Developer News   略称[MOSADeN=モサ伝]
Apple、Mac OSは米国アップルコンピュータ社の登録商標です。またそのほかの各製品名等はそれぞれ各社の商標ならびに登録商標です。
このメールの再配信、および掲載された記事の無断転載を禁じます。
特定非営利活動法人MOSA
Copyright (C)2005 MOSA. All rights reserved.