MOSA Multi-OS Software Artists

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

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

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

2005-04-19

目次

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

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

 さてさて、皆さんもうご存知かと思いますがいよいよTigerの発売日が発表になりました。4/29(金)に発売され、Mac OS X Server v10.4も同じ日に発売されます。TigerにおいてWebObjectsがどのような扱いになるのかはまだ詳細が公開されていないようですが、詳細が分かり次第またレポートしたいと思います。
 WebObjectsそのものがアップデートされていないからには、あまり期待もできませんが、Javaのバージョンも上がっていくことでしょうし、Xcodeも進化していますので、せめて最新の環境は確実にサポートしてもらいたいものです。

開発環境の準備

 さて今回は開発環境の準備について解説していきたいと思います。あらためてWebObjectsの開発環境を確認してみますと、カタログスペック上では次のようになっています。

・開発プラットフォーム
  Mac OS X v10.2.2以降
  Windows 2000 Professional SP3

 「v10.2.2以降ってことは当然Tigerも動作環境に含まれるんだな」とおもわずツッコミを入れたくなりますが実際のところはどうなのでしょうか。Tigerの発売はもう少しだけ先のことですので、Mac OS Xの最新版はv10.3.8(編集部注釈:執筆時での最新版)ということになりますが、開発環境のXcodeは1.5(Tigerでは2.0)がリリースされています。
 ところがWebObjectsの最新版である5.2.3 Updateの説明をみてみますとシステム条件としては以下のとおりになっています。

・WebObjects: 5.2.3 Updateについて
http://til.info.apple.co.jp/techinfo/107873
 Mac OS X 10.3.3以降
 Xcode 1.1 Developer Tools
 Java 1.4.2

 またインストールの手順をみてみますと、Mac OS X 10.3からインストールを始める手順が紹介されています。5.2.3がリリースされたのが約1年前のことですので環境としてはまあこんなものかなとも思いますが、ここで紹介されているアップデート方法はOSのアップデータが1回(10.3 -> 10.3.3)、Xcodeのアップデートが1回(Xcode -> Xcode 1.1)、WOのアップデートが3回(5.2->5.2.2 -> 5.2.3)とかなり手間のかかる手順になっています。
 さらに今となっては少し古い環境になっていますし、この手順どおりにインストールしようとすると、最近の機種ではすでにアップデート済みの10.3がバンドルされており、10.3のCDではそもそもブートができなくなっていますので、手順どおりにはインストールできないことになります。
 少し古い機種で、一通りインストールした環境のディスクイメージを作成しておいて、そちらを開発マシンにリストアするという方法がありますが、これだとさらに手間がかかってしまいます。

 なぜこんな細かいことを解説しているかといいますと、最近何度かWOの開発環境をセットアップする機会があったのですが、5.2.3のアップデートで説明されている手順でないとうまく開発環境を構築することができなかったからです。
 5.2.3までアップデートすることはできるのですが、いざプロジェクトを作成してみると、なにもコードを加えていない状態でも試しにビルドしてみるとビルドに失敗することがあります。「WebObjects Application」タイプのプロジェクトはビルドできても、「WebObjects Framework」タイプのプロジェクトはビルドできないといった症状が確認できています。
 おそらくビルド時に参照するなにかのファイルパスがうまく設定されていないのではないかと思いますが、素直に5.2.3のアップデートの手順どおりに環境を構築した場合には、もちろん問題なく開発環境を構築することができました。

 以前から開発をおこなっている経験豊富なデベロッパーならこんな状況でもなんとかなるかもしれませんが、残念ながらこれから初めて開発をおこなう場合は少し注意が必要です。もし開発環境を構築してみてなにか変なことがあればまずは手順どおりにアップデートをかけてみることをおすすめします。現状では、この5.2.3のアップデートで説明されている手順が確実にインストールをおこなえる手順になります。
 もともとアップデートの手順が複雑なうえに、最新の開発環境がまだサポートされていませんので、いいかげんなんとかしてもらいたいものです。

 さてなんだか今回はぐちっぽい記事になってしまいましたが、今回紹介した純正の開発環境の他に、Eclipseを用いてWebObjectsの開発をおこなう環境も整備されてきています。次回はEclipseを用いた開発環境についてご紹介したいと思います。

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

 さてお待ちかねのマチカネコイノボリ(という名前の馬がむかぁし関西にいたんだよ)、NSViewのお話である。まずは概略、ドキュメントを見ればこのクラスは、NSResponderのサブクラスである。え、それを言ったらNSApplicationもそうだったではないかって? そうなんだけどNSResponderのことをいろいろ説明するにはここで取り上げた方が都合がいいのでここまで温存したわけ。けして忘れていたわけではない、ありません(咳)。

 NSResponderというのはabstract class、日本語でいうと抽象クラス。……これ、日本語でいってもちっとも解りやすくならないことが多いコンピュータ用語の中でも東の大関級に解りやすくならない言葉だけれども、早い話が「それ単体ではインスタンスを生成できないクラス」である。JavaやC++にもあるでしょ、あれと同じ。

 ただひとつ、Objective-Cにおける抽象クラスには他の言語のそれと大きく違う点がある。それはObjective-Cにおける抽象クラスというのが、その存在自体抽象的なもんであるということ。……いや別にトートロジーで遊んでるわけぢゃなくてね、たとえば上で言ったようにNSResponderが抽象クラスだとすると、JavaやC++的常識に照らせば、あなたは(オレも)

