2005-11-01
目次
「WebObjects Dev Report」 第27回 田畑 英和
今年のMOSA湘南ミーティングも無事終了し、ご参加いただいた方々ありがとうございました。さっそくですが、1点訂正があります。セッション中にOSのインストールディスクはDVDと申し上げましたが、Mac OS X ServerのパッケージにはDVDとCDの両方が含まれていました。
さて、それでは前回に引き続き今回もサーバ構築について解説していきたいと思います。Mac OS X Serverには様々なサービスが含まれていますが、システム構築やメンテナンスに重要なサービスをご紹介してきます。
・WebObjects Deployment
まずなんといってもMac OS X ServerにはWebObjectsの運用環境が含まれています。Tiger Serverからは、各種サービスを設定/管理するツール「サーバ管理」上でWebObjectsの運用環境も設定できるようになりました。ですが、設定できる項目はほとんどなく、運用環境を制御するデーモンwotaskdと、運用環境の設定をおこなうMonitorを実行するポート番号が指定できます。特に必要がなければポート番号はデフォルトのものを使えばよいでしょう。あとMonitorの起動も設定できるようになっていますが、Monitorは必要に応じて手動で起動することもできます。またwotaskdの起動も「サーバ管理」から実行できるようになっています。
・Web(Apache)
WebObjectsでシステムを構築するさいにはWebサーバが別途必要になります。
Mac OS X ServerにはApacheが搭載されていますので、これを利用できます。
Apacheは1.3と2.0系列の2つがインストールされていますが「サーバ管理」から制御できるのは1.3系列のみになります。デフォルトの設定ですぐにサービスを起動することができますが、いくつか設定をおこなっておいたほうがよい箇所があります。まずサイトのオプション設定ですが、パフォーマンスキャッシュはOffにしておきましょう。これはパフォーマンス向上のためにWebサーバが提供するコンテンツをメモリ上にキャッシュする機能ですが、Webアプリケーションではコンテンツを動的に生成しますので、キャッシュによる効果はあまりなく、1度しか使わないデータまでキャッシュしてしまいますので、かえって逆効果になります。
また、WebObjectsは専用のWebObjects用モジュールを用いますのでCGIを有効にする必要はありません。CGI経由で実行することもできますが、モジュールを用いたほうがパフォーマンス的にも優れています。
あと、システムによってはデータを保護するためにSSLを用いる場合もあるでしょう。「サーバ管理」上でSSLの設定が可能ですが、Tiger ServerからはSSLの設定方法が改良されています。以前はWebサービス固有の設定としてSSLの設定をおこなっていましたが、Tiger Serverではまずサーバ全体の設定としてSSLの登録をおこない、Webサーバの設定ではサーバに登録したSSLの指定のみをおこなうように改良されています。これは、他のサービスでもSSLの設定を共通しておこなうための改良です。
・メール
オンラインショッピングサイトなどでは、注文の確認メール送信などをおこなう場合もありますが、Mac OS X ServerにはPostfixを用いたメールサーバが搭載されています。こういったサービスも組み合わせることによって、より付加価値の高いシステムを構築することができます。
・ファイアウォール
Mac OS X Serverでファイアウォールを設定することもできます。ですが、実際にはファイアウォールの専用機などもありますので、そちらを利用するようなケースが多いのではないかと思います。
・AFP/FTP/WebDAV
メンテナンスのために、サーバへ新バージョンのアプリや画像リソースなどをアップロードしたり、ログファイルをダウンロードしたりしますが、このような作業のためにMac OS X ServerをAFPやFTPのサーバとして利用することができます。
AFPではユーザ認証時にパスワードが暗号化されたり、Finder上から自由にファイルのアップロード/ダウンロードができますので、Mac上からメンテナンスする場合にはこちらのほうが便利でしょう。ただしAFPが使用するポートがサーバとの間で開いている必要があります。
サーバとの間で80番のポートしか開いていないような場合はWebサービスの機能としてWebDAVが利用できますので、こちらを用いてファイル転送をおこなうこともできます。
・SSH
リモートログインをおこない、サーバ上でのコマンド操作がおこなえます。SSHは他のプラットフォームからも利用できますので、コマンド操作ができればなにかと役に立ちます。WebObjectsアプリケーションの設定をおこなう場合、コマンドラインからMonitorを起動したりしますので、サーバ管理には欠かせません。SSHはMac OS X Serverではデフォルトで有効になっています。
・Apple Remote Desktop
こちらは別売のソフトになりますが、用意しておくとサーバ管理がさらにやりやすくなります。Remote Desktopからリモートのサーバにファイルをコピーしたり、サーバの情報(OSのバージョンやメモリサイズなど)を確認したりできますし、なんといってもリモートの画面を直接制御できますので、サーバ機を直接操作するのとまったく同じことがリモートできます。ただし、実際に利用するにはAFPと同様にRemote Desktopが使用するポートをあらかじめ空けておく必要があるのと、画面を制御する場合にはそれなりに通信のデータ量が増えますので回線が遅いとあまりよいレスポンスは得られません。
というわけで、Mac OS X Serverで利用できるサービスを一通りご紹介しました。次回からはまたプロジェクトの解説に戻りたいと思います。
藤本裕之のプログラミング夜話 #79
というわけで今回のテーマは「タイトルバーのないウィンドウの作り方」である。……まずはこのテーマをキッチリ把握するトコロから始めていただきたい。なにを言いたいかというと、これが「ウィンドウのタイトルバーの消し方」でないことに気づいてほしいのである。
そうなのだ、ワタシもこれを知ったときはかなり仰天したのだが、Mac OS Xのウィンドウってクラシック環境のそれと違い、作ってしまってからそのウィンドウのタイトルバーを「要らない」つうことが出来ないのだ。前にも書いたが、そのウィンドウがタイトルバーを持つか持たないかは、初期化のメッセージ、
-(id) initWithContentRect:(NSRect)contentRect
styleMask:(unsigned int)aStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)flag;
の「styleMask」という引数によって決定される。そして、そのウィンドウがタイトルバーを持つか否かは、
-(BOOL) hasTitleBar;
というメッセージで参照できる。トコロが、あとからこの「styleMask」を変更するメソッドはどこを探してもないのである。
いや書けば「ないのである」でおしまいだけど、そう納得するまでワタシはずいぶん探しました、これ。リーマン予想の反証を探索し続けるアンドリュー・オドリッコのように……とは言わんがあると思ってたからさ。今ではそれがない理由もなんとなく解ってきたけれど(OS Xのウィンドウはクラシックでのウィンドウに比べて遥かにシステムと密接な関係にある)、当初は「こんなあからさまな仕様後退があるはずない」とか思ったし。
とにかく病的に猜疑心が強い一部のヒトは別にして、ワタシが通った道を皆さんがもう一度たどる必要はないわけなので、ここではそういうメッセージはないということでよろしいな。
でだ。ならば「タイトルバーのないウィンドウの作り方」なんてのは簡単で、上の初期化メッセージを次のように使えばいい。
NSWindow* myWindow =
[[NSWindow alloc] initWithContentRect:myContentRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreRetained
defer:YES];
だけど、こういう作り方をすると、このウィンドウの中身……というかこのウィンドウのcontentViewに表示するものも全部同じようにシコシコとハードコーディングしなくちゃいけなそうでしょ? で、それはとっても面倒くさい。ここはできれば文字をBOLDにしたいけれど、そんな面倒くさいことをシコシコここで出来るヒトにはプログラマなんてのよりもっとずっと向いている職業があると思う。思うでしょ?
なのでcontentViewの中身はInterface Builder(以下IBと略)で作っておいてそれを読み込むというズル(いや、テクニックです、テクニック)をする。すなわち IB でタイトルバーつきのウィンドウとその中身を定義しておき、そいつのcontentViewのframeをcontentRectとして初期化メッセージを送る。そしてできあがったウィンドウのcontentViewを破棄し、IB で定義したウィンドウのcontentViewですり替えるわけだ。……文章で読んでも解りにくかろうから、次回この手順を具体的なコーディング例を使って詳述しよう。ほんぢゃ。
(2005_10_26)
高橋真人の「プログラミング指南」第77回
〜Perlについて(23)〜
こんにちは、高橋真人です。
丸カッコを使って正規表現の中にグループを作ると、その部分が記憶されるという副作用がある。こういうことを前回の最後で申しました。
しかし、「副作用」という言い方は、ちょっと卑屈というか何というか、まるでおまけの機能であるかのように感じられてしまいますが、実際には私が正規表現に丸カッコを使うケースでは、ほとんどが「記憶のため」で、グルーピングを目的として使うことはめったにないのです。
まあ、それはさておき具体的に丸カッコを使った記憶がどのように活用できるのかを見ていきましょう。
以前、$&という変数に「実際にマッチした中身が記憶される」と説明したのを憶えていますでしょうか。丸カッコを使うと、この辺の制御がもっときめ細かくできるのです。つまり、正規表現の中の部分を区切って特定することができるということです。
例えば、/a.c/という正規表現は、abcにもadcにもaBcにもマッチするわけですが、. が実際には何マッチしたのかを知りたい時には、/a(.)c/という具合に、. の部分をカッコで囲ってやるわけです。すると、実際にマッチした結果、つまりabcの時には、bが、adcの時にはdが記憶されるようになります。
それでは具体的な題材を使って説明します。今回は複雑さを避けるために、作為的なデータを用意します。
以下は、MOSAのWebにあるMOSAニュースのデータです。ただし、HTMLのソースを直接処理するとなると、タグの処理が不可避となるため(タグの扱いは正規表現でも難易度の高いものです)、単純にタブ区切りで並んでいる形に仕立てます。
以下のようなデータですが、折り返すと見にくくなるので、大幅に端折りました。
MOSA NEWS
10.21-22 湘南ミーティングへのご参加ありがとうございました!
会員向け<TAB>アップル技術者トレーニング割引のご案内<TAB>受付中
会員向け<TAB>アップル技術者試験 受験料半額割引のご提供<TAB>受付中
会員向け<TAB>MOSA会員向け掲示板開設のお知らせ<TAB>運用中
参加受付中のセミナー、イベントなど
2005.11.12<TAB>Dashboard ウィジェット作成セミナー<TAB>受付中
2005.11.15<TAB>NEW!ポッドキャスティング・セミナー<TAB>受付中
2005.11.30迄<TAB>Dashboardウィジェット コンテスト<TAB>受付中
終了したセミナー、イベントなどのご報告
2005.10.15<TAB>Dashboard ウィジェット作成セミナー<TAB>ご報告
<TAB>と書いてあるところには、タブ(0×09)が入っているものと思ってください。
さて、このデータの中から「会員向け」のものだけを拾い出し、その「タイトル」と「状態」を表示するPerlスクリプトを書いてみます。
処理対象のデータをファイルから読み込む方が現実的かもしれませんが、まだファイルの扱いについては説明していないので、ここでは以前CGIの書き方を解説した時に使用した「ヒアドキュメント」方式を使ってスカラー変数にデータを文字列としてセットします。
$data = <
このスクリプトを走らせると、以下のように結果が出力されます。
タイトル:アップル技術者トレーニング割引のご案内 状況:受付中
タイトル:アップル技術者試験 受験料半額割引のご提供 状況:受付中
タイトル:MOSA会員向け掲示板開設のお知らせ 状況:運用中
Done
スクリプトで使用している正規表現の中で、丸カッコで囲っている部分に注目してください。最初が([^¥t]+)で、二番目が(.+)です。カッコがあると正規表現自体がちょっと読みにくくなりますが、あくまでこのカッコは「記憶させるため」に使われているだけなので、マッチング自体には影響はありません。
カッコを外して表記してみると、正規表現の部分は以下のようになります。
/会員向け¥t[^¥t]+¥t.+¥n/
¥によるエスケープ表記が多いので少し見づらいですが、「会員向け」という文字列の直後にタブがあり、タブ以外の文字の1文字以上の連続、タブ、任意の文字(ただし改行は除く)の1文字以上の連続、そして改行文字という文字並びにマッチするようになっています。
最初の + 記号の直前をともすると . にしてしまいがちなのですが、そうすると以前説明した「最長マッチ」の性質により、タブ自体も含まれてしまうため、例えば行の中にタブが3つや4つある文字列にもマッチしてしまうのです。ですから、否定文字クラスを使ってタブを除外することで、確実にタブとそれ以外の文字を切り分けることができるわけです。
丸カッコを使って記憶させた文字列は、マッチした順に$1, $2, $3...と、特殊変数の中に記録されます。それで上記の例のようにタイトルと状況を拾い出せるというわけです。
ところで、このスクリプトには実はちょっとしたバグがあります。次回はその辺についてお話ししていきましょう。
ニュース・解説
今週の解説担当:小池邦人
【開発環境】
新型のiMac G5、PowerMac G5、PowerBook G4が相次いで発表されました。Macintoshは、来年6月からCPUをインテル版に切り換え始めるわけですが、ハイエンドマシンの方は後2年以上はPowerPCに頼ることになるので、新型PowerMac G5がどのように進化しているのかは注目の的です。予想通りDual Core CPUである「PowerPC 970MP」を2CPU搭載したマシンが登場しました。つまり、理論的には4CPUが並列で処理を行うことになります。
しかし、旧機種よりクロック数が増加していないところを見ると、消費電力の増大と発熱には相当苦労していることが理解できます。なんと消費電力は、1チップあたりフル稼働で100Wだそうです(涙)。ちなみに最近、USのベンチャー企業P.A.Semiから、PowerPCアーキテクチャの64bitマルチコアプロセッサ「PWRficient」が発表されました。特徴は動作時の消費電力の低さで、2GHzのDual Core版での消費電力は5W〜13Wだそうです。
何だか、インテル版へのトランジションを準備している間に、PowerPCの世界でも大きな転換がありそうです。WWDC 2007の基調講演で「インテルだけにするのは止めたぜ!」なんてJobsが言い出すかもしれません(笑)。まあ、そのころデベロッパー側はすっかり「Universal Binary対応」に慣れているでしょうから、「MacintoshにどんなCPUが搭載されてもOKだぜ!」と言うことになっているでしょう(笑)。打ちのめされたら一回り大きくなって立ち上がる星飛雄馬のごとく!
【テクニカルドキュメント】
前回から10月28日の期間中、Apple社のDocumentationサイトには新規ドキュメントが3つ登録されました。そのうち2つは、最近発表された新型のPowerBook G4のハードウェア仕様書です。なぜだか、新型iMac G5やPowerMac G5についてはドキュメントが登場していません。直前に仕様が変更され内容を調整中でしょうか(笑)。また、デベロッパー向け読み物も3つ登録されています。「Understanding Xcode Projects」については、前号の木下さんの記事も参照してみてください。
「15-inch PowerBook G4 Developer Note」(PDFあり)
「17-inch PowerBook G4 Developer Note」(PDFあり)
「CFNetworkDiagnostics API Reference」(初版)
http://developer.apple.com/documentation/index-rev-date.html
「Designing Network-Friendly Applications」(読み物)
http://developer.apple.com/networking/networkfriendlyapps.html
「Aspyr Brings Their Games to Intel-based Macs」(読み物)
http://developer.apple.com/business/macmarket/aspyr.html
「Understanding Xcode Projects」(読み物)
http://developer.apple.com/tools/xcode/xcodeprojects.html
前回から10月28日の期間中、新規テクニカルノートはひとつだけ登録されました。また、新規テクニカルQ&Aの方は6つ登録されています。
TN2153「Improving Windows Screen Updating with QuickTime for Windows Double-Buffering Feature」
http://developer.apple.com/technicalnotes/index-rev-date.html
QA1448「Sound Manager Codec support in QuickTime 7」
QA1447「Final Cut Pro - Preferred Video Media Time Scales and Sample Durations」
QA1430「Apple RGB and Generic RGB profiles explained」
QA1444「Compression Sessions - Configuring codec quality settings」
QA1267「Importer Components - What is the 'mcfg' resource used for?」
QA1340「Registering and unregistering for sleep notifications」
http://developer.apple.com/technicalqas/index-rev-date.html
【サンプルソースコード】
前回から10月28日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが9つ登録されました。この中で初めて登録されたサンプルは「LoginItemsAE」と「MoviePlayer」だけです。前号でも木下さんが解説されていますが、後者は本当に珍しいサンプルですね(笑)。CarbonのHIViewを勉強されている方は「ImageMapView」が良いサンプルとなります。
「AuthForAll」(Security関連)
「DelegateOnlyComponent」(QuickTime関連)
「HackTV Carbon」(QuickTime関連)
「HICustomPushButton」(HIView関連)
「ImageMapView」(HIView関連)
「LoginItemsAE」(Carbon関連)(初版)
「CIVideoDemoG」(QuickTime関連)
「MoviePlayer」(Windows QuickTime関連)(初版)
「SoftVDigX」(QuickTime関連)
http://developer.apple.com/samplecode/index-rev-date.html
【デベロップメント SDK】
前回から10月28日の期間中、Apple社のSDKサイトには新しいSDKが3つ登録されました。「.Mac 1.2 SDK」は、Universal Binary対応版のようです。前号の木下さんの記事を参照してみてください。
「QuickTime 7.0.3 SDK for Windows 」
「QuickTime 7.0.3 SDK」
「.Mac 1.2 SDK」
http://developer.apple.com/sdk/
MOSAからのお知らせと編集後記は割愛します