MOSA Multi-OS Software Artists

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

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

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

2008-08-05

目次

  • WWDC初参加レポート
  • 「「Wonderful Server Life」    第75回   田畑 英和
  • 小池邦人のCarbon視点でCocoa探求
  • ターミナルの向こうから      第30回  海上 忍 

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

  〜「サーバ管理」編〜

 今回は、「サーバ管理」を使ったAFPサービスの設定について解説します。サービスの設定画面は「一般」、「アクセス」、「ログ」、「アイドル状態のユーザ」の4画面から構成されています。それではTiger Serverでの設定とも比較しながら設定項目を1つずつみていきましょう。

◇一般
 まずは「一般」設定画面ですが、ここではクライアントからのブラウズに関する設定を行います。Mac OS Xのクライアントのみをサポートする場合には、デフォルトの設定のままでも特に問題はないでしょう。Tiger Serverではブラウズの設定として次の2つの設定がありましたが、Leopard Serverでは「サーバ管理」からはBonjourに関する設定しかできなくなりました。レガシーな設定は徐々に切り離していく傾向にあるようです。

 ・Bonjour登録を使用する
 ・AppleTalkを使ったブラウズを有効にする

 次に「古いクライアント用にエンコード」するという設定がありますが、この設定はMac OS Xには関係なく、Mac OS 9以前のクライアントのための設定になります。Mac OS Xではユニコード(UTF-8)でファイル名を管理していますが、Mac OS 9以前のOSでは各言語ごとのエンコーディングを使用しているためエンコードの変換が必要になってきます。そこで、Mac OS 9以前のクライアントのためにファイル名をどのエンコードに変換するかを設定します。
 個人的にはMac OS 9以前のOSを使う機会はほぼなくなっていますが、まだ使用しなければいけない場合は事前にエンコードの変換が問題なく行えるかしっかりと検証するようにしましょう。
 あとは「ログインメッセージ」の設定があります。これはクライアントからの接続時にクライアント上にメッセージを表示するための機能です。管理者がユーザになにかお知らせをしたいような場合に使うことができます。1回しかメッセージを表示しないように設定することもできます。

・「一般」設定画面
http://www.htabata.com/img/MXS105/afp/afp_admin_05.png

◇アクセス
 「アクセス」設定画面では認証や接続に関する設定を行います。まず認証の設定ですが、次の3つから選択することができLeopard Serverでは「すべてのメソッド」がデフォルトの設定になっています。

 ・標準
 ・Kerberos
 ・すべてのメソッド

 認証方式の設定はちょっと分かりにくいですが、「標準」というのはこれまで一般的に使われてきているサーバへの接続時に認証ダイアログが表示されてユーザ名とパスワードで認証する方式のことです。一方「Kerberos」は1度認証すればあとは一定期間内であれば様々なサービスに対して手動で認証することなくアクセスできる、いわゆるシングルサインオンのことです。Kerberosを