NSResponder* aResponder = [[NSResponder alloc] init] ;

とかいうコードは書けない。エラーが出るかワーニングが出るか鬼が出るか蛇が出るか知らぬがとにかく怒られるはずである。ところがObjective-Cではこのコーディング、通ってしまう。ただこのaResponderというインスタンスがなんの使い道もない「超芸術トマソン」なだけ、なのね。

 想像だが、Objective-Cの設計者に言わせればJavaやC++のようにわざわざこれに「abstract」とか言う識別子をつけさせてコンパイルエラーだのワーニングだの出すのは無駄だということなんだろう。概念をちゃんと理解してるまともなプログラマは、間違っても上のaResponderみたいなインスタンスは作らない。作っちゃうようなプログラマは仕事の邪魔だからほっとけばいいではないの、と。……オレはこの言語のこういうトコが大変好きなんだが、読者諸賢はいかがですか。

 さて話を戻してなんでこんな抽象クラスなんてモノがあるのかというと……それはとってもとっても長い話になるのでまたの機会にするとして(笑)、このNSResponderというクラスを一言で説明すると「イベントハンドリングを行なうクラス」つうことになる。逆にいうとCocoaでは基本的に、このNSResponderのサブクラスでないオブジェクトではイベントのハンドリングは行なえない。

 そして基本クラスのNSViewがどうしてこいつのサブクラスになってるかといえば理の当然、ユーザーが使うボタンだのテキストフィールド、スライダーやスクロールバーといったいわゆるコントロールと呼ばれるもの全てがこのNSViewのサブクラスとしてできているためである(この例外がNSObject直のサブクラスであるNSMenu、そのせいでいくつかのかっこいいMenuがらみの機能がCarbonでは使えてCocoaでは使えない、まぁでもそれもまた別の話だ)。

 すなわちNSViewというクラスのメソッドは、このNSResponderから継承されたイベントハンドリング関係のものと、そのイベントを惹起するところのディスプレイ(表示)を担当するNSView固有のものとに大別できる。まずは見てくれから話を始めた方がとっかかりがいいと思うので、次回から数回をかけて、NSViewの「NSResponderから継承されたんではない」メソッドを説明して行こう。
(2005_04_14)

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

UNIXとしてのMac OS X

〜Perlについて(12)〜

 こんにちは、高橋真人です。
 さて、前回に引き続きPerlに備わっているコードを読みやすくするための仕組みをさらに見ていきましょう。
 前回の最後に触れましたq//もしくはqq//というコーテーションの仕方ですが、Perlではスラッシュはもともと区切り文字として使われます(って、一般的にはスラッシュは区切り記号なわけですが)。なので、ダブル・シングルコーテーションの代用としてのみならず、他にもスラッシュが使われる場面はあるのです。
 Perlでのスラッシュの用途としていちばんポピュラーなのは正規表現です。正規表現はPerlの中でも重要かつ大きな位置を占める技術なので、いずれ改めて解説をします(と、前にも書いた気がする)ので今はさらっと流しますが、正規表現が頻繁に用いられる文字列の検索・置換の処理を例にあげてみます。

