MOSA Multi-OS Software Artists

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

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

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

2006-07-04

目次

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

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

 前回はMac OS X Serverの初期設定をリモートで実行する方法を解説しました。今回はそのほかの初期設定の方法を解説いたします。ほかの方法としてはまず、サーバ上で直接操作をおこなう方法がありますが、こちらはリモートで行った操作をローカルマシン上で直接実行するだけです。
 ちなみにインストールだけやっておいて、初期設定を後で行いたい場合は、初期設定の画面でコマンドキー+Qキーを押せばシステム終了することができます。

□サーバの自動設定
 それでは、もう1つの初期設定方法をご紹介しましょう。それはサーバの自動設定です。ある特定の場所に初期設定の情報をあらかじめ保存しておけば、インストールが完了したMac OS X Serverはその初期設定情報を自動的に認識して読み込み、自動的に初期設定を行います。
 この方法を使いますと、複数台のサーバの初期設定を効率化することができますし、サーバマシンがまだ調達できていない場合でも先に初期設定だけを完了させておくことができます。また、同じ設定でサーバを繰り返し構築するような場合にも役に立ちます。

□自動設定の保存場所
 初期設定情報の保存場所ですが、以下の2種類の保存場所が使用できます。

・ファイルに保存する
・ディレクトリサーバに保存する

 ファイルに保存する場合ですが、保存する場所があらかじめ決められています。サーバはマウントしている各ボリュームの「/Auto Server Setup/」内に設定ファイルが保存されているかどうかを確認します。ですので、たとえば外付けのハードディスク(iPodでもかまいません)の最上位にAuto Server Setupという名前のフォルダを作成し、その中に設定ファイルを保存してサーバに接続すれば自動設定を行うことができます。
 このとき設定ファイルのファイル名は何通りかの命名規則があるのですが、特定のサーバ用の設定ファイルを作成する場合はMACアドレス(IPアドレスなどでも可)をファイル名に使用します。MACアドレスをもとにファイルを作成する場合にはコロンを省略してファイル名に用います。

設定ファイルの例)
・Setupという名前の外付けHDに保存
・サーバのMACアドレスは00:30:65:4d:bc:ef
設定ファイルのパス:
/Volumes/Setup/Auto Server Setup/0030654dbcef.plist

 ディレクトリサーバに保存する場合ですが、この方法では設定ファイルを保存するためのディレクトリサーバが1台必要になります。ディレクトリサーバとはネットワーク上で様々なデータを一元管理するためのサーバのことです。Mac OS X Serverをディレクトリサーバとして使用することができます。
 初期設定を行うサーバはDHCPを利用してネットワーク上のディレクトリサーバを自動的に検出し、ディレクトリサーバ上に該当する設定レコードが保存されていれば、その設定レコードを読み込んで自動的に設定を行います。
 Mac OS X Serverをディレクトリサーバとして使用している場合には、自動設定のための設定レコードを保存する場所(スキーマ)があらかじめ用意されています。

□設定情報の保存
 自動設定のための情報を保存するには、リモートで初期設定を行ったときと同様に「サーバアシスタント」を使用します。「サーバアシスタント」を起動すると「ようこそ」画面が表示されますので、ここから「ファイルまたはディレクトリレコードに設定情報を保存する」を選択して、設定情報を入力していきます。設定情報の入力はリモートで初期設定を行ったときと同様です。ただし、リモートでの初期設定のときとは違い、サーバ機が稼働している必要はありません。また、設定を始めるときにサーバを選択する必要もありません。

設定が一通り完了すると、最後に設定の確認画面が表示されますが、ここで画面左下の「別名で保存」ボタンをクリックします。保存の形式が選択できますので、ファイルに保存する場合には「設定ファイル」を、ディレクトリサーバに保存する場合には「ディレクトリレコード」を選択します。どちらの形式を選択した場合でも設定内容を暗号化することができますが、暗号化しないのであれば暗号化の指定は外しておきます。
 ファイルに保存する場合には、先ほど解説しましたようにファイル名にMACアドレスを使用します。
 ディレクトリサーバに保存する場合は、「サーバアシスタント」を実行しているマシンからディレクトリサーバが参照できる必要があります。ディレクトリサーバの場所はDHCPを利用することにより自動的に設定することができます。ディレクトリサーバが参照できていれば「ディレクトリノード」の一覧に自動的に表示されますのでそこから設定レコードを保存するサーバを選択します。このときレコード名を指定する必要がありますが、特定のサーバ用の設定レコードを保存する場合には、レコード名にMACアドレス(このときコロンは省略)を入力します。また、ディレクトリサーバに設定レコードを保存するにはディレクトリの管理者として認証を行う必要があります。

