MOSA Multi-OS Software Artists

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

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

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

2006-01-17

目次

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

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

 さて昨年の4月より始まった本連載ですが、今回はここまでの流れをまとめておきたいと思います。「ビジネスマッチングシステム」をWebObjectsを使って開発する過程を紹介してきたわけですが、これまで以下のようなことを取り上げてきました。

◇開発環境
 まず最初のころに開発環境について取り上げました。この連載が始まったころのWebObjectsの最新バージョンは5.2.3で、まだTigerもリリースされていませんでしたが、現在のWebObjectsの最新バージョンは5.3.1です。大きな変更点としては、XcodeにはじめからWebObjectsが含まれる(ただしオプションインストール)ようになりました。
 つまりWebObjectsを別途購入する必要がないわけですが、Ver5.3からはついにWindows版がなくなってしまいました。一度なくなったものがすぐに復活するとも思えませんので、今後はWebObjectsで開発をおこなうならXcodeをインストールするということになるかと思います。
 運用環境についてはTiger ServerにWebObjectsの運用環境が含まれおり、これがVer5.3の運用環境としてサポートされている唯一のプラットフォームとなります。Tiger Serverからはシステム起動時のプロセスの起動方法が変わり、wotaskdの起動がそれまでのStartupItemsからlaunchdへと変更になっています。
 また、TigerでもWebObjects Ver5.2を使用することは可能です。5.2系列の最新版は5.2.4ですが、この5.2.4へのアップデータによりTiger上での開発が可能になります。

◇モデル
 実装はまずモデルの作成から始めました。システムで必要となるデータをまとめて、「EOModeler」を使ってモデルを作成しました。このときEOFの継承機能を利用して、Entityの継承をおこないました。継承機能を使うことにより、プログラム上のクラスの継承関係をモデル上でも表現できるようになります。
 モデルによってデータベースとオブジェクトのマッピングがおこなわれますが、実際にデータベースにデータを格納するにはあらかじめデータベースを作成しておく必要があります。「EOModeler」にはモデル上で定義した情報に基づいてデータベース上にテーブルを作成するためのSQL文を自動生成する機能があります。この機能を利用してデータベース上にテーブルを作成しました。データベースソフトにはOpenBaseを使用しています。

◇Direct To Web
 WebObjectsの「Direct To Web」を使えば、モデルファイルをもとにアプリケーションを自動作成することができます。この機能を利用すればモデルで定義した各Entityに対してデータの登録/変更/削除ができるため、モデルがあらかじめ意図していたとおりに作成されているかどうかを確認することができます。
 また、Direct To Webで作成したアプリケーションは、リレーションの操作をおこなうことも可能でデータのメンテナンスに利用するといったことも考えられます。

◇Reusable Component
 WebObjectsでは動的に生成するWebページをコンポーネントとして作成することができますが、ページ全体ではなく、他のページに埋め込んで使用するようなパーツを作成することができます。
 他のページに埋め込むコンポーネントのことをReusable Componentと呼んでいますが、Reusable Componentを積極的に利用することによって開発効率を上げることができます。複数のページで共通するパーツを使用するような場合は共通部分をReusable Component化しておくことにより、コンポーネントの再利用が可能になります。また、再利用しないにしてもReusable Compoentを組み合わせることで1つのページを細分化して作成できるようになるため、メンテナンスがやりやすくなるといったメリットもあります。
 Reusable Componentはステートレス化や親コンポーネントとのデータの自動同期を無効にすることで、パフォーマンスを最適化することができます。