$string =~ s/ABC/def/;

 これがPerlにおける基本的な検索・置換の例です。この式はスカラー変数の$string(この場合は文字列を保持しているという前提)において、ABCという文字並びを見つけたら、それをdefという文字並びに置き換える(ただし一度だけ)という処理になります。
 細かい説明は省きますが、この場合sというのが検索・置換を行う演算子で、構文としては、

s/検索される正規表現/置き換えられる表現の式/;

といった形になります。つまり、演算子sのあとに、検索元と置換先がスラッシュで区切られて並ぶわけです。
 ところが、この正規表現(検索対象の表記)の中にスラッシュやらバックスラッシュやらが並ぶと、見た目にうるさいばかりではなく、混乱を招いてバグを作り込んでしまうことが多くなります。
 たとえば、こんなケース。

$string =~ s/http:¥/¥/¥w+¥.apple¥.com¥///;

 これは、「http://xxx.apple.com/」(xxxの部分は任意)という文字列並びを見つけ出し、空文字列に置き換える、つまりそのまま削除するという処理です。検索対象のスラッシュをエスケープしているのはもちろんですが、任意の単語構成文字を表す「?w」でもバックスラッシュが使われますし、ドット文字は正規表現では特別の役割を持つのでそれを打ち消すためにやはりバックスラッシュでエスケープしてやらねばなりません。
 日本語環境で見ている限り、バックスラッシュは¥マークに見えるでしょうが、欧文で表示すればさらに視認性は落ちるでしょう。これを例えばこんな感じに書き換えることができます。

$string =~ s#http://¥w+¥.apple¥.com/##;

 ドット文字や「¥w」のエスケープ文字がなくなるわけではありませんが、だいぶ余計な文字が減っているのはお分かりでしょう。
 何が起こったのかはお分かりですね? 区切りのスラッシュがシャープ記号に代わったわけですが、これによりもはやスラッシュは区切り文字の意味を持たなくなったためにエスケープしてやる必要がなくなったということです。
 別に、シャープ記号でなくても構わないのです。何とPerlでは「代用記号」として英数字と空白文字(改行やタブ)以外のものならば何でも使うことができるので、その時々に応じて視認性がより確保しやすい記号を選べばよいのです。

 他の視認性を上げるための手法として、連載の52回目で紹介した「ヒアドキュメント」というやり方もあります。以下のようなものでした。

print <<EOT;
<HTML>
     <HEAD>
          <TITLE>MOSA</TITLE>
     </HEAD>
     <BODY>
          $time
     </BODY>
</HTML>
EOT

 慣れないと構造が読み取りにくいですが、実際の出力内容は<HTML>から</HTML>までの部分です。
 先頭のprintという演算子に対して、「<<EOT」というものを与えていますが、この「EOT」の部分は、出力の中身に出てこないものであれば、どんなものでも構いません。ちなみに、この例では$timeのところに現在の時刻が保持されているため(連載52回参照)変数が展開されて時刻が表示されますが、代わりに「<<’EOT’」と、終了を示す識別子をprintに与える際にシングルコーテーションで囲ってやるとこの表現全体がシングルコーテーションで囲われているのと同じように変数の展開がされずに「$time」という文字列のままで表示されます。

ニュース・解説

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

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

【開発環境】

Mac OS X 10.4(Tiger)の発売日が無事4月29日に決定しました! これでWWDC2005まで待ちぼうけを食らう心配はなくなり、初期バージョンのバグや仕様の問題点を、バシバシと現地の担当技術者に追求できることになります(笑)。Apple社のWWDCホームページでは、そうした各技術部門の担当チーフも写真で紹介され、毎年恒例のApple Design Awardsの募集も開始されたようです。いよいよWWDC2005開催の雰囲気も盛り上がってきたのですが、参加費の早期割引は4月22日が締め切りですので、まだ参加を申し込んでいない方は期限に注意してください。

