MOSA Multi-OS Software Artists

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

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

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

2006-11-21 

目次

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

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

  〜AFP編〜

 Intel CPU(Xeon)を搭載したXserveが11月中旬から出荷開始とアナウンスされていますが、予定どおりですとそろそろモノが出てくる頃ですね。新Xserveについては本連載でもいずれ取り上げてみたいと思います。今回はAFPの解説の続きで「ワークグループマネージャ」を用いた共有ポイントの設定について解説します。

◇共有ポイント
 ファイルサービスを使ってネットワーク上でフォルダを公開するには、共有ポイントの設定を行います。Mac OS X Serverは初期状態ですでに以下の共有ポイントが有効になっています。

・デフォルトで有効になっている共有ポイント

 /Groups
    /Shared Items/Public
    /Users

 Finder上では「Groups」は「グループ」、「Users」は「ユーザ」と表示されますが、「ワークグループマネージャ」上で共有ポイントを設定するときは英語での表記になります。ですので共有ポイントを設定するときには英語でのフォルダ名を意識する必要がでてきます。
 デフォルトで有効になっている各共有ポイントはAFP/SMB/FTPでのアクセスが有効になっています。ですのでそれぞれのサービスを開始すればすぐにクライアントからアクセス可能な状態になります。前回は「サーバ管理」を使ってAFPサービスを設定する方法について解説しましたが、AFPサービスを開始するだけで、3つの共有ポイントに対してクライアントからのAFPによるアクセスが可能になるということです。

設定済みの共有ポイントの確認方法ですが、「ワークグループマネージャ」からサーバに接続し、ツールバーの「共有」をクリックして画面左上の「共有ポイント」ボタンをクリックします。すると設定済みの共有ポイントの一覧が表示されます。
 一覧にはフォルダ名しか表示されませんが、共有ポイントの上でマウスカーソルを重ねてしばらく待つとフルパス(英語表記です)も表示されます。

・「共有ポイント」の一覧
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_01.png

◇共有ポイントとの追加
 共有ポイントを追加する方法はAFP/SMB/FTP/NFSそれぞれのプロトコルで共通です。言い換えれば、まずどのフォルダを共有ポイントとして公開するかを設定し、その後にプロトコルごとの設定を行います。
 公開する共有ポイントを選択するにはまず「共有ポイント」ボタンの右側にある「すべて」ボタンをクリックします。するとサーバ上のボリュームの一覧が左端のカラムに表示され、ここからサーバ上の任意のフォルダをブラウズすることができます。共有ポイントとして公開するフォルダを選択したら、画面右側の「一般」画面で「この項目と内容を共有する」を有効にし、右下の「保存」ボタンをクリックします。

・「すべて」の一覧
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_02.png

 追加した共有ポイントは「共有ポイント」の一覧にも追加され、この時点でAFP/SMB/FTPによるアクセスが可能になります。もちろんそれぞれのサービスが開始されていないと実際にはアクセスできませんが、サービスが開始されていれば共有ポイントとして追加したフォルダが3つのプロトコルで即アクセス可能になります。
 新しくフォルダを作成してから共有ポイントを設定するには、画面左下のボタンでサーバ上にフォルダを新規作成することができます。

◇アクセス権の設定
 ファイルサービスを運用するには、適切なアクセス権の設定が必要になります。アクセス権が適切に設定されていませんと、アクセスを許可したいユーザからのアクセスができなくなったり、あるいはアクセスを許可したくないユーザがアクセスできてしまったりします。
 アクセス権を設定するにはまずアクセス権を設定したいフォルダを画面左側の一覧から選択し、つぎに画面右側の「アクセス」画面からアクセス権の設定を行います。

・アクセス権の設定
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_03.png

 Mac OS X Server v10.4はファイルシステムのアクセス権としてPOSIXのアクセス権とACLのアクセス権の2つをサポートしています。「アクセス」画面の上半分ではPOSIXのアクセス権の設定を、下半分ではACLのアクセス権の設定を行います。
 ACLのアクセス権はボリューム単位で有効/無効を設定できますが、POSIXのアクセス権はいつでもすべてのフォルダ/ファイルに対して設定できます。
 POSIXのアクセス権では「オーナー」および「グループ」を1つずつ割り当て、それぞれについてのアクセス権を設定します。あらかじめ割り当てられているオーナーでもなく、かつグループのメンバーでもないユーザがアクセスした場合には「全員」に設定した「アクセス権」が適用されます。アクセス権の設定は直接サーバ上でFinderを使って行うこともできます。