◇DirectAction
 通常はセッション管理が自動的におこなわれますが、セッションを必要としないような処理はDirectActionにより実現することができます。DirectActionを使用した場合にはURLが固定になり、Webブラウザでブックマークができるようにもなります。
 ただしDirectActionでは、Webブラウザから送信されたHTML Formの値へアクセスするには、明示的にプログラミングをおこなう必要があります。セッションがある場合には利用できる、デフォルトのEditingContextを利用することもできませんので、データベースアクセスをおこなうような処理はEditingContextを作成してから処理をおこなう必要があります。

 以上のようなことをこれまで解説してきました。今後はもう少し実装に関することを解説してから、WebObjectsで開発したアプリケーションの運用に関することを解説していく予定です。

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

 御慶。……これが配信されるのはもう15日過ぎ、いつまでも正月気分でいられるかよ、というところかも知れないが、なにを隠そうオレは年末やりかけちまったプログラムに追われて元旦その日から正月気分ではなかったので、このさい敵討ちのつもりでここに新年のご挨拶をさせていただく。今年がみなさんにとってよい年でありますように、オレにはみなさんより……ちょっとでいいからよい年でありますように(笑)。

 さて無駄話はそれくらいにして前回の続き。……えと、なんだったっけ? そうそう、Interface Builderで NSWindowに対して指定できるスイッチのひとつ「Release when closed」というヤツの効果を検証しようと言うんだった。以下、前回のコピペになって申し訳ないが……。
 ウィンドウひとつにチェックボックス1個、ボタン2個を並べ、チェックボックスを「□ Release when closed」とする。ボタンはそれぞれ「Close」と「OrderOut」。NSObjectのサブクラスをひとつ作り、そいつのIBOutletとして、このウィンドウ本体とチェックボックスを連結。IBActionとして以下の4つを定義する。

-(void) closeWindow:(id) sender {
    [ourWindow close];
}                          // 当然、「Close」ボタンに連結

-(void) orderOutWindow:(id) sender {
    [ourWindow orderOut:self];
}                          //  「OrderOut」ボタンに連結

-(void) toggleReleaseFlag:(id) sender {
    [ourWindow setReleasedWhenClosed:
            ([sender state] == NSOnState) ? YES:NO];
}                            // チェックボックスに連結

-(void) openWindow:(id) sender {
    [ourWindow orderFront:self];
}                            // メインメニューのFile->Openに連結


あと、Interface Builderでの設定を起動時にチェックボックスに反映するための以下のコードを書き……、


- (void) awakeFromNib {
    [ourCheckBox setState:([ourWindow isReleasedWhenClosed] == YES) ?
                                                    NSOnState:NSOffState];
}

さて「□ Release when closed」のチェックボックスをオンにして「Close」を実行する。……いや、ここでは当然ウィンドウが閉じるだけなんだが、次にメニューから「Open」を選んだとき、上のチェックボックスがオフの時のように二度とウィンドウは開かない。それどころかアプリケーションはクラッシュする。なぜか? このインスタンスは文字通り、クローズされると同時にリリースされちゃっているからである。当たり前だが「OrderOut」ボタンでこれを閉じた場合は問題なくまた開く。すなわちこれが「Release when closed」というスイッチの効果である……わけなんだが、ほんぢゃなんでこんな仕組みがあるんだろうか。何の役に立つわけ?
 NSWindowの close メッセージの解説にこうある。「NSWindowオブジェクトはクローズ時にリリースされるのがデフォルトである。NSPanelでは逆……」。つまりNSWindowは、ドキュメントを表示し編集させるような「開いた時に生成され閉じた時に捨てられる」用途に使うものであり(そんときに自動的にリリースされてくれれば手間が省ける)、NSPanel は各種設定のダイアログボックスのような、1セッション中に何度も使用されるウィンドウとして使うのだ、ということである。
 でもさぁ、だったら Interface Builderで新規にNSWindowのオブジェクトを生成したとき、「Released When closed」のスイッチはデフォルトでオンになってて欲しいと思いませんか? まったくこのソフトにはこういう「なんだかなぁ」つう部分が多いよなぁ。
(2006_01_10)

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

UNIXとしてのMac OS X

〜Perlについて(27)〜

 こんにちは、高橋真人です。さて年を越えてしまいましたが、前回お約束した通り、今回はファイルを処理するPerlスクリプトにファイル名を動的に与える方法についてご説明します。
 前回のスクリプトの骨格の部分を流用して、与えられたファイルの内容を単にそのまま出力するだけのスクリプトを作ってみます。今回は、このスクリプトに手を加えながら解説をしていきます。

$file_path = '/Users//Desktop/data.txt';
open IN, "$file_path" or die;