また、こちらも恒例の近畿日本ツーリストによるWWDCツアーの参加者募集も開始されました。マイレージの関係で、MOSAツアーとは別の航空会社の方が良い方は、こちらのツアーを利用されることをお勧めします。今年は、現地でのホテル確保が難しいようですので(何故?)、ツアーを利用することを決めている方は、MOSAツアーおよび近ツリツアーのどちらかを、早めに申し込んでおいた方が無難でしょう。

近畿日本ツーリストWWDCツアー
http://ec.knt.co.jp/wwdc2005/

WWDCとは関係ありませんが、「Unrolling AltiVec, Part 1: Introducing the PowerPC SIMD unit」という題名で、IBMサイトにAltiVecに関する技術解説が登録されました(これがPart 1なのでさらに続く?)。AltiVecに興味ある方は一度覗いてみてください。

http://www-128.ibm.com/developerworks/power/library/pa-unrollav1/index.html?ca=dgr-mw01AltiVec1

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

前回から4月15日の期間中、Apple社のDocumentationサイトには新規ドキュメントが17登録されました。ただし、「SMIL Scripting Guide for QuickTime」と「JavaScript Scripting Guide for QuickTime」を除くと、残りはすべてマイナーな改訂版です。また、デベロッパー向けに2つの読み物が登録されています。「Cross-Platform Development with Core Foundation」は、CoreFoundation Frameworkをクロスプラットホームで利用しようと言う内容です。ついでに、Apple社は、CocoaとXcode&Interface BuilderのX86版を開発して販売したらどうでしょうか? iTunesのようのように、両プラットホームでまったく同じ操作方法の良質なアプリケーションが増え、世のため人のためかもしれません(笑)。「Tiger Developer Overview Series:Developing with Core Data」の方は、前号の木下さんの解説がとても参考になります。

「Accessing Hardware From Applications」DV(PDFあり)
「Carbon-Cocoa Integration Guide」CB&CO(PDFあり)
「CGL Reference」OG(PDFあり)
「Codec Components」QT(PDFあり)
「Component Manager for QuickTime」CO&QT(PDFあり)
「I/O Kit Fundamentals」DV(PDFあり)
「JavaScript Scripting Guide for QuickTime」QT(PDFあり)(初版)
「The Objective-C Programming Language」CO(PDFあり)
「Power Manager Reference」CB(PDFあり)
「QuickTime Initialization Guide」QT(PDFあり)
「QuickTime VR」QT(PDFあり)
「SMIL Scripting Guide for QuickTime」QT(PDFあり)(初版)
「URL Loading System」CO
「Working With Serial I/O」DV(PDFあり)
「Writing an I/O Kit Device Drive」DV(PDFあり)
「Writing Drivers for Mass Storage Device」DV(PDFあり)
「Mac mini Developer Note」HW(PDFあり)

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

「Cross-Platform Development with Core Foundation」(読み物)

http://developer.apple.com/darwin/cflite.html

「Tiger Developer Overview Series:Developing with Core Data」(読み物)

http://developer.apple.com/macosx/tiger/coredata.html

前回から4月15日の期間中、新規のテクニカルノートは2つ登録されました。また、新規テクニカルQ&Aの方はひとつだけ登録されています。TN2042の方は、2002年5月に登録された内容の改訂版となっています。TN2130では、作業用メモリを確保するためにMac OS Xで用意されている幾つかのAPIの動作状況を、きちんとケース分けして解説しています。結論から言えば、malloc()とcalloc()を使用しておけば問題は無いようです。

TN2130「Memory Allocation Recommendations on Mac OS X」
TN2042「Tailoring Java 1.3.1 Applications for Mac OS X」(2002年11月?)

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

QA1421「iSight – Configuring gain settings for IIDC cameras」

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

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

前回から4月15日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードがひとつも登録されませんでした。

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

【デベロップメント SDK】

前回から4月15日の期間中、Apple社のSDKサイトには新しいSDKがひとつも登録されませんでした。

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

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

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