MOSA Multi-OS Software Artists

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

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

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

2006-05-23

目次

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

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

 Intelベースのシステムに新しくMacBookが加わりました。PowerMac G5やXserveなどのPowerPCベースのシステムもまだ残っておりますが、あと3ヶ月ほどすればWWDCも控えており、ハードウェアのIntel移行は思いのほか短期間で進んでいます。

さて、今回からMac OS X Serverのインストール方法について解説していきたいと思います。Mac OS X ServerのインストールはMac OS Xのインストールを行ったことがあればさほど難しくはないのですが、次のようなケースも考えられます。

・Xserveにビデオカードを追加していない
・インストールディスクから起動できない
・1台のマシンでMac OS Xも使いたい
・旧バージョンのMac OS X Serverをすでに使っている
・一度に複数台の構築を行いたい

 様々なケースが考えられるのですが、まずは以下のようなケースを考えてみましょう。

・キーボード、マウス、モニタが本体につながっている
・インストールディスクから起動可能
・1台だけ新規にインストールする

 このようなケースでは、まずはインストールディスクから本体を起動します。インストール前にMac本体にすでになんらかのシステムが入っていれば、インストールディスクを本体に入れて「Install Mac OS x Server」という名前のアプリを起動し「再起動」ボタンをクリックします。
 あるいはインストールディスクが本体に入った状態で起動時にCキーを押しながら起動すればインストールディスクから起動します。Mac OS XはTigerになってから標準でDVDによるインストールディスクの提供が行われるようになりましたが、Mac OS X ServerはDVDとCDの両方でインストールディスクが提供されています。
 インストールディスクから起動すれば、あとは画面の指示に従って操作することによりインストールが実行できます。1台のマシンに複数のMac OSをインストールしたい場合には、インストール前にあらかじめパーティションを分割しておきましょう。インストールディスクでも起動中には「ディスクユーティリティ」を使用することもできますので、必要な数だけパーティションを作成しておくことができます。各パーティションに十分なディスク容量があればそれぞれMac OSをインストールすることができますので、たとえば1台のマシンをMac OS XとMac OS X Serverのデュアルブートにすることができます。
 インストール時にはインストールパッケージをカスタマイズすることもできます。プリンタドライバのインストールを省略してディスク容量を節約するのもよいでしょう。インストールが完了すればマシンが再起動し初期設定が始まります。

 ここまではMac OS Xのインストールと同じ手順ですが、Mac OS X Serverの場合はインストール前にあらかじめ準備しておきたいことがあります。事前に準備が必要なものは前回解説しましたが、場合によってはあと1つ準備しておきたいものがあります。それはDNSサーバへの登録です。
 v10.4からはホスト名の設定がDNSサーバを参照して自動設定されるようになりました。つまりこれから構築するサーバは、DNSサーバを参照して自分自身のホスト名を自動的に設定します。使用するサービス(たとえばオープンディレクトリ)によってはDNSに依存するものがありますので、できることならばインストール前にDNSサーバにこれから構築するサーバを登録(正引き、逆引きの両方)しておきましょう。DNSサーバを自由に管理できないような場合には、これから構築するサーバ上でDNSを動かすことも考えられます。
 自動設定されるホスト名は後から変更することもできますので、とりあえずDNSサーバへの登録をせずに作業を進めてしまうこともできます。
 これで今回仮定した環境であれば、インストール作業がおこなえます。では次にモニタが接続していないケースを考えてみましょう。Xserveは標準でビデオカードを搭載していませんので、モニタを接続して画面の指示に従ってインストールを行うことができません。
 そこでMac OS X Serverにはリモートでのインストール機能が用意されています。リモートでインストールを行うには「サーバアシスタント」というツールを使用しますが、こちらはMac OS X Serverの管理ツールの中に含まれています。管理ツールはMac OS X Serverをインストールしたときに「/アプリケーション/サーバ」フォルダにインストールされますが、これからインストールを行うわけですから、別途用意しておく必要があります。
 リモートインストールを行うにはネットワーク上の別マシン上に管理ツールをインストールしておく必要があります。管理ツールをインストールするマシンはMac OS Xでかまいません。管理ツールですが下記のURLからダウンロードすることができます。

・管理ツールダウンロードURL
http://www.apple.com/jp/ftp-info/reference/serveradmintools104.html

 それでは次回は実際にリモートでのインストール方法について解説したいと思います。

つづく

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

 さてゴールデンウイークはいかがだったろうか。なに? 仕事三昧でどこがゴールデンウイークなんだかわからんかった? ああ、皆さん、ここに今どき珍しいプログラマの鑑がおられましたぞ。そちらのあなたは? 4月末から9連休で海外に行ってきた? この人非人め、少しは発展途上国で飢えている子供たちのこととか考えなさい。