while (<IN>) {
     print "$_ ?n";
}

 まず予備知識として、「コマンドライン引数」というものについてちょっと見てみます。
 C言語では、通常main関数は以下のように書くことになっています。

int main(int argc, char *argv[]) {
    ...
}

 Terminalなどを使ってコマンドを起動する場合、コマンド名のあとにスペースで区切られた複数の文字列を与えることがありますが、これがコマンドライン引数です。
 これらコマンドライン引数は、時によってコマンドの処理対象となるファイルの名前であったり、コマンドのオプションを指定する記号であったりします。
 しかし、これらのコマンドライン引数が何を意味するのかの解釈に関してはすべてコマンド、つまりプログラム側で行われますので、コマンドライン引数はただの文字列の配列としてプログラムに渡されます。
 このプログラムに渡された文字列の配列が格納されているのが、上記のargvという第2引数となります。さらに、Cでは関数に渡された配列の実体はポインタなので、argvだけでは、その要素数を知ることができないため、第1引数のargcには配列の要素数が入っているのです。
 ちなみにargvの第1要素であるargv[0]には、そのプログラムを起動した文字列、つまり「./a.out」とか「/usr/bin/vi」などという文字列が入ります。

 一方、Perlにおいてはコマンド引数は@ARGVという特殊変数を使って渡されます。特殊変数というと、今までは$_とか、$&などと、'$'という文字で始まっていましたが、それはこれらの特殊変数がスカラー変数だったからです。よって@ARGVは'@'で始まっているので、配列だということが分かります。
 Perlの場合にはスクリプト名は@ARGVの中には入りません。これは、perlコマンドを使って、

perl test.pl data.txt

とした場合にも、また、スクリプト自体に実行権限を持たせて(連載52、53回参照)、

./test.pl data.txt

とした場合にも同じで、どちらのケースでも@ARGVに入るのは'data.txt'という文字列だけとなります。

 さて、以上の説明から改良方法が見えてきました。
 スクリプトの先頭の2行を以下のようにすると、すぐ上の形で起動した場合には、$file_pathには'data.txt'が入ってきます。

$file_path = $ARGV[0];
open IN, "$file_path" or die;


 ですが通常はPerlではこのような書き方をしません。以下のように書きます。

$file_path = shift;
open IN, "$file_path" or die;

 shiftという演算子が出てきました。この演算子は連載の58回でチラッと出てきているのですが、引数に配列をとる演算子です。動作としては、配列の先頭要素を切り離して返す(つまり、呼び出す度に配列の要素は一つずつ減っていく)というものです。
 このshift演算子ですが、引数を省略した場合@ARGVが暗黙のうちに与えられます。ただし、サブルーチン(Cにおける関数、ただしmain()を除くのようなものと考えてください)の中で使われた場合には、@_という特殊変数が暗黙のうちに使われます。
 最後に以上を簡単に理解できる例をお見せします。

while ($v = shift) {
    print "$v ?n";
}


 以上をargtest.plというファイルにして、以下のように起動してみてください。

perl argtest.pl a b c d e f

ニュース・解説

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

Carbon ドキュメント & サンプル & SDK ナビゲーション(2006/01/13)

【開発環境】
サンフランシスコ Expoの基調講演で、ついにインテル版CPU搭載のMacintoshが登場しました。予定より半年も早い登場ですね。まあ、現行機種の買い控えを最小限に抑えるのには良いタイミングなのでしょうが(最初からの作戦?)、インテル版アプリの開発終了時期を6月と考えていたデベロッパーにとっては頭が痛いところです。

早速、Intelのウェブサイトにも、Apple向け開発ツールのβ版リリースが載りました(以前からあったような気もするが...)C/C++コンパイラを、Xcode 2.2のgccと差し替えて使えるのは嬉しいですね。興味ある方は試してみてはどうでしょうか?

http://www.intel.com/cd/software/products/asmo-na/eng/227389.htm

また、今回の発表に合わせて「DTK Exchange Program」サービスが開始されました。レンタルしていたG5筐体のインテルマシンを、インテルCPU版の17インチiMacに無料交換してくれるそうです。締め切りは2006年3月31日。慌ててインテル版iMacを注文しなくて良かった思う今日この頃(笑)。

