MOSA Multi-OS Software Artists

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

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

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

2006-09-19

目次

  • 「Wonderful Server Life」      第19回  田畑 英和
  • 藤本裕之のプログラミング夜話 #99
  • 高橋真人の「プログラミング指南」  第97回
  • ニュース・解説                小池 邦人

「Wonderful Server Life」  第19回  田畑 英和

■  〜DNS編〜

 前回まででDNSのゾーンが作成できました。今回はゾーン内にコンピュータを追加する方法を解説します。ゾーンを作成した段階では、コンピュータが1台だけ(サーバ自身)登録された状態になっています。この状態ではサーバ自身の名前解決を行うことはできても、ゾーン内のほかのコンピュータについてはまだ名前解決をすることができません。任意のコンピュータをゾーンに追加することにより、複数のコンピュータの名前解決ができるようになります。

◇「サーバ管理」でサーバに接続
 DNSサービスを設定するには「サーバ管理」を使用しますが、第17回の連載で解説しましたように、サーバがまだDNSサーバに登録されていない状態では接続時にDNSで管理している名前での接続ができませんでした。
 ですが、ここまでの手順ですでにサーバがDNSサーバに登録されましたので、これまで”server.local”のようなローカルホスト名などでサーバに接続していた場合には、あらめて”server.example.com”のようなDNSで管理している名前を使って接続をやり直すようにしましょう。
 Mac OS X Serverでは様々なサービスがDNSに依存しているため、なるべくDNSで管理している名前を使うようにします。

・「サーバ管理」で接続先を指定
http://homepage.mac.com/htabata/MXS10.3/img/ServerAdmin/Admin_02.png

◇コンピュータの編集
 DNSへのコンピュータの追加方法を解説する前に、既存のコンピュータを編集する方法を紹介しておきましょう。ゾーン内に登録済みのコンピュータ(つまりサーバ自身)を編集してみます。
 ゾーン内のコンピュータを表示するには「サーバ管理」で「DNS」>「設定」>「ゾーン」の順でクリックしてゾーンのリストを表示し、該当するゾーンをダブルクリックします。この時点ではまだゾーンは1つしか存在しませんが、1台のサーバで複数のゾーンを管理することも可能です。
 ゾーンの編集画面で「コンピュータ」をクリックすると、コンピュータのリストが表示されます。ここに表示されるのは、ゾーン内に登録されているコンピュータのリストです。この時点では、リストにコンピュータが1台だけ表示されるはずですのでこれを編集してみましょう。コンピュータを編集するには、編集するコンピュータを選択して、リストの左下に並んでいるボタンから一番右側のボタン(鉛筆アイコンのボタン)をクリックします。あるいはリスト上で編集したいコンピュータをダブルクリックしてもOKです。

・コンピュータの編集画面
http://homepage.mac.com/htabata/MXS10.3/img/DNS/DNS_06.png

 コンピュータが表示されるとシートが表示されて、パラメータを編集することができます。「IPアドレス」と「名前」はすでに入力済みの状態になっていますので、ほかのパラメータについてみてみましょう。
 まず「エイリアス」という項目があります。設定を行っているコンピュータにはすでに「server」という名前が設定されていますが、「エイリアス」を設定することにより1台のコンピュータに複数の名前を付けることができます。たとえばサーバをWebサーバとして公開する場合に、別名として「www」を設定するようなことができます。この「エイリアス」はCANME(canonical name)とも呼ばれています。
 コンピュータをメールサーバとして使用するには「このコンピュータをゾーンのメールサーバにする」をチェックします。チェックをすることによりDNSのゾーンファイルにMXレコードと呼ばれるレコードが作成され、どのサーバがメールを処理するホストなのかが識別できるようになります。
 通常メールを送信するときの宛先のアドレスは”foo@example.com”のように記述し、メールサーバの名前まで直接指定するようなことはしません(つまりfoo@server.example.comのようには記述しない)。ですので、メールアドレスだけではどのサーバ宛のメールなのかが判断できないことになりますが、あらかじめMXレコードを作成しておくことにより、DNSを参照すればどのホストがメールを処理するのかが分かるようになります。
 「メールサーバの優先順位」には優先順位を数値で指定し、値が低いほうが優先され、もっとも優先度が高い値は”0″です。