◇プロトコルの設定
 共有ポイントはプロトコルごとの設定も可能です。設定可能な項目はプロトコルによって異なりますが、AFPの場合はゲストアクセスやデフォルトのアクセス権の設定ができます。
 ゲストアクセスですが、共有ポイントを追加した時点で、共有ポイントに対するAFP/SMB/FTPの各プロトコルでのゲストアクセスが自動的に有効になります。ですのでゲストアクセスを許可したくない場合には、プロトコルごとにゲストアクセスを無効する必要があります。ただし、ゲストアクセスは各サービスごとの設定も必要になるため「サーバ管理」と「ワークグループマネージャ」の両方でゲストアクセスを有効にしないと実際にはゲストアクセスはできません。
 またゲストアクセスだけでなく、共有そのものを有効にするかどうかも各プロトコルごとに設定できます。例えばAFPのみで公開する共有ポイントを作成したり、AFPとSMBで公開する共有ポイントを作成できます。

デフォルトのアクセス権では、ファイルサーバ上に作成した新規ファイルおよびフォルダに対して割り当てるアクセス権を設定します。設定には次の2種類があります。

・標準POSIXビヘイビアを使用
  常に以下のアクセス権で固定
   -> オーナー:読み出し/書き込み  グループ、全員:読み出し専用
・上位のアクセス権を継承する
  親フォルダのアクセス権を継承

 また、「カスタムAFP名」を設定すればサーバ上の実際のフォルダ名とは異なる名前でクライアントに共有ポイントを表示することができます。

・AFPの設定
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_AFP_01.png

 今回は「ワークグループマネージャ」での共有ポイントの設定について解説しました。これでAFPによるファイルサービスを構築することができます。それでは次回はいよいよネットワークホームの設定方法について解説したいと思います。

つづく

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

 さて前回は,Finderからファイルのアイコンをドラッグ&ドロップされたとき,Pasteboardにどんなタイプが入ってくるかを見たわけだが,それを確認するものとして使った以下のメソッド

- (unsigned)draggingEntered: (id ) sender{
     int            t;
     NSPasteboard*  pb = [sender draggingPasteboard];
     NSLog(@"pb types count = %d", [[pb types] count]);
     for( t = 0; t < [[pb types] count]; t++){
          NSLog(@"type [%d] = %@", t, [[pb types] objectAtIndex:t]);
     }
     return [super draggingEntered:sender];
}


についていささか説明を忘れていた。なんか話のスジが通らないと思ったヒトはごめんなさい。このメソッドは

@interface MyTextView : NSTextView {
 ....
}
...
@end

のメソッドとして書かれているので,最後の「super」はつまりNSTextViewである。そうでないとNSViewがデフォルトでこれらのドラッグに反応することになってしまう。説明不足でありました。申し訳ない。

で,本題。ファインダは以前我々が処理(ってコンソールに名前を出力しただけだが)した「NSFilenamesPboardType」の他に「Apple URL pasteboard type」というのを送ってきていた。これはたぶん,NSPasteboard.h に定義のある「NSURLPboardType」だろうと思われるが,その中身はどうなっているのだろうか。performDragOperation: を以下のように書き換えて確認してみよう。

- (BOOL) performDragOperation: (id ) sender {
     [NSApp activateIgnoringOtherApps:YES];
     NSPasteboard*  pb = [sender draggingPasteboard];
     NSArray*       uList = [pb propertyListForType: NSURLPboardType];
     int            index;
     for(index = 0; index < [uList count]; index++){
          NSLog(@"Dragged File #%d is %@",
               index,  [uList objectAtIndex:index] );
     }
     return YES;
}


 どうせ実験しないと思うので書いてしまうが,これはちょっとまずい結果になる。NSFilenamesPboardType の場合と同じく,propertyListForType: の戻り値は確かに NSArray なのだが(定義ではこれは「(id)」なのでなんらかのオブジェクトであればエラーにはならない),例えばこの原稿を含む「PN101」「PN102」「PN103」という3個のファイルをドロップした結果は以下のようになる。

Dragged File #0 is file://localhost/Volumes/hirofujimoto/Documents/MonkeyBiz/mosa/NightTalk/PN101.txt
Dragged File #1 is


変でしょ? 3個ドロップしてもURLは1個,NSArrayのカウントは2個で,2個目は空っぽ。いろいろ試したけど複数ファイルをドラッグしてもNSURLPboardTypeのPasteboardにはそのうちの一つのURLだけが入るらしい。これ,同じことで悩むヒトのいないように書いておく(つうか,誰かドラッグ&ドロップで複数ファイルのURLをゲットできる方法知ってたら教えてくだされ)。

次回からは,自分のViewからドラッグを始めるには……という話。MOSAのBBSで質問のあったNSTableの上でセルの順番を変える,というのもやります。お楽しみに。
(2006_11_16)

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

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