そんなことはさておき、前回の最後でNSWorkspaceクラスのメソッド、 launchAppWithBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifier:(はぁはぁ長いな、これ)を使えば、なんとか課題である「アプリケーションをフォアグラウンドに持ってこないで起動する」ということができそうであると判った。問題は、このメソッドで起動したいアプリケーションを指定するやり方である。普通にフォアグラウンドで起動してしまう launchApplication:ならフルパスを指定すれば良かったのだが、こいつのパラメータは耳慣れぬbundleIdentifierというヤツである。このbundleIdentifierってなんだ?

javaでプログラムを書いたことのある人は知ってると思うが、あの言語ではクラスの定義なんかを引っ張ってくるためにピリオド「.」で所属……というか分類をつなげて行くような文字列を使う。例えばjavaの標準クラスであるStringは、「java.lang.String」となるし、Calendarのクラスは「java.lang.Calender」となる。Mac OS Xでもこれをidentifier、つまり識別子に使っていて、例えばMailは「com.apple.mail」、iPhotoは「com.apple.iPhoto」てな具合に表現される。これだと、例えば誰かがMOSAブランドのメーラーソフトを作り、Appleの向こうを張って俺もこれを「Mail」と名付けるんだと言い張っても「jp.gr.mosa.mail」てな具合になって区別がつくわけね。ここまではよろしいか?

本題に戻り、NSWorkspaceクラスのメソッド、launchAppWithBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifier:に渡すため、フルパスからこのbundleIdentifier、適当に翻訳するけどバンドル識別子をでっちあげなければならない。それにはどうするか。Xcodeのヘルプメニューから「マニュアル」を選択し、bundleIdentifier を検索してみると、そのものずばりのメソッドが NSBundleクラスに存在する。能書きは「レシーバーのバンドル識別子を返す」とある。すなわち以下のごとく、フルパスからNSBundleオブジェクトを作り、それにこのメッセージを送ればバンドル識別子がゲットできるという仕掛けだ。

NSString*   fullPath;    // 目当てのアプリのフルパスが入ってるもんとする。
NSBundle*  aBundle = [NSBundle bundleWithPath:fullPath];
                                  // フルパスからバンドルオブジェクトを作る。
NSString*   bundleIdentifier = [aBundle bundleIdentifier];
                                  // そいつの識別子を獲得。

 これに、前回調べたオプション、それに起動したアプリケーションの識別子を受け取るためのNSNumberへのポインタを渡せば見事、バックグラウンドでアプリケーションが起動できる。

NSNumber*   aIdentifier;

[[NSWorkspace sharedWorkspace]
    launchAppWithBundleIdentifier:bundleIdentifier
    options:NSWorkspaceLaunchWithoutActivation
    additionalEventParamDescriptor:[NSAppleEventDescriptor nullDescriptor]
    launchIdentifier:&aIdentifier];


 ……どうですか。え? なんだかCarbonでやるのと同じくらい面倒な気がするって? うん、私も実はそう思います。そこで次回は、もっと簡単にこの課題がクリアできる、「伊東家の食卓」的裏技を一挙大公開しちゃう。乞うご期待。
(2006_05_18)

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

UNIXとしてのMac OS X

〜Perlについて(35)〜

 こんにちは、高橋真人です。
 さて、Perlネタの最後のお話として解説しているリストデータをmap、grep、sortなどの演算子で順に受け渡しながら処理していくやり方ですが、あと一つだけ説明をしなければならないものがあります。リファレンスです。

 以下は、連載の84回目で紹介したスクリプトの末尾の部分です。

...
grep { $_->[6] =~ /False/ }
map { [(split /\t/)] }
<>;

 前にご紹介したように、最終行の<>が生成したリストを後ろから前に順に渡していくわけですが、リストを最初に受けているmap演算子でちょっと奇妙なことをしています。これは何でしょうか? また、grep演算子のブロックの中には、$_->[6]などという見慣れないものがありますね。

まず、splitという演算子は以前にも登場したと思いますが、対象となる文字列に対して、この場合は /\t/ という正規表現で表される文字列を区切りとして分割します。つまり、文字列をタブで分割してリストにします。
 問題なのは、この式を囲んでいる角カッコです。ちなみに丸カッコの方は演算の優先順位を指定するためのもので、ここではなくても変わりません。
 さて、この角カッコは何でしょうか?
 Perlで角カッコと言えば、まず最初に思い浮かぶのは使用頻度から言っても正規表現における文字クラスですが、角カッコの中にリストを表現する式があると、「無名配列生成子」というものになるのです。
 「無名」というのはあまり馴染みがない言葉かもしれませんが、C言語でも登場します。通常変数には名前が付けられますが、ポインタで指されることによって間接的に存在する変数には名前がない場合があります。これと同様にPerlではリファレンスという間接的に変数を指し示す方法があり、これで指された値を「無名○○」と呼びます。
 具体的な例を挙げましょう。$aという変数があったとき、変数の前にバックスラッシュ(日本語フォントでは円マークになりますが)を付けると、変数$aのリファレンスを返します。

