MOSA Multi-OS Software Artists

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

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

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

2006-08-01

目次

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

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

 WWDCまであとわずかになりました。現在Power PCベースのマシンはXserveとPower Macのみになってしまいましたが、はたしてWWDCでIntel版のXserveは発表されるでしょうか。XserveにはMac OS X Serverがバンドルされていますので、Intel版のXserveがリリースされればMac OS X Serverも正式にIntel対応するのではないかと思われます。

□Admin Tools
 さて、前回に引き続きMac OS X Serverの管理ツールについて解説します。今回とりあげます管理ツールのうち「サーバ管理」と「ワークグループマネージャ」は特に利用頻度の高いツールになりますので、より詳しく解説したいと思います。

・サーバ管理
 Mac OS X Server上で稼働する各種サービスの監視および設定を行います。様々なサービスがMac OS X Serverに搭載されていますが、おおまかに分類しますと以下のようなサービスが「サーバ管理」から扱えます。

 (1)ファイルサービス:AFP、FTP、NFS、Windows
 (2)ネットワーク:DHCP、DNS、NAT、VPN、ファイアウォール
 (3)インターネット:Web、メール、WebObjects、アプリケーションサーバ
 (4)ディレクトリサービス:オープンディレクトリ
 (5)その他:iChat、NetBoot、QuickTimeストリーミング、Xgrid
     ソフトウェア・アップデート、プリント

 「サーバ管理」でサーバの管理を行うにはサーバへの接続を行います。これはサーバ機上で直接操作する場合であっても同様です。複数のサーバに接続することもできますので、1台のマシン上で複数のサーバを管理することもできます。
 ほかのツールにも共通することですが、「iTunes」のように1ウインドウで操作を行う画面構成になっています。サービスによっては画面が入り組んでかえってどの画面で操作をしているのか分かりづらい部分もありますので、画面上で迷子にならないようご注意ください。
 管理画面は各サービスごとに用意されており、サービスの一覧からいずれかのサービスを選択して操作を行います。サービスごとに画面の構成は異なりますが、サービスのログを表示したり、稼働状況をグラフで表示するような画面が用意されています。v10.4の「サーバ管理」からはログファイルのパスが画面上で表示されたり、画面上でログの検索ができるようになりました。
 各サービスの設定画面は、さらにいくつかの画面から構成されています。基本的にはGUIでお手軽に設定ができるのですが、画面上の表記だけでは意味が分かりづらい部分もありますので、別途マニュアルを読み込まないと完全には把握しきれません。本連載ではこれから各サービスの解説を始めていく予定ですが、待ちきれない方はじっくりマニュアルを読んでください:-)
 「サーバ管理」で設定した内容はファイルに保存できますので、一時的に設定を変更する場合でもあらかじめ設定内容を保存しておけばいつでも保存時の内容に設定を戻すことができます。
 サービスの監視と設定のほかに、「サーバ管理」ではサーバ全体の管理もできます。Mac OS X Serverのシリアル番号を入力したり、ソフトウェア・アップデートを実行することができます。サーバ機のCPU使用率をグラフ表示する機能もあり、デュアルCPUの場合はきちんと2本のグラフを表示してくれます。