このようにして設定情報を保存しておけば、あとはMac OS X Serverをインストールするだけで、インストール後に自動的に初期設定が始まります。もしサーバを再構築する場合には自動設定の情報が残っているかどうかを確認してください。異なる設定でサーバを構築する場合、もし自動設定の情報が残っているとインストール後に自動設定が始まってしまい、また最初から作業をやり直すことになってしまいます。
 もちろん同じ設定でサーバを再構築する場合には、初期設定の情報を残しておけば、同じ設定でサーバを構築することができます。

つづく

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

 さて、待ってた人はお待ちかねの、そうでもない人はそれなりの「ふじもと.txt」行方不明事件の解決編である。まず問題を復讐して……巌窟王してどうする、復習しておこう。セーブパネルをひらいてユーザにファイル名を入力させ、その名前でテキストファイルを作る。作ったファイルが含まれるディレクトリのファイル名リストを取り、これに対して containsObject: で作ったときのファイル名があるかどうかを聞くと、「こいけ.txt」は YES だが 「ふじもと.txt」は NO なのであった。……細かな点は端折ったが、おおむねよろしいか?
 前回もちらと書いたがこの奇っ怪至極な現象、実は Mac OS X というかHFS+ の仕様なのである。タカハシ編集長に指摘され、なんとオレもその文章を読んだことがあることに気がついたのだが SystemOverviewJ.pdf(http://developer.apple.com/jp/documentation/pdf/SystemOverviewJ.pdf)の176ページにこういう記述があったのだ。

「……ファイル名に使用されるエンコーディングはファイルシステムによって異なります。Mac OS拡張(HFS+)では、Unicodeのある特定の形式、つまり、UTF-16形式(16ビットコードのシーケンス)の、正規分解された(canonical decomposition)Unicode2.1をファイル名に使用します。」

この記述は10.2.xまでの話で、10.3からはUnicode 3.2になっているのだが、話の要点はそこではなく、「UTF-16の正規分解されたUnicode」というところにある。実はこの、正規分解ってのがクセモノなのである。このドキュメントでは例としてUTF-8のしかも 0x00E9(eの上に´が乗ってるヤツ)が「e」(0×0065)+「´」(0×0301)と表現される例しか挙げてないのだが、日本語の濁音半濁音もこれと同じ扱いで、「こいけ」はそのままだが「ふじもと」は「ふし濁音もと」と表現されてしまうのである。
 先週作ったプログラムで検証してみよう。修正するところは2ヶ所。まずアクションメソッド execT1: のファイル名表示のところを以下のように変え、指定したファイル名の長さも表示するようにする。

  [self displayMessage:[NSString stringWithFormat:
          @"We had saved a file as %@ (%d).\n", filename, [filename length]]];

 次に execT2: でディレクトリの中身をダンプしている部分、forループの中を次のようにしてやっぱりファイル名の長さを表示するようにする。

     for(index = 0; index < fileCount; index++){
          NSString* item = [filesArray objectAtIndex:index];
          [self displayMessage:[NSString stringWithFormat:
               @"%@ (%d) \n", item, [item length] ]];
     }


 これを実行して「ふじもと」というファイルを作ると出力は次のようになった。

  We had saved a file as ふじもと.txt (8).
     This directory contains 3 files.
  (中略)
     ふじもと.txt (9)

 ね、ファイルを作った時の「ふじもと.txt」は8文字(これは見た通りである)なのに、directoryContentsAtPath: で持ってくるとこれは9文字で濁音の分が1文字増えちゃってる。おなじ「ふじもと」でも中身が違うんである。これぢゃコンペアはうまくいかないのが当然だ。
 ほんぢゃどうすればいいのか、アップルのドキュメントにはNSString のfileSystemRepresentationメソッドを使えば正規化されたUTF8が得られ、UTF8Stringメソッド を使えば正規化されてないUTF8の文字列が得られるとか書かれているが、こいつらはつまり char* を返すわけだから NSString と比較するには手間をかけて全部この形にしてやらねばならぬ。いや、実際ワタシはそうしてこの問題に対処したんだが(バグぢゃなかったが対策は正しかったわけだ)、これはいかにも泥臭い。
 ……というわけで、HFS+ファイルシステムを直に、パス名で指定する各種メソッドは10.4で「Deprecated」となり、ローカルのファイルでも URL で指定することが推奨されるようになったらしい。当然ながらURLでは上記の正規化は起こらないのである。なんだかだまされたような気がするがそういうことなのだ。

なお、Unicode 正規化については以下のページがとても詳しい。ご参考まで。
 http://homepage1.nifty.com/nomenclator/unicode/normalization.htm

(2006_06_29)

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

UNIXとしてのMac OS X

〜Perlについて(38)〜

 こんにちは、高橋真人です。
 早速前回の残りから始めます。

<<1>>:
{
     print(OUT join("\t", $_->[0], $_->[1], $_->[2],
          $_->[3], $_->[4], $_->[5]), "\n");
}

 処理の最後です。各要素をファイルに書き出します。0〜5番めの要素をタブで結合し、最後に改行を付け足しています。
 join演算子の中で、スカラー変数を羅列していますが、ここは以下のように書けばスライスとして書くことができます。(今の私ならそう書いたでしょう)

{ print(OUT join('\t', @$_[0..5]), "\n") }

 スライスというのは、配列の要素を選択的に指定して、リストを生成する方法です。既に触れていたと思ったのですが、ちゃんとした説明をしていなかったので、少し説明します。

@list1 = (1, 2, 3, 4, 5);

とある場合、

@list2 = ($list1[0], $list1[4]);

とする代わりに、

@list2 = @list2[0, 4];

と書くことができます。つまり、配列の要素をインデックスを使って選択的に指定して新たなリストにすることをスライスと呼びますが、このスライスは代入式の右側に書けるだけではなく、左側にも書くことができます。
 たとえば上記の続きで、

@list2[0, 3] = @list2[3, 0];

とすると、0番目と3番めの項目が入れ替わります。全く同じことを以下のようにも書けます。

@list2[3, 0] = @list2[0, 3];

 要素を指定するブラケットの中はカンマで区切っていくつでも書くことができますし、範囲演算子(..)を使うこともできます。従って、

@list2 = @list2[4..0];

と書くと、配列の要素が逆順に並び変わります。もちろん、配列を逆順にするだけならば、reverseという演算子がありますので、

@list2 = reverse @list2;

と書いても、結果は同じになります。
 ところで、スライスについてですが、Perlを始めたうちは、スカラーとスライスの書き分けに混乱する人が多いと思います。
 上記例の@list2の最初の要素を取り出す場合に、つい、

$first_item = @list2[0];

などという書き方をしてしまうことが多いのです。
 配列から要素を取り出した場合、その要素自体はあくまでもスカラーなので、$で始めなければなりません。@で始めてしまうと、これはスライスになりますから、結果、「要素が一つのリスト」を表すこととなります。

■最後に
 さて、38回にわたってお届けしてきたPerlの解説も今回で終わりです。
 前にも書きましたように、私がPerlを始めた頃はまだインターネットも一般に普及していなかったので、「PerlといえばCGI」ということはなく、私にとってのPerlの印象は「テキスト処理の得意なスクリプト言語」というものでした。現在では、あえてPerlをやらなくても、純日本産のRubyという人気のスクリプト言語もありますし、ちょっと毛色の変わった(?)ところではPythonなどというものもあります。国産のRubyは別としても、概してこのようなUNIX系のスクリプト言語は日本語の扱いに難があるケースが少なくなかったのですが、これもunicode系の文字コード体系が一般的になっていけば、徐々に解消されるのではないでしょうか(希望的観測・笑)。
 実は、こうやってPerlの記事を書いてきた私も、日常の業務でPerlを使うことはほとんどなくなってしまいました。強いて言うなら、他人のCGIの仕事を手伝う時にちょこっと書くぐらいです。
 まあ、そうは言っても、CGIに関して言えば、恐らく圧倒的に普及しているのはPerlで、まだPythonやRubyでCGIを使える環境はそんなに多くないでしょうから、レンタルサーバーなどで自分の権限で環境を変更できないケースなどのことを考えるとCGIを書くためにはPerlを覚えておくことのメリットは充分あるはずです。
 今回この連載で紹介したのは、あくまでPerlの「おいしいとこだけのつまみ食い」なので、これをきっかけにPerlに興味を持っていただけた方がおいでであれば、以前、連載の53回目で紹介した「プログラミングPerl」や「初めてのPerl」などの本でもっと体系的に学ぶことができるでしょう。
 また、少しはPerlの経験があった人でも今回の私の紹介したいくつかのテクニックを知って興味を持たれたら、是非以下の本を読んでみることをお勧めします。

Effective Perl
Joseph N. Hall著
ASCII刊、2940円
http://www.ascii.co.jp/books/books/detail/4-7561-3057-7.shtml

 決して入門向けの本ではありませんが、Perlの奥深さを知って、Perlに対する見方が変わること、請け合いです。

ニュース・解説

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

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

【開発環境】

WWDC2006参加費用の早期割引の締め切りが7月7日まで延びました。まあ、良くあるケースなのですが、参加しようかどうかをギリギリまで判断しかねている人(もしくは会社)にとっては朗報です。今年は、開催日程が6月から8月へと変更になった関係で、毎年参加している私の知り合いの中にも参加を見合わせる人が沢山出てしまいました。日本からの参加者は減少するかもしれませんね。欧州やUS国内からの参加者への影響はどうなのでしょうか?

Apple社からMac OS X 10.4.7が発表されました。色々なモジュールにおいてバグの修正が行われているようですが、10.4のアップデートはこれで打ち止めなのでしょうか? 私が報告したバグで、まだ未対応のものもあるのですが、これらの修正は10.5を待つしかないかもしれません...。

以下のMacworldサイトに、Leopardに望む23の項目という記事がアップされています。

http://www.macworld.com/2006/06/firstlooks/leopardwishlist/index.php

非常に的を得ていると思いますので、皆さんもぜひ一読してみてください。

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

前回から6月30日の期間中、Apple社のGuidesとReferenceのサイトには大量のドキュメントが登録されました。ただし、大部分は今までの内容のマイナーチェンジです。今回は、その中で初版と内容が大幅変更になったドキュメントだけをピックアップしました。サンプルソースも記述されている「Quartz Display Services」に関するドキュメントが登場しました。また、「Disc Recording」に関する新規リファレンスも2つ登録されています。

「Core Image Programming Guide」(PDFあり)
「Quartz Display Services Programming Topics」(初版)(PDFあり)
「RAM Expansion Developer Note」

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

「Core Image Filter Reference」(初版)(PDFあり)
「Core Image Kernel Language Reference」(初版)(PDFあり)
「Disc Recording Framework Reference」(初版)
「Disc Recording UI Framework Reference」(初版)
「HIGeometry Reference」(初版)(PDFあり)
「NSString Application Kit Additions Referenc」(PDFあり)

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

加えて、新規リリースノートがひとつ、デベロッパ向け読み物が2つ登録されています。「Building Customized User Client Drivers for USB Devices」の方は、珍しいことにUSBドライバ開発についての解説です(笑)。

リリースノート

「AppleScript Terminology and Apple Event Codes Reference」(初版)

http://developer.apple.com/releasenotes/

「Building Customized User Client Drivers for USB Devices」(読み物)

http://developer.apple.com/hardwaredrivers/customusbdrivers.html

「Using the QTKit Framework」(読み物)

http://developer.apple.com/quicktime/qtkit.html

前回から6月30日の期間中、新規テクニカルノートと新規テクニカルQ&Aはひとつも登録されませんでした。

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

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

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

前回から6月30日期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードはひとつも登録されませんでした。今頃関係者は、Mac OS X 10.5用のサンプル作りで大忙しなのでしょう。

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

【デベロップメント SDK】

前回から6月30日の期間中、Apple社のSDKサイトには新しいSDKがひとつ登録されました。Mac OS X 10.4.7対応「Kernel Debug Kit」(PowerPC版とIntel版あり)です。また、プロ用アプリケーション「Shake」の新版が発表されたことに合わせて「Shake 4.1 SDK」の新版も登録されています。

「Kernel Debug Kit 10.4.7 - PowerPC」
「Kernel Debug Kit 10.4.7 - Intel」

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

「Shake 4.1 SDK」

http://developer.apple.com/appleapplications/download/index.html

 

◇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.