「ハードウェア情報」および「ソフトウェア情報」には通常コンピュータのハードウェアの種類とオペレーティングシステムを記述します。ですが、ここに入力した情報はネットワークを経由して参照できてしまいますので、特にインターネットからアクセス可能なDNSサーバを設定するさいにはセキュリティに注意する必要があります。サーバの情報がある程度特定できるということは悪意をもった侵入者に情報を与えることにもなりかねません。これらの項目は入力を省略してもかまいません。
 最後の「コメント」はその名のとおり、コメントを入力する項目です。たとえばコンピュータの設置場所を書き込んでおくことができます。「ハードウェア情報」「ソフトウェア情報」「コメント」に日本語を入力することはできません。

◇コンピュータの追加
 ゾーン内にコンピュータを追加するにはコンピュータのリスト画面でリストの左下に並んでいるボタンから一番左側のボタン(「+」アイコンのボタン)をクリックします。するとコンピュータの編集に使用したものと同じシートが表示されますので、ここに「IPアドレス」と「名前」を入力します。ほかの項目は省略してもかまいませんので、必要に応じて入力します。
 コンピュータを追加した場合、シートの右下の「OK」ボタンをクリックしたあとに、「サーバ管理」画面の右下の「保存」ボタンをクリックするのを忘れないようにしてください。「保存」ボタンをクリックするまで設定内容は保存されません。
 このようにしてコンピュータを追加すれば、追加したコンピュータの正引きと逆引きの両方ができるようになります。ゾーンファイルは正引き用と逆引き用とでそれぞれ個別に管理されますが、「サーバ管理」からは一括して設定を行うことができます。また、最新版の「サーバ管理」ではコンピュータの編集画面で逆引きに関する設定も行えるようになりました。

DNSが稼働している状態で「サーバ管理」を使って「DNS」の概要を表示するとゾーンの数やBINDのバージョンを確認することができます。また「ログ」をクリックしますとDNSに関するログを確認することができます。

・稼働中の「DNS」の「概要」
http://homepage.mac.com/htabata/MXS10.3/img/DNS/DNS_07.png

つづく

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

 さて今回からまた新しい話を始める。実を言うと編集長のタカハシさんから「スプラッシュスクリーンの出し方なんでどーですか」と言われていたんだが、それってあんまり基本的ぢゃないような気がする。
 やり方としては……プログラムの起動時にロードされるMainMenu.nibに持つウィンドウをそのスプラッシュスクリーンだけにし、そいつを表示してから自分で他のnibファイルのロードを行う。必要な分だけのロードが終わったらMainMenu.nibのウインドウを閉じるって方法になるのかな、と思うけど、それを説明するにはnibファイルの分割を解説しなくちゃならず、そのためにはWindowControllerのサブクラスを作る話をしなくちゃならなくて……って、なんか大河漫画の第三部「青春群像編」とかが始まっちゃいそうでしょ(笑)。この連載のテーマとしてはもそっと小粒の方が適当かな、と。
 あ、ひとつ断っておくけど、スプラッシュスクリーンを出す上のヤリクチはいまパッとこんな風にやるのかな、と考えただけのもので、実際にやって検証したわけぢゃないのでそこんとこはオフ汲み置きを……オフを汲み置いてどうする、お含みおきを。やってみて上手くいかなくても怒らないように。
 で、ほんぢゃ何をやるかというと、ずばり、ドラッグ&ドロップである。いや、これだとこないだ NSCursor の説明のために作ったサンプルプログラムを使い回しできるな、と思っただけなんだけどね。