・ワークグループマネージャ
 「サーバ管理」と並んで使用頻度の高いツールです。このツールは大きく分けて次の機能があります。

 (1)共有ポイントの管理
 (2)ネットワーク表示の管理
 (3)アカウントの管理
 (4)環境設定の管理

 (1)の共有ポイントの管理ではファイルサービスで共有するフォルダの設定を行います。アクセス権の設定や各プロトコルごとの設定ができます。V10.4からはファイルのアクセス権としてWindowsと互換性のあるACLのアクセス権もサポートされるようになりました。ACLのアクセス権を使えば1つのフォルダにユーザやグループを複数設定し、それぞれに対してより細かなアクセス権の設定ができます。
 (2)のネットワーク表示の管理はv10.4からの新機能です。MacではFinderからネットワーク上のサーバを自動的にブラウズすることができますが、Finderのネットワーク表示をサーバ上で管理することができます。例えばサーバをグループ化してフォルダごとに整理して表示することができます。
 (3)のアカウント管理では、ユーザ、グループ、コンピュータをアカウントとして管理できます。ネットワーク上で共有可能なネットワークユーザの作成には「ワークグループマネージャ」を使用します。また、v10.4からはグループのメンバーとしてほかのグループを登録できるようになりました。ここで作成したアカウントは環境設定の管理で使用し、コンピュータアカウントはネットワーク表示の管理でも使用します。
 最後に(4)ですが、通常は各クライアント上で行う環境設定(たとえばDockの設定)をサーバ上で一元管理できます。環境設定は(3)で作成したユーザ、グループ、コンピュータ、それぞれに対して適用することができます。例えば全てのユーザのDockの設定を管理者が一括して行うようなことができます。
 これらの機能の多くはディレクトリサービスを利用していますので、「ワークグループマネージャ」はディレクトリサービスの管理ツールと言ってしまってもよいでしょう。

・サーバモニタ
 こちらはXserve専用の管理ツールです。Xserveのドライブや温度などハードウェアに関する状態を監視し問題が発生すれば警告を表示します。サーバの再起動や停止をリモートで実行することもできます。

・システムイメージユーティリティ
 最後のツールになりますが、このツールでNetBoot用のシステムイメージを作成します。システムイメージとはようするにブート可能なディスクイメージのことです。NetBootシステムではサーバ上に配置されたディスクイメージからクライアントを起動します。

つづく

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

 承前。今回は書くことが多いので「前回までのあらすじ」はなし。あれ、なんだったっけ? というヒトは自分で確認してくだされ。さて、ビュー上でカーソルの形が変わる領域を動かすためにはそのためのコードを書かねばならぬ。まずは問題の矩形をインスタンス変数として、initWithFrame: で以下のように初期化、drawRect: では色違いで描画するようにする。当然ながらカーソルの形を指定するメソッド、resetCursorRects も以下のようになる。ここまではいいよね。

- (id)initWithFrame:(NSRect)frameRect {
     if ((self = [super initWithFrame:frameRect]) != nil) {
          openHandRect = NSMakeRect(10, 10, 100, 100);
          pointingHandRect = NSMakeRect( 120, 120, 100, 100);
          dragging = NO; // これはドラッグ中かどうかのフラグ。
     }
     return self;
}

- (void)drawRect:(NSRect)rect{
     [[NSColor yellowColor] set];
     NSRectFill(openHandRect);
     [[NSColor cyanColor] set];
     NSRectFill(pointingHandRect);
}

-(void)resetCursorRects {
     [self addCursorRect:openHandRect
                     cursor:[NSCursor openHandCursor]];
     [self addCursorRect:pointingHandRect
                     cursor:[NSCursor pointingHandCursor]];
}


 これに、シアンで塗られるpointingHandRectをmouseでドラッグして動かすためのコードを追加する。ま、いろいろ工夫の余地はあるけど一応、以下のようなもんですかね。

- (void)mouseDown:(NSEvent*)theEvent {
     NSPoint   p = [self convertPoint:[theEvent locationInWindow]
                                fromView:nil];
     if(NSPointInRect(p, pointingHandRect) == YES){
          dragging = YES;
          pointingHandRect = NSMakeRect(p.x-50, p.y-50, 100, 100);
          [self setNeedsDisplay:YES];
     }
}

- (void)mouseDragged:(NSEvent*)theEvent {
     if(dragging == YES){
          NSPoint   p = [self convertPoint:[theEvent locationInWindow]
                                fromView:nil];
          NSRect    r = [self bounds];
          if(NSPointInRect(p,r) == YES){
               pointingHandRect = NSMakeRect(p.x-50, p.y-50, 100, 100);
               [self setNeedsDisplay:YES];
          }
     }
}

