MOSA Multi-OS Software Artists

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

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

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

2007-09-11

目次

  • 「「Wonderful Server Life」    第54回   田畑 英和
  • 小池邦人のCarbon視点でCocoa探求
  • ターミナルの向こうから      第9回  海上 忍 

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

  〜環境設定編〜

 今回はモバイルアカウントのホームの扱いについて解説します。モバイルアカウントを使用すれば、ディレクトリサーバ上に登録したネットワークユーザのアカウント情報をローカルにコピーすることができることを前回解説しました。
 モバイルアカウントを使用した場合、ユーザのホームはローカル側に作成されます。もともとネットワークユーザに対してネットワークホームを作成していた場合には、ホームがサーバ上とローカル上の双方に存在することになります。

◇ホームの同期
 ホームがサーバとローカルの両方にある場合、それぞれの管理が必要になってきます。Pantherのころは手動でファイルの管理をおこなう必要がありましたが、Tigerになってからサーバとローカルのホームの内容を自動的に同期する機能が追加されました。
 まず、同期の設定方法ですが「モバイル環境」の環境設定で「ルール」の設定をおこないます。同期は次の2種類のタイミングでおこなわれ、それぞれについての同期の設定ができます。

・ログインおよびログアウト
・バックグラウンド(つまりログイン中)

 具体的な設定内容ですが、同期をおこなう対象/同期を行わない対象をそれぞれ設定することができます。例えばキャッシュファイルやゴミ箱の中身まではわざわざ同期する必要はないでしょう。また、大容量の画像やムービーファイルなど、同期の対象に含めるとファイルコピーに時間がかかるようなファイル/フォルダを同期の対象からは外しておけば、余分な同期が実行されなくなります。
 同期をスキップする項目には、デフォルトでいくつかの設定がなされていますが、Mac OS X Serverのバージョンによってデフォルトの設定が異なりますので、まずはデフォルトの設定をよく確認するようにしましょう。

・「モバイル環境」の「ルール」
http://homepage.mac.com/htabata/MXS10.3/img/WGM_MCX/WGM_MCX_Mobile02.png
http://homepage.mac.com/htabata/MXS10.3/img/WGM_MCX/WGM_MCX_Mobile03.png

 バックグラウンドで同期を行う場合はさらに、同期の間隔を設定することができます。「ルール」の「オプション」設定でバックグラウンド同期の設定ができます。デフォルトではログイン中は20分に1回同期が行われるようになっていますが、同期の間隔を短くしたり(最短で5分)長くしたり(最大で60分)できます。また自動ではなく手動で同期を行うように設定を変更することもでできます。

・「ルール」の「オプション」設定
http://homepage.mac.com/htabata/MXS10.3/img/WGM_MCX/WGM_MCX_Mobile04.png

 手動で同期をする方法ですが、モバイルアカウントを使ってクライアントコンピュータにログインしている場合、「システム環境設定」の「アカウント」にモバイルアカウント用の設定ボタンが表示されます。この設定画面から手動で同期を実行することができますし、あるいはメニューバーにモバイルアカウント用のメニューを表示していれば、そこから手動で同期を実行することもできます。モバイルアカウント用のメニューは、「アカウント」のモバイルアカウント用設定画面から表示することが出来ます。

・「システム環境設定」の「アカウント」設定
http://homepage.mac.com/htabata/MXS10.3/img/WGM_MCX/AccountPref.png

◇同期の詳細
 ホームの同期を実行すると、同期の対象に含めていた項目がコピーされるわけですが、このとき同期は双方向で実行されます。たとえばローカル上にファイルを新規に作成しますと、同期のさいにサーバ上にもコピーされます。一方サーバ上に新規にファイルを作成した場合、同期のさいにローカル上にもファイルがコピーされます。
 ファイルの削除や変更をした場合も、どちらかの削除/変更がもう一方に反映されて同期がおこなわれます。
 もし、ローカル上とサーバ上で個別に既存のファイルを変更した場合ですが、この場合はどちらかを自動的に優先しますと、片方の変更内容が失われています。そこで自動的に変更内容の違いが検出され、どちらのファイルを優先するか、あるいは両方を保存するかの選択をユーザに求めるダイアログが自動的に表示されます。

 さて、これで環境設定の解説は終了です。次回からはテーマを変えてNetBootについての解説を始めたいと思います。
 つづく                                

小池邦人のCarbon視点でCocoa探求(2007/09/07)

〜 Nibファイルの憂鬱 〜

Cocoa Frameworkを用いると、ソースコードをあまり記述しなくても色々処理がこなせるようになります。その理由のひとつがNibファイルの仕組みにあります。今回から、新規プロジェクトで作られる2つのNibファイル、MainMenu.nibとMyDocument.nibの内容を詳しく調べてみたいと思います。

具体的に中身を調べる前に、まずCarbonからCocoaへ移行する場合の問題点を復習しておきましょう。最初からアプリケーション開発をObjective-CとCocoaで行う場合は問題無いのですが、C/C++とCarbonや別Frameworkで開発作業をしてきた人にとって「既存アプリケーションをCocoaで作り直す」作業には、多数のハードルが存在します。そのうち、まず最初にぶつかるのは以下の2点です。

・リソースファイル依存からの脱却
・nibファイル自身のコンバート作業

昔々、旧Mac OS 9用アプリケーション(CFM形式)をMac OS X用のCarbonアプリケーション(Mach-O形式)へと作り直す時に、リソースファイルに保存されていたダイアログやコントロールの雛形(Framework依存の雛形データ)をCarbon用Nibファイルへと変更する作業が発生しました。こうした作業には、アプリケーションが大規模になればなるほど膨大な時間が必要となります。現実に、この作業がネックとなり、随分長い間Mach-O形式にできず、結局Universal Binary化も遅れに遅れた大手メーカのアプリケーションもあります。つまり、ソースコードの移行とは別に、もうひとつの大仕事が存在したわけです。

同様な事が、プログラミングモデルをCarbonからCocoaへ移行する時にも発生します。つまり、CarbonとCocoaのNibファイルはまったくフォーマットが異なるため、その変換を手作業で行う必要があるのです。またCarbonでは、文字列、カーソル、アイコン、画像などはリソースに保存されていることが多く、それらをCocoaで使える形式に変える作業も生じます。CFMからMach-Oへの移行では、各種リソースをNibファイルへと変換する機能(限定的)がInterfaceBuilderに用意されていたため、変換作業をそこそこ自動化することができました。しかし、今回はそうした仕組みもありません。

試しに、Carbon用Nibファイルからウィンドウオブジェクトをコピーし、Cocoa用Nibファイルへペーストしても何も起こりません。まあ、ウィンドウを2,3しか使わない小規模なアプリケーションであれば、Nibファイルの変換も大した労力ではありません。しかし、ウィンドウ定義だけでも数百あり、その上に配置されたコントロールは千を越えるようなケースを想像してみてください。現実に筆者も幾つかそうしたプロジェクトを抱えていますが、NibファイルをCocoa用に作り直す作業に対し、利益に見合った時間と人件費を捻出することは容易ではありません。ましてや、これを1人や2人で行わなければいけないとすると「Carbonのままでイイや!」という結論が浮かぶのも至極当然なわけです。

では「もっと賢く」という事で、CarbonとCocoaのNibファイルをXMLファイルに書き出して、それを解析(フォーマット未公開)することで自動変換ツールを作ろうかとも考えましたが、両フォーマットがあまりにも違うため、あっさりあきらめてしまいました。まあ、変換が容易であればApple社自身が提供しているはずですから、これは仕方のない結果でしょう。Apple社がCocoa普及を促進したいのであれば、これぐらいのツールを提供してもバチは当たらないと思うのですが…。ついでに、引き続き行うアクションやアウトレットをターゲットに接続する作業も考慮すると「Cocoaにするのは止めておこうか」という思考に拍車がかかります(笑)。

Interface BuilderやNibファイル関連の問題については、実際に開発を行う過程でも言及していきます。それではさっそくプロジェクトに含まれるMainMenu.nibとMyDocument.nibの中身を見てみます。まず最初にMainMenu.nibをInterface Builderで開くと、Carbon用NibファイルのMenuBarやMainWindowに準ずるMainMenuとWindowの2つのアイコン(オブジェクト)が表示されます。それに加えて、File’s OwnerとFirst ResponderというCarbonにはないアイコンも見受けられます。次にMyDocument.nibの方を開くと、MainMenuがなくFile’s Ownerのアイコンの形状がMainMenu.nibのそれとは違うことが分かります。

Carbon用のNibファイルは、Interface Builderで編集したメニュー、コントロール、ウィンドウなどの表示用オブジェクトをSetMenuBarFromNib()やCreateWindowFromNib()を使い実体化するために用意します。以前はこの役割をリソースとCreateWindowFromResource()が受け持っていました。こうした方法を取らないとすると、ウィンドウはソースコード上にCreateNewWindow()などのAPIを記述して作成することになります。CreateNewWindow()には、ウィンドウの表示枠サイズや表示位置、種類、各種の 属性(アトリビュート)などを設定する必要があり、ウィンドウタイトルを変えるにはSetWindowTitleWithCFString()などの別APIを呼ぶ必要もあります。

こうした表示用オブジェクトをソースコードで記述するのは、イメージ化が難しく面倒な作業です。加えて、使うオブジェクトの量と共に記述すべきソースコードの量も増大していきます。Nibファイルを使えば、Interface Builderで編集した状態がそのまま表示されるわけですから、イメージ化困難等の問題は解消されます。ウィンドウやコントロールに使う文字列も、日本語と英語のものをNibファイルに用意し、それぞれJapanese.lprojとEnglish.lprojフォルダに入れておけば、多国語にローカライズされたアプリケーションを簡単に提供することが可能となります。

しかし、現在の開発作業では、こうした表示用オブジェクトの編集に時間を費やすことも負担となっています。筆者がMac OS X用アプリケーションをCFM形式からMach-O形式へ速攻で切り替えた理由のひとつは、Interface Builderでの編集機能が、リソース編集ツール(ResEditやResorcerer)より強力で使いやすかったからです。これは直ちに開発時間の短縮につながります。CarbonからCocoaへの移行では、表示用オブジェクトの編集自体に大きな違いはありません。しかし、編集可能なコントロールとそのオプションの種類はCocoaの方が多く、アプリケーションの機能を充実させるためのメリットは増えます。

最近のOOP(オブジェクト指向プログラミング)開発環境では、アプリケーションを形成するオブジェクトの役割分担を指して、モデル・ビュー・コントローラー(MVCモデル)と呼びます。詳しいことは本連載中に逐次解説する予定ですが、Carbon用のNibファイルはこのうちビュー(表示用)オブジェクトの雛形だけを保持できます。それがMenuBarやMainWindowであり、Cocoaの方ではMainMenuやWindowとなります。しかし、Cocoa用のNibファイルは、ビューに加えてコントローラーやモデルオブジェクトも部分的に保持可能となっています。こちらが、File’s OwnerとFirst Responderに関する仕組みとなります。ちなみに、この仕組みはCarbon用のNibファイルには存在しません。

次回も引き続き、Cocoaプロジェクトに含まれるMainMenu.nibとMyDocument.nibの中身を調査します。File’s OwnerとFirst Responderアイコンは具体的にどんな機能を受け持っているのでしょうか? さらに詳しく調べてみましょう。
                                つづく

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

〜 MacでLaTeXを使うメリットとは・LaTeX編その3 〜

 前回は、TeXShopなどLaTeX入力作業支援ツールの紹介を中心に話を進めました。今回はLaTeX編の3回目、YaTeXの紹介とLaTeXの便利な機能について解説を行います。

・YeTeXの入力補完機能

 YaTeXの役割は、TeX文書の入力作業を支援することにあります。YaTeXの機能を使うと、環境(\begin{ }〜\end{ })やコマンドを入力する手間が軽減され、そのぶん文章を書くというもっとも重要な作業に集中できます。必要な設定はYaTeXのWebサイト(http://www.yatex.org/)などを参照していただくとして、ここでは具体例を示しつつその便利さを紹介してみましょう。

 まず1つが、入力補完機能。環境は必ず「\begin{環境名}」で始まり「\end
{環境名}」で終わりますが、YaTeXを導入していればすべてを入力する必要はありません。たとえば、\begin{document}と必ず対をなす\end{document}は、以下の要領で入力できます。

- - - - -
\begin{    ←ここまで入力
 ↓ ↓ ↓
\begin{} ←自動的に波括弧が閉じられる
 ↓ ↓ ↓
\begin{document}  ←documentと入力してC-c eとタイプ
 ↓ ↓ ↓
\begin{document}
\end{document}    ←自動的に「\end{document}」が挿入

※:「C-c e」は[control]-[c]に続けて[e]を押すキー操作を意味します。
- - - - -


 この作業は、YaTeXの「end補完」と呼ばれる機能を利用したものですが、「随時補完」を利用すればより効率的です。上の例では、\begin{document}を波括弧閉じ(})を除きすべて手入力しましたが、随時補完を利用すればさらに作業を短縮できます。具体的には、「\begin{」のあとに「d」と入力、C-cSPCとタイプすれば、2分割された画面に「d」から始まる環境名が候補として現れ、マウスでクリックすれば「\begin{」に続けて入力される、という流れです。

 もっと迅速に入力する方法もあります。こちらは環境名ごとに用意されたショートカットキーを覚える必要がありますが、これまで例に挙げているdocument環境でいうと、C-c b dとタイプするだけで、\begin{document}と\end{document}を入力できます。暗記が必要という意味ではヘビーユーザ向けの機能ですが、いつしか手癖のようになるため無理に覚える必要はありません。

・LaTeXにおける図版の扱い

 支援ツールにばかり内容が偏るのもどうかと思いますので、LaTeXに話を戻します。

 第7回では、LaTeXの文書はプリアンブルと本文から構成され……と簡単に説明したと思いますが、肝心なことには触れずじまいでした。「LaTeXでは文章のページ配分を考える必要はない」という原則です。EGWordなどのワープロソフトでは、ページレイアウトで出来上がり(印刷した状態)の画面を見ながら文書を作成していきますが、LaTeXではタイプセットするまでページ数はわかりません。見出しと本文のバランス、段落の字下げやインデントは”よしなに”処理してくれるのですが、2頁目の上から3cmに見出しを配置する、などといったレイアウトの絶対位置指定はかなり面倒です(不可能ではありませんが)。

 ワープロから移行してきたユーザが最初に戸惑うのは、表や画像の表示位置が思うようにならないことでしょう。LaTeXでは、表や画像といった”貼り付ける”性質のコンテンツは、基本的に「フロートオブジェクト」として扱われ、文章とは異なるレイアウトルールが適用されるからです。

 具体例で説明してみましょう。たとえば、A4用紙1枚分に相当する文章と画像1点、特に工夫もせず印刷すればA4用紙2枚分のLaTeX文書があるとします。そのとき、画像を1ページ目下部に配置しようと、数十行の文章のあとに図版を表示するコマンドを記述しても、画像が用紙に収まりきらなければ2頁目へと後回しにされ、そのぶん空いたスペースに本文が詰め込まれるのです。この場合、1頁目は文章だけ、2頁目は図版だけというレイアウトになります。

・得意技は目次/索引と参考文献の作成

 ”流し込み”が基本のため、思い通りの位置に表や画像を配置することが難しいLaTeXですが、目次や索引、参考文献に関しては、他の文書処理系の追随を許さないほどの実力を備えています。

 たとえば、索引に使用したい語句の直後に\indexコマンドを記述しておくと、タイプセットと同時に索引語が集められた一時ファイルが作成されます。一時ファイルをmendexコマンドで処理すると、五十音順に並べ替えできるほか、本文末尾に付け加えるのに適した体裁に整形できます。試しに、以下のリストを第8回で紹介したTeXShopへコピー&ペースト、[タイプセット]→[LaTeX]のあと[タイプセット]→[MakeIndex]、そしてもう一度[タイプセット]→[LaTeX]を実行してください。末尾のページ(といっても2ページしかありませんが)に、50音順に並んだ索引が追加されているはずです。

- - - - -
\documentclass{jarticle}
\usepackage{makeidx}
\makeindex

\begin{document}
隴西\index{ろうさい@隴西}の李徴\index{りちょう@李徴}は博学才穎、天宝の末年、若くして名を虎榜\index{こぼう@虎榜}に連ね、ついで江南尉\index{こうなんい@江南尉}に補せられたが、性、狷介、自ら恃むところ頗る厚く、賤吏に甘んずるを潔しとしなかった。

\printindex
\end{document}
- - - - -


 次回は、いよいよ自動ドキュメント作成ツール「doxygen」の紹介です。LaTeXが導入済であることを前提に話を進めますので、あらかじめ御了承ください。

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