鶴薗さんの記事のPDFがけっこう好評なので、他の記事もPDF化を…というお声もいただいていますが、すみません、ちょっと実現しそうにないです。メールでは読みづらいですし、かといってWebだといいとうわけではないのは重々承知しています。いずれにしても、創刊時からの違いと言えば、Webの記事に画像がエンベッドされるようになったくらいで本質は同じままになっているのは確かです。なんとかしたいですし、すでにWebやメールの技術は固まっているので、今解決すれば長年持つことは分かっているのですが、いかんせん弱小媒体の悲しさ、予算がまったくないため、私の手元でできる範囲ということになってしまいます。いずれは、記事を指定すると自動的にPDFを作成する…というところをやりたいです。個人でニューズレターをやるとなると、PDF作成は自動化しないとさすがに追い付きません。個別に手作業をするとすれば、記事量は半分になると思っていただいていいでしょう。今のMDOnlineはある意味では、紙の出版物で言う流通をバイパスしているだけでなく、実は編集と言う作業もかなりバイパスしています。何らかの方法で実現したいという意志はありますので、その点はご理解下さい。だけど、サーバすら買えないに近い状況なのに、PDF関連のライブラリで使いやすそうなのはけっこう高価ですよね…。Mac OS XでPDFに落とすのが実はいちばん楽な方法かもしれませんが、サーバ周りの状況って変化が大きいので常にウォッチが必要ですね。
それで、記事を書きっぱなしというのもどうかと思いました。もちろん、過去記事のリライトも必要ではありますが、それもなかなか手が付けられません。強いニーズがあればやりますが、どうなんでしょうか。そこで、MDOnlineで蓄積された記事をなんとか書籍として出版するということを考えていますし、実際に動きだしています。書籍になるのであれば、収入になるので、仕事として成立するわけです。ただ、MDOnlineでお金を払って、また書籍でお金を出すのかよと思われるかもしれませんが、そこのところは平にご容赦ください。やはりビジネスとして成り立たせるためにこうしたことが優先されるのはご理解ください。ただ、書店で買ってくれというのもなんですから、割り引き販売を可能な限り行います。ただし、通販となりますが、コンビニ決済のSmartPitで準備を進めています。よろしくお願いします。出版スケジュールに入ったくらいに予告をします。
(新居雅行 msyk@mdonline.jp)
今回から、何回かに分けて、Carbonアプリケーションから利用できるMac OS X 10.1特有の機能を紹介したいと思います。まずは、Mac OS X 10.1に搭載されているDock Managerを活用してみます。最初は、アプリケーションが起動するとDockから利用できるようになる、Dockメニューについての解説です。
最近、Macintoshのハードウェア方面は、新機種発表などで活気があるのですが、システムを含めたソフトウェア方面に関しては、随分と静かな日々が続いております(笑)。CarbonLibの新しいバージョンも登場していませんし、Mac SO X 10.2についての噂もすっかり途絶えてしまいました。3月のMACWORLD Expo/TokyoでのMac OS X 10.2発表は、ちょっと無理でしょうか(紹介ぐらいあると嬉しい)。この調子だと、正式発表はWWDC 2002という事になりそうです。ソフトウェアと同様に、CarbonやMac OS Xに関する新しいドキュメントの登場も、今年になってピタリと止まってしまい、まったく進展がありません。
Dock Managerについての参考資料は、昨年の8月に登録された2つPDFドキュメントが最後です。それらは、以下のApple Carbon Documentサイトからダウンロードすることができます。
◇Dock Manager
http://developer.apple.com/techpubs/macosx/Carbon/HumanInterfaceToolbox/DockManager/dockmanager.html
そのうちの「Customizing Your Application Dock Tile」は、20ページのドキュメントで、もう片方の「Dock Manager Reference」は、わずか10ページのドキュメントです。「Customizing Your Application Dock Tile」の方には、Dockのタイル(何故だかアイコンとは呼ばない)上に画像を描画する方法や、その上部にアプリケーション固有のメニューをポップアップさせる方法などが詳しく解説されています。「Dock Manager Reference」の方は、そうした仕組みを提供するために使われる、Dock Manager API(全部で10種類)の引数の意味や使用方法などが解説されています。
特別な用意をしていないアプリケーションの場合には、以下の様なDockメニューが表示します。
アプリケーションがDockに未登録であれば、「Finderに表示する」という項目の上に「Dockに保存する」という項目が追加されます。メニューの最上部には、現在アプリケーションでオープンされているウィンドウのタイトルが並び、それを選択することでウィンドウの切り替えを行えます。この仕組みは、システムのウィンドウメニューが提供している機能と同等です。アプリケーションは、このタイトル項目の下に、独自のメニュー項目を追加することが可能なわけです。
アプリケーションのメニュー構築に、"MENU’リソースを利用している場合には、Dock ManagerのSetApplicationDockTileMenu() APIを使えば、簡単にDockメニューを作成することができます。
上記のsetUpMenu()ルーチンでは、メニューバーを構築した後に、ID=131番の"MENU’リソースを呼び込み、その最初の項目にチェックマークを付けてから、SetApplicationDockTileMenu()でDockメニューとして登録しています。ですから、このアプリケーションでは、ウィンドウメニューの左側のメニューとまったく同じ内容の物が、そのままDockメニューに利用されるわけです。
では、Dockメニューが選択された時の処理は、どのように記述したら良いのでしょうか?これは、通常のメニュー処理とまったく同じです。‘xmnu’リソースに各メニュー項目のコマンドID(OSType)を登録しておき、それをCarbon Event Handlerで受け取って処理を分岐させます。今回のように、メニューバーのメニューの一部をDockメニューとして再利用している場合には、処理はどちらも同じですので、Dockメニュー用に特別な処理を記述する必要はありません。
次に、アプリケーションがNibファイルからメニューを構築している場合についてです。まず、Interface Builderを起動し、「DockMenu」という名称のメニューオブジェクトを作成します。各メニュー項目には、InfoウィンドウでコマンドIDを割り当てておくことを忘れないでください。
メニューオブジェクトが完成したら、そのNibファイルに「DockMenu.nib」と名称を付け保存します。その後、Project Builderを起動させ、保存しておいたNibファイルをプロジェクトウィンドウの「Resources」グループに登録します。
続いて、プロジェクトウィンドウからファイルリスト右側の「ターゲット」ダブを選び、アプリケーションと同じのターゲット名をクリックします。すると、ウィンドウの右側にターゲットに対して各種設定をするためのダイアログが表示されます。そこの「アプリケーション設定」ダブを選んで、右上部の「詳細設定」ボタンをクリックします。
そこには、アプリケーションバンドルに含まれる「Info.plist」(XMLテキスト)の内容が表示されています。そこで、プロパティリスト「AppleDockMenu」、クラス「文字列」、値「DockMenu」を一行追加します。値として代入する「DockMenu」が、自動で読み込まれるNibファイルの名称なのですが、「.nib」の拡張子部分は省略します。設定が終了したら、アプリケーションをメイクして起動させると、Nibファイルで保存しておいたメニューをDockメニューとして利用できます。メニュー選択による処理の実行は、SetApplicationDockTileMenu() の場合とまったく同じで、メニュー項目に付けたコマンドIDを認識してCarbon Event Handllerで行います。
アプリケーションの状況により、メニュー項目の内容を差し替えたい場合には、イベントクラスがkEventClassApplicationで、イベント種類がkEventAppGetDockTileMenuでのCarbonイベントを受け取った時点で処理するのが便利です。このイベントは、ユーザがDockでメニューを表示した場合に発生します。以下は、そのEvent Handlerルーチンの一部です。
ここでは、強制的にID=131番のメニューへと内容を差し替えています。差し替えるMenuRefの値は、SetEventParameter()ルーチンでシステムに渡してやればOKです。
次回は、Dockのタイル上に、オリジナルの図形や画像を描画する方法の話です。Mac OS X 10.1付属のMailアプリケーションが、未読メール数をDockタイルに表示していますが、あの機能を実現している仕組みについて解説する予定です。
[小池邦人/オッティモ]
関連リンク:オッティモ
カテゴリ:ユーザインタフェース, Carbon/CF, 小池邦人のプログラミング日記
では、細かく見ていきます。
// 実行準備
task = [ [ NSTask alloc ] init ]; // 生成と初期化
[ task setStandardOutput : [ NSPipe pipe ] ]; // 標準出力変更
[ task setStandardError : [ task standardOutput ] ]; // 標準エラー変更
[ task setLaunchPath : [ arguments objectAtIndex : 0 ] ];
// コマンド設定
[ task setArguments : [ arguments subarrayWithRange :
NSMakeRange( 1, ([arguments count] - 1) ) ] ];
// パラメータ設定
[ task launch ]; // コマンド実行
NSFileHandle *fout = [ [ task standardOutput ] fileHandleForReading ] ];
関連リンク:Cocoaはやっぱり!
カテゴリ:Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
Cocoaのフレームワークには、通知 ( Notification ) の仕組みがあります。「 こういうことが起きたらここに通知してほしい 」ということを通知センター ( NSNotificationCenter ) に知らせておくと、通知が発生した時点で、指定のインスタンスの指定のメソッドを呼んでくれます。そのメソッドには通知情報 ( NSNotification ) が送られますので、その中身を見ると、通知の種類や通知に附随するデータなどを取得することができます。
この通知というのは、単なるコールバックの仕組みではありません。あるオブジェクトが通知センターに通知を登録したら、その通知を待っている全てのオブジェクト対して通知が送られるのです。この通知を待っているオブジェクトのことをオブザーバ ( Observer ) と呼びます。
◇通知の概念図
ファイルハンドルは、読み出せるデータがあるときに通知をする機能がありますので、TaskWrapperは、その通知を受け取れるように通知センターにオブザーバ登録を行います。それを行っているのが以下です。
// 標準出力からのデータを受け取るための通知設定
[ [ NSNotificationCenter defaultCenter ]
addObserver : self
selector : @selector(getData:)
name : NSFileHandleReadCompletionNotification
object : [ [ task standardOutput ] fileHandleForReading ] ];
[ [ [ task standardOutput ] fileHandleForReading ]
readInBackgroundAndNotify ];
関連リンク:Cocoaはやっぱり!
カテゴリ:Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
◎ コマンドの実行結果の受け取り
これで通知が発生するようになりましたので、実行したコマンドからの出力の受け取りの方法について説明します。先程、通知が発生した時に呼び出されるメソッドに指定したgetData : を見ていきます。通知を受けるメソッドは、必ずNSNotificationクラスのパラメータを1つ持たなければなりませんので以下のようになっています。
// ソース:MoriarityController.m/メソッド:getData
- (void) getData : (NSNotification *) aNotification {
// 出力されたデータを取得
NSData *data = [ [ aNotification userInfo ]
objectForKey : NSFileHandleNotificationDataItem ];
if ( [ data length ] ) { // 文字列に変換して出力
[ controller appendOutput :
[ [ [ NSString alloc ] initWithData : data
encoding : NSUTF8StringEncoding ]
autorelease ] ];
} else {
[ self stopProcess ]; // データがとれなくなったら終了
}
if ( task ) { // タスクがある時は、再度、通知を発行してもらう
[ [ aNotification object ] readInBackgroundAndNotify ];
}
else { // タスクがなくなっていたら終了 ( エラー処理 )
[ self stopProcess ];
}
}
// ソース:MoriarityController.m/メソッド:stopProcess
- (void) stopProcess {
[ controller processFinished ]; // コントローラー終了処理
controller = nil;
// オブザーバー削除
[ [ NSNotificationCenter defaultCenter ]
removeObserver : self
name : NSFileHandleReadCompletionNotification
object : [ [ task standardOutput ] fileHandleForReading ] ];
[ task terminate ]; // コマンド実行中止
}
関連リンク:Cocoaはやっぱり!
カテゴリ:Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
液晶ディスプレイタイプの新型iMacに関するDeveloper Noteが公開された。iMacに関する詳細なスペック、新機能の一覧、そして内部的なブロックダイアグラム、CPUやメモリ、入出力関連ポートの仕様などを参照することができる。メモリは、168ピンのDIMMスロットと144ピンのSO-DIMMスロットがあり、いずれも、PC133規格となっている。168ピンの方は本体内部にある。ユーザによる拡張ができるのは144ピンのSO-DIMMの側となっている。
関連リンク:iMac Developer Note
カテゴリ:アップルからの開発資料, iMac
◇Mac OS X: You Forgot Your Password
http://www.info.apple.com/kbnum/n43144
◇Mac OS X: You Can’t Log On To Your Computer
http://www.info.apple.com/kbnum/n43145
Mac OS Xにログインできないときやパスワードを忘れたときの対処が記載されている。まず、アカウント名やパスワードの大文字小文字に気をつける。それでもだめなら、管理権限のアカウントでログインしてパスワードを書き換える。管理権限のあるアカウントのパスワードを忘れたなら、Mac OS XのCD-ROMで起動しInstallerでパスワードのリセットを行う。
カテゴリ:Knowledge Base(旧TIL), ユーザ管理, Mac OS X
アスキーは、REALbasicの最新版Ver.4の英語版のライセンス販売を開始した。価格はStandard版が15,500円、Pro版が46,000円となっている。最近のアップデートでは直前のメジャーバージョンからのアップデートしか受け付けなかったが、Ver.4では、それ以前のVer.2.0や3.0からのアップデートも受け付けるようになった。また、2002年2月8日までに「英語版Ver.3.0から3.5へのアップグレード」を申し込んだ場合には、Ver.4.0への無償アップグレードができる。アップグレード価格は以下のサイトを参照していただきたい。なお、日本語版のVer.4.0については、後日にアナウンスがあるとしている。
関連リンク:REALbasic日本語版
カテゴリ:REALbasic
Technical Q&Aに、アプリケーションの中でAppleScriptの実行を行う方法が掲載されている。プログラム中でテキストで与えたAppleScriptのプログラムを実行する方法や、あるいはAppleEventの送信を行って、スクリプトと同等の処理を行う方法が、詳細なサンプルプログラム付きで示されている。題材にしているのは、Mailアプリケーションに対してスクリプト処理で自動的にメールを送信させるものである。いずれも、AppleEvent Managerや、OSA Component関連のAPIを利用するもので、Inside Macintosh: Interapplication Communications等で知られているものであるが、一部に微妙に違いがあるので、AppleScriptやAppleEvent関連のプログラムを作成しているプログラマはチェックを入れておくのが良いだろう。AppleScriptの実行に関しては、Inside MacintoshではOSAExecuteというAPIを使っているが、OSAExecuteEventを使っている。また、コンパイルしたスクリプトを保存しておき再利用する方法についてのヒントとなるようなことも記載されている。プログラムはC言語で示されているが、テキストで記載したAppleScriptのプログラムを実行する関数はほぼそのまま再利用できると言ってよいだろう。
関連リンク:QA1111:Calling an AppleScript and providing parameters from an Application
カテゴリ:Technical Q&A, AppleScript
Mac OS X 10.1以降にリリースされたAppleScriptの各バージョンのリリースノートがKnowledge Baseで参照できるようになっている。文書へのリンクだけを紹介しておこう。
◇AppleScript 1.7 for Mac OS X 10.1: Release Notes
http://www.info.apple.com/kbnum/n75205
◇AppleScript 1.8.1 for Mac OS X 10.1.2: Release Notes
http://www.info.apple.com/kbnum/n75206
◇AppleScript 1.7 for Mac OS 9 and Classic: Release Notes
http://www.info.apple.com/kbnum/n75207
カテゴリ:Knowledge Base(旧TIL), AppleScript
◇iDVD: How to Create NTSC and PAL format DVD discs
http://www.info.apple.com/kbnum/n50156
iDVDはNTSCとPALの両方の規格に対応している。新しいプロジェクトを作成するとき、システムの言語設定に対応して適切なものが作成される。環境設定で、どちらの規格のプロジェクトを作成するかを指定できる。既に作ったプロジェクトのNTSCとPALとの変換についてはサポートされていない。
◇iDVD: How to Manage Hard Disk Space
http://www.info.apple.com/kbnum/n50157
iDVDではエンコード結果のファイルをハードディスクに作成する。60分のプロジェクトで12GBほどだが、エンコード結果は3.5GBほどのサイズになる。このエンコードファイルはプロジェクトのフォルダに残るが、不要であれば環境設定でプロジェクトを閉じるときに削除するという設定を利用すると良い。
◇iDVD: How to Prepare Your iMovie to Work with iDVD
http://www.info.apple.com/kbnum/n50158
iMovieの編集結果をiDVDで使う場合、ムービーをQuickTimeムービーで書き出す必要がある。そのときの操作方法が説明されているが、iMovie 2.0.3以降では、iDVD向けの書き出し機能をメニューから呼び出せばよい。フォーマットは最高クオリティで大きいサイズに指定すれば良い。
◇iDVD: How to Monitor the Size of Your DVD Disc
http://www.info.apple.com/kbnum/n50159
iDVDでの書き込むディスクのサイズと、残りのサイズを、分単位で表示することができる。その表示内容が記載されている。
◇iDVD: Players that Support DVD Discs Created with iDVD
http://www.info.apple.com/kbnum/n50149
iDVDで作成したディスクは最近のDVDプレイヤでは参照ができる。ディスクがきちんと作成されたものかを確認するには、ドライブに装着して、DVD Playerを起動して再生できるかを調べれば良い。
カテゴリ:Knowledge Base(旧TIL), メディア制作
◇iTunes 2: Window Titles Are Blank
http://www.info.apple.com/kbnum/n61030
ディスプレイの色数設定が256色だと、ウインドウのタイトルに何も表示されなくなってしまうので、32000色以上の設定にする必要がある。Mac OS XおよびMac OS 9のいずれのiTunesでもそうなる。
◇iTunes 2: ’Error -208 Cannot Open iTunes Music Library’ Alert
http://www.info.apple.com/kbnum/n61031
iTunes Music Libraryが開けないというメッセージが出た場合、いったんiTunesを終了して、DocumentsフォルダにあるiTunesフォルダの中のiTunes Music Libraryファイルをゴミ箱に捨てる。そしてiTunesを起動するとファイルが作成できるが、場合によってはプレイリストの作り直しが必要になるかもしれない。
◇iTunes 2: Alert Appears When You Disconnect Nomad While Updloading
http://www.info.apple.com/kbnum/n61034
Nomad Jukeboxに転送中にケーブルを抜くと、意味不明なメッセージが表示される。いずれにしても、転送されるのを待ってケーブルを抜くようにする。
カテゴリ:Knowledge Base(旧TIL), メディアプレイヤ
◇iPhoto: How to Make a QuickTime Movie of Your Photos
http://www.info.apple.com/kbnum/n50154
iPhotoでは写真のスライドショーをQuickTimeムービーにすることができる。その作成方法が説明されている。
◇iPhoto: Thumbnail Does Not Update After Photo Is Edited
http://www.info.apple.com/kbnum/n61037
外部エディタで編集した写真のサムネイルが更新されない場合、一度iPhotoのエディタでなにか変更をしてそしてやり直しをして元に戻す。そうするとサムネイルが更新されている。
◇iPhoto: Revert to Original Dimmed After Editing With an External Editor
http://www.info.apple.com/kbnum/n61036
外部エディタで編集した写真は、オリジナルに戻す機能は使えなくなる。
◇iPhoto: How to Rotate Photos
http://www.info.apple.com/kbnum/n61035
iPhotoでは、写真を回転させるボタンがあり、それを図示している。クリックにより反時計回りに回転するが、optionキーを押しながらクリックすると時計回りになる。また、複数の画像に対しても適用できると同時に、「やり直し」にも対応している。
カテゴリ:Knowledge Base(旧TIL), デジタルカメラ
デュアルプロセッサマシンで、サウンドを再生すると、音が途切れるという現象がMac OS X 10.1.1までに見られたが、10.1.2へアップデートすることでその問題は解消する。
関連リンク:Mac OS X: Audio Playback Skips on Computers With Dual Microprocessors
カテゴリ:Knowledge Base(旧TIL), Power Mac
QuickSilverタイプのPower Mac G4に搭載されたCD-RWドライブのファームウエアの日本語版アップデータが公開されている。英語版はすでに公開されているが、日本語版とドイツ語版が新たに公開された。アップデートすることで、スリープ動作からの復帰後の動作が改善される。なお、アップデータは、Mac OS 9で起動して利用できるようになっている。
関連リンク:Power Macintosh G4 CD-RW Firmware Update: Information and Download
カテゴリ:Power Mac