- (void)mouseUp:(NSEvent*)theEvent {
     [self mouseDragged:theEvent];
     if(dragging == YES){
          dragging = NO;
     }
}


 これでpointingHandRectは動くようになったがマウスカーソルは相変わらず最初の位置でしか変わらない。これを変えるにはつまりresetCursorRects をもう一度呼べばいいのだが、このメソッドの解説には「こいつを直接呼び出すな、代わりにNSWindowのメソッド、invalidateCursorRectsForView: を使え」とある。なんだかとっても回りくどいよな気がするが、mouseUp: の「dragging = NO;」の直後に以下のステートメントを足せばOKである。

[[self window] invalidateCursorRectsForView:self];

 いやしかし、ほんとに作ってみたヒトは気付いていると思うけどちょっと問題が残ってるよね? 次回はそれについて考えてみよう。
(2006_07_28)

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

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

〜オブジェクト<1>〜

 こんにちは、高橋真人です。
 さて、前回から始まりました、オブジェクト指向にプログラマの視点から独断的な解説を加えるシリーズですが、お話の進め方として、オブジェクト指向技術に関連する言葉を一つずつ取り上げ、それについて関連する話題を繰り広げるという形で行きたいと思います。

 さて最初の言葉ですが、そのものズバリ「オブジェクト」です。
 オブジェクト指向というからには、この言葉がなければ始まらないわけですが、オブジェクト指向に取り組み始める人にとって、この言葉ほど混乱の元になっている言葉もないのではないか、という気もするぐらいに取り扱いに注意を要する言葉でもあります。

 そもそも、なぜ、オブジェクト指向というのでしょうか。

 世にある多くのオブジェクト指向入門書の中には、「オブジェクトとは、すなわちモノです」と説明しているものがかなり見られます。
 確かにこの説明は間違っていません。オブジェクト指向技術を日常的に使っている開発者にとって、この「オブジェクト=モノ」という考え方は極めて自然です。ところが、これがオブジェクト指向をこれから学ぼうとする入門者にとっては、必ずしもそうでない場合があるのです。
 「群盲象を撫でる」という言葉があります。これは、目の見えない人が何人かいて、それれぞれが初めて遭遇する「象」という動物を手で触ったイメージから「象とはどのようなものか」を構成する例えです。
 しっぽを触った人は「象とは縄のようなものだ」と言い、耳を触った人は「象とはウチワのようなものだ」といい、足を触った人は「太い柱のようなものだ」と言うわけです。人間には想像力というものがあるために、自分が見たり経験したものから、情報の欠けている部分を想像力で補って、全体のイメージを構築します。そのため、よほど注意をしないと、俗にいう「言葉が一人歩きする」という状態になってしまうわけです。
 オブジェクト指向を理解する上で「オブジェクトとはモノである」という説明を聞いた人の中には、実際に物体(つまり、モノ)が動き回っているイメージが浮かび、「プログラムの内部で『何かの物体』が動くのか?」なんてことを想像したりします。
 先の象の例で言えば、ひとたび正しく象という言葉の中身を理解できた人であれば、たとえ耳だけを触ったとしても、触っていない他の部分を正しく補うことができるので、「ウチワのようだ」などと思ったりはしません。
 ですが、全体像が見えていない状態で、「欠けている部分」を正しく補える人はまれです。オブジェクト指向とは言っても、それまでにやっていたプログラミング手法(ほとんどは構造化指向のものでしょうか)と極端にかけ離れるものではないのですが、すべての学習者が必ずしもそうは考えません。

 私自身の経験を元にすると、例えばCでプログラミングを経験していて、そこからC++なり、Javaなりに踏み入ろうとした場合、「オブジェクト指向」という言葉を意識し過ぎると、あたかもそれまでやっていたプログラミングとは全く違う概念がそこに存在するのだと想像をしてしまいます。
 もちろん新しい言語を学ぶので、何らかの入門書なりリファレンスなりをいろいろと目にしながら、見よう見まねでコードを紡いでいくわけですが、C++やJavaであれば、当然それまでに自分が書いていたCのコードとそんなに見た目には変わらないので、それがオブジェクト指向だということに気が付きません。
 特に、C++に至ってはオブジェクト指向専用の言語ではなく、あくまでハイブリッドな言語であるため、「私は言語としてはC++を使っているが、全然オブジェクト指向にはなっていない」というように思うわけです。(ちなみに、「CのソースコードをC++のコンパイラでビルドしている」というような話をしているのではありません。)

 そんなわけで、私は「とりあえず『オブジェクト』という言葉を一時的によけておくことはできないか」と考えてみました。しかし、残念ながらこの技術には既にオブジェクト指向という名前が付いてしまっているのです。
 たとえば、「オブジェクト指向と呼ばずに、いっそ○×△指向と呼ぶ」ことにしたとしたら、「オブジェクト指向を学びたい・身につけたい」と思っている人から見向きもされない恐れがあります。つまり、「ん? ○×△指向? これは私の学びたいオブジェクト指向とは別のものだな」となってしまうわけです。
 じゃあ、ってんで、後ろにカッコ書きで付けて「○×△指向(オブジェクト指向)」とやってしまったら、結局のところ別の名前を用意した意味があんまりないですし。