【オフトピック】
〜リファレンスについて〜

 こんにちは、高橋真人です。
 今回は、ちょっと今までのテーマを外れたお話をします。C++言語における「リファレンス」という技術についてのお話です。
 C++を学ぶつもりも、関心もない方はパスしてくださって構いませんが、このテーマに触れるタイミングとしては今が適切なので、あえて寄り道をすることにしました。

int a;
int *ap = &a;


 これは、ポインタです。リファレンスはポインタと似た概念のため、構文も似通っています。例えば以下のような具合です。

int b;
int &br = b;

 リファレンスは変数の前にアンパサンド(&)を付けることで表されます。この定義により、変数brは変数bと結び付けられます。
 これだけだと、ポインタとの違いは単なる構文だけのように思えます。しかし、リファレンスというのは「特定の変数と結びつけられるもの」であって、ポインタのように「指す」わけではないのです。
 例えばポインタの場合、以下のように指す対象を替えることができます。

int c;
ap = &c;

 こうすることで、apはもはやaを指さず、cを指すようになりますね。ところが、リファレンスはそれができません。つまり、

br = c;

 という書き方をすることができないのです。
 一体、これはどういうことなのでしょうか?
 実はリファレンスは、「別名」と呼ばれることがあります。Macユーザーに分かりやすく言うと「エイリアス」です。プログラマから見たAliasRecordではなく、あくまでFinderで作るエイリアスのことです。
 Macでは、あるファイルのエイリアスを作ると、それは存在する限り元のファイルと似たように振る舞います。また、原則的にはエイリアスが他のファイルを指すように変えることはできないわけです(方法がないわけではないものの)。
 もちろん、エイリアスを消去したからと言って、元のファイルが消えることもありません。
 C++におけるリファレンスは極めてこの状況と似ています。「何のファイルとも結びつけられていないエイリアス」というものがないのと同じように、リファレンスは「単独で定義ができません」。つまり、

int &d;

というようなコードはエラーとなります。
 では、ここで前回の連載で出てきたコードを以下に再掲します。

void
IntType::add(IntType it)
{
     number += it.number;
}


 C++のコードとして見た場合、このコードには無駄があると言えます。理由を一言で言えば「IntTypeのオブジェクトを値渡ししているから」ということです。Cではご存知のように構造体を値渡しすると、すべてのメンバがコピーされることになっていますが、このことはC++におけるクラス構造の場合も同様です。
 値渡しの問題点については、Cの入門レベルの事項になりますから説明は省略しますが、この問題点を避けるため、Cでは通常ポインタを使って構造体を受け渡します。このポインタを使う方法もC++で使わないということはありません。と言いますか、頻繁に使われます。
 ところがポインタの場合、一つ問題があります。というのは、いわゆるヌルポインタ、つまりポインタである限り、それが「何も指していない」可能性があるわけです。よって、多くの場合ポインタがヌルでないことを確認するコードが必要となるのは皆さんもご経験済みのことでしょう。
 ところが、リファレンスを使うとそれは不要です。そもそもリファレンスは「必ず何らかのオブジェクトと結び付いている」ものなので、何も指していないリファレンスというもの自体があり得ないのです。
 上記のような関数の引数としてリファレンスが使われる場合、関数呼び出しのタイミングで渡されたオブジェクトがリファレンスに結びつけられ、リファレンスの生存期間、つまり関数がリターンするまでの間はずっとそのオブジェクトと結び付いたままになるわけです。
 参考までに、上記の関数をリファレンスを使って書き換えたものをお見せしますがたった一点、引数のitの前に&が付いただけのことで、あとは一切違いはありません。(“通常の”C++プログラムでは、IntTypeの前にconstを追加しますが、複雑になるので省略します)

void
IntType::add(IntType &it)
{
     number += it.number;
}


 ポインタと違って、「指している」わけではなく、そのまま元のオブジェクトと同じに振る舞えるため、逆参照(デリファレンスとか参照外し)などということも不要です。
 見た目の違いはそれだけであるにも関わらず、関数に渡されるのはあくまで「参照値」、つまりポインタのような最低限のデータなので、コピーのオーバーヘッドも最少限に抑えられるわけです。

 今回のお話はここまでです。リファレンスの使い方を説明し尽くしたとはとても言えませんが、今の段階でリファレンスというものの存在を知っておいていただく目的はほぼ達成したと思いますので、今回はこの程度にしておきます。

ニュース・解説

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

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

【開発環境】

インテル社からクアッドコアのCPUがいくつか発表されました。色々なサイトでその評価が開始されていますが、このうちすぐにでもMacintoshに関係がありそうなのが「Xeon 5300」シリーズです。現在のMacProが搭載しているデュアルコアを今回の新型CPUで置き換えれば、全体で8コアの超強力なマシンが誕生します。どうも、この載せ換え自体は割と簡単のようで、以下のサイトでは、CPUを載せ替えたMacProによるベンチマークなども掲載しています。

http://reviews.cnet.com/4531-10921_7-6663792.html?tag=blog

コア数が倍になっていますが、CPU価格や消費電力も倍になっているわけではなさそうですので、8コアマシンの発表と同時に、このCPUをひとつだけ(4コア...つまり現状と同じ)搭載した廉価なMacProの登場も期待したいところです。処理内容によっては、それでも十分にメリットを得られる人は沢山いると思いますので(笑)。

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

前回から11月17日の期間中、Apple社のGuidesとReferenceサイトにはドキュメントが多数登録されました。ただし、ほとんどのドキュメントはその内容のマイナーチェンジとなっています。初版は新型MacBookのハードウェア仕様書である「MacBook Developer Note」だけです。リリースノートの改訂版はXcode 2.4.1の発表に合わせたものだと思うのですが、題名だけを見ると、なんだか一世代前の内容のような気もします? また、デベロッパー向け読み物が2つ登録されています。「An Open Door to the Pharmaceutical Industry」の方は、前号の木下さんの記事も参照してみてください。

「MacBook Developer Note」(初版)
「17-inch iMac for Education Developer Note」
「AirPort Developer Note」
「Audio Developer Note」
「Bluetooth Developer Note」
「Ethernet Developer Note」
「FireWire Developer Note」
「PCI Developer Note」
「RAM Expansion Developer Note」
「Universal Serial Bus Developer Note」
「Video Developer Note」
「Shell Scripting Primer」(PDFあり)
「Application File Management」(PDFあり)

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

リリースノート

「Developer Documentation Release Notes for Xcode 2.3」
「Compiler Tools Release Notes」

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

「Leopard Technology Series for Developers: Leopard Developer Tools Overview」(読み物)

http://developer.apple.com/leopard/overview/tools.html

「OpenEye and Mac OS X: An Open Door to the Pharmaceutical Industry」(読み物)

http://developer.apple.com/business/macmarket/openeye.htm

前回から11月17日の期間中、新規テクニカルノートが4つ登録されました。また、新規テクニカルQ&Aの方は7つ登録されました。TN2085は、Mac OS X 10.4.8からサポートされているマルチスレッド対応OpenGLフレームワークについて解説しています。この仕組みが利用できる環境かどうかのチェック方法なども載っています。OpenGLコマンド発生処理の方を完全に別スレッドにすれば(制御は難しくなりますが)処理速度をかなり上げることが可能です。QA125については、MOSA BBSの方でも話題に取り上げて内容について詳しく解説していますので参考にしてください。基本的にはシステム側で発生しているバグに対する一時的な処方箋だと思われます(涙)。QA1372は、特定アプリケーションがCarbonなのかCocoaなのかを判断する方法ですが、そのアプリケーションがRosetta上で動いているかそうでないかを判断する方法は、以下のページに記載されています。

http://developer.apple.com/jp/documentation/MacOSX/Conceptual/universal_binary/universal_binary_exec_a/chapter_7_section_7.html#//apple_ref/doc/uid/TP40002217-CH210-BAJEBJJF

TN1392「Building Universal I/O Kit Drivers」
TN2156「Thermal considerations for Mac Pro FB-DIMMs」(初版)
TN2085「Enabling multi-threaded execution of the OpenGL framework」(初版)
TN2115「Playing a sound file using the Default Output Audio Unit 」(初版)

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

QA1470「Compression Sequence APIs - codecErr returned when compressing with H.264」(初版)
QA1473「NSProgressIndicator animation and redraw」(初版)
QA1489「Standard Audio - Setting output ASBD returns badFormatErr」(初版)
QA1392「Why am I getting a bdNamErr when trying to use a file I just located?」(初版)
QA1472「Debugging NSTableView's "Action Invocation" binding」(初版)
QA1256「Why is my application crashing in QuickDraw when I'm not using it?」(初版)
QA1372「How can I identify the runtime environment, Carbon or Cocoa,
of the current application?」(初版)

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

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

前回から11月17日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが6つ登録されました。このうち「SimpleCarbonAppleScript」はCarbon用のAppleScript関連のサンプルなんですが、なぜだかCocoa APIを利用しています(笑)。最近は、みんなそんな感じ...。「EmptyFS」「MFSLives」「ALittleArrowsShowcase」については、前号の木下さんの記事を参考にしてみてください。

「SimpleCarbonAppleScript」(AppleScript関連)(初版)
「EmptyFS」(File VFS plug-in関連)(初版)
「ALittleArrowsShowcase」(Carbon関連)(初版)
「MFSLives」(FileVFS plug-in関連)(初版)
「QTExtractAndConvertToAIFF」(QuickTime&Cocoa関連)(初版)
「QTExtractAndConvert- ToMovieFile 」(QuickTime&Cocoa関連)(初版)

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

【デベロップメント SDK】

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