MOSA Multi-OS Software Artists

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

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

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

2008-01-15

目次

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

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

■  〜Leopard Server新機能紹介〜

 Leopard Serverが発売されてからは、まずインストールとセットアップについての解説をいち早くお届けしてきました。ここであらためてLeopard Serverの新機能について取り上げてみたいと思います。
 Leopard Serverでは、クライアント版のLeopardに追加された新機能も利用できますが、それら以外にもサーバ向けの新機能が追加されています。これまで存在していたサービスに改良が加えられただけでなく、新しいサービスも利用可能になっています。そこで今回は、Leopadr Serverで新たに追加された3つのサービスについての概要を紹介します。

◇iCal Server
 Macにはこれまでもスケジュール管理用のソフトウェアとして「iCal」が標準搭載されていましたが、スケジュールをサーバ上で一元管理することはできませんでした。.Macなどのサーバを使って各個人のスケジュールを公開することはできましたが、これはあくまでもクライアント上で作成したスケジュールデータをサーバにアップロードするための仕組みです。
 Leopard Serverで追加されたiCal Serverを使用すれば、最初からサーバ上でスケジュールデータを一元管理することができます。サーバ上で各ユーザのスケジュールを一元管理することで、例えば打ち合わせの予定を追加するさいに、他の出席者の空きスケジュールを確認するといった使い方ができるようになります。
 iCal Serverはオープンソースとして開発され、ソースコードはMac OS forgeのサイトで公開されています。iCal ServerはPythonを使って実装されており、CalDAVというプロトコルを採用しています。
 このサービスは標準またはワークグループ構成のサーバでも使用することができます。クライアント側ではLeopardに搭載されているiCal 3などCalDAVに対応したソフトウェアを使用する必要があります。

・Mac OS forge「Calendar Server」
http://trac.calendarserver.org/projects/calendarserver
・CalDAV
http://ietf.osafoundation.org/caldav/index.html

◇Wiki Server
 Webブラウザ上でWebページを編集できるシステムのことをWikiといいますが、Wikiの実装としてはPHPを使ったPukiWikiなどがあり、これまでもあとからMacにインストールして運用することは出来ました。
 Leopard Serverでは最初からシステムにWikiが組み込まれており、標準およびワークグループ構成であれば、「サーバ環境設定」を使って「Webサービス」を設定することにより使用できるようになります。
 Wikiでは通常専用のマークアップ構文を使用してページを編集したりしますが、Leopard ServerのWikiではこういったマークアップ構文を使用することなく、テキストエディタやワープロソフトで文章を作成するような感覚でページを編集することができます。編集したページはサーバ上で履歴が管理されていますので、いつでも過去のデータを呼び出すことができます。
 グループごとにWikiが使えるようになっており、この機能を利用してグループ内での情報共有に役立てることができます。さらに、Web上でグループカレンダーを利用したり、グループ宛のメールのアーカイブを参照することもできます。

◇Podcast Producer
 様々な分野のPadcast番組が制作されており、なかにはMac専門のPodcastもあります。実際にPodcastを制作しようとすると、最終的なデータをサーバにアップするまで収録やエンコーディングなど色々と作業が必要になってきますのでなにかと大変です。
 Leopard Serverに追加されたPodcast Producerを使えば、一連の処理を自動化してPodcast制作を行うことができます。まずクライアント版のLeopardにも付属する「Podcastキャプチャ」(「/アプリケーション/ユーティリティ」にインストールされている)を使用することにより、Macを使ってPodcastの収録を行うことができます。FireWire接続のカメラ、iSightなどから映像や音声を取り込むことができます。
 収録が完了するとデータはサーバ上のPodcast Producerにアップロードされ、H.264など最終的に公開するフォーマットへのエンコーディング処理がおこなわれます。大規模な制作を行う場合は、分散処理を実現するXgridと組み合わせることにより、複数台のサーバでエンコーディング処理を実施することもできます。

 Leopard Serverには他にも様々な機能が追加されていますが、次回以降ひとつずつ詳しく紹介していきたいと思います。
                             次回へつづく

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

〜 Interface Builder 3の操作に慣れる 〜

今回は、Interface BuilderでMainMenu.nibとAbout.nibを編集し、その後にソースコードを記述してクラスを実装してみます。Leopard(Mac OS X 10.5)付属の「Xcode Tools」に付属している「Interface Builder 3」は、以前のバージョンから操作体系が大幅に変更されていますので、作業にはいくらか注意が必要となります。

「しんぶんし v3.0」で使うモデル、ビュー、コントローラの各オブジェクトは、すべてをMainMenu.nibに詰め込むことはしません。オブジェクトは関連するグループに分けて、別々のnibファイルにまとめる予定です。まず最初に、MainMenu.nibにはアプリケーション自身のコントローラ・オブジェクトである「ApplicationController」を登録します。そして続いて「About.nib」ファイルを作成し、そちらにアバウトウィンドウや、そのコントローラである「AboutController」を登録します。

XcodeのShinbunShi3プロジェクトを起動し、登録されているMainMenu.nibをダブルクリックしてInterface Builderを立ち上げます。表示された「ライブラリ」ウィンドウ(何故かここだけ日本語表記?)にある「NSObject」(青い立方体アイコン)をドラッグ&ドロップでMainMenu.nibへ登録します。その名称をObjectからApplicationControllerに変更したら、インスペクタ(Inspector)ウィンドウをオープンし、IdentityパネルのClassカラムににもApplicationConrollerと代入します。この作業により、アプリケーション起動時に、自動的にApplicationConrollerオブジェクトのインスタンスが生成され
ることになります。

ここまでの作業を行うことで、Interface BuilderがXcodeプロジェクトのクラス定義(ApplicationController.hファイルの内容)との同期を取り、自動的にIBActionである「openAboutWindow:」がClass Actionsのリストに追加されます(これは便利!)。この時、もし対象クラスにIBOutletが存在していれば、それについても、すぐ下のClass Outletsのリストに登録されます。ところで、旧バージョンのInterface Builderであれば、XcodeプロジェクトのApplicationConroller.hをMainMenu.nibウィンドウ上へドラッッグ&ドロップすれば、そのクラスのインスタンス・オブジェクトを作成してくれたのですが、何故だか本バージョンでは何も起こりません?

この機能は削除されてしまったのかと思い「Interface Builder User Guide」を調べてみると、そこにはちゃんと可能であると明記されています。その証拠に、Fileメニューにも「Read Class Files…」がありますので、機能自体が無くなったわけではなさそうです。ならばと、メニューを選択してApplicationConroller.hファイルを読み込んでみましたが、やはり何も起こりません? 同時に、Fileメニューの「Write Class Files…」も試してみましたが、こちらの方は、ちゃんとApplicationConroller.hとApplicationConroller.mの両ファイルを書き出してくれます。これはバグでしょうか?それとも当方の環境だけで起こる現象でしょうか? 謎のままです。

そもそもInterface Builder 3には「Classes」メニューがありません。つまり、旧バージョンで行っていたように、Classesタブを使い先んじて指定クラス(例えばNSObjectなど)のサブクラスを作成しておき、そこから「Classes」メニューの「Instantiate」によりインスタンス・オブジェクトを作成するという作業ができません。またインスペクタにはスーパークラスを指定する箇所がないので、Interface Builder側で作成したインスタンスをファイルへ書き出すと、スーパークラスの表記ができず、ヘッダファイルには以下の様な注意書きが付きます(笑)。

@interface MyObject : /* Specify a superclass (eg: NSObject or NSView) */ {

}

@end


つまり、Interface Builder側でクラスを作成し、それからソースファイル(クラス定義と実装の雛形)を書き出すという従来の流れは推奨されていないようです。これからは、先んじてクラス定義のヘッダファイルを作成し、nibファイルに対応インスタンス・オブジェクトを登録してから、それと同期させるという作業の流れになりそうです。ソースコードに新規のClass ActionやOutletを追加した時も、Interface Builderがすぐさま同期させてnibファイル側にも反映させてくれますので、この流れの方が分かり易いと思います。ただし、昔からの Interface Builderの使い手は、最初は少々戸惑うかもしれませんね。

次にAbout.nibファイルの方です。こちらでは、アバウト表示用のウィンドウ(ビュー・オブジェクト)とアバウト用のコントローラ・オブジェクトを編集します。nibファイルを新規作成するには、Fileメニューから「New…」を選びます。表示されたダイアログの「Window」を選択し、できあがったnibファイルを「About.nib」という名称で保存した後にXcodeプロジェクトに登録しておきます。この時、nibファイル内のウィンドウ名称もAboutと変更しておきます。ウィンドウ上には「OK」ボタンや画像を配置することになりますが、その作業の解説は次回にまわします。また、Interface Builderでのコントローラ
とビューのリンクについても次回に解説したいと思います。

アバウトウィンドウ用のAboutControllerについては、ApplicationConrollerのようにライブラリからNSObjectアイコンを登録する必要はありません。
About.nibの「File’s Owner」アイコンを選択してインスペクタをオープンし、IdentityパネルのClassカラムにAboutControllerと代入します。後は、AboutControllerオブジェクトのインスタンスを作成する時に、このnibファイルを読みむように処理すればOKです。また、プロジェクトのクラス定義(AboutController.hファイル)とも同期が取られ、IBActionの「closeAbout:」がClass Actionsリストに、IBOutletの「_okButton」がClass Outletsリストの方に表示されます。

続いてクラスの実装ですが、とりあえず以下の様にソースコードで記述してみました。前回、各クラスのインスタンス変数は、ローカル変数と区別しやすくするためにアンダーバーを含むように表記しましたが、アンダーバーは先頭にあった方が良さそうなので(後々のことを考えると)そう変更してあります。

まずは、ApplicationConroller.mです。

#import "ApplicationConroller.h"

@implementation ApplicationConroller

- (IBAction)openAboutWindow:(id)sender
{
   if( ! _aboutController )
       _aboutController=[[AboutController alloc] init];
   [[_aboutController window] center];
   [_aboutController showWindow:self];
}

- (void)dealloc
{
   [_aboutController release];
   [super dealloc];
}

@end


続いて、AboutController.mの方です。

#import "AboutController.h"

@implementation AboutController

- (id)init
{
   self=[super initWithWindowNibName:@"About"];
   return self;
}

- (IBAction)closeAbout:(id)sender
{
   [self close];
}

@end


次回は、ウィンドウへのボタンや画像の配置、コントロールとビューのリンク、上記ソースコードの詳しい解説を行います。また、練習用に追加した不要なコード部分を外す処理もします。本連載で作成したプロジェクトファイルは、MOSA Exchangeに順次アップロードされています。今回分の名称は「ShinbunShi3_08_01_11.zip」です。
つづく                                

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

〜 Yet Anotherなテキスト処理系を考える (1)〜

 ここしばらくGraphiz / DOT言語関連の記事が続いていましたが、そろそろ新しいトピックに移りましょう。今回は、LaTeXユーザ必携のPostScript互換インタープリタ「GhostScript」について解説します。

・GhostScriptが必要な理由

 GhostScriptは、オープンソースによるPostScript互換インタープリタです。PostScriptはAdobe Systemsが開発したページ記述言語で、プリンタへの出力などに現在も用いられています。しかしライセンス料が高額なため、それを回避するためにもフリーな実装を必要としたユーザ層が — 特にPC-UNIXの分野で — 存在したこと、またPostScriptデータ(以下、PSデータ)をディスプレイでプレビューしたいという需要もあったことから、GhostScriptの開発がスタートしたと聞きます。
 現在GhostScriptは、UNIX系OSやWindowsなどさまざまなOSへ移植されています。PSデータをレンダリングし、LIPSやESC/Pageなどの各種プリンタ記述言語へ変換、非PostScriptプリンタで印刷するためのフィルタとして主に利用されますが、各種画像フォーマットやPDFに変換することも可能です。
 このGhostScript、決してMac OS Xと無縁ではありません。Leopardでプリンタをセットアップするとき、ドライバを手動で指定しようとすると、「Gutenprint」という名前を目にすることと思います。このGutenprintは、旧称を「Gimp-Print」という“プリンタドライバ集的ソフトウェアパッケージ”ですが、GhostScriptをプリンタ出力用のインターフェイスとして活用することができます。GhostScriptは、サポートの終了した旧機種もサポートしている(ドライバを同梱している)ため、メーカーがドライバを提供していない機種を使いたい、というニーズに応えることもできます。
 なにが言いたいかというと、印刷の処理系ではPostScriptが依然現役であること、GhostScriptを使えば非PostScriptプリンタへPSデータを出力できること、メーカー純正ドライバのない機種に印刷できる(かもしれない)こと、PostScript互換のフリーな実装への需要からGhostScriptが必要とされていること、の4点です。

・いくつかあるGhostScript

 GhostScriptのソースコードは公開されていますから、Cコンパイラ(GCC)など開発環境一式があればMac OS X上でもビルドできます。しかし、諸事情からいくつかの配布プロジェクトが存在していますので、その解説から始めてみましょう。
 GhostScriptには、2つのライセンス体系が存在します。Aladdin FreePublic License(AFPL)版とGPL版で、いずれもソースコードは公開され無償利用が可能ですが、前者は商用目的での利用には制限が設けられています。以前は、AFPL版が先行して開発され、同じものが約1年遅れでGPL版として公開されるというパターンでしたが、方針転換により2年ほど前からGPL版がリーディングエッジな役割を担っています。
 また、GPL版GhostScriptにも、通常版(GPL GhostScript)とESPGhostScriptの2つが存在します。後者は、Mac OS Xの印刷制御システムに採用されている「CUPS」向けの機能が追加されたもので、Mac OS Xユーザは主にこちらを利用してきました。現在ではGPL GhostScriptに統合されたため、これから(最新バージョンを)入手する場合には、GPL GhostScriptを選択すればいいことになります。

・GhostScriptを入手する

 現時点におけるGPL GhostScriptの最新版(v8.61)は、以下のURLから入手できます。ビルドの手順は割愛しますが、Linuxなど他のPC-UNIXと基本的に同様なので、自力でインストールしたい場合には他プラットフォーム向けの文書を参考にしてください。

http://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/current/

 しかし、GhostScriptのビルドには手間がかかります。本体とは別配布されているフォント集をインストールしなければならず、LIPSやESC/Pageなど各種プリンタ向けのGhostScript用ドライバも用意しておく必要があります。Finkなど、ビルド時にパッケージ間の依存関係を自動処理してくれるユーティリティを使うことが現実的でしょう。
 少し前のバージョンで構わなければ、有志ユーザが公開しているビルド済パッケージを利用させていただく手もあります。以下のURLでは、GPL/ESPGhostscript 8.15.4のLeopardおよびTiger向けのパッケージが公開されています。声を大にして言うほどの最新バージョンとの機能差はないため、はじめてGhostScriptを利用するには最適です。

http://www2.kumagaku.ac.jp/teacher/herogw/index.html

 今回はGhostScriptの概要説明と導入方法に終始してしまいましたが、次回はどのようなことができるか、LaTeXなどのテキスト処理系でどのような役割を果たすかについて説明する予定です。

ニュース解説   MOSAic

★★★ 開発関連のニュースはwebに掲載中 ★★★
http://www.mosa.gr.jp/?page_id=1017

・12月のニュース
http://www.mosa.gr.jp/?p=1476

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