ですのでオブジェクトという言葉を使うのをやめることは諦めて、「オブジェクト指向におけるオブジェクトとは、こういうものなんです」という切り口で説明をするしかないな、と私は考えたわけです。だからといって「つまり、オブジェクトとはモノなんです」とやるつもりはもちろんありません。

いろいろ考えた末に私が思い付いたのは、「変数=オブジェクト」という切り口です。
 厳密なことを言うと、この表現はあまり正確ではないかもしれません。しかし、実際のところオブジェクトをプログラムのコードの中で表現する場合には必ず変数はつきものですし、コードを書くという方向からオブジェクト指向にアプローチする場合には、必ずしも悪い切り口ではないなと思うわけです。

さて、オブジェクトについて話すと言いながら、弁解めいた言葉が並んでしまいました。どちらかというと初心者向けというよりは既にオブジェクト指向を理解している人に対しての言い訳のような話だったかもしれません。
 ですがこれからは、全面的に初心者向けにお話しします。すべての初心者に向けてというよりは、「今までいろんな入門書を読んで、試してみたけど、今ひとつピンと来ない」といった人に向けてのお話です。 さらに、説明の内容はあくまで「オブジェクト指向という概念を理解するための、一つの方便」であるということを認識した上で読んでいただく必要があります。したがって、必ずしもこれからオブジェクト指向を学ぶすべての人にとって適切な解説記事でもないことをお断りしておきます。
 では、どのような人に向くのかということですが、一つの目安として「Cを学ぶ際に、ポインタの概念がなかなか分からなくて苦労した経験のある人」というのが上げられるかもしれません。前にも書きましたように「オブジェクトという言葉の想起するイメージに振り回される」人がいるわけですが、これはポインタに関しても似たようなことが言えると思うのです。「ポインタ」という言葉も、習得済みの人にとっては「指す」という概念がコードを書く上でも便利に使えますが、つまずく人にとってはこの「指す」という理屈がかなりやっかいだったりもします。
 ポインタを習得するのに苦労した人は、きっとオブジェクト指向を学ぶ時にも苦労をしているだろうと私は思うわけです。
 さてそんなわけで、次回もオブジェクトについてのお話を続けますが、技術を習得済みの人にとっては余り益の多くない記事だと思いますので、次回以降は「入門者限定」ということにさせていただきます。
 経験者に対する配慮は極めて抑えるつもりですので(笑)、そこのところをよろしくお願いします。

ニュース・解説

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

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

【開発環境】