$a = 'abc';
$ref_a = \$a;

 今、変数$ref_aは$aのリファレンスを持っていますから、間接的に文字列’abc’を指していることになります。
 $ref_aが間接的に保持している値を取り出す場合、デリファレンス(「参照外し」とか、「参照はがし」などとも言う)を行います。

print $$ref_a;

 この式で、文字列’abc’が出力されます。
 次に、変数がリストの場合です。

@list = ('abc', '123', 'ABC');
$ref_list = \@list;

 リファレンスの値自体は、あくまでもスカラーですから、リファレンスを保持する変数は$ref_listであって、@ref_listとかにはなりませんのでご注意を。
 さて、リファレンスの指しているのが配列だった場合、デリファレンスした上にさらにいずれかの要素を指定しなければならないため、矢印演算子というのを使います。

print $ref_list->[1];


 この式で、文字列’123′が出力されます。

 何だか、$$とか、$ref->だとか、見た目だけでも混乱しそうですね。Perlでリファレンスを使うと、いろいろと高度なワザが使えますが、必ずしもこれらはPerlの「必修ワザ」というわけではないので、今は「まあ、こんな感じかな?」ぐらいにとらえておいておけば充分です。

さて、そこで無名配列です。Perlではリストと配列は微妙に異なっていたのを覚えていますか?

@list = ('abc', '123', 'ABC');

 この式の右辺は、リストを生成しています。左辺では、@listという名の配列を宣言し、右辺で生成したリストを代入しています。ここまで、いいですね?

$list_ref = [('abc', '123', 'ABC')];

 さて、無名配列生成子です。リストを生成する式を単に角カッコで囲んだだけです。これは、@listの前にバックスラッシュを付けて配列のリファレンスを取得する代わりに、ダイレクトに配列のリファレンスを作り出すのです。
 リストの各要素で初期化された配列が確かに生成されていますが、ここではその配列は名前を持ちません。だから、無名配列です。

 どうでしょうか? 何とか理解できましたか?
 では、いよいよ次回からまとめに入ります。

ニュース・解説

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

● Carbon ドキュメント & サンプル & SDK ナビゲーション(2005/05/19)

【開発環境】

前号で木下さんも紹介されていましたが、WWDC2006のセッション内容が事前公開されました。それ以外にも、当日まで内容が秘密になっているセッションが沢山あるようですが、そろそろ観念してiPodの開発環境もオープンにしたらどうでしょうか(笑)。それから、Front Rowを外部からコントロールするためのAPIやTool Kitの公開にも期待したいところです。予想としては、PowerMac G5やXserveの後継機種(Mac Pro?)が登場しそうですから、インテル版64bit CPUに対する何かしらの発表があるかもしれません。64Bit版のCarbon &Cocoaはまだまだ無理かな?

http://developer.apple.com/wwdc/sessions/

以前紹介した、インテルCPUの仮想化技術を使いMac OS Xで別OS(LinuxやWindows XPなど)を起動することができる「Parallels Workstation 2.1」ですが、名称を「Parallels Desktop for Mac」と変更し、いよいよ最終β版に突入したようです。今回新しく登場したMacBookのCPU能力は十二分ですし、マルチディスプレイも可能ですから、外付けモニターを用意して、そちらではWindows XPを使うという必殺技も可能です(笑)。WWDCでは、Apple社独自の仮想化技術採用ソフトの発表も期待したいところです。

http://www.parallels.com/en/download/mac

にしても、見栄えとコストの関係からかもしれませんが、MacBookにテカテカ液晶が採用されてしまったのは、頻繁にソースコードを読んだり書いたりするのが仕事の我々にとってはデメリットのような気がします…。さて、どうでしょうか?

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

前回から5月19日の期間中、Apple社のDocumentationサイトには新規ドキュメントが13登録されました。すべてが、「…Developer Note」という形態の技術仕様ドキュメントです。最近発表されたMacBookを加え、15インチと17インチのMacBook Pro、それからMac miniのDeveloper Noteも登録されています。加えて、デベロッパ向け読み物もひとつ登録されました。「MySQL on Mac OS X: An Ideal Development Combination」については、前号の木下さんの記事も参考にしてください。

「MacBook Developer Note」(初版)
「15-inch MacBook Pro Developer Note」(初版)
「17-inch MacBook Pro Developer Note」(初版)
「Mac mini 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」

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

「MySQL on Mac OS X: An Ideal Development Combination」(読み物)

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

前回から5月19日の期間中、新規テクニカルノートはひとつ登録され、新規テクニカルQ&Aの方もひとつだけ登録されました。両方とも、前号の木下さんの記事も参考にしてください。

TN2120「QuickTime for Windows ActiveX/COM Frequently Asked Question」(初版)

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

QA1016「Changing the volume of audio devices」(初版)

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

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

前回から5月19日期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードがひとつも登録されませんでした。

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

【デベロップメント SDK】

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