利用するにはOpen Directoryの機能を利用する必要がありますので、AFPサービスの設定だけで実現できるものではありません。残るは「すべてのメソッド」ですが、これはようするに「標準」と「Kerberos」を両方とも使うという設定です。この場合クライアントから接続リクエストがあればまずはKerberosによる認証を試み、もし失敗した場合には「標準」方式での認証を行います。つまり、デフォルトで「すべてのメソッド」となっているということはKerberosでの認証を優先して行うということになります。
 LeopardになってからはクライアントのMac OS Xにも標準でKerberosが搭載されており、Kerberosによる認証を行う機会はどんどん増えてきています。

 ゲストアクセスを許可する場合には、デフォルトでは無効になっている「ゲストアクセスを有効にする」を設定します。ただし共有ポイントごとにもゲストアクセスを有効にする必要がありますので、ゲストアクセスはサービスと共有ポイントで2重の設定が必要になります。ゲストアクセスを有効にすると認証なしでのアクセスが可能になりますのでセキュリティには十分注意しましょう。
 次に「管理者が登録ユーザとして振る舞えるようにする」の設定ですが、これもちょっと分かりにくい設定項目かと思います。この設定が有効になっていた場合、管理者は他のユーザでの接続が可能になります。具体的には認証時に、接続に使用したいユーザのユーザ名と管理者のパスワードを入力します。そうすることで管理者であれば、パスワードが分からなくても特定のユーザでのAFP接続が可能になります。例えばユーザごとのアクセス権の挙動を実際に確認したいときなどにこの機能が利用できます。
 Tiger ServerではSSHトンネリングを使用する「安全な接続を有効にする」という設定がありましたが、Leopard Serverでは設定項目がなくなりました。ただし、デフォルトでSSHのトンネリングは有効になっています。

 後はクライアントの接続数の制限に関する設定があります。デフォルトでは無制限に設定されていますが、サーバの負荷を抑えたい場合などは接続数を設定して同時に利用可能なユーザを制限することができます。AFPサービスは、NetBootサービスでも使用される場合がありますので、実に接続数を制限する場合には他のサービスに影響がないか注意が必要になります。ちなみに10クライアント版のMac OS X Serverを利用している場合でも、接続数の設定はデフォルトで無制限に設定されています。

・「アクセス」設定画面
http://www.htabata.com/img/MXS105/afp/afp_admin_06.png

◇ログ
 ログはアクセスログとエラーログの2種類があり、個別にログの出力を設定できます。またアクセスログはさらに細かく分かれており次のイベントごとにログの出力を設定できます。

 ログイン、ログアウト、ファイルを開く
 ファイルを作成、フォルダを作成、ファイル/フォルダを削除

 当然出力するログの種類を増やせばログファイルのサイズも増えることになります。また、ログを定期的にアーカイブすることもできます。

・「ログ」設定画面
http://www.htabata.com/img/MXS105/afp/afp_admin_07.png

◇アイドル状態のユーザ
 ファイルサーバを運用していると、実際には使用していないユーザがクライアントから接続しっぱなしになるということもありますが、ここではそういったアイドル状態のユーザに関する設定ができます。
 具体的にはスリープを許可する時間(デフォルトは24時間)を設定したり、一定時間(デフォルトでは10分)アイドルタイムが続いた場合に接続を解除する設定ができます。デフォルトの設定ではアイドルタイムが続いても接続は解除されません。また、接続を解除するときに表示するメッセージも設定できます。

・「アイドル状態のユーザ」設定画面
http://www.htabata.com/img/MXS105/afp/afp_admin_08.png

 というわけで今回は「サーバ管理」でのAFPサービスの設定について解説しました。サービスの設定はコマンドラインからもできます。詳細についてはコマンドラインのマニュアルを参照してください。

・「Command-Line Administration」(英文)
http://images.apple.com/server/macosx/docs/Command_Line_Admin_v10.5.pdf

実際にファイルサーバを運用するには共有ポイントの設定も必要になりますので、次回は共有ポイントの設定について解説する予定です。
次回へつづく                             

小池邦人のCarbon視点でCocoa探求(2008/08/01)

〜 ImageBrowser Viewを使う準備が大変 〜

Cocoaの場合、Interface Builderでの設定がソースコードと密接に関連しているため作業をより複雑にしています。このために、実際のプログラミング作業に入る前にめげてしまう人もいるかもしれませんが、今回は、ちゃんとしたソースコードの話です(笑)。

NSTableViewの場合と同様、ImageKitのIKImageBrowserViewでは、MyDocumentクラスに実装した「datasource」と「delegate」メソッドが、画像表示のメンテナンスやユーザからの操作(画像クリックなど)に対応します。このうち、datasourceでは画像情報が保存されたモデルオブジェクトやその個数を返す事になります。今回のモデルオブジェクトは、以前に作成したImageFileクラスのオブジェクト(ファイルパス名などを含む)です。まず最初に、これらを保
存する配列(NSMutableArray)と、画像を読み込む時に一時的に用いる配列を、MyDocumentクラスのインスタンス変数として用意しておきます。MyDocumentクラスのクラス定義は以下のようになります。