いよいよ来週からWWDC2006が始まります。今回の目玉はLeopard(Mac OS X 10.5)のプレビュー版で決まりですが、発表されたばかりのインテル社製CPU「Core 2 Duo」を搭載した新型MacProやXserveのデビューも間違いないところでしょう。筆者としては、Boot Campだけではなく、「Parallels Desktop」と同じようにCPU仮想化技術を用いたバンドルソフト、Front Row用SDK(ありそう)、できればiPod用SDK(ありえないか?)などの発表もあると嬉しいかぎりです。

ですが、個人的に一番期待しているのは、64bit版のCocoaとCarbonについて何らかのコミットメントがなされることです。現在、興味を持って開発している対象処理が、とんでもなくメモリを消費するということも一因なのですが、1プロセス4GByteの壁を何とか突破したいわけです。Mac OS X自体が64bitアドレッシングに対応していても(既にG5では可)、やはり両Frameworkが対応していないと、やれることが大きく制限されます。

ビジュアルのリアルタイム処理を行うアプリケーションにとって、ユーザインターフェース部分と処理エンジン部分の分離開発は向きません。ヘッダーファイルに記載されている「DEPRECATED」(推奨しない)APIは省いてもかまいませんので(多分そのつもりだろうけど)、何とか早急の対応をお願いしたいものです。そう言えば、昨年のWWDC直前にも同じ様な事を書いた気がしますが、突然発表されたCPUのインテル移行騒動のおかげで、64bit版CocoaとCarbonの話はどこかへすっ飛んでしまいました(笑)。

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

前回から7月28日の期間中、Apple社のGuidesサイトとReferenceのサイトには数多くのドキュメントが登録されました。ただし、大部分は今までの内容のマイナーチェンジです。今回は、その中で初版と内容が大幅変更になったドキュメントだけをピックアップしました。「Deploying Mac OS X Computers for K-12 Education」や「QuickTime 7.1 User’s Guide」などは、デベロッパ以外の方にも大変有用ですから、早急に日本語訳を出して欲しいところです(毎回言っている…)。また、デベロッパ向け読み物もひとつ登録されています。こちらの内容については、前号の木下さんの記事を参照してください。

「Apple Remote Desktop Administrator’s Guide Version 3」(PDFあり)
「Cocoa Event-Handling Guide」(PDFあり)
「Deploying Mac OS X Computers for K-12 Education」(PDFあり)(初版)
「Mac OS X Server Command-Line Administration」(PDFあり)
「Mac OS X Server System Image and Software Update Administration」(PDFあり)
「Mac OS X Server User Management」(PDFあり)
「QuickTime 7.1 User’s Guide」(PDFあり)(初版)
「Software Delivery Guide」(PDFあり)

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

「Data Browser Reference」(PDFあり)

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

「Going Universal: Audio Developers Catch the Wave」(読み物)

http://developer.apple.com/audio/audiodevinterviews.html

前回から7月28日の期間中、新規テクニカルノートと新規テクニカルQ&Aが2つずつ登録されました。テクニカルQ&Aの方は、前号の木下さんの記事も参照してみてください。

TN2091「Device input using the HAL Output Audio Unit」
TN2083「Daemons and Agents」

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

QA1481「MovieAudioExtraction – Extracting all available audio samples」(初版)
QA1446「Losing the character code when using the control key」(初版)

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

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

前回から7月28日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが3つ登録されました。その中でも「GLSLShowpiece」は、OpenGLファンお待ちかね!「OpenGL Shading Language」をたっぷり使ったサンプルアプリケーションの最新版です。VertexプログラミングとFragmentプログラミングを用いた美しいデモを見せてくれます。OpenGLに興味が無い方も、最近のプログラマブルGPUの能力を知る良い機会だと思いますので、ぜひダウンロードでして起動してみてください。

「qtdataexchange.win 」(QuickTime&Windows関連)
「RecordAudioToFile 」(CoreAudio関連)(初版)
「GLSLShowpiece」(OpenGL関連)(初版)

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

【デベロップメント SDK】

前回から7月28日の期間中、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.