Cocoaでプログラミングをしていると(Carbonも同様かもしれないけど)、クラシック環境のときに比べて自分でドラッグ&ドロップをハンドリングする必要が生じることは少ない。
 例えばウインドウを作ってそこに NSTextView を置きアトリビュートでSelectableをオンにすればそのビュー上で選択したテキストをドラッグしてよそへ持って行けるし、Editableをオンにすれば(これをやると自動的にselectableもオンになる)その逆、つまりドラッグされてきたテキストを受け入れることも可能だ。Multiple fonts allowed がオンならフォントや文字の色も受け渡しできるし、毒を食らわば皿までってんでGraphics allowedまでオンにすればイメージだって扱える。この部分、全くコードを書く必要はない。NSImageViewも同様、アトリビュートでEditableをオンにしておけば、jpeg、tiff、bmpなどのイメージファイルをドラッグ&ドロップしてその内容にすることが可能だ。これらに比べればちょっとだけコーディングは必要になるが、NSTableViewなどでアイテムの順番を並べ替えるとかという操作も、クラシックの頃に比べるとめちゃくちゃ楽になった。
 ……が、楽なものを使ってるだけぢゃそれを作れるようにはならない。レトルトカレーを何度食ってもうまいカレーを作れるようにはならないのである。

というわけで基本から。まずは小麦粉をバターで炒め……ぢゃなかった、ドラッグ&ドロップされたものを受け取るためにビューは何をしておくべきか、というところから話をはじめよう。そのためにNSViewには以下のようなメソッドが用意されている。

- (void)registerForDraggedTypes:(NSArray*)pboardTypes


このメソッドが何をするかというと、渡されたタイプのデータを自分に「ドラッグ&ドロップされ得るもの」として登録……ちょっとニュアンスが違うような気がするがしょうがないか、登録するのである。例えばビューオブジェクト(NSViewのサブクラス)の awakeFromNibの中でこんな風に使う。

[self registerForDraggedTypes:
          [NSArray arrayWithObjects:NSFilenamesPboardType,nil]];


 NSFilenamesPboardTypeは NSPasteboard.h に定義されている「ペーストボードを介してやり取りできる一般的なデータタイプ」のうちの一個で、見ればわかる通りファイル名……つうか実際にはファイルのフルパスだ。awakeFromNibでこのコードを実行しておくと、ファインダでファイルのアイコンをつかまえてそのビューの上にドラッグしたときそれに反応することができる。どうやって反応するのかって? それにはいくつかのメソッドをオーバーライドする必要がある。

- (NSDragOperation) draggingEntered:(id )sender;
- (void) draggingExited: (id ) sender;
- (BOOL) prepareForDragOperation: (id ) sender;
- (BOOL) performDragOperation: (id ) sender;

次回は前に作ったサンプルプログラムのビュー(覚えてるかな、あの矩形を2個描いたビューである)にこれらをインプリメントしてドラッグ&ドロップに反応させてみよう。ほんぢゃ。

(2006_09_16)

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

プログラマのためのオブジェクト指向再入門(5)

