Macintosh Developer Online (MDOnline)


2001年8月15日発行号 - MOSAのソフトウエアコンテスト



世間のお盆休みモードに対応し、今週は少し発行を押さえ気味で行きます。と言いながら、今日発行し、明日も発行する予定です。たぶん、予定的には、今週は火曜日と金曜日を飛ばす感じになりそうです。よろしくお願いします。
米国のサイトを見ていると、iMacの3歳の誕生日ということで、メールを欲しいというのがありました。日本では、8/29ですが、米国では先に発売されていましたね。もう3年になるのかという感慨はあるのですが、その間、すっかり市場環境が変化したということの方が驚きでしょうか。MOSAでソフトウエアのコンテストがありますが、次世代のスタンダードを目指してというとちょっと大げさですけど、今のMacintosh環境にフィットした、あるいは新しい発想を持ち込むソフトウエアのアイデアや応募を期待したいとも思います。

◇Apple Hot News
 http://www.apple.com/hotnews/

ところで、Knowledge Baseの検索方法を記事にしましたが、これがなかなか(笑)。なんていうか、きっと、Appleさんではある種の手順を踏まれているとは思うのですけど、日が替わって公開されるとか、そのタイミングがまちまちだとかあるみたいです。で、以下のようなページを作って対処しています。誰でも参照できるページですけど、とりあえずMDOnline読者様限定ということで、ページを公開します。Webニュース系サイトをやっている方などはご参考にどうぞ。

◇Knowledge Baseチェック
 http://mdonline.jp/kbasecheck.html
(新居雅行 msyk@mdonline.jp


MOSAがフリーソフトや製品のアイデアを募るコンテストを開催

Macintosh分野のデベロッパーの団体であるMOSA(Macintosh OS Software Association)は、ソフトウエアのコンテストを開始し、応募を開始した。応募は会員に限らず、一般からも可能である。シェアウエアとフリーウエアの部門と、アイデア部門の2部門が設定されており、部門ごとに最優秀賞1点、優秀賞5点程度、入賞、特別賞として表彰し、Macintosh製品などを副賞として用意する。シェアウエアとフリーウエアの部門はMac OS(Mac OS Xを含む)で稼働するソフトウエアが対象で、すでに公開されているソフトウエアでも、新たに開発したものでもかまわない。アイデア部門はソフトウエアのアイデアやあるいは周辺機器のアイデアなどのプランをたてて、それをレポート等でまとめて応募する。こちらも、Macintosh関連である必要はあるが、応募などの詳細は、以下の募集要項を参照してもらいたい。締め切りは2001年10月1日で、シェアウエアとフリーウエアの部門はメールでも受け付けるが、基本的には郵送による応募となる。発表、および表彰式が、MOSAの年に1度の大きなイベントであるMOSA湘南ミーティング(要項にはこのように記載されているが、正確なイベント名は「Macintosh Software Meeting 2001」)で行われる。開催日程は2001年11月17日(土)と記載されており、その後に雑誌やサイト、ニューズレター等でも発表される。

関連リンク:MOSA Contest‘FIRE!’2001 Free Software & Idea Revolution 開催のご案内
カテゴリ:イベント


小池邦人のプログラミング日記》2001/8/13<Quartz 2D(Core Graphics)を使う その2>

今回は、自作CarbonアプリケーションにQuartz 2Dで描画可能な環境を用意してみます。加えて、Quartz 2DとQuickDraw描画環境との融合についても考えてみたいと思います。

先週、めでたくAppleのSDKサイトにCarebonLib 1.4 SDK GMが登録されました。多分、このスペックのCarbonLib FrameworkがMac OS X 10.1にも搭載されるのでしょう。これにより、CarebonLibの開発も一段落でしょうか?Documentationフォルダにある「CarbonLib 1.4 TN.pdf」の「Changes from CarbonLib 1.3.1 to 1.4」の章を読んでみると、幾つか新しいAPIが追加されたことが確認できます。その中でも興味深いのは、SetWindowGroup()やGetWindowGroup()などのウィンドウグループに関係するAPIの存在です。ウィンドウグループとは、複数ウィンドウをひとつのグループとしてまとめて取り扱うための仕組みです。例えば、グループ内のどれかひとつのウィンドウを移動させると、同時にグループ内すべてのウィンドウを移動することができます。先んじて、Sheet Windowなどで採用されていた機能が、デベロッパー側にも解放されたわけです。また、Mac OS 8.6や9.04でも「Data-Fork-Based Resource」がサポートされました。今までは、Mac OS 9.1でしか利用できなかったようです(知らなかった)。CarebonLib 1.4 SDKで利用されているUnversal Interfacesは3.4.1b1なのですが、ADC メンバーサイトには既に3.4.1b2が登録されていますので、差し替えた方が良いかもしれません。

Quartz 2Dでは、描画対象となる環境を「Graphics Context」(CGContextRef)と言います。QuickDarawで言えば、CGrafPortに相当するデータタイプだと考えてください。Quartz 2DがContextとして認めている環境、つまりQuartz 2Dの描画対象となりうる環境には、Window(もしくはスクリーン)、プリンター、PDFファイル、Bitmap(QuickDrawのBitMapとは異なる)などがあります。こちらも、QuickDrawの、Window、プリンター、PICTファイル、PixMap(GWorldオフスクリーン)に相当すると考えれば理解しやすいはずです。ただし、Quartz 2Dには、QuickDrawのカレントポートに相当する考え方は無く、SetPort()のようなAPIもありません。Quartz 2DのほとんどのAPIには、引数に「CGContextRef」を渡すことができ、それにより対象となるContextを判断するようになっています。これにより、QuickDrawでよく遭遇する、「今、描画しているウィンドウはどれだっけ?」と言った混乱(バグ)を回避できます。

PDFファイルの場合、解像度に依存しない状態で複数ページに出力可能な点が、他のContextとは異なるようです。また、Quartz 2Dが書き出すPDFファイルは、「PDF Reference Version 1.3」に準拠していると記載されています。興味ある方は、以下のAdobeサイトからドキュメントをダウンロードし、仕様の詳細を確認してみると良いでしょう。(696ページもありますが...)

◇Adobe Solutions Network: Developer Program
 http://partners.adobe.com/asn/developer/technotes/acrobatpdf.html

ただし、WWDC 2001のセッションでは、「現状では、Version 1.3の仕様をすべて満たしていない」というAppleの技術者の話しもありましたので、用途によっては注意が必要かもしれません。その他にも、プリントアウト時のTacnsparency(透過処理)ができないといった制限もあるようです。

各Contextには、それぞれ描画時のラインの太さや表示カラーなどの状態が保存されています。Quartz 2Dではこれを「Graphics State」と呼んでいます。QuickDrawでも、ライン幅やカラー、文字サイズやフォントなどの値が各CGrafPortごとに保存されていましたが、それとまったく同じです。ただし、QuickDrawと違うのは、こうしたGraphics Stateを、CGContextSaveGState()でスタックに待避させたり、CGContextRestoreGState()で復帰させたりすることができる点です。これは、OpenGL(Macintoshに搭載されている3Dライブラリー)を使用したことがある人には、お馴染みの手法でしょう。また、Graphics StateにはCurrent Transformation Matrizx(CTM)と呼ばれる座標変換用マトリックスが用意されており、これを色々と変更することで、QuickDrawでは不可能だった文字の回転などの処理も簡単に行うことができます。こうした座標変換マトリックスについても、QuickTimeのGraphic ImporterやMovie Toolboxを利用したことがある人なら、お馴染みかもしれません。例えば、具体的に文字を回転描画するには...

1.CGContextSaveGState() で現在のGraphics Stateを待避させる。
2.CGContextRotateCTM() でCTMに回転マトリックスをセットする。
3.文字を普通に描画すれば座標中心に回転されて描画される。
4.CGContextRestoreGState()で待避させていたGraphics Stateを戻す。

といった手法を取ります。

では、さっそくQuartz 2Dの描画環境(Context)を作成してみることにします。この時デベロッパーとして考慮しておきたい点は、Quartz 2DとQuickDrawの両描画環境を同じ場所にセットするということです。でないと、どちらか片方のグラフィックシステムの描画機能しか利用できないことになり(それでも良ければ問題ないですが)色々とできる事に制限が付いてしまいます。

WindowからContextを作るのには、CreateCGContextForPort()というAPIを利用すれば簡単です。引数にWindowのCGrafPtrを渡せば、作成されたContextがCGContextRefとして返されます。

 

こルーチンの後半は、Quartz 2Dの描画座標系をQuickDrawに一致させる処理を行っています。QuickDrawでは、描画矩形領域(CGrafPort)の左上が原点でY軸は下向きがプラスです。それに対してQuartz 2Dでは、矩形領域の左下が原点でY軸は上向きがプラスです。もし、両システムによる描画を単一座標系で実行したいのなら両座標系を合わせておきます。SyncCGContextOriginWithPort()実行すると、SetOrigin()で移動された原点がContextへて反映されます。次のCGContextTranslateCTM()で原点を左上に移動し、CGContextScaleCTM()でY軸のプラス方向をひっくり返します。この処理により、マウスクリックした座標なども、変換せずQuartz 2D APIに渡せるようになります。ただし、CTMを利用した座標系の変換を必ず行う必要は無く、状況により臨機応変に最善な方法を選べば良いと思います。ちなみに、CreateCGContextForPort()は、Core Graphicsに関係したヘッダーファイルに定義されておらず、QuickDraw.hに定義されていますので注意してください。

続いて、NewGWorld()で作成したオフスクリーン用CGrafPortを、Contextとして採用してみます。

 

すなわち、オフスクリーンとして用意したPixMap(Quartz 2Dで言うところのBitmap)をContextにすることに相当します。こうすれば、Quartz 2DとQuickDraw両方で、オフスクリーンへの描画が可能になるはずです。ところが何故だか、CreateCGContextForPort()にNewGWrold()で得たGWorldPtrを渡すと、「パラメータが異常」というエラーが返ってきてContextが作成できません。Appleに確認してみたところ、これはMac OS X 10.0.4に実装されているQuartz 2Dの制限だそうで、将来的には大丈夫だそうです。

ならば、NewGWorld()で確保したPixMapから、CGBitmapContextCreate()を使い直接Contextを作成すれば大丈夫だろうと考えたのですが、APIを呼び出すと同じようなエラーが返ってきます。

 

どうも、このAPIの5番目の引数「bytesPerRow」の値は、きっちりwidth(矩形の幅)*4 Byteでないと受け付けないのが原因のようです。ところが、NewGWorld()が作成するグラフポートのPixMapのrowBytesは、(width*4)+16バイトとなっています。そのためエラーが返ってくるわけです。こちらも、Appleに確認したところ、あっさり「バグです」と言われてしまいました(涙)。

仕方ないので、NewGWorld()で確保したPixMapのRowByteを強制的にwidth*4 Byteに変更し、再度CGBitmapContextCreate()に渡したところ、問題なくCGContextRefを得ることが出来ました。

 

試しに、QuickDrawとQuartz 2Dの両方を使い同じ図形を描画してみましたが問題ありませんでした。ただし、この方法はあくまでも暫定的なものであり、下手をするとQuickDrawの描画パフォーマンスを落としてしまう可能性がありますので注意してください。(Appleさん、早くバグをとってください)

次回は、自作CarbonアプリケーションでQuartz 2Dを利用し、実際に何か図形を描画してみます。できたら、QuickDrawのPixMapイメージをQuartz 2Dで描画するとにもチャレンジしてみます。
[小池邦人/オッティモ]

関連リンク:オッティモ
カテゴリ:グラフィックス, 小池邦人のプログラミング日記


FM Tokyoが開催中のファイルメーカーPro開発者会議の模様をレポート

ファイルメーカーProの開発者やユーザが集うカンファレンス「FileMaker Developer’s Conference 2001」が、2001年8月12日から15日までの日程で、米国フロリダで開催された。その模様が、ユーザーグループ「ファイルメーカーPro東京ユーザーズミーティング(FM Tokyo)」の何人かのメンバーによって報告され、FM TokyoのWebサイトで公開されている。ファイルメーカーPro専門のカンファレンスで、これまでも日本からの参加者は極めて少ないそうであるが、ファイルメーカーProを利用したデベロッパー、あるいはプログインなどの開発会社などからの展示などもあり、ファイルメーカーPro利用者の間では最も重要なイベントとなっている。また、セッションも基本的なものから技術的に立ち入ったものもあるなど、ファイルメーカーProの開発者には欠かせない情報も得られるそうだ。FM Tokyoのレポートにもあるように、ファイルメーカーの今後の動向も語られた模様だ。

関連リンク:Developer Conference
カテゴリ:データベース, イベント


英語版のAuthoring Support 1.1.2 Updateは日本語版Mac OS 9.1でも利用可能

Authoring Support 1.1.2についてのダウンロードのお知らせが掲載されているのに、リンク先には英語版のアップデートソフトしか存在しないということを以前に記事でお届けした。英語版とは別に日本語版が存在するものと思われたが、数日経過したもののやはり英語版のアップデータしか公開はされていなかった。そこで、試しに英語版のアップデータを日本語版のMac OS 9.1に適用したところ、問題なくアップデートは行われた。機能拡張フォルダにあるAuthoring SupportはJ1-1.1のバージョンのままだが、ドライブに対応するための設定ファイルがVer.1.1.2になっている。FireWire Authoring Support、USB Authoring SupportについてはJ1-1.1となっている。この状態がアップデータによる正常な適用結果なのかは判別はできないが、いずれにしても英語版のアップデータが日本語版OSでも動作することは確かであるので、場合によっては試してみる価値はあるだろう。

関連リンク:Authoring SuPport 1.1.2 Update
カテゴリ:


WebObjectsとOpenBaseでは256バイトを超えるテキストに問題、特別なドライバで対応

WebObjectsで作成するアプリケーションで、256文字を超える文字列をOpenBase SQLによるデータベースのフィールドにおさめようとしても、文字列ではなくBLOB(バイナリオブジェクト)として取り出されてしまうといった問題が表面化している。WebObjects 5に付属するデータベースのOpenBaseでは4096バイトまでのcharフィールドを定義できるが、256バイト以上だと文字列として扱えなくなってしまう。この問題は、WebObjects側の問題であるとのことで、OpenBaseの開発者よりAppleには伝達されており、将来的には修正される予定だ。しかしながら、今すぐにでもこの問題に対処したいのであれば、OpenBaseから特別なJDBCドライバが配付されているので、それを利用することになる。ただし、このJDBCドライバは、4KB以下のバイナリは文字列として強制的に変更してしまうというものであり、すべての場合に渡って稼働するものではないことは注意が必要だ。たとえば、画像データベースで、4KB以下の画像データは文字列になってしまうので、完全な解決策ではない。しかしながら、数字や文字列だけのデータベースでは基本的には問題なく利用できる模様だ。

関連リンク:[OB-Dev] SOLUTION - 256 character limit problem
カテゴリ:WebObjects, データベース


KBase》AirMacで128ビットの暗号化を行う場合のパスワードについて

AirMac(海外ではAirPort)で128ビットの暗号化処理を行う場合のパスワード設定について、Knowledge Baseで記載されている。アスキーキャラクタの場合には、ダブルクォーテーションで囲うことや、16信表示の場合には$で始まるといったことが記載されている。

関連リンク:AirPort: How to Join a 128-Bit Encrypted Wireless Network
カテゴリ:Knowledge Base(旧TIL), ネットワーク


KBase》iTunesでの表示オプションにある日付についての説明

Knowledge BaseにiTunesでの表示オプションとして、Date(日付)とDate Added(追加日)の2種類の日付があることについての解説が掲載されている。Dateは元となるMP3ファイルの修正日の日付で、Date AddedはそのファイルをiTunesのライブラリに追加した日付となっている。

関連リンク:iTunes: Difference Between Date and Date Added Columns
カテゴリ:Knowledge Base(旧TIL), メディアプレイヤ