Macintosh Developer Online (MDOnline)


2000年6月14日発行号 - 実はFM放送に…



少し先になりますが、ラジオに出演します。昨日の夜、収録がありまして、6月27日にオンエアです。東京FMの「インターネットガーデン」(20:30〜)という番組に出て、オンライン出版について話をしました。25分番組のうちの10分弱なんですけど、オンラインで出版すれば、印刷代もかからないみたいな、どちらかと言えば一般向けの話です。いずれにしても、いくらかMDOnlineの宣伝になればOKかと思うので、出演したという次第です。ラジオって低予算だとは聞いていましたけど、実は出演のギャラはなしでした。その分、しっかり宣伝してくださいということでした。
スタッフと打合せして、「オンライン出版ってどんなんですか?」みたいに話が始まったのですが、聞くとみんなマック系の方々で、MacWIRE見てませんか?「毎日見ていますよ」そこに配信しているんですよ、なんてことで話はすぐに通じてしまいました(最後にはPalmを見せ合う始末〜笑)。だけど、有償であることの意味までは深入りできませんでしたし、オンエアされる内容では、「印刷とかしなくていいなら、大儲けじゃないですか?」いやいやそんなことはないすよ…みたいな軽いノリになってしまった(笑)。いずれにしても、またオンエア前日および当日にもお知らせします。残念ですが、東京ローカルの番組だそうです。
スタジオに収録に行ってやや驚いたのは、機材がアナログなんです。オープンリールです。TEACのA802だったと思います。すっかりデジタル化されたのだと思ったら、古くからやっているところはまだまだアナログだそうです。エンジニアの人は、ヘッドを綿でふきふき、テープを回していました。別のスタジオにはデジタルが入っているそうなんですが、それもつい最近だとか。ケーブルテレビとか、衛生放送みたいなところでは設備投資が最近なんでかなりデジタル化されていることを聞いたことがありますけど、まだオープンリールが回っているのはちょっと意外でした。だけど、しっかり、SoundToolsのデータをWindowsに持っていけるの?みたいな話を聞かれましたので、今どきのエンジニアはアナログもデジタルも両方できないといけないのでしょうね。
(新居雅行 msyk@mdonline.jp


【Inside Mac OS X】FontSyncの機能と使い方

Inside Carbonシリーズの1つとして、「FontSync Reference」というドキュメントが公開されている。Mac OS 9のコントロールパネルに「FontSync」というものがあり、これはなんなのかと思っているかもしれないが、その答えはこのドキュメントに含まれているだろう。プログラミングについての情報があるものの、FontSyncのコンセプトの説明が中心なので、システム上のどんな動作を目標としているのかを知ることができる。FontSyncは、異なるシステム環境でのフォントの再現性を高めるというのが大きな目標となっているが、ハイエンドの印刷システムが1つのターゲットとなるようだ。アプリケーション側では、最適なフォントを探すようなAPIが用意されていて、プログラムを追加することで、“FontSync対応”となるようである。フォントの場合は、利用するアプリケーションはもちろんだが、フォント自体のデータフォーマットも古いものから新しいものまでいろいろあり、世界は複雑である。さらにMac OS XではOpen Typeに統一されるなど、まだまだ変化が大きい世界だ。フォント不一致による影響はレイアウトでは大きいために、今後もある種の混乱は続くが、その解決策の1つはFontSyncにあるようにも思われる。DTP系のソフトを作成している人やあるいはシステム的に関係している人は、いまのうちにFontSyncについての知識を得ておく必要はあるだろう。

関連リンク:Inside Carbon: FontSync Reference
カテゴリ:Mac OS 9, Carbon/CF


【Carbon化シリーズ】Navigation Serviceに対応(2)

インクルードやライブラリの追加、そして、openリソースをアプリケーションに埋め込むという準備ができれば、実際のソースの変更にとりかかる。Standard File Packageを使っている部分はいくつもあるのだが、まずは、FileメニューのOpenを選択したところから変更してみよう。ソースファイルのDoCommand.cにDoOpenCommandという関数があり、現在は以下のようになっている。標準的な標準ダイアログの利用を行っている。LoadFromFileはベースのソースに定義されいて、指定した文書ファイルをウインドウで開くサブルーチンである。

void DoOpenCommand()
{
        StandardFileReply    rep;
        SFTypeList          myType;
        
        myType[0] = ’TEXT’;  myType[1] = ’PICT’;
    //シングルクォーテーションは半角で入力して下さい
        myType[2] = myFileType;
               //ダイアログの一覧に表示するファイルのタイプを指定
        StandardGetFile(0, 3, myType, &rep);
               //ファイルを開くときの標準ダイアログを表示
        if(rep.sfGood)    //OKボタンを押したのなら
               LoadFromFile(&rep.sfFile);    //選択したファイルを開く
}

まずは、同じような機能をNavigation Serviceで実現してみた(ソースプログラムは別の記事に記載)。これがおそらくいちばんシンプルな形式だと思われる。Standard File Packageとの大きな違いは、複数のファイル選択に対応しなければならないところだが、これはAppleEventのOpenDocumentsのプログラムを知っていれば、難しい手続きではない。DoOpenDocument関数を書き換えた。もともと短いとは言え、全面的に書き換える必要がある。この結果、ダイアログボックスの表示は次のようになった。まだ、この段階では、モーダルダイアログなのである。

◇表示されたNavigation Service対応のダイアログボックス
 

いちばんのキーになるAPIは、NavChooseFileだ。これは、開くファイルを選択するダイアログボックスを表示する。引数はたくさんあるが、とりあえず、最低限必要とするもの以外はNULLを指定しておいた。最初から2つ目の引数にはダイアログボックスの選択結果を得ることができる。3つ目の引数は表示するダイアログボックスに関する設定をあらかじめ指定しておく。そして、7つ目の引数にダイアログボックスに表示されるファイルのファイルタイプを指定する。

ダイアログボックスで表示されるファイルのファイルタイプを、openリソースから取得している。openリソースをロードすれば、それがそのまま引数に指定することができる。そして、変数のdialogOptions構造体には、ダイアログボックスに関するさまざまな設定を指定する。メンバのlocationには、Point型で場所を指定できるが、{-1,-1}を指定すると画面の中央に表示される。メンバのdialogOptionFlagsにはダイアログボックスの形式を記載する。文字列がいくつか指定できるが、今回の結果のように、タイトルバーがない場合には、タイトルバーは表示されない。ボタンや説明など、どのメンバがどこに表示されたかを実行結果で確認してもらいたい。また、この構造体に指定できる内容と動作については膨大な情報なので、ここではすべてを説明することは行わないので、ドキュメントで確認しておいてもらいたい。なお、NavGetDefaultDialogOptionsというAPIコールを利用すると、ここでのdialogOptions変数に既定の値をまとめて設定することができるので、この後に既定値から変更したいものだけを変えるということも可能だ。

ダイアログボックスを表示後、変数replyのメンバselectionに、AppleEventのディスクリプタのリスト形式で、選択したファイルが記録されている。AECountItemsでファイルの個数が分かり、AEGetNthPtrで選択したファイルへのFSSpec型データが得られる。それをもとに、ファイルを開いてウインドウに表示するLoadFromFileルーチンを呼び出している。AppleEvent処理と同じような感じだ。
ここでは、変数replyはNavDisposeReplyというAPIコールで構造体の破棄が必要になる。構造体のメンバから構造体につながっているなど複雑な構造なので、こうしたAPIを利用して確実にメモリをリリースしたい。replyはローカル変数だから構造体の破棄はいらないかと思うかも知れないが、メンバから構造体をポイントしているので、破棄は必要になる。逆に、ローカル変数に適用しても、問題なく動くAPIのようだ。
Navigation Serviceのドキュメントでは、実際にファイルを開く場合に、自分自身にAppleEventを送付するという手法も紹介されている。レコーダブルである必要があるなら、この手法も検討すると良いだろう。

カテゴリ:Carbon/CF, Carbon化


【Carbon化シリーズ】Navigation Serviceに対応(2)-プログラムリスト

void DoOpenCommand()
{
    OSErr          er;
    NavReplyRecord    reply;
    NavDialogOptions   dialogOptions;
    NavTypeListHandle  typeList;
    Point              dialogPosition = {-1,-1};

    typeList = (NavTypeListHandle)GetResource(’open’, 128);
        // openリソースをそのまま利用する
//シングルクォーテーションは半角で入力してください

    dialogOptions.version = kNavDialogOptionsVersion;
        //このメンバにはきめられた定数を設定
    dialogOptions.dialogOptionFlags = kNavDefaultNavDlogOptions;
        //ダイアログの各種設定
    dialogOptions.location = dialogPosition; 
        //ダイアログボックスの位置
    CopyCString(dialogOptions.clientName, (unsigned char*)"TextDraw IV - Carbonized");
        //クライアント名 
    CopyCString(dialogOptions.windowTitle, (unsigned char*)"ファイルを開く"); 
        //タイトルバーの文字列
    CopyCString(dialogOptions.actionButtonLabel, (unsigned char*)"開く");  //ボタン名
    CopyCString(dialogOptions.cancelButtonLabel, (unsigned char*)"なにもしない");   //ボタン名
    CopyCString(dialogOptions.savedFileName, (unsigned char*)"12345"); 
        //保存ファイル名の既定値
    CopyCString(dialogOptions.message, (unsigned char*)"複数のファイルを選択することもできます"); 
        //メッセージ
    dialogOptions.preferenceKey = NULL; 
        //プリファレンスを使わないならNULLL
    dialogOptions.popupExtension = NULL;
        //ポップアップメニューを拡張しないならNULL

    er = NavChooseFile (NULL, &reply, &dialogOptions, NULL, NULL, NULL, typeList, NULL);
        //ダイアログボックスを表示
    if(er == noErr && reply.validRecord)    {   //ファイル選択が行われたなら
        long  count, index;
        er = AECountItems(&(reply.selection), &count);  //選択されたファイルの個数を得る
        if ( er == noErr) {
            for (index = 1; index <= count; index++)  {    //1つ1つのファイルを取得する
               AEKeyword     theKeyword;
               DescType       actualType;
               Size            actualSize;
               FSSpec         documentFSSpec;

               er = AEGetNthPtr(&(reply.selection), index, typeFSS, &theKeyword,
                   &actualType,&documentFSSpec, sizeof(FSSpec), &actualSize);
               if (er == noErr)
                   LoadFromFile(&documentFSSpec);   //ファイルを開く
            }
        }
        er = NavDisposeReply(&reply);
        ReleaseResource((Handle)typeList);
    }
}

カテゴリ:


データベースエンジンのMySQLでMac OS X Server向けバイナリでリリース

Mac OS X Serverで稼動するオープンソースのデータベースエンジン「MySQL」の3.23.18がリリースされている。3.23.xは、まだアルファリリースの段階としている。Mac OS X Server向けのバイナリも同時に配付されている。安定版としては、3.22.33がリリースされているが、ダウンロードのページにはMac OS X Server向けのバイナリは見当たらない。アルファ版とは言え、Mac OS X Server向けのバイナリが作成されいてる点から、Mac OS X Serverはもちろん、Mac OS Xでも容易に利用できるようになることが期待できる。MySQLは利用についてはフリーだが、再配布などでライセンス費用が必要になる。

関連リンク:MySQL
カテゴリ:データベース, Mac OS X Server


Webサイトから顧客を管理するためのCGIプログラムがバージョンアップ

Document Express社は、Webサイトを利用した顧客管理ツール「Document Express Pro 3.0」をリリースした。Webサイトでのフォームの入力をデータベース化し、その後に電子メールでやりとりするようなシステムを構築できる。あるいはFAXの送付、ニューズレターの一斉送付などに対応している。コマースサイトでの利用や、顧客対応の必要なサイトでの利用を見込んでいる。WebSTARあるいはWindows NTで稼動するCGIスクリプトが中心となっているが、Perlで作られたスクリプトのようで、価格は$179。

関連リンク:Document Express
カテゴリ:サーバー関連


サーバー監視ソフトが常時監視の機能を追加

Intelli Innovations社のサーバ監視ソフト「Server Sentinel」が、Ver.1.0.2にバージョンアップした。Server Sentinelはサーバが稼動しているかどうかの監視を行い、トラブルがある場合にはメールで知らせるというものだ。新しいバージョンでは、監視しているクライアント側で常時監視をしやすくするMicroServerが新たに付け加えられた。また、コントロールバーのモジュールも追加され、操作性が向上している。価格は$30。

関連リンク:Intelli Innovations, Inc.
カテゴリ:サーバー関連


Open TransportのSTREAMモジュールの作成例が公開

Appleが公開しているサンプルプログラムに、Open TransportのSTREAMモジュール関連のものが以下のように公開されている。

◇VMSify 1.0.1b1
 http://developer.apple.com/samplecode/Sample_Code/Networking/VMSify.htm
Open TransportのSTREAMモジュールの作成例で、telnetに応答するようなもの。

◇TPIFile 1.0.1b1
 http://developer.apple.com/samplecode/Sample_Code/Networking/TPIFile.htm
Open TransportのモジュールであるSTREAMのサンプルで、ファイルの読み込みを行うTransport Provider Interface(TPI)モジュールの作成例。

関連リンク:Sample Code
カテゴリ:アップルからの開発資料, ネットワーク