〜クラス<1>〜

 こんにちは、高橋真人です。
 さて、前回まではオブジェクトを作り、計算などをさせるという簡単な例を通してオブジェクトというものを垣間みました。
 話をさらにこの方向で掘り下げてみることもできるのですが、この連載はあくまで初心者向けですからそれはやりません。読んでくださる方の中にオブジェクトというもののイメージがおぼろげながら出来上がったら、それでOK。次は視点を切り替えて、オブジェクト動作の仕組みについて見ていきたいと思います。
 そこで今回のテーマである「クラス」です。オブジェクトを作るためには、このクラスの存在が不可欠です。
 ところで、クラスという言葉そのものは私たちは学生時代から日常的に使ってきたもののはずですが、ひとたびこれがオブジェクト指向というくくりで語られ始めると、途端に「よくわからない言葉」になってしまうのも事実です。
 私もかつてAppleScriptを学んだときに、このクラスという言葉が出てきて戸惑った経験があります。
 しかし、ここで皆さんに言っておきたいのは「決して大げさに考える必要はない」ということです。クラスというのは「型のようなものだ」と取りあえずは考えておきましょう。「型」という概念と完全なイコールではないものの、これで当面は困らないはずです。

 さて、今まで見てきた例では、intというシンプルな型が少しだけ高機能になってIntTypeというものになりました。このIntTypeというのもクラスです。
 では、高機能になったことで、どんなものが加わったのかを見てみましょう。
 具体的に考えるために、前回も使用したIntTypeを例にします。intというただの型がIntTypeというクラスになることによって、何かが加わるわけですが、そこには当然intが持っていた役割、つまり「値を格納する」という役割もそのまま残っています。しかしクラスの場合、格納できる値は一つだけではありません。必要によっていくらでも増やすことが可能です。
 「複数の値を格納できる」と聞けば、配列や構造体を思い浮かべる人も多いでしょう。確かに構造体を使えば複数の値をいくらでも格納することは可能ですね。ではクラスとは構造体のようなもなのでしょうか?
 その答えは、イエスでもあり、ノーでもあります。
 クラスには、構造体のように複数の値を格納できる仕組みがありますが、それだけではありません。まあ、クラスの機能には構造体のような役割も含まれると考えていただければ取りあえずはOKなのではないでしょうか。
 では、クラスの機能のうち構造体が持っていないものは何でしょうか? それは今までも何度か触れてきたように「処理の仕組み」ということになります。
 以上をまとめて言いますと、クラスには複数の値を格納できる上に「処理の仕組みを組み込むことができる」ということになります。
 では、クラスが処理機能を持つことでどんな意味が生まれてくるのでしょう?
 これは前にも発した疑問ですが、今度は別の切り口で答えてみましょう。クラスが処理機能を持つと、処理の特化性が高まるのです。つまり、処理を特定の状況やものに対して限定的に使うことができるようになるのです。
 ちょっと説明しましょう。
 コンピュータというのは、すべてを数に置き換えて処理するため、プログラムを作る側は、それぞれの数に個々に意味を持たせます。例えば、

int person;
int amount;

というような変数宣言が、簡単な会計ソフトの一部だと考えてください。
 personという変数は客の人数を表し、amountはその客の支払った金額を表すとした場合、personもamountもプログラムの中ではintという全く同じ型であるため、プログラマがきちんと認識して使い分けてやらなければなりません。
 金額を入れるべきところに間違えて人数を入れてしまっても、コンパイラはミスに気付くことができないので、計算結果は予想外のものになってしまうでしょう。

 具体的で単純な例をお見せします。
 以下は、例によってIntTypeとFloatTypeですが、今度はそれぞれがTwice()という保持する値を倍にして返す機能を持ったとします。

IntType a(5);
FloatType b(5);

int x = a.Twice();
int y = b.Twice();

 出力部分までは記述していませんが、こんな感じで、xにはaの、yにはbのそれぞれが2倍にされた値が入ることになります。言うまでもなく、両方とも10が入ります。
 では、今度は逆で、値を半分にして返す処理です。

(上の続き)

float f = a.Half();
float g = b.Half();

 今度はそれぞれの値が半分になったものが、fとgに入るわけですが、ここでのポイントは、処理結果をいずれもfloatの変数で受けていることからも分かるように、浮動小数演算をさせたいということです。
 で、ここでは期待通り結果はいずれも2.5となります。まあ、私が勝手に想定した言語上の話なので当たり前なのですが(笑)。

ところが、同様の処理を以下のようにCで書いた場合、結果は意図通りになりません。

int a = 5;
float b = 5;