http://developer.apple.com/dtkexchange/index.html

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

前回から1月13日の期間中、Apple社のDocumentationサイトには数多くのドキュメントが登録されました。ただし、大部分は今までの内容のマイナーチェンジです。今回は、その中で初版と内容が大幅変更になったドキュメントだけをピックアップしました。数多くのQuickTimeに関するドキュメントが、各技術分野ごとに分けられて登場しました。今までは、欲しい技術を習得するための指針を得るのが難しかったので助かります。日本語訳も早急にお願いしたいところです。新規リリースノートの方も7つ登録されています(何やらバージョンが古い物もある?)。また、デベロッパ向け読み物も2つ登録されています。「Using the Audio Extraction API in QuickTime 7」については、前号の木下さんの記事も参照してみてください。

「Accessibility (ApplicationServices/HIServices) Reference」
「Apple Publications Style Guide」
「Control Manager Reference」
「Ink Services Reference」
「Launch Services Reference」
「Multilingual Text Engine Reference」
「Quartz 2D Reference」
「QuickTime Component Creation Guide」(初版)
「QuickTime Compression and Decompression Guide」(初版)
「QuickTime Guide for Windows」
「QuickTime Import and Export Guide」(初版)
「QuickTime Media Types and Media Handlers Guide」(初版)
「QuickTime Movie Basics」(初版)
「QuickTime Movie Creation Guide」(初版)
「QuickTime Movie Internals Guide」(初版)
「QuickTime Music Architecture Guide」
「QuickTime Streaming Guide」
「QuickTime Transport and Delivery Guide」(初版)
「QuickTime Video Effects and Transitions Guide」
「Universal Binary Programming Guidelines, Second Edition」
「WebObjects Overview」
「WebObjects Web Applications Programming Guide」

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

リリースノート

「Developer Documentation Release Notes for Xcode 2.2」
「High Level Toolbox Release Notes (10.3 and earlier)」
「High Level Toolbox Release Notes (10.4)」
「High Level Toolbox Release Notes (10.4.2)」
「High Level Toolbox Release Notes(10.4.3)」
「Interface Builder Release Notes」
「J2SE 5.0 Release 3 Release Notes」

http://developer.apple.com/releasenotes/

「Identify your Universal application」(読み物)

http://developer.apple.com/softwarelicensing/agreements/maclogo.html

「Using the Audio Extraction API in QuickTime 7」(読み物)

http://developer.apple.com/quicktime/audioextraction.html

前回から1月13日の期間中、新規テクニカルノートは3つ登録され、新規テクニカルQ&Aの方は4つ登録されました。インテル版のMacintoshも発表されましたので、その出荷が本格的になれば、新機種に関する新しい資料がもどんどんと増えていくでしょう。しばらくは、新規テクニカルノートやQ&Aの発表を見逃せませんね。

TN2161「Nested Functions in XCode」(初版)
TN2083「Daemons and Agents」(初版)
TN2138「QTKit Frequently Asked Questions 」

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

QA1429「Deprecated CALL_ON_[UN]LOAD pragmas」
QA1451「Intel-Based Macs, Dashboard, Safari, and You」(初版)
QA1295「Java on Intel-based Macintosh Computers」
QA1449「Setting default open Finder window」(初版)

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

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

前回から1月13日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが7つ登録されました。このうち初めての登録(初版)となるのは「QTKitPlayer」のみです。しかし、私の記憶では、これも以前に登録されたことがあったような気もするのですが...。

「filesystem_examples」(File関連)
「QTKitPlayer」(QTKit関連)(初版)
「CFMBonjourSample」(Bonjour関連)
「QTKitMovieShuffler」(QuickTime関連)
「SampleFilterScheme」(Driver関連)
「SimpleAudioExtraction」(QuickTime関連)
「ThreadsExportMovie」(QuickTime関連)

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

【デベロップメント SDK】

前回から1月13日の期間中、Apple社のSDKサイトには新しいSDKはひとつも登録されませんでしたが、CHUDの最新版v4.3.1が登録されました。

「Computer Hardware Understanding Development (CHUD) Tools 4.3.1」

http://developer.apple.com/tools/download/

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

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