@interface MyDocument : NSDocument
{
 IBOutlet id      imageBrowser;   //  IKImageBrowserViewのOutlet
 IBOutlet id      imageView;      //  NSImageViewのOutlet
 NSMutableArray  *list;           //  Idatasourceで利用
 NSMutableArray  *temp;           //  ファイル作業用テンポラリー
}


まず最初は、MyDocumentクラスに実装するdatasourceです。これについては「登録数を返す」「指定番号の画像情報を含んだImageFileオブジェクトを返す」「指定番号のImageFileオブジェクトを削除する」「画像の順序を入れ換えた時の後処理を行う」の5つのメソッドを用意します。この中で少し複雑なのは、最後の「画像の順序を入れ換えた時の後処理を行う」ぐらいで、残りは
大変簡単な処理で済むことが分かります。

- (int)numberOfItemsInImageBrowser:(IKImageBrowserView*)view
{
 return [list count];  //  画像の登録数を返す
}

-(id)imageBrowser:(IKImageBrowserView *) view itemAtIndex:(int) index
{
 return [list objectAtIndex:index];  //  ImageFileオブジェクトを返す
}

- (void)imageBrowser:(IKImageBrowserView*)view
                         removeItemsAtIndexes: (NSIndexSet*)indexes
{
 [list removeObjectsAtIndexes:indexes];  //  ImageFileオブジェクトを削除
}