float f = a / 2;
float g = b / 2;

 こっちのプログラムでは、fは2、gは2.5となってしまいます。
 もちろん、割る数を2ではなく2.0にしてやるとか、aをfloatにキャストしてやるとかすれば正しい答えが求められますが、ここではそのような気を使わず、「全く同じ形で」使えることを重要視しています。aがintなのかfloatなのかを常に意識しておかなくても、結果が正しく得られるということのメリットを考えてみてください。
 「そんな小さなこと」、と思われるかもしれません。「そのくらい面倒がらずに気を配ればよいではないか」と。しかし、このような分かりやすい例ではそのように思えることも、ある程度の規模を持ってきたプログラムになると状況は変わります。単なる注意・不注意とかいう次元ではなく、生産性に直接関わってくることもあるのです。
 この辺もオブジェクト指向を使う動機の一つです。まあ、この程度の例では今ひとつピント来ないかもしれませんが。

〈注記〉言語によっては、クラスという言葉を型とほぼ同じ意味で使うものもあります。例えば記事本文中でも出てきたAppleScriptの場合、クラスという言葉を主に型の識別に使います。また、クラス自体が処理機能を持つことはありません。ただ、この辺は言語の設計思想とか考え方の領域に属することなので、見方によっては「クラスが処理機能を持つ」と見れないこともないのかもしれませんが。

ニュース・解説

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

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

【開発環境】

9/12のイベントにおいて、Apple社から新しいiPodとiTunes 7が発表されました。筆者が一番注目したのは、iTunes Storeにおいて(Musicが外れた)iPod用ゲームのダウンロード販売が開始されたことです。現在はApple社のみがゲームを提供していますが、他のコンテンツ同様、将来的にはサードパーティでもゲームを提供できるのではないかと推測しています(でなきゃズルイ)。それには、iPod用アプリケーションを開発するための環境がオープンにならなくてはいけません。

もし、iPod用の開発環境(iPod SDKか?)が登場すれば、ゲームだけでなく、iPodを様々な方面に活用するためのアプリケーションを独自開発することも可能となります。現在、筆者は歯科医用データベースを開発しているのですが、検査データ入力の端末としてiPodを使うことが可能になれば、実に「美しい世界」を構築できるはずです。近々、Apple社からiPod用の開発環境が登場する日が来るのを神様にお祈りしたいと思います(笑) 頼みますよ!>御大将

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

前回から9月15日の期間中、Apple社のGuidesサイトには新規ドキュメントが大多数登録されました。Referenceサイトの方も同様です。ただし、どちらもマイナーな変更のみのものが大部分を占めています。まったくの初版と内容が大きく変更されたドキュメントは、新型iMacに関するハードウェア仕様書と、それに関係する「Developer Note」の更新、そして「Speech Synthesis Programming Guide」のみです。また、デベロッパー向け読み物も2つ登録されています。

「Speech Synthesis Programming Guide」(初版)(PDFあり)
「iMac Developer Note」(初版)
「RAM Expansion Developer Note」
「Video Developer Note」
「AirPort Developer Note」
「Audio Developer Note」
「Bluetooth Developer Note」
「Ethernet Developer Note」
「FireWire Developer Note」
「PCI Developer Note」
「RAM Expansion Developer Note」
「Video Developer Note」
「Universal Serial Bus Developer Note」

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

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

「Enabling Accessibility in Your Cocoa Application」(読み物)

http://developer.apple.com/ue/accessibility/accessibilityincocoa.html

「Zimbra on Mac OS X: An “Elegant” Solution with Sync Services」(読み物)

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

前回から9月15日の期間中、新規テクニカルノートはひとつだけ登録されました。また、新規テクニカルQ&Aの方は3つ登録されています。

TN2163「Tagging Handle and Pointer Data References in QuickTime」

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

QA1461「Disabling and Enabling an NSTextView」(初版)
QA1442「How to Observe All NSNotifications」(初版)
QA1462「Programmatically Performing an Open Directory Search」(初版)

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

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

前回から9月15日の期間中、Apple社のSample Codeサイトには新しいサンプルソースコードがひとつも登録されませんでした。最近ちょっと停滞気味…。技術者達は何か他の事で忙しいのでしょうか?

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

【デベロップメント SDK】

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

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

 

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

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