MOSA Multi-OS Software Artists

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

プログラマーに興味がある方なら誰でも入会いただけます。
MOSA Multi-OS Software Artists
===SINCE 1995===

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

MOSADenバックナンバー 2007年11月発行分

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

    2007-11−27

    目次

    • 藤本裕之のプログラミング夜話   #127
    • 高橋真人の「プログラミング指南」  第125回
    • 速報 MOSA Software Meeting 2007

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

     これを書いているのは11月24日、つまりいまごろMSM(MOSA SoftwareMeeting)の真っ最中なんだが、ワタシは家で原稿書きをしているのである(このあと別件……プログラムには全然関係ない原稿だけど、をもう1本書かねばならないのだ)。思い起こせば今年2007年、正月からWebアプリとかファイルメーカーとか翻訳とかで、一件も「Macのプログラミング」と呼べる仕事をしてない。昨年末に作ったシェアウエアの xTrailer というののソースをいじくりまわしたりしてCocoaを使ってる他、Xcodeを起動するのはこの原稿を書くときだけだ。……なんか禁断症状が出そうである。

     とはいえ承前。デフォルトでは NSDocument にしかない「printDocument:」しか送ってこないシステムのツールバーアイテム、NSToolbarPrintItemIdentifier に、NSTextView の「print:」を送らせようというタクラミの「正攻法」の方を紹介する。前回書いたようにこれはNSToolbarPrintItemIdentifier のドキュメントに書かれている方法(ちょっと説明が具体的でないので分かりづらいんだが)。
     NSToolbar のデリゲート・メソッドに「toolbarWillAddItem:」というのがある。読んで字のごとく、「ツールバーにアイテムが足されるぞ」ということを知らせてくれるメソッドだ。要はこいつを使ってNSToolbarPrintItemIdentifier が追加されるところをつかまえ、その中身、具体的にはそのアクションを書き換えちまえばいい、ということである。我らが MyApplication は既に作成したツールバーのデリゲートになってる(つうか、なってないとここまでの説明は全部動かない)ので、あとは以下のようにこのデリゲート・メソッドをインプリメントする。

    - (void) toolbarWillAddItem:(NSNotification*)notification {
         NSToolbarItem*     item = [[notification userInfo] objectForKey:@"item"];
         if([[item itemIdentifier] isEqualToString:NSToolbarPrintItemIdentifier] == YES){
               [item setAction:@selector(print:)];
         }
    }
    


     注意しなければならないのは目当てのツールバーアイテムが notificationの object ではなく(ここには「アイテムを足される側のツールバー」が入ってくる)、userInfo の方に入ってくること。リストでは1行で書いちゃっているが、この userInfo は NSDictionary であり、@”item” というキーを使って追加されるアイテムにアクセスする。アイテムをつかまえたら、そいつのitemIdentifier が間違いなく NSToolbarPrintItemIdentifier であることを確かめて(当然だが他のアイテム、たとば最初に作った「Cat」が足されるときにもこのメッセージは飛んでくる)から、setAction: でそのアクションを書き換える。
     ツールバーに足された NSToolbarPrintItemIdentifier のアイコンがアクティブにならなかったのはそのターゲットである firstResponder にprintDocument: というメソッドがなかったからなので、これでめでたくアイコンはアクティブになり印刷ができるようになるわけだ。

     この仕掛けはなにもこのためだけにあるのではなく、状況に応じてアイコンの形状を変えるなどいろいろなことに使える。たとえば何か他のところの設定で「Cat」のアイコを別のネコの写真に替えるとかね(何の意味があるのかわからないが)。
     ところで上のデリゲート・メソッドをインプリメントする際、MyApplication.h の方にこのメソッドの宣言をする必要はない(これは前にインプリメントした他のデリゲート・メソッドも同じ)。が、オレとしてはインプリメントしてるデリゲート・メソッドとしてないヤツをヘッダーファイルで確認できるように、書いたものはちゃんとヘッダーで宣言しておくことをお勧めしたい。でっかいアプリになるとソースを検索するよりヘッダーだけを検索する方がなんぼか速いし、他の人が見る可能性があるソースではそういう整合性がとれているほうが親切だから。

     ほんぢゃ次回は、ウインドウをリサイズして小さくしたときに見えなくなってしまう「Align Text」のメニューを、それでも選べるようにする、というところを説明したい。それが終わったら、次のネタを仕込むためにオレもLeopard の新しい Xcode をいじくりまわさなくちゃ。……時間があるかなぁ。
                                (2007_11_24)

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

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

    〜XcodeによるPowerPlant X入門(16)〜

     こんにちは、高橋真人です。
     さて、PPxによるCarbonイベントのハンドリングでメニューの処理についてを一通り解説しましたので、ここからは、PPxのもう一つの主要機能であるViewについて解説します。
     Carbonプログラマならおなじみのように、「モダンな」CarbonにおいてはHIViewというものを使います。HIViewは、旧来のMac OSにおけるControlを発展させた仕組みです。
     HIViewを指すHIViewRefは、Controlを指すControlRefと同一視することができるようになっているため、ControlとHIViewを同じものとしてコードを書くことができるようになっています。
     しかしながら、HIViewの描画モデルはCocoaのview(NSView)と共通になっており、Quartzを使って描画を行うので座標系などQuickDrawと違うところには注意が必要です。
     さて、HIViewの特徴として、オブジェクト指向ライクな使い方ができるというのがあります。これはつまり既存のHIViewを「継承」して、新たなView(つまり、Custom View)を作り出すことができるということです。
     しかし、Custom Viewを作り出すために必要となるコードは決して単純ではありません。アップルの解説文書によれば、以下の手順に従う必要があるとされています。

    1. HIObjectのサブクラスを登録する
    2. Viewに対するイベントのハンドラを作成する
    3. HIObjectイベントのハンドラを作成する
    4. Viewのインスタンスを作成する

     1と3にあるHIObjectというのがポイントです。HIViewはオブジェクト指向的なデザインで設計されている仕組みですが、あくまでAPIはC向けであるため、C++のオブジェクト指向機能を使えません。そこで、この辺の部分を吸収するためにこのHIObjectというのが必要となっているわけです。しかし残念ながら少しバラバラ感というかまとまりを欠く印象があることは否めません。
     そこでPPxでは、これらをクラスでくるむことでまとまりを持たせています。

     さて、それでは実際にPPxの方を見ていくことにしましょう。
     PPxでHIViewを表現するための大元になるのは、PPx::Viewというクラスです。
     ところで、ちょっと横道にそれますが、このPPx::Viewという表記はもう大丈夫ですか? これは、PPxという名前空間(namespace)に存在するViewという名のクラスという意味です。自信のない方は過去の記事を確認してみてください。

     で、このPPx::Viewというクラスですが、このクラス自体のインスタンスを生成するようには設計されていません。あくまでこのクラスを継承して使うのが、このクラスの正しい使い方ということです。
     クラス自体のインスタンスを生成しないというと、「それは抽象クラスなのか」と思われる方もおいでと思いますので、少し説明します。
     PPx::Viewのクラス定義部(PPxView.h)を見ると、どこにも純粋仮想関数は見当たりません。事実、PPx::Viewは抽象クラスではありません。では、PPxの「PPx::Viewからインスタンスは作らない」という設計方針はどのように達成されるのでしょうか?

     C++では、抽象クラスとして定義する以外に、コンストラクタをpublicにしないことで、インスタンス化を防ぐことができるのです。
     PPx::Viewクラスの定義を見てみますと、View()という関数がprotectedになっているのが分かると思います。これにより、PPx::Viewはそれを継承したクラスからしかコンストラクタを呼べない、つまり生成ができないということになります。
     ちなみに、クラス定義の中に、View(const View&)という関数がprivateとして定義されていることに気づかれた方もいるかもしれません。これは、コンストラクタではありますが、コピーコンストラクタと呼ばれる特別なコンストラクタで、引数として同じクラスの他のインスタンスをとる形のものです。クラスの値がコピーされる時に暗黙的に呼び出されるコンストラクタであることから、ケースとなることからこの名前があります。
     あと、そのすぐ下に定義されている

    View&  operator = ( const View& );

    というのも、似たような役割を持つもので、これは代入演算子をPPx::Viewクラスに特化した形で個別に定義(演算子のオーバーロード)してあるものです。
     これらのコピー機能を持った関数がprivateにされることで、PPx::Viewはコピーができないものになります。

     話を本題に戻します。
     PPx::Viewはサブクラス化される形で使われるものになっていますので、PPxがあらかじめ定義している様々なクラスでは、ほとんどがこのクラスを継承した形になっています。
     では、皆さんが独自にViewを定義する場合にもPPx::Viewをサブクラス化して使えばいいのでしょうか?
     もちろん、それも可能です。しかし、その場合、前に述べたHIViewの構築関係の関数、つまりHIObjectイベントのハンドラなども自分で面倒を見なければならなくなります。それは面倒ですよね。
     そこで、PPxでは、PPx::BaseViewというクラスが用意されています。このクラスが、HIViewの複雑な部分をまとめて面倒見てくれますので、私たちはこのクラスを継承して新たなViewのクラスを起こし、必要な部分だけを書き足して行けばよい形になっているのです。

     次回は、BaseViewの実際の使い方の解説に入って行きます。

    速報 MOSA Software Meeting 2007

     報告担当:高橋政明

     11月23・24日に開催されましたMOSA Software Meeting 2007は無事終了しました。写真を含めた報告ページはMOSAのWebサイトに掲載予定ですが、速報をお届けします。

     今年はこれまでと会場を変更し東京都内の大橋会館(東京都目黒区/東急田園都市線「池尻大橋」より徒歩5分)で開催しました。会場を都内に変更した事に伴いスケジュールも変更しこれまで初日は午後スタートでしたが今年は午前スタートになりました。交通の便が良いため一日だけの参加も便利になりました。

     今回は一日だけ参加の方も合わせて100名以上のお申し込みをいただきました。また学生さんの参加も7名ありました(うちMozilla Japan招待学生2名)。どちらもMSM史上はじめてです。参加者の最年少はなんと高校生です。

     配布された資料をご紹介すると
    ・配布資料バインダー
      セッション別のレジュメ
      Mozilla Firefoxシール、Intelロゴ付きネームタグ、インテゴロゴボールペン
      CrossOver Mac(MacFan2007年8月号別刷)
      IDforWebLiFE*(非売品の冊子)
      セッション関連および法人会員各社カタログ資料
    ・電子マネーEdyとFelica技術知っておきたい31の基本(非売品の冊子)以上は参加者全員に配布されました。

     セッションは予定通り滞りなく開催されました。
    http://www.mosa.gr.jp/?p=1298&page=2
     すっかり恒例になりました大谷さんのキーノートセッションは「ソフトウェア・アーティスト」をキーワードにテンポ良く展開され、我々受講者に発見と示唆を与えてくれるものでした。
     上記セッションページには未掲載ですが、二日目のお昼休みに三社(VMware
    Fusion・CrossOver Mac・Parallels Desktop for Mac)競演の仮想環境デモが実施されました。実際の動きを見ながら活発な質疑応答が繰り広げられました。

     全員配布のグッズだけではなく懇親パーティのお楽しみ抽選会にもたくさんの景品をいただきました。ご提供いただいた皆様にはこの場を借りて御礼申し上げます。ありがとうございました。

     講師の皆様ご協力いただきありがとうございました。参加された皆さんお疲れさまでした。おかげ様で会場を変更し例年とは少々異なったMSMでしたが成功のうちに終了しました事をお礼かたがたご報告致します。

    ◇「りんご味Ruby」は都合によりお休みします。◇

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

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

    2007-11-20

    目次

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

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

      〜Leopard Server Setup編〜

     前回はLeopard Serverのインストールについて解説しました。今回はセットアップについて取り上げたいと思います。

    ◇サーバ構成
     Leopard Serverではセットアップのやり方がTiger Serverと少し変わりました。一番の違いは3種類のサーバ構成を選択してセットアップをおこなうということです。具体的には次の3種類から選択します。

    「サーバ構成」
    ・標準
    ・ワークグループ
    ・詳細

     もちろんそれぞれに違いがあるのですが、サーバ構成によってセットアップ後のサーバ管理のやり方が違ってきますので、まずはその話をしておきましょう。ちょっと話が横道にそれてしまいますが、あらかじめ状況を把握しておかないと、最悪の場合再インストールということにもなりかねませんのでしばしおつきあいください。

    ◇サーバ管理ツール
     サーバ構成によって具体的にどのような違いがでるかというと、まず重要なのがサーバの管理ツールです。これまでMac OS X Serverは主に「サーバ管理」と「ワークグループマネージャ」の2つのツールを利用してサーバ管理をおこなってきました。これまで、それぞれの管理ツールの主な役割は次のとおりでした。

    「Tiger Serverでのサーバ管理ツール」
    サーバ管理:サービスの設定/監視
    ワークグループマネージャ:共有ポイントの設定、アカウント管理、環境設定

     役割が変わった部分もありますが、Leopard Serverでもこれらのツールは用意されています。さらにLeopard Serverでは新しい管理ツール「サーバ環境設定」が追加されています。「サーバ環境設定」は、「サーバ管理」と「ワークグループマネージャ」の役割を統合したような管理ツールです。このツールを使えばアカウントの管理およびサービスの管理/監視をおこなうことができます。
     なぜ同じ役割をもった管理ツールがあるかというと、「サーバ環境設定」では設定項目が必要最低限のものに絞り込まれており、非常にお手軽にサーバ管理ができるようになっているのです。ちょうど「システム環境設定」でシステムの設定をするのと同程度の感覚でサーバ管理ができます。
     細かな管理をする場合は「サーバ管理」や「ワークグループマネージャ」を使う必要がありますが、小規模なシステムでサーバの使用目的も限定されているのであれば、「サーバ環境設定」を使って必要最低限の操作でサーバ管理ができます。

     ここまで説明しただけでは、なんだ新しいツールが増えただけかということになりますが、ここからが少し厄介な話になります。この「システム環境設定」はサーバ構成を「標準」または「ワークグループ」にしたときにしか使用することが出来ません。また、新規インストールではなく、古いバージョンのMacOS X ServerからLeopard Serverにアップデートした場合には自動的に「詳細」構成になりますので、この場合は「システム環境設定」は利用できません。
     「標準」「ワークグループ」構成の場合でも、「サーバ管理」と「ワークグループマネージャ」は使えてしまいます。ただし、「サーバ管理」を起動すると問題が発生する可能性があるとの警告が表示されてしまいます。「サーバ環境設定」と「サーバ管理」を併用すると問題が発生する可能性があるということです。まとめますと、サーバ構成による管理ツールの違いは次のようになります。

    「標準」「ワークグループ」>サーバ環境設定
    「詳細」>サーバ管理、ワークグループマネージャ

     「標準」および「ワークグループ」はいつでも「詳細」構成に変換できますので、必要になった時点であとから「詳細」構成に移行することはできます。ただし逆の変換はできませんので注意が必要になります。

    ◇「標準」と「ワークグループ」
     では「標準」と「ワークグループ」の違いはなんなのかですが、「標準」はサーバを1台だけ設置するケースを想定しています。つまり1台のサービスでいろんなサービスを動かしてしまおうということです。実際「標準」構成では主要なサービスが自動的に設定されます。
     「ワークグループ」ですが、こちらはすでにディレクトリサーバが存在しているような環境で、追加のサーバ(たとえばファイルサーバ)を設置するような場合を想定しています。ユーザ管理は引き続き既存のディレクトリサーバでおこない、「ワークグループ」では別のサービスを提供するといったケースを想定しています。

     一方「詳細」は特に使用目的を限定しているわけではなく、各種サービスを自由にかつ細かく設定していくような場合に適しています。

     というわけで今回はサーバ構成の話だけで終わってしまいましたが、この部分はLeopard Serverで新しく追加された部分ですので、あらかじめしっかりと理解しておくことが重要です。もし時間があるようでしたら、それぞれのサーバ構成で実際にセットアップをおこない、違いを確認してみるのもよいでしょう。それでは次回は「標準」構成を選択した場合の実際のセットアップ方法について解説する予定です。
                                 次回へつづく

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

    〜 Leopardの開発環境 〜

    嬉しい事に、予定通りにLeopard(Mac OS X 10.5)が販売開始となりました。既にMac OS X 10.5.1アップデータも登場し、ユーザの間ではTigerからの切り替えが迅速に進んでいるようです。今回からは、実施にObjective-Cのソースコードを記述しようと考えていたのですが、Mac OS X 10.5 の「XcodeDeveloper Tools」の変更点があまりにも多いので、開発方針を決めるため、まずはそれらをまとめてみる事にしました。

    最新の開発環境「Xcode Developer Tools」をインストールすると、お馴染みのXcodeとInterface Builderに加え、WWDC2007ではXRayと呼ばれていたパフォーマンス解析ツールが「Instruments」と言う名称で保存されます。また、XcodeとInterface Builderもそれぞれ3.0へとバージョンアップがなされています。Mac OS X 10.5の開発環境が以前からどう変更されたかについては、Developerフォルダに保存されている「About Xcode Tools.pdf」に詳細が記されています。

    上記3つのアプリケーションがソフト開発での三本柱となるわけですが、とりあえず新顔のInstrumentsは横に置いておいて(必要時には解説する予定)、Interface Builder 3.0が、以前とはまったく違うアプリケーションに「変身」していることにビックリします。あまりにも違うので、今まで出版されてきたCocoa入門書のInterface Builderの操作箇所は、全面書き換えが必要になるのではないでしょうか?

    以下に、Apple社のデベロッパーサイトに登録されている開発ツールに関係する最新ドキュメントを紹介しておきます(Mac OS X 10.5登場で更新)。Xcode 3.0のユーザーズガイドには日本語訳が用意されています。そして、やっとこさ(笑)Interface Builderのユーザーズガイドが登場しました。Mac OS X10.5から利用できるようになったRubyCocoaに興味がある方は、「Ruby andPython Programming Topics for Mac OS X」を参照してください。

    「Xcode User Guide」(日本語訳あり)

    http://developer.apple.com/documentation/DeveloperTools/Conceptual/XcodeUserGuide/Contents/Resources/en.lproj/index.html

    http://developer.apple.com/documentation/DeveloperTools/Conceptual/XcodeUserGuide/Contents/Resources/ja.lproj/index.html

    「Interface Builder User Guide」

    http://developer.apple.com/documentation/DeveloperTools/Conceptual/IB_UserGuide/index.html

    「Introduction to Instruments User Guide」

    http://developer.apple.com/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html

    「Ruby and Python Programming Topics for Mac OS X」

    http://developer.apple.com/documentation/Cocoa/Conceptual/RubyPythonCocoa/index.html

    「Debugging with GDB」
    http://developer.apple.com/documentation/DeveloperTools/gdb/gdb/gdb_toc.html

    それ以外にも、今回の連載に関係がありそうなCocoaやCarbonの変更箇所をピックアップしてみましょう。

    ・Objective-C 2.0が採用された(Cocoa)
    ・Cocoaフレームワークが64Bitアプリケーション対応となった(Cocoa)
    ・画像操作用としてImageKitが新しく搭載された(Cocoa)
    ・QTKitが大幅に機能強化された(Cocoa)
    ・アニメーション操作に用いるCore Animationが搭載された(Cocoa)
    ・テキスト描画用APIとしてCore Textが搭載された(Carbon)
    ・Finderなどで使われるQuick Look用Plug-inが作成可能になった(Carbon)

    最初の「Objective-C 2.0」ですが、待望のガベージコレクションをはじめ、インスタンス変数への簡易アクセスやFast Enumerationの搭載など、幾つか新機構が採用されています。それに伴い、Core Animation Frameworkでは2.0準拠のインスタンス変数へのアクセス方法が全面的に取り入れられています。以下は、Mac OS X 10.5用に改訂されたObjective-C 2.0や、それに関係するCocoaプログラミングについてのドキュメント一覧です。すべてPDFファイルも用意されています。皆さん、予習しておいてください(笑)

    「The Objective-C 2.0 Programming Language」

    http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/index.html

    「Cocoa Application Tutorial」

    http://developer.apple.com/documentation/Cocoa/Conceptual/ObjCTutorial/index.html

    「Garbage Collection Programming Guide」

    http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/index.html

    「Memory Management Programming Guide for Cocoa」

    http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/index.html

    「Exception Programming Topics for Cocoa」

    http://developer.apple.com/documentation/Cocoa/Conceptual/Exceptions/index.html

    「Object-Oriented Programming with Objective-C」

    http://developer.apple.com/documentation/Cocoa/Conceptual/OOP_ObjC/index.html

    「Model Object Implementation Guide」

    http://developer.apple.com/documentation/Cocoa/Conceptual/ModelObjects/index.html

    「Cocoa Scripting Guide」

    http://developer.apple.com/documentation/Cocoa/Conceptual/ScriptableCocoaApplications/index.html

    本連載の開発でもObjective-C 2.0を全面採用することにします。ついでに64Bit化作業も行いましょう(こちらは簡単)。つまり、開発したアプリケーションはMac OS X 10.5以降でないと起動できなくなりますが、まあ完成品を一般ユーザに販売するわけではないので良しとしましょう(笑)。そうであれば、Mac OS X10.5以降でしか使えない、ImageKitやCore Animationなどの最新機能も心置きなく使えます。今のところ、Core Animationについては、それを活用できる状況に遭遇するかどうかは分かりませんが(無理矢理作るのもアリ)、ImageKitに関してはすぐさま活用できそうです。

    ImageKitは、Quartz 2D、Core Image、Core Animation、OpenGL、ImageI/Oな
    どの能力を十二分に活用したハイエンドCocoaクラスです。これを活用することで、頻繁に画像を取り扱わなくてはいけない開発者の手間を大きく省いてくれます。以下に、ImageKitの機能一覧を示しておきましょう。

    ・画像イメージの表示と編集(IKImageView)
    ・画像イメージのカラーやガンマ、エフェクト編集用パネル表示(IKImageEditPanel)
    ・複数画像を表示するためのブラウザ表示(IKImageBrowserView)
    ・画像のスライドショー表示の実行(IKSlideshow)
    ・iSightやデジカメからの画像(サムネイル)の取り込み(IKPictureTaker)
    ・画像保存用のフォーマットとオプションの選択(IKSaveOptions)
    ・Core Image用「Filter Browser」と「Filter User Interface View」をサポート

    次回からは、新しいXcodeとInterface Builderを起動して、テンプレートから作成した「Cocoa Application」や「Cocoa Document-based Application」を拡張していく開発作業に入りたいと思います。
    つづく                                

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

    〜 ドキュメントに使う図のつくりかた その1 〜

     前回は作図ツール「Graphviz」を紹介しましたが、その応用範囲の広さを考えると、Doxygen経由で利用するだけでは惜しいというものです。今回は、再びGraphvizを中心にドキュメントで使う図のつくりかたについて解説します。

    ・文章だけでなく図も重要
     ドキュメントというものは、自分のために書くものではありません。確かに備忘録という存在はありますが、それはあくまで忘れないための書き置きであって、他人にとっての読みやすさは二の次です。極端な話、日本語としての文法が破綻していても支障はないでしょう。しかし他人にある事柄を理解してもらおう、自分の考え方を伝ようとすると、事情は変わってきます。
     そんなとき役に立つのが「図」です。百聞は一見にしかずという言葉がありますが、冗長な文章より簡潔な図のほうが効果的なことは多々あります。本文と直接関係のない挿絵の類はともかく、読者の理解を助ける図の力はぜひ活用すべきでしょう。
     図にはいくつかの種類があり、比較的かんたんに作成できるのが「スクリーンショット」。これはOS標準の機能を利用するもよし、SnapzProのようなツールを使うもよし。敢えて説明するまでもないでしょう。もう1つが「絵解き」。いわゆるイラストで、抽象的な概念を伝える用途に大活躍しますが、作り手に絵心を要求することが難点です。
     そしてもう1つ、開発関連のドキュメントに必須と思われるのが「ダイアグラム」。出来合いの部品をペタペタと並べ線でつなぎ、要所要所に文字を入力する程度で完成するので、フローチャートのような図をつくる用途に最適です。絵が下手でも描ける、ここがもっとも重要かもしれません。MacならばOmniGraffle、WindowsならばVisioが代表的なダイアグラム作成ツールといえるでしょうか。ところで、OmniGraffleは試用が可能ですから、未体験の方は一度お試しを。元NeXTな方、昔作った「Diagram!」のファイルも(互換性は完璧ではありませんが)開けますよ。

    ・だからこそGraphvizを使う
     すでにダイアグラム作成ツールを活用してらっしゃる方には、釈迦に説法のような話だったと思いますが、3つの問題点にお気付きですか? すなわち、機種依存があること、メンテナンス(バージョンアップなど)に手間がかかること、ファイルフォーマットがオープンでないことです。いずれも決して他人事ではなく、実際に筆者もDiagram!で作成した多数のファイルを死蔵しています(まだNeXTSTEP 3.3Jが現役稼働中なので深刻さはありませんが)。HTMLやTeX、あるいはプレインテキストのように、普遍的かつオープンなフォーマットのほうが望ましいのではないでしょうか。
     そこで改めて注目したいのが「Graphviz」。前回は、ごくかんたんなサンプルを紹介しましたが、以下のURLにあるサンプルを見ればお分かりいただけるように、OmniGraffleやVisioで作成するようなダイアグラムも作成可能です。前回はサンプルを提示しただけで終わりましたが、今回は具体的な解説を行いたいと思います。

    http://www.graphviz.org/Gallery.php

    ・ダイアグラムの基本形
     Graphviz(DOT言語)では、ダイアグラムを構成するトポロジーを記述します。基本的な流れとしては、ダイアグラムの形状を決定するキーワード(有向=digraph、無向=graph)を宣言したあと、{ … }の中にノードのつながりを列挙する、という形になります。以下のサンプルは、charAからcharBとcharCが派生し、うちcharBからcharDが派生する、という有向ダイアグラムです。

    - - - - -
    digraph {
       charA -> charB
       charA -> charC
       charB -> charD
    }
    - - - - -
    


    ・ノードの形状を決める

     この有向ダイアグラムに装飾を加えてみましょう。以下のサンプルは、デフォルトでは楕円(ellipse)に設定されているノードの形状を、2行目の記述によりcharBだけ五角形に変更しています。この文は、以降に記述されたノードに対して効果を生じるため、3行目以前に記述しておく必要があります。なお、ノードの形状についてはこちら
    http://www.graphviz.org/doc/info/shapes.html
    のURLを参照してください。

    - - - - -
    1: digraph {
    2:  charB [ shape = pentagon ]
    3:  charA -> charB
    4:  charA -> charC
    5:  charB -> charD
    6: }
    - - - - -
    


     デフォルトのノードの形状を変更することもできます。「node [ shape =**]」と記述すると、以降記述されるノードすべてに適用されるため、さきほど指定した五角形のcharB以前に挿入します。以下のリストでは、charBを除くすべてのノードの形状をたまご型に設定しています。

    - - - - -
    1: digraph {
    2:  node [ shape = egg ]
    3:  charB [ shape = pentagon ]
    4:  charA -> charB
    5:  charA -> charC
    6:  charB -> charD
    7: }
    - - - - -
    


     次回も引き続き、Graphvizを利用した作図の基本ルールを紹介する予定です。

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

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

    2007-11-13

    目次

    • りんご味Ruby          第14回  藤本 尚邦
    • 藤本裕之のプログラミング夜話   #126
    • 高橋真人の「プログラミング指南」  第124回
    • 書籍紹介     レボリューション・イン・ザ・バレー

    りんご味Ruby   第14回  藤本 尚邦

    LeopardについてくるXcode 3.0とInterface Builder 3.0は、Objective-Cに加えてRubyおよびPythonによるCocoaアプリケーションの開発がサポートされています。そこで今回は、LeopardでのRubyによるCocoaアプリケーション(つまりRubyCocoaアプリケーション)の開発手順を紹介します。

    おおよそ以下のような手順で作っていきます。

    (1) Xcodeでプロジェクトを作成する (名前はMyApp)
    (2) Xcodeで空のコントローラ(MyController.rb)を作る
    (3) Xcodeでコントローラのアウトレットとアクションを書く
    (4) Interface BuilderでMainMenu.nibにビューとコントローラを配置する
    (5) Interface Builderでビューとコントローラを接続する
    (6) 完成

    実際には、Xcode 3.0とInterface Builder 3.0を使っての開発手順そのものは、プログラミング言語が異なるという点を除いて、Objective-CやPythonによる場合とほとんど違いがありません。上記の手順で(4)以降、すなわちInterface Builderでの作業は、RubyでもObjective-Cでも(確認していませんがおそらくPythonでも)まったく同じになります。

    ここでは、(1)から(3)までについて、Rubyでのポイントを中心に見ていくことにします。

    ■ (1) Xcodeでプロジェクトを作成する (名前はMyApp)

    Xcodeを起動し新規プロジェクトコマンドを実行(※1)します。新規プロジェクトの選択ダイアログの中に、Cocoa-Rubyで始まる名前のプロジェクト(テンプレート)がいくつか見つかるはずです。ここでは、Cocoa-Ruby Applicationを選んで新規プロジェクトを作成してください。名前はMyAppとします。

    【編集部注】
     ※1:Xcodeのファイルメニューから「新規プロジェクト…」を選びます。

    ■ (2) Xcodeで空のコントローラ(MyController.rb)を作る

    MyAppのプロジェクトのウィンドウの「グループとファイル」の中のMyApp/Classesのコンテキストメニューから追加/新規ファイルコマンドを実行(※2)します。

     ※2:「グループとファイル」の中の「MyApp」の下の「Classes」をコント
        ロール+クリック(右クリック)して表示されるコンテキストメ
        ニューの一番上の「追加」サブメニューから「新規ファイル…」
        を選びます。

    RubyのところのRuby NSObject subclassを選んで、MyController.rbという名前のファイルを作成します。以下のようなRubyプログラムが作られます(コメント部分は省略)。

    require 'osx/cocoa'
    class MyController < OSX::NSObject
    end
    

    ■ (3) Xcodeでコントローラのアウトレットとアクションを書く

    MyController.rbに、以下のようにアウトレットとアクションを記述します。名前はそれぞれtextFieldとspeechとします。speechアクションは、textFieldに入力された文字列をNSSpeechSynthesizerを使ってスピーチするという実装にしてみました。

    ------------------------------------------- MyController.rb --
    require 'osx/cocoa'
    
    class MyController < OSX::NSObject
     ib_outlet :textField
    
     ib_action :speech do |sender|
       voice = OSX::NSSpeechSynthesizer.defaultVoice
       synth = OSX::NSSpeechSynthesizer.alloc.initWithVoice(voice)
       synth.startSpeakingString(@textField.stringValue)
     end
    end
    -------------------------------------------
    


    上記のプログラムでは、Rubyのブロック構文を使って、speechのアクション宣言と定義をいっぺんに書いていますが、以下のように宣言と定義を別々に書くこともできます。

     

    ib_action :speech    # 宣言のみ
    
     def speech(sender)
       voice = OSX::NSSpeechSynthesizer.defaultVoice
       synth = OSX::NSSpeechSynthesizer.alloc.initWithVoice(voice)
       synth.startSpeakingString(@textField.stringValue)
     end
    


    ちなみに、MyController.rbと同じものをObjective-Cで書くと以下のようになります。

    ------------------------------------------- MyController.m --
    #import 
    
    @interface MyController : NSObject {
     IBOutlet NSTextField* textField;
    }
    - (IBAction) speech:(id)sender;
    @end
    
    @implementation MyController
    - (IBAction) speech:(id)sender {
     id voice = [NSSpeechSynthesizer defaultVoice];
     NSSpeechSynthesizer synth =
                          [[NSSpeechSynthesizer alloc] initWithVoice: voice];
     [synth startSpeakingString: [textField stringValue]];
    }
    @end
    -------------------------------------------
    
    


    のこりの手順4,5は、Interface Builderでコントロールビューなどを配置したりアウトレットやアクションを接続する作業になります。今回細かい説明は省略しますが、Interface Builder 3.0は以前のバージョンと比べて大幅に改良されています。ポイントは、Objective-Cだけでなく、RubyやPythonで書いたコントローラのプログラムからアウトレットやアクションを自動的に検出してくれるようになったところです。

    次回も、LeopardでのRubyCocoaについて見ていくことにしましょう。

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

     新OS、Leopardが発売されXcodeも新しいバージョンになったわけだが、途中で開発環境を変えて話がアッチャコッチャになってもいけないので、この連載はこのツールバーの話題が終わるまでTiger環境での話として書くことにする。
    ホントのことを言うといろいろ忙しくて(今年はMOSAのミーティングにも行けません。みなさん楽しんでください)Leopardの開発環境をあれこれ試してる暇がないのだけど。

     とにかく承前、前回のコーディングによりいきなりウインドウが賑やかになったテストプログラムだが、こうなってみると今まで全然気がつかなかったことに気付く。たとえばなんで「Costomize」と「Print」のアイコンはアクティブになってないのかとか、ウインドウをリサイズしてその幅を狭めると一番右に配置した「Align Text」のメニューが隠れちゃって選択できないぢゃないか、とか。で、今回からそういう細かいところを逐一見ていきたい。

     まず最初は、なんで「Costomize」のアイコンがアクティブぢゃないのか。これは簡単である。ツールバーがデフォルトではカスタマイズを許さないことになっているからですね。これを変更するには MyApplication のfinishLaunching で、作成したツールバーに「カスタマイズしていいかんね」と教えてやればいい。以下のコードを setDelegate: の次あたりに書き加える。

     

        [aToolBar setAllowsUserCustomization:YES];
    


     これでOK。実行すると「Customize」アイコンがアクティブになり、クリックするとツーツバーのカスタマイズ・シートが出現する。なお、ここで変更したツールバーの設定を保存して次回起動時に再現するには、ここに以下のコードも追加すればいい。簡単でしょ?
      

       [aToolBar setAutosavesConfiguration:YES];
    


     これだけで初期設定ファイルがないときは
    toolbarDefaultItemIdentifiers: が呼ばれ、あればそこから前回カスタマイズされた通りのツールバーが出現する。カスタマイズ・シートの上の方(一個一個選択できるところ)に表示されるのが、toolbarAllowedItemIdentifiers:で返すアイテム、すなわち読んで字の通り「ツールバーで使ってもいいと許可されているやつ」というわけである。

     お次は、なんで「Print」のアイコンがアクティブぢゃないのか。このツールバーアイテムについてドキュメントには「firstResponder にprintDocument: を送る」と書いてある。われわれのテストプログラムのfirstResponder は「report」と名付けた NSTextView なんだが、このクラスには printDocument: というメソッドがないんですね(つうかこれはNSDocument にしかない)。ない袖は振れないというか、ないメッセージには応えられないのでこのアイコンはインアクティブなのである。

     解決先は2つ。1つはズルみたいだけど簡単、もう1つは正攻法だけどちと面倒くさい。まずはズルみたいな方から。……NSTextView に printDocument:はないが print: はある。そんで、ファイルメニューから「Print...」が選ばれるとそいつが送られてくる。ということは、NSTextView にカテゴリとしてprintDocument: を追加し、こいつから print: に呼び出しをリダイレクトしちゃえばいいのである。まずは MyApplication.h のどたまに以下の宣言を追加する。

    @interface NSTextView (MOSA)
    - (void) printDocument:(id)sender;
    @end
    


     次に MyApplication.m にこの中身……ってもたいしたもんぢゃないが、を書く。

    @implementation NSTextView (MOSA)
    - (void) printDocument:(id)sender {
         [self print:sender];
    }
    @end
    


     これでOK、「Cosutomize」アイコンはアクティブになり、クリックするとファイルメニューから「Print...」を選ばれたときと同じ動作をする。でもまぁせっかくCocoaが用意している正攻法(NSToolbarPrintItemIdentifierのドキュメントでわざわざ説明してる)があるので、次回はそっちを解説しよう。
                                (2007_11_09)

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

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

    〜XcodeによるPowerPlant X入門(15)〜

     こんにちは、高橋真人です。
     さて、前回と前々回にわたって紹介したプログラムは試してみましたでしょうか? 通常は「あり得ない」プログラムですが、その分興味深かったのではないかと思います。(そこまで言うほどのものでもない?・笑) ところで、前回の最後に少し触れた「テンプレートを使ったクラス」の件ですが、まだ納得の行っていない方もおいでかもしれませんので、補足をします。
     今回の例で出てきたSpecificMenuCommandDisableDoerというクラスですが、このクラスが持つ唯一の関数であるDoEvent()は、動作定義自体がヘッダファイルで行われています。
     これはまずくはないのでしょうか?
     もちろんまずくありません。もしまずければ、先のコードはコンパイルできていないでしょう。
     そもそも、C++においてはクラスのメンバ関数の処理内容そのものをヘッダに置くことも珍しくありません。「インライン定義」と言って、関数呼出しのオーバーヘッドを回避するために、見た目は関数でも実行時には呼び出し側に展開された形で動作するものです。*注
     しかしながら、今回のようなテンプレートを使った例の場合は少し事情が違います。SpecificMenuCommandDisableDoerというクラスのメンバ関数であるDoEvent()は、先頭にtemplate と付いていることからも分かるように、TCommandIDという「テンプレート引数」を取る形になっています。
     テンプレートはコンパイル時に引数が展開される仕組みですので、具体的な値が引数として指定されない限り定義としては不完全であって、コンパイルもできません。
     このクラスを実際に使用するコードの側でこのテンプレート引数に具体的な値が与えられて初めて「完全な定義」となってコンパイルされるのです。

     今回のプログラムの例ですと、MyWindow.hの冒頭に

    #include "MenuCommandDisableDoer.h"
    


    というインクルード文があり、そのファイルのクラス定義の中で、MyWindowの継承元としてSpecificMenuCommandDisableDoerとなっています。ここで、kHICommandNewというテンプレート引数がこのクラスに与えられ、これが間接的にDoEvent()の方にも引き渡されることになります。
     この、関数にテンプレート引数が渡されて実体化される部分は、C++のコンパイラによって半自動的に行われるため、使う側はこの実体化の部分をいちいち意識する必要がありません。
     このように、ソースファイルが不要(というか存在しない)で、単にヘッダをincludeするだけで使えるクラスは「使うのがラク」です。
     C言語におけるANSI Cライブラリに当たる標準C++ライブラリ(昔からの習慣でSTL=標準テンプレートライブラリ=と呼ばれることの方が多い)の中にもこの手のクラスは多く存在しますが、私に言わせれば、「Boostを知らずしてテンプレートを語るなかれ」ということになります。
     このBoostというのは、正式にはBoost C++ Librariesと言いますが、現在のC++の規格(ISO/IEC 14882)の標準ライブラリを策定した人たちのうちの何人かが、中心になって、標準ライブラリへの採用が見送られた一部の機能や、さらに必要と思われる機能を集めて体系化したものがBoostです。現在でもオープンソース形態で活発に開発とテストが続けられており、日々機能を増やしています。
     Boostは、それ自体の成り立ちの経緯からもC++の標準規格に対して大きな影響力のあるものですから、C++ 0xと呼ばれる次期C++の標準規格に既に取り込まれることが決まっているものも含めて、C++プログラマにとってはそのままSTLに準ずるライブラリ集と言ってもよいでしょう。
     スレッドを利用するためのBoost.Threadや正規表現のためのBoost.Regexなど、コンパイルをしてライブラリの形にしないと利用できないものもわずかにありますが、多くは単にincludeするだけで利用できるという手軽さがBoostの魅力をより一層高めています。
     ちなみに私の場合、Perlで正規表現を覚えて以来、C/C++で使える正規表現ライブラリをずっと求めてきたのですが、いま挙げたThreadやRegexはビルドしないと使えない上に、Boostのビルドはbjamという専用のツールでしなければならないこともあって、いま一つ手を出す気になれないでいました。
     最近では、MacPortsなどの助けを借りて、自分でビルドをしなくても利用できることを知ったわけですが、それとは別に今年の5月に登場した1.34というバージョンからはBoost.Xpressiveという、ビルドをしなくても使える(つまり、ヘッダファイルだけで構成されている)正規表現のライブラリも加わっています。
     また、現在のリリース版には組み込まれていないものの、手軽に通信機能を組み込めるものやxmlの解析が行えるものなど、「まだまだC++のライブラリは充実していくのだ」と期待させるものが既に数多く含まれています。
     興味のある方は、

    http://boost.org/
    http://www.kmonos.net/alang/boost/

    などを覗いてみてください。

    注:メンバ関数のインライン定義は、クラス定義の中に直接関数の
      実装までも書き込むことを意味します。ヘッダファイルに書い
      たからと言って、それがそのままインライン定義となるわけで
      はないことにご注意ください。

    書籍紹介           レボリューション・イン・ザ・バレー

     解説担当:高橋政明

    レボリューション・イン・ザ・バレー 開発者が語るMacintosh誕生の舞台裏
     Andy Hertzfeld 著
     柴田 文彦 訳
     オライリージャパン  ISBN4-87311-245-1  3,570円

     2005年09月発行の少し古い本です。全ページカラーです。美しい写真(Jobsが若い)や技術者の手書き資料(ToDoリストやアセンブラのソースまで)なども載っています。

     著者はオリジナルMacintoshの主要な開発者のひとりでSwitcherなどのアバウト画面でもおなじみのAndy Hertzfeld氏です。
     この本のもとになったwebサイトは現在でもアクセス可能です。
    http://www.folklore.org/

     実に楽しい本でした。懐かしい開発ツールやアプリケーションそしてハードウェアがたくさん登場します。開発者用のドキュメント(Inside Macintosh)を作る作業がレビューとしてはたらき、さらに今でいう所のプレファクタリング的効果までもたらしたのはさすがです。
     訳者あとがきにもありましたが、まるで自分もMacの開発に参加しているような錯覚にとらわれました。

     この日本語版では原著にない5話が加わっているそうです。加わったエピソードはどれも技術的に興味深いものです。特に私のようにかつて68000のMacで開発していたものにとっては。(Cut, Paste and Crash など上記webサイトでは読む事ができます)

     オリジナルMacの設計の誤りを懺悔する項もあります。リージョンのサイズが32Kの制限があることはこの制限を超えるような使い方をしてはじめて知ったのですが、これにはとても困りった事を思い出しました。(QuickDrawのこの制限のため開発中のソフトにバグが出のです)
     ただQuickDrawやリソースマネージャのオフセットが16bitだったことは当時のハードウェアを考えると妥当な設計だったと思います。なんと言ってもオリジナルMacのRAMは128K、フロッピーは400Kだったのですから。

     原著は2004年12月発行です。Appleの開発者の多くも読んだことでしょう。たぶんiPhoneやiPod touchの開発者たちも。
     皆さんよくご存知のように紆余曲折のあったApple社ですが、68000からPowerPCそしてIntelとソフトウェアの互換性を保ちながら二度もCPUを切換えたものすごく高い技術と開発力を持った企業です。製品の使いやすさが抜きん出ていて特に一般ユーザにはそちらに注目が集まりますが、使いやすさも技術の寿命の長さも徹底した創意工夫で成し得たものであることがこの本から実感できるはずです。現在のApple社の製品の多くにも当時と同じ精神が感じられますので、オリジナルMacintoshを知らない世代でも共感できる部分があると思います。
     iPhoneやiPod touchの開発にあたってもこの本と同様のドラマがあったことでしょう。

    プログラマだけではなく製品開発に携わるたくさんの方に読んで欲しい本です。

    ▼出版社のweb (サンプルページのpdfあり)
    http://www.oreilly.co.jp/books/4873112451/

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

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

    2007-11-06

    目次

    • 「「Wonderful Server Life」    第58回   田畑 英和
    • MOSA Software Meeting 2007(MSM2007)の展望   小池邦人
    • ターミナルの向こうから      第13回  海上 忍 

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

      〜Leopard Server Setup編〜

     ついに待ちに待ったLeopardが発売されました。事前に予約していた人は発売日の午前中から届き始めていたようですし、販売店での発売は午後6時から開始されました。あいにくの悪天候にもかかわらずApple Store Ginzaにはいつものように行列ができ、ちょっとしたお祭り騒ぎでした。通行人もなにごとかと興味津々でしたが、どうやら多くの人はiPodの発売かなにかと勘違いしていたようです。
     それではさっそくLeopardと同時に発売が開始された、Leopard Serverについて解説を始めていきたいと思います。

    ◇インストール条件
     まずはインストール条件から確認していきましょう。Leopard Serverのインストール条件は次のようになっています。サーバとして使用しますのでネットワーク接続も必要になってきます。

     CPU:Intel/PowerPC G5/PowerPC G4(ただし867MHz以上)
     Memory:1GB以上
     Disk:20GB以上の空きディスク容量

     CPUですがついにPowerPC G3のサポートが打ち切られ、最低でも867MHz以上のPowerPC G4が必要になりました。PowerPC G3のサポートはすでにUniversal対応したTiger Server(v10.4.7)から打ち切られていましたが、バージョンが上がるにつれて求められるスペックは高くなっています。
     20GB以上の空きディスク容量が必要となっていますが、Leopard Serverをインストールしただけで20GBのディスクを消費するわけではありません。実際どの程度のディスクが必要になるかは使用状況によって異なるでしょうが、ファイルサーバなど大量のファイルをサーバ上で管理する場合にはそれなりの空き容量が必要になってくるでしょう。ディスク容量を節約したい場合にはインストール時にプリンタドライバのインストールをスキップ(あるいは必要なものだけをインストール)するとGB単位でディスクを節約することができます。ちなみにプリンタドライバのインストールを省略したところ、インストール後の容量は約8GB程度でした。

     Leopard Serverのライセンスですが、Tiger Serverと同様にUnlimitedクライアント版と10クライアント版の2つがあります。10クライアント版ではファイルサービス(AFPおよびSMB)を同時に利用できるクライアント数が最大10クライアントに制限されます。若干値段が上がりましたが、どちらのライセンスを使用するかはファイルサービスを利用するクライアント数によって判断することになります。
     また、10クライアント版からUnlimitedクライアント版へのラインセスアップグレードも用意されていますので、システムの規模拡大にあわせてあとからUnlimitedクライアント版に移行することもできます。ただしTiger ServerからLeopard Serverへのライセンスアップグレードは提供されていません。

    ◇インストール
     インストールは新規インストールとアップグレードインストールの2つに分かれます。すでにMac OS X Serverを使用している場合は、Leopard Serverにアップグレードすることができますが、アップグレード対象となるバージョンは次のとおりです。

    ・Tiger Server v10.4.10以降
    ・Panther Server v10.3.9

     Tiger Serverがv10.4.10以降となっていますが、v10.4.11はまだ原稿執筆時点ではリリースされていません。アップルのWebサイトをみると、v10.4.11に関する記述がありましたので、リリースはされるのでしょうがはたしていつ頃になるのでしょうか。
     アップグレードにはなにかと問題がつきまとうものですが、事前にアップグレードに関するドキュメント「Upgrading and Migrating」を確認しておくのがよいでしょう。ドキュメントはアップルのWebサイトからダウンロードすることができますが現時点ではまだ日本語訳は公開されていません。また、アップグレードする前にサーバのバックアップをとっておくのもよいでしょう。

    ・Apple – Mac OS X Server – Resources
    http://www.apple.com/server/macosx/resources/

     新規インストールですが、すでにOSがインストールされているパーティションにインストールする場合は、いったんボリュームを削除してからインストールする必要がありす。

     さて、インストールの手順ですがこれまでにMac OS Xのインストール経験があれば基本的には手順は同じですし、初めてインストールする場合でもたいして難しくはありません。インストールDVDからサーバを起動し、画面の指示に従っていけばすぐインストールを開始できるでしょう。
     インストールのポイントをまとめておきました。スクリーンショットも用意しておきましたのであわせてご覧ください。

    ・インストールのポイント
    1)言語選択
     4カ国語から選択でき、日本語で使用する場合には日本語を選択します
     セットアップの段階では言語は選択できませんのでここで選択しておきます
    2)インストール先の選択
     インストール先のパーティションを選択できます
     「オプション」ではパーティションの削除を指定できます
    3)インストールの概要
     「カスタマイズ」ではインストールするパッケージを選択できます
     プリンタドライバを省略すればかなりディスクを節約できます
    4)インストール中
     インストールを開始するとインストールDVDのチェックが行われます
     チェックをスキップするとかなり時間を短縮できます

    ・インストール(スクリーンショット)
    http://www.htabata.com/Site/LeopardServer/Pages/Install.html

     インストール時間ですが、DVDのチェックとプリンタドライバのインストールを省略したところ、Mac mini(1.83GHz/Intel Core Duo/2GB Memory)で約25分程度でした。何度もインストールを繰り返したい場合は、インストール直後の状態でいったんシステム全体のディスクイメージを作成してからリストアすれば、大幅に時間を短縮できます。

     さて、今回はLeopard Serverのインストールについて解説しました。次回はセットアップについて解説しますが、セットアップ中のスクリーンショットはあらかじめ用意しておきましたので、これからセットアップを始める方は参考にしていただければと思います。

    ・セットアップ(標準構成の場合)
    http://www.htabata.com/Site/LeopardServer/Pages/Setup_Standard.html
                                 次回へつづく

    MOSA Software Meeting 2007(MSM2007)の展望

        MOSA Software Meeting 2007 実行委員長  小池邦人

    11月23日と24日の2日間、毎年恒例の「MOSA Software Meeting 2007」(MSM)が開催されます。今回は、より多くの方々が参加できるよう会場を東京都内
    (目黒区 池尻大橋)に設定しました。参加者は、初日に午前中のキーノートセッションと午後のアップルジャパン協力による3つのセッションを、2日目にはMOSA主催の8つのセッションのうち4つのセッションを聴講できます。

    10月26日に待望の「Leopard(Mac OS X 10.5)」が登場しました。Macデベロッパーには、Leopardの最新テクノロジーを盛り込んだソフト開発という大きなテーマが与えられました。また10月18日には、Steve Jobs CEO自らiPhone用SDKを来年の2月に出すことを発表しました。Macデベロッパーは、今まで積み上げてきたMac OS X環境での開発スキルを、iPhoneやiPod touch用アプリの開発にも生かせることになります。

    現状では、Mac OS Xに対するソフト開発技術を習得しても、それを生かす場所はMacプラットフォームに限定されています。Objective-C+Cocoaという開発環境も然りです。しかし、今後はそうした状況が一変するかもしれません。
    「OS Xを搭載した新しいデバイスとそこで動くソフト、そしてiTunes Store経由の流通という新市場」が登場する予感がします。これは、現在のMac市場よりはるかに大きな市場となりえます。

    そうしたことから、今回のMSMのテーマを「Mac OS Xの新潮流」と決め、その趣旨にマッチしたセッションを多数用意しました。デベロッパーが、このような将来の市場に対してアドバンテージを得るには、なるべく早い時期にMac OSXの最新テクノロジーと向き合い、それを習得し、その可能性を追求しておくことが必要でしょう。デベロッパー同士のオープンな交流の場を提供しているMSMへの参加は、まさにそうした機会にもってこいのはずです。

    セッション中の質疑応答、セッション間の休憩時間での談笑、初日に行われる参加者全員参加によるパーティーなど。こうした交流の場を提供できることが、MSMを開催する最大の意義です。毎年こうした場において、デベロッパー同士による内緒話の交換、共同作業の開始、仕事の発注受注(笑)などが実現しています。新しいパートナや情報入手経路を確立するという意味において、MSMはデベロッパーに重要な機会を提供しています。

    MSMでのセッションには純粋な技術解説もありますが、90分という短い時間ですべての内容を消化することは不可能です。ですから、各セッションで未体験の技術やコンセプトと出会い、刺激を受けてもらい、次なる開発の方向性を見つけてもらうのが最大の目的です。斬新なアイデアはどこに眠っているかわかりません。職業柄、同業者以外との交流が限定されているデベロッパーにとっては意義ある機会となるでしょう。

    ここでは、MSM2007で行われる各セッションを簡単に紹介しておきます。

    まずはMSM名物キーノート、テクノロジーライター大谷和利氏の「ソフトウェア・アーティスト宣言!」です。工業製品とはひと味違うソフトウェアの「アートとしての一面」を熱く語ってもらいます。同様に、Macのソフトウェア開発現場はどうなっているのか? 我々はソフトウェア・アーティストとして生きていけるのか? という疑問には、株式会社デジタルステージ 平野友康氏による「デジタルステージのソフト開発の裏側、全部見せます!」が答えてくれるはずです。

    発表されたばかりのLeopard(Mac OS X 10.5)関連セッションとしては、アップルジャパンによる「Mac OS X Leopard対応アプリケーション開発について」と、筆者による「Leopardのグラフィックス&開発環境入門」があります。Leopardから搭載された新機能(CoreAnimationやQuickLookなど)をアプリケーションから活用する方法や、一新されたXcode 3.0開発環境などについて解説する予定です。

    加えて、いつも開催要望が多いMac OS X対応ハードウェア関連セッションについては、三洋電機 塩路昌宏氏の「Xactiにおけるビデオ処理技術の紹介およびH.264を使用した今後の展開」と、inADA 稲田元彦氏の「SecureSuiteDK forFeliCa on MacOS X入門」の2セッションが用意されています。どちらのハードウェアもまさに「旬の技術」ですので、Macintosh用ドライバ開発者の方々は見逃さないでください。

    Apple社のパートナーであるインテルの菅原清文氏には「Leopard対応インテルソフトウェア製品アップデート」を解説してもらいます。関係者でも、インテル社がMac用開発ツールを提供していることを知らない人が多いのですが、なにせ本家本元が提供するツールですので、Core 2 Duoのマルチスレッドに最適化された非常に優秀なコンパイラやフレームワークがそろっています。Xcodeスタンダード以外の優秀な演算ライブラリなどを探している大学やメーカの研究者の方々は、多くの有益な情報が入手できるでしょう。

    iPhone用SDKが登場するまでは、iPhoneやiPod touchの活用手段としてはウェブアプリケーションが主役となります。今回のMSMでは、そちらに関するセッションも充実させました。まずはアップルジャパン主催の「Safari 3.0 およびその開発ツールについて」です。また、インフォテリア・オンライン 藤縄智春氏には「オンライン表計算「OnSheet(オンシート)」でつながろう!!」で、ウェブアプリについて解説してもらいます。

    LeopardにはCocoaアプリ開発用の「RubyCocoa」が搭載されていますが、その開発者であるフリープログラマ 藤本尚邦氏には「今どきのRubyCocoaプログラミング」において、最新のRuby関連情報を紹介していただきます。また、Ruby同様にOS Xとオープンソースとの関わりは深いのですが、そうしたオープンソースとフトウェア開発ビジネスのあり方について情報を得るには、フリーランスITジャーナリスト 林信行氏とMozilla Japan 瀧田佐登子氏による「ソフト開発ビジネスの新潮流」に参加してみてください。

    最近は、Parallels、VMware、CrossOverなどを用い仮想環境でWindows用アプリを使うMacユーザも増えています。プログラマー・ライター 田中俊光氏には
    「Windows仮想環境に関するディスカッション」でその可能性について追求してもらいます。WindowsアプリとMacアプリとの同時開発を考えているデベロッパーの方々には、Trolltech 及川寛氏と朝木卓見氏が解説する「Qt APIを使用したマルチプラットフォーム向けアプリケーション プログラミング」が参考になります。「Qt」は、マルチプラットフォーム開発環境として実績があり、AdobeやGoogleが提供するアプリでも利用されています。

    「Mac OS Xの新潮流」を直に感じる場としての「MOSA Software Meeting2007」を大いに盛り上げたいと思います。スタッフ一同、皆様のご参加をお待ちしております。興味のある方は以下のウェブサイトをご参照ください。

    ・参加申込フォーム https://gt104.secure.ne.jp/~gt104186/msm-sanka.html

    ・イベントトップページ     http://www.mosa.gr.jp/?p=1298
    ・タイムスケジュール      http://www.mosa.gr.jp/?p=1298&page=2
    ・各セッションの概要と講師紹介 http://www.mosa.gr.jp/?p=1298&page=3
    ・FAQ             http://www.mosa.gr.jp/?p=1298&page=4

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

    〜 自動文書作成ツール「Doxygen」その4 〜

     前回は、Doxygenに出力するためのコメントの書き方を紹介しました。今回は、グラフ生成ソフト「Graphviz」をDoxygenと組み合わせ、ソースコードツリーを視覚的に表現する方法を取り上げます。

    ・Doxygenがアップデート
     単なる偶然でしょうが、Leopardのリリース直後にDoxygenもアップデートされました。今度のバージョン1.5.4では、Fortran 90に対応したパーサが追加されたほか、SIP (C++ Interface Code Generator for Python)のサポートが加えられています。Mac OS X用パッケージ(ユニバーサルバイナリ)の配布も開始されているので、それらの新機能に興味がある方はどうぞ。
     なお、GUIツールが動作しないという前バージョンの問題点は、まだ解決されていないようです。面倒でも、第10回で紹介した方法でバンドル内部のコマンドをコピーし、Terminalからお使いください。

    doxygen: http://www.stack.nl/~dimitri/doxygen/

    ・Graphvizを入手する
     Graphvizは、「DOT」という言語で記述されたグラフ表現を、PNGやGIFなどの画像フォーマットに変換するアプリケーションです。Common PublicLicense準拠のオープンソースソフトソフトウェアであり、無償で使用できることはもちろん、プロプライエタリな製品に組み込み商業利用することも可能です。
     Mac OS X用バイナリパッケージは数種類あり、最新バージョン(v2.12 R3)はCUI版です。pixelglow社が開発したGUI版は、2004 Apple Design Awardを受賞するなど完成度の高いものですが、残念ながら2004年以降更新されておらず、PowerPCバイナリのみの提供となっています(Rosettaでの実行は可能です)。今回はDoxygenから使うことが目的のため、CUI版の使用を前提としますが、あわせてGUI版を導入しておいてもいいでしょう。

    Graphviz: http://www.graphviz.org/
    CUI版の入手先: http://www.ryandesign.com/graphviz/
    GUI版の入手先: http://www.pixelglow.com/graphviz/

    ・Graphvizで何ができるか
     Graphvizは、DOT言語インタープリタとでもいうべき処理系を内蔵しています。Doxygenで生成したDOT言語の出力(以下DOTファイル)を処理することが目的ですが、少し脱線して、どのようなことがGraphvizで可能かを紹介してみましょう。
     まず、リスト1の内容をテキストエディタへ入力し、適当なファイル名(仮に「test.dot」とします)で保存してください。その後、以下のコマンドラインをTerminalで実行すると、「out.png」という出力が得られるはずです。もちろん、GUI版のGraphvizでも開けます。プレインテキストオンリーのMOSA伝ではお見せできず残念ですが、これだけの記述量で”使える”ツリーチャートが描けるということは、なかなかのものだろうと思います。なお、GUI版のGraphvizには、レイアウト方法を変更する機能が装備されています。ツールバー左端の[Settings]ボタンをクリックし、試してみるといいでしょう。Emacs愛好者には、Emacsのモード「graphviz-dot-mode.el」をお勧めして
    おきます(http://users.skynet.be/ppareit/projects/graphviz-dot-mode/graphviz-dot-mode.html)。

    - - - - -
    $ dot -Tpng test.dot -o out.png
    - - - - -
    
    - - - - -
    リスト1(UTF-8で保存してください)
    
    digraph test {
       node [ fontname="Osaka" ];
       首都圏 -> 東京都;
       首都圏 -> 神奈川県;
       首都圏 -> 千葉県;
       首都圏 -> 埼玉県;
       東京都 -> 新宿区;
       新宿区 -> 西新宿;
       西新宿 -> リンゴ;
       神奈川県 -> 横浜市;
    }
    - - - - -
    


    ・DoxygenからDOTファイルを出力する
     Doxygenで文書を自動生成するとき、設定ファイル(Doxyfile)を必要とすることは第11回で紹介したとおりです。Graphviz用のDOTファイルを生成するときも、このDoxyfileに必要なオプションを加えるだけで準備は完了です。もちろんCUI版のGraphvizをインストール済であることが前提ですので、念のため。
     Doxyfileには、「HAVE_DOT」オプションを「YES」に変更します(デフォルトでは「NO」のはずです)。「CALL_GRAPH」オプションもYESに設定しておきましょう。これで、各関数について参照先の関係図が生成されるようになります。
     その後ふだんどおりにdoxygenコマンドを実行すると、htmlフォルダにDOTファイルが生成されます。試しに、htmlフォルダのindex.htmlをWebブラウザで開き、[ファイル]タブにあるソースコードファイルを適当に開いてみましょう。インクルード依存関係が図形化されていることが確認できるはずです。

    ◇今週だけ小池さんの「Carbon視点でCocoa探求」の連載をお休みしかわりに『MOSA Software Meeting 2007(MSM2007)の展望』を掲載しました◇

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