-(BOOL)imageBrowser:(IKImageBrowserView*)view
   moveItemsAtIndexes: (NSIndexSet*)indexes toIndex:(unsigned int)dindex
{
 BOOL            ret=NO;   //  画像の順序を入れ換えた時の後処理を行う
 NSMutableArray  *temp;
 NSInteger       ct,i;
 id              obj;

 if( temp=[[NSMutableArray alloc] init] )
 {
     for(i=[indexes lastIndex];i!= NSNotFound;i=[indexes indexLessThanIndex:i])
     {
         if( i < dindex )
             dindex--;
         obj=[list objectAtIndex:i];
         [temp addObject:obj];         // 一時的に保存
         [list removeObjectAtIndex:i]; // オブジェクトを削除
     }
     ct=[temp count];
     for( i=0;i


NSTableViewならこれだけですが、IKImageBrowserViewの場合には、もう少し追加作業が必要となります。ImageFileオブジェクトを渡した時に、その中のどの種類の情報(インスタンス変数)を画像表示用に使うのかという指示が必要なのです。その処理に準拠したdatasourceを、ImageFile(モデル)クラス側に実装します。具体的には「情報の種類」「情報の内容」「識別子(ID)」「画像タイトル」「画像サブタイトル」を返す5つのメソッドを用意することになります。以下がそうしたdatasourceの実例です。

- (NSString*)imageRepresentationType  //  画像表示にどんな種類の情報を使うか
{
 if( [type isEqualToString: @"public.movie"] ) // Movieファイル
     return IKImageBrowserQTMoviePathRepresentationType;
 else if( [type isEqualToString: @"public.executable"] ) // CCompositionファイル
     return IKImageBrowserQCCompositionPathRepresentationType;
 else                                                       // 一般画像ファイル
     return IKImageBrowserPathRepresentationType; // 画像ファイルパスを使う
}

- (id)imageRepresentation  //  画像表示用の情報を返す(画像ファイルパス名)
{
 return path;
}

- (NSString*)imageUID  //  画像の固有識別子を返す(画像ファイルパス名と一致)
{
 return path;
}

- (NSString *) imageTitle;  //  画像タイトルを返す(今回はファイル名)
{
 return[ path lastPathComponent];  //  パス名の一番最後を抽出
}

- (NSString *) imageSubtitle;  //  画像サブタイトルを返す(今回はファイルタイプ)
{
 return type;  // タイプにはファイル種類識別用のメタデータが入っている
}

次はdelegateメソッドですが、こちらはMyDocumentクラスに実装します。以下
は、ユーザがブラウザ上の任意の画像をマウスクリックした時に実行される
delegateです。マウスクリックにより、その画像をお隣のNSImageViewいっぱ
いに表示します。

- (void) imageBrowserSelectionDidChange:(IKImageBrowserView *) aBrowser
{
 NSImage      *image;
 NSIndexSet   *set;
 ImageFile    *obj;

 if( set=[imageBrowser selectionIndexes] ) // 選択画像のインデックスを得る
 {
     if( obj=[list objectAtIndex:[set firstIndex]] )  // ImageFileオブジェクトを得る
     {
         if( image=[[NSImage alloc] initByReferencingFile:obj.path ] )
         {                              // パス名を使い画像(NSImage)を得る
             [imageView setImage:nil];
             [imageView setImage:image]; // 得られた画像をNSImageViewに設定
             [image release];
         }
     }
 }
}

その他に「画像をダブルクリックした時の処理」「画像を右ボタンでクリック
した時の処理」「背景を右ボタンクリックした時の処理」なども、delegateと
して実装することが可能です(以下参照)。ちなみに、画像のダブルクリック
に対する処理を差し替えなければ(delegateを実装しなければ)デフォルトと
して、アプリケーション(オーナ)による画像のオープンが実行されます。

- (void) imageBrowser:(IKImageBrowserView *) aBrowser
               cellWasDoubleClickedAtIndex:(NSUInteger) index

- (void) imageBrowser:(IKImageBrowserView *) aBrowser
   cellWasRightClickedAtIndex:(NSUInteger) index withEvent:(NSEvent *) event

- (void) imageBrowser:(IKImageBrowserView *) aBrowser
      backgroundWasRightClickedWithEvent:(NSEvent *) event;


画像さえ登録してしまえば、ImageBrowserの扱いは簡単そうに見えます。ところが、その画像登録に色々なパタンが存在するので注意が必要です。次回は「しんぶんし3」でのドキュメントファイルや画像ファイルの取り扱いを復習しながら、登録ボタンで画像を追加していく処理を解説したいと思います。
つづく
                                

ターミナルの向こうから      第30回  海上 忍

〜 PDFを活用する(1)〜

・PDFをもっと活用しよう
 ご存じのとおり、Mac OS Xの描画・印刷システムはPDFベースです。紙へ印刷する代わりにPDFとして出力したり、画像をPDFに変換したりといった処理はお手のもので、かつてAdobe Acrobatに付属していた「Acrobat PDF Writer」相当の機能が組み込まれていると言っていいでしょう。Leopardへバージョンアップする過程では、付箋を加えるなどAdobe Acrobat本体に相当する編集機能や、PostScript / EPSをPDFに変換するAcrobat Distillerに相当する機能(ただし日本語は非対応)も追加されています。
 その意味ではAcrobatに近づきつつあるMac OS XのPDFサポートですが、「PDFの再利用」という点ではまだ不十分です。システム標準のPDF閲覧・編集ツール「プレビュー」は、書き加えたメモ(付箋)を変更/削除できず、複数人でのコラボレーション作業には不向きです。テキストを抽出するときも、手作業で範囲指定してコピー&ペーストするしかありません。
 この問題を解決する近道は、ズバリ「Adobe Acrobatを購入すること」ですが、それでは単なるアプリケーションの機能紹介になってしまいますので、各種オープンソースソフトウェアを使い代替案を探りたいと思います。つい閲覧するだけになりがちなPDFを、情報を抽出したり書き加えたりして活用することが目的です。

・PDFをHTMLに変換する
 PDF編の第1回は、「PDFをHTMLに変換する」方法を紹介します。MOSA伝の趣旨からは若干外れますが、各種ドキュメントもPDFで配布されることが当たり前の現在、開発者にも役立つのではないかと思います。HTMLに変換しておけば、本文をプレインテキストとして抽出するなど加工も容易です。
 利用するアプリケーションは「xpdf」(X Window Systemを利用したフリーなPDFビューア)と、xpdfをベースに開発されたPDF/HTMLコンバータ「pdftohtml」です。なお、xpdfの機能はエンコードセットの解釈で利用される程度のため、X Window System(X11.app)のGUIは使用しません。
 インストールの手順は、以下に示すとおりです。最初にxpdf、次にpdftohtml、最後にxpdfの設定ファイルをpdftohtml用に修正する、という順序になります。作業はターミナルで行いますが、pdftohtmlのダウンロードと、設定ファイルに追加する内容(リスト1:add.rc)をデスクトップに作成する作業は、他の適当なアプリケーションを利用してください。

- - - - -
・xpdfのインストール

$ curl -O http://www.ctan.org/get/support/xpdf/xpdf-3.02.tar.gz
$ tar xzf xpdf-3.02.tar.gz
$ cd xpdf-3.02
$ configure ; make
$ sudo make install
- - - - -


- - - - -
・pdftohtmlのインストール

(ソースコードはhttp://pdftohtml.sourceforge.net/からダウンロード)
$ tar zxf pdftohtml-0.40a.tar.gz
$ cd pdftohtml-0.40a
$ make
$ sudo cp src/pdftohtml /usr/local/bin/
- - - - -


- - - - -
$ curl -O http://www.db.is.kyushu-u.ac.jp/computer/src/toollib/xpdf-japanese.tar.gz
$ tar xzf xpdf-japanese.tar.gz
$ cd xpdf-japanese
$ sudo mkdir -p /usr/local/share/xpdf/japanese
$ sudo cp -r ./* /usr/local/share/xpdf/japanese/
$ cp ~/Desktop/add.rc .
$ sudo sh -c "cat add.rc >> /usr/local/etc/xpdfrc"
- - - - -


- - - - -
リスト1 : add.rc

cidToUnicode    Adobe-Japan1    /usr/local/share/xpdf/japanese/Adobe-Japan1.cidToUnicode
unicodeMap      ISO-2022-JP     /usr/local/share/xpdf/japanese/ISO-2022-JP.unicodeMap
unicodeMap      EUC-JP          /usr/local/share/xpdf/japanese/EUC-JP.unicodeMap
unicodeMap      Shift-JIS       /usr/local/share/xpdf/japanese/Shift-JIS.unicodeMap
cMapDir         Adobe-Japan1    /usr/local/share/xpdf/japanese/CMap
toUnicodeDir                    /usr/local/share/xpdf/japanese/CMap
- - - - -


 pdftohtmlの使い方ですが、最初の引数にPDF、2番目の引数に書き出すファイル(HTML)を指定すればOKです。処理が完了すると、カレントディレクトリにトップページ(コマンド実行時に指定したもの、XXX.html)と、しおり部分のページ(XXX_ind.html)、本文のページ(XXXs.html)としてPDFの内容が書き出されます。
 日本語を含む文章の場合、「-enc」オプションでエンコーディング形式を指定する必要があります。UTF-8で書き出す場合は「-enc UTF-8」、日本語EUCで書き出す場合は「-enc EUC-JP」という要領です。なお、ブラウザにSafariを利用する場合、EUC-JPを選択したほうがエンコーディング形式の自動判別に成功しやすくなります(テキストエンコーディングに「デフォルト」を選択している場合)。

- - - - -
$ pdftohtml -enc EUC-JP develop.pdf index.html
- - - - -

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

 

 MOSA Developer News   略称[MOSADeN=モサ伝]
        配信停止 mailto:mosaden-ml@mosa.gr.jp
 記事内容に関するご意見 mailto:mosaden-toukou@mosa.gr.jp
      記事投稿受付 http://www.mosa.gr.jp/?page_id=850
Apple、Mac OSは米国アップル社の登録商標です。またそのほかの各製品名等
はそれぞれ各社の商標ならびに登録商標です。
このメールの再配信、および掲載された記事の無断転載を禁じます。
特定非営利活動法人MOSA  http://www.mosa.gr.jp/
Copyright (C)2007 MOSA. All rights reserved.