私の健康についていろいろご心配をかけましたが、今日、大きな病院での診察が、やっとあって、先週の検査では何の問題も見当たらなかったということでした。やっぱり、大腸菌が大きかったのではということで、あとはかかっていた医者に見てもらってくれで終わりでした。完全に直っている感じはしないのですけど、いずれにしても、腫瘍とかは見つからなかったので、とりあえずは安心というところかと思います。
今日は、iPodの故障について、読者の方より情報をいただいたので、記事にしてみましたが、こちらでは確認しようがないものだけに、若干躊躇しています。おそらく、FinderなどがマウントしたFireWireディスクをアクセスしたときとか、何らかの条件で、そのまま抜き取ると問題になるような場合が出てくるのだと思いますが、iPodをつないだまま使うこともよくあると思うのですけど、だとしたらけっこう危険ではないかと思い記事にしてみました。まだ、あまり各所では問題になっていないみたいですね。先週の土曜日に新宿のヨドバシに、Windows XPを買いに行ったのですが(笑)、そのとき、iPodは「完売」になっていました。カウンターの奥にはいくつか箱があったので、あれは予約分だったのでしょう。土曜日だけにさすがにすごい人でした〜特にプリンタ売り場。その日は、MAX本のノイマンピアノさんのトーク&ライブだったので、タワーレコードにも行きました。リットーから出たMAX本は初版分が完売だそうで、思った以上に反響があったということのようです。会場にはカールストーンさんもいらっしゃいましたね。
(新居雅行 msyk@mdonline.jp)
今回は、Mac OS X 10.1から利用可能になったPattern(パタン)描画を取り上げてみます。Quartz 2DのAPIの中でも、パタン描画だけはちょっと変わった手法を採用しています。それから、思わぬ所でQuartz 2Dに関わる便利なAPIを発見しましたので、その内容も紹介したいと思います。
2001/11/20現在、ADCメンバーサイトには「CarebonLib_1.5a3_SDK」が登録されています。1週間にワンステップのペースでバージョンアップが進行していますね。このペースで行けば、正式な発表は来年初頭に持ち越されると予想されます。Release Notesに記載されている変更点には、相変わらずバグフィックスが多いのですが、とにかく今年最後の大仕事と認識し、徹底的にやってほしいと思います。それから、Mac OS X 10.1.1アップデータも先週初めに登場しました。Finderなどの表面的な機能追加はほとんど無いようですが、I/Oやネットワークなどのシステム内部はずいぶんと改良されているようです。うちのマシンでは、ネットワークで大量のファイルコピーをすると頻繁に発生していたエラーが、バージョンアップによりピタリと止まりました。すでにMac OS Xをメインシステムとしてバリバリ使われている方は、今すぐアップデートされることをお勧めします。
まずは、Quartz 2Dに関係する便利なユーティリティーAPIの紹介から始めようと思います。以下のサイトの「September 2001」の日付の箇所に、「Customizing Your Application Dock Tile」と「Dock Manager Reference」という2つのPDFドキュメントが登録されています。
◇Carbon Documents: What’s New
http://developer.apple.com/techpubs/macosx/Carbon/SiteInfo/whatsnew.html
これらのドキュメントには、アプリケーション側で「Dock」のTile(アイコンではなくタイルと呼ぶ)に追加情報を描画したり、そこで好みのメニューをポップアップさせる方法などが解説されています。そうした解説の中で、Tile上の画像描画に利用できるようにと、CreateCGImageFromPixMaps()というAPIが紹介されています。
このAPIを利用すれば、QuickDrawのPixMapをQuartz 2D用のImage(CGImageRef)へと簡単に変換することができます。加えて、画像のアルファーチャンネルに使われるマスク情報もPixMapとして渡すことが可能です。もし機会があれば、一度使い勝手を試してみるとよいでしょう。このAPIが定義されているヘッダーファイルはMacApplication.hですので、参考にしてみてください。
続いて、Quartz 2Dを利用したパタン描画の話に移りたいと思います。Contextに定義したPathの内部やフレーム(Stroke)をパタンで塗りつぶしたい場合には、別途パタン描画を実行するルーチン(CGDrawPatternProcPtr)を用意する必要があります。つまり、QuickDrawのように「パタン描画」という独立機能があるわけでなく、「どんなパタンで塗りつぶすのか?」は、利用者側で責任を持つ必要があるわけです。逆に言えば、パタンの種類がイメージ(PixMap)に固定されているQuickDrawとは異なり、Quartz 2Dの描画能力の範囲内であれば、どんな画像や図形(テキスト)でもパタンとして利用することが可能となります。
パタン描画ルーチン(CGDrawPatternProcPtr)が用意できたら、そのエントリーポイントをCGPatternCallbacks構造体のdrawPatternメンバーにセットし、その構造体アドレスをCGPatternCreate()というAPIに代入します。
この作業が正しく完了すれば、CGPatternCreate()は返り値としてCGPatternRefを返します。これをCGContextSetFillPattern()やCGContextSetStrokePattern()に代入し、塗りつぶしにパタンを利用することを宣言します。
その後、図形用Pathを定義してCGContextFillRect()やCGContextFillPath()を呼べば、パタンルーチンがその内部のみに適用され実行されることになります。描画が終了したら、使用済みのパタンはCGPatternRelease()で開放しておきます。ちなみに、CGPatternCreate()とCGPatternRelease()は、ヘッダーファイルのCGPattern.hに定義されていますが、CGContextSetFillPattern()とCGContextSetStrokePattern()はCGContext.hの方に定義されていますので注意してください。
さて、このような仕組みで実行されるQuatz 2Dパタン機能ですが、実際にサンプルソースを書いて動かしてみても何故だかうまく動きません?うまく動かないというより、まったく動かないのです?あれこれチェックしてみたところ、CGPatternCreate()にセットしたはずのCGDrawPatternProcPtrへと制御が渡らないようです。現状、Apple社から提供されているパタン描画サンプルプロジェクトが見あたらないので(無い可能性が大きい)、私の「やり方」が間違っている可能性も大です。しかし、なんとも納得いかないので色々と試行錯誤を繰り返してみましたが、結局はダメでした。ひょっとするとQuartz 2Dのパタン機能自体、まだ実装されていないのかもしれません(涙)。どなたか、Quartz 2Dのパタン機能を使い、うまく図形を塗りつぶすことができた方がいらっしゃいましたら、ぜひ私宛にご連絡をください。お待ちしております。
Quartz 2Dのパタンに関係するAPI(CGPatternCreate()など)定義をヘッダーファイルで調べてみると、そのコメントには、しっかり「in version 10.1 and later」と記載されています。確かにソース内でAPIを記載しても、リンクエラーが発生することはありませんし、呼び出すことでアプリケーションが落ちるようなこともありません。API自体は、Framework内にちゃんと実装されているようです。しかし、Mac OS X 10.0の時にも何度も遭遇したのですが、未だ「機能実装」が不完全なAPIがあるようです。「機能実装の準備まではしたが、Mac OS X 10.1の発表までに機能の完成が間に合わなくて取り残されてしまった」と言ったところでしょうか?こうしたAPIを、デベロッパー側が試行錯誤のすえ見つけ出さなければいけないのは、異常な事態です。Apple社には、こうした「取り残されAPI」についての正確な情報を、デベロッパー側にすみやかに提供する義務があると思います。
とりあえず、今回でQuartz 2Dの話は最後です。Mac OS X 10.2では、Quartz 2Dの機能も大幅にアップされるでしょう(そうじゃないと困る)。そうなれば、Appleサイトにも最新版(最終版?)ドキュメントが登録されると思われますので、その時にはアップされた機能内容を再度紹介したいと思います。
[小池邦人/オッティモ]
関連リンク:オッティモ
カテゴリ:グラフィックス, 小池邦人のプログラミング日記
先週の土曜日に発売されたiPodをいちはやく入手したにもかかわらず、1曲もプレイすること無しに修理に出さざるを得ないようになったユーザが少なからず存在するようだ。トラブルのポイントは、FireWireディスクのマウントを解除しないで、iPodのケーブルを抜いた場合に、iPod側のディスクが復帰できない状態になってしまうということである可能性が高い。その後に、AppleのマークとiPodのロゴが点滅し、プレイすることはできず、リセットなどもできないようだ。AppleのDiscussion Boardで報告が出ているが、iPodのディスクをフォーマットし直すことで直るなど、人によっては復旧ができている模様でもある。いずれにしても、FinderでFireWireディスクのケーブルを単に抜いてしまうと警告が出ることからも分かるように、FireWireはシステム的にはアンマウントが必要である。iPodとiTunes 2を使った場合の動作については、そうしたアンマウントの処理がどうなっているかは不明であるが、何らかの条件でケーブルを抜いてしまうと問題が出るということは可能性としては考えられる。
関連リンク:Apple マーク & iPod ロゴが点滅しつづけるトラブル
カテゴリ:メディアプレイヤ
Knowledge Baseに、iPodのハードディスクサイズは仕様書では5GBなのに、iPodあるいはマウントしたハードディスクの表示では、4.6GBになることが説明されている。これは、システム的には、1MBを1024×1024バイトとカウントするのに対して、ハードディスクの仕様上のサイズを算定するときは、1MBを1000×1000バイトとしてカウントしているからである。従って、5GBは50億バイトであるが、それを1024の倍数でカウントすると4.6GBとなる。(なお、50億÷1024^3=4.65661...となるはずなので、四捨五入とするとやはり微妙に違うと思われるが、その点についての説明はない)
関連リンク:iPod: About Hard Disk Size
カテゴリ:Knowledge Base(旧TIL), メディアプレイヤ
Mac OS X Server 10.xでは、/usr/sbin/watchdogというプロセスが常時稼働している。これについての解説が掲載された。watchdogは、常に起動しておかないといけないようなプロセスを監視し、必要に応じて再起動などを行うためのプロセスである。既定値では、SLPのデーモンであるslpd、SMB管理のためのデーモンであるsambaadmin、サーバ管理のデーモンであるserveradmin、メール管理のためのデーモンであるmailservice、Macintosh Managerのサーバであるmmのそれぞれのプロセスを監視するように設定されている。また、watchdogはハードウエアによっては、Mac OS X Server自身がハングアップしたときに自動的に再起動するという機能も提供している。watchdogに関する設定は、/etc/watchdog.confで行うことがでkる。この文書には、watchdog.confファイルの記述方法も説明されている。また、watchdogのマニュアルに詳しい説明を参照できるようにもなっている。(DNSのデーモンも、watchdog監視下で稼働させるように自動的に設定される模様だ。)
関連リンク:Mac OS X Server 10: About the Watchdog Process
カテゴリ:Knowledge Base(旧TIL), Mac OS X Server
Mac OS X 10.1では、iDiskサービスがWebDAVのプロトコルになったが、そのままではClassicでは利用できない。Mac OS XのFinderでiDiskのボリュームをマウントしても、Classicアプリケーションからは参照できないのである。Classic側からもiDiskへの接続が必要になるが、その方法が文書で公開されている。Classic側からもiDiskを使いたい場合は従来とおりAppleShareのプロトコルで接続すればよい。Mac OS XのFinderでの「サーバへ接続」の機能で、afp://idisk.mac.comに接続する。
関連リンク:Mac OS X 10.1: How to Use iDisk in Classic
カテゴリ:Knowledge Base(旧TIL), ネットワーク, Classic
Mac OS Xになって、Dockとデスクトップ上のアイコンの距離が離れるようになったが、これは意図した動作であることが文書で公開された。アイコンの場所は、Dockの位置やサイズを反映したものとなっていると説明されている。
関連リンク:Mac OS X 10.1.1: Desktop Area Underneath and Bordering the Dock is Reserved
カテゴリ:Knowledge Base(旧TIL), Mac OS X
Macのプログラマが集まるイベント「MacHack」は、次回は2002年6月20日〜22日に、ミネソタ州Dearbornで開催されることがアナウンスされた。2002年2月28日までに申し込めば参加費は$425となる。学生は$50となっている。さまざまなセッションに加えて、Hackコンテストとして、プログラミングのテクニックをソフトウエア作品で競い、思いもよらないとんでもないユーティリティが登場するなど、刺激的なイベントが毎年繰り広げられている。今回が17回目を数える。
関連リンク:MacHack
カテゴリ:イベント