Macintosh Developer Online (MDOnline)


2002年1月9日発行号 - iPhotoで記者会見報告



iPhotoはサムネールは作っていないんじゃないかと思っていましたけど、どうやら作っているみたいです。Picturesフォルダに深い階層でいろいろなフォルダがありますが、ある一定のサイズのサムネールはとりあえず作っておいてあって、それとかあるいはオリジナルとかをうまくつかってぐりぐりと画像サイズを変更できるようになっているみたいです(林さん、ご指摘ありがとうございます)。
それで、iMac発表会の様子の写真をさっそくiPhotoで取り込み、共有の機能を使ってWeb公開してみました。写真タイトルとかはいいかげんですけど、いちおう、それなりに写真は見られると思います。

 http://homepage.mac.com/msyk/PhotoAlbum2.html

写真はいずれも適当にトリミングはかけていますが、ここまで持ってくるのに、取り組みから公開までものの10分ほどです。デジカメ写真整理ソフトについては、以前からまともに使えるものはないぞと事ある毎に言ってきましたけど、やっと使えるものが出てきたという気がします。FinePixのソフトはいいという話は聞いていますが、フジのデジカメを買わないといけないですよね? だから、残念ながら使っていないのですが、Windows用を中心にいろいろなソフトを見てみたことがあるのですが、これといったのがないのです。iPhoto単にサムネールで一覧だけじゃなく、印刷するブックやWeb公開までをスムーズにできるところがいいですね。しかも、フィルムロールという考え方は非常にいいです。取り込んだ時点ごとでの分類が何もしなくても行われているというのが使いやすいですし、取り込むときにいちいちアルバムやフォルダを作らなくてもいいのも手軽なところです。編集機能も弱いのは確かだけど、トリミングと回転で十分という気もします。ただ、周辺をぼかしてトリミングというのがあれば完璧ですが。だけど、やっぱり画像ファイルをホーム以下にコピーするだけじゃなくって、自由な位置に置けるといいんだけどなぁ…。
(新居雅行 msyk@mdonline.jp


【MacWIRE配信予定】FlashGate Valueが一部の通信カードで不具合があるため無償で交換

ハギワラシスコムは、USB端子に接続するコンパクトフラッシュカードのアダプタ「FlashGate Value」に関して、製品の不具合があるために無償で回収交換を行うことになった。2001年12月27日に発売されているが、一部の製品で通信速度が非常に遅くなってしまうというものだ。PHSカードによってはこうした不具合が出ない場合もあるようだが、無償で無条件に交換することなった。製品を着払いで返品することに応じている。不具合を修正した製品は2002年1月中旬に出荷される予定である。なお、FlashGate Valueについては、2002年1月5日に発行したMDOnlineで、『MacOS Xで使えるもう1つのモバイルPHSアダプタ:FlashGate Value』として紹介している。

関連リンク:FlashGate Value製品回収のお知らせ
カテゴリ:周辺機器, インターネット全般


iPhoto向けのサンプルスクリプトが公開、そのままでは稼働しないが…

iPhotoを活用するためのスクリプト集がさっそく公開されている。写真画像をMailを使って送信する「Mail iPhoto Images」iPhotoで見えているサムネイルの元画像のファイルをFinderで見えるようにする「Show Image File」、iTunesやQuickTime Playerと組み合わせて写真にBGBを付けたムービーを作成する「Make Audio Card」、BGM付きスライドショーを作成する「Make Audio Slideshow」がある。後者の2つはQuickTimeのProキーが必要になる。
ところで、iPhotoはAppleScriptには対応していないのだが、なぜこうしたスクリプトがあるのだろうか? 実は、公開されたスクリプトはiPhotoのサムネールを、AppleScriptのアプリケーションにドラッグ&ドロップして実行するものである。AppleScriptのアプリケーションにとっては、Finder上でファイルをドラッグ&ドロップするのも、iPhotoからサムネールをドラッグ&ドロップするのも全く同じ情報が伝達されるというわけだ。つまり、iPhotoのドラッグ&ドロップにおいて、写真のオリジナルファイルの情報がデータとして組み込まれるという特性を利用した処理スクリプトなのである。
ただ、プログラムはいずれもそのままでは機能しない。プログラムの最初の方に、次のようなif文がある(「ツ」は半角で見えるはずだ)。

if ((folder of the item_info is false) and ツ
(alias of the item_info is false)) and ツ
(the file type of the item_info is in the type_list) or ツ
((the name extension of the item_info) is in the extension_list) then

ここの部分で最後の2行を取り除くなどして、次のように変更すると、とりあえずは処理に移るようになる(それでもエラーになる場合もあるが…)。

if ((folder of the item_info is false) and ツ
(alias of the item_info is false)) then

ここで、画像ファイルにファイルタイプとしてJPEGなどが設定されているものとして処理がなされているが、iPhotoは画像ファイルにはファイルタイプはつけない。よって元プログラムの3行目は、これらのスクリプト自体のバグだから取り除いて良しだろう。一方4行目であるが、理屈では動くはずであるが、日本語環境独特の問題なのかInternational Textと通常のTextの比較がうまくされない場合を経験したことがあるので、おそらくそうした問題が絡んで、is in演算子がうまく機能していないのだと思われる。取り除いた場合、テキストファイルでも処理がなされてしまうが、とりあえず動かす分には問題はないと思われるので、取り除いてしまおう。
これでとりあえずスクリプトは動かすことができるのであるが、スクリプト自体は、MailやiTunes、QuickTime Playerの処理が中心である。いずれにしても、iPhotoにあるデータを元になにかをするという方法は、Finderでのドラッグ&ドロップと全く同じ方法が使えることは確かである。問題は、AppleScriptアプリケーションにドラッグ&ドロップしないといけないという点での使い勝手ということになるだろう。たとえば、iPhotoでサムネイルを選択して、Script Menuからスクリプトを選ぶということは現状ではできないのである。

関連リンク:iPhoto Script
カテゴリ:デジタルカメラ, AppleScript


今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(15)ファイルタイプとクリエイタを設定する

Cocoa-Javaでのファイル処理クラスを紹介したが、それを受けて、Document-basedアプリケーションで、ファイルタイプやクリエイタを設定する方法を説明したい。文書ファイルを保存するという機能はNSDocumentクラスに組み込まれているが、少々複雑であるもの、ファイル書き込み処理はカスタマイズできるようになっている。NSDocumentでは、ある文書を保存するときに、指定したファイルにいきなり書き込むのではなく、一時的に別のフォルダにファイルを書き込んで、その後に、書き込んだファイルをユーザが指定したフォルダ位置にあるファイルとして移動するという作業を行なう。したがって、一時的に書き込むファイルをそのまま適当に残しておけば、バックアップファイルを作成すると言う機能までも組み込めるのである。
こうした仕組みは、NDDocumentでは次のようなメソッドで処理される。ファイルの書き込みを行うときには、writeWithBackupToFileというメソッドが実行され、そこからwriteToFileの4つの引数があるメソッドが呼び出され、さらにそこからwriteToFileの2つの引数のあるメソッドが呼び出される。その後に、以前に説明したdataRepresentationOfTypeメソッドが呼び出されるのである。以下は、NSDocumentに組み込まれている機能としてまとめておく。

☆文書の内容を指定したファイルに保存する
 boolean 〈NSDocument〉.writeWithBackupToFile( String fullDocumentPath,
     String documentTypeName, int saveOperationType);
 戻り値:
 引数:fullDocumentPath:保存する書類ファイルのフルパス
    documentTypeName:ドキュメントの種類を示す文字列
    saveOperationType:保存か名前を付けて保存かなどを示す

☆文書ファイルのバックアップを残すかどうかを判定する
 boolean 〈NSDocument〉.keepBackupFile();
 戻り値:falseを戻す

writeWithBackupToFileは、もし、keepBackupFileメソッドの戻り値がfalseなら、バックアップファイルは残さない。NSDocumentに定義されたkeepBackupFileはfalseを戻すのであるが、これをtrueを戻してバックアップファイルを残すようにしたいのなら、NSDocumentを継承したクラス(ここではMyDocumentクラス)で、keepBackupFileメソッドをオーバーライドして、単にtrueをモドすようにすればいい。

☆文書をファイルに書き込む
 boolean 〈NSDocument〉.writeToFile( String fullDocumentPath,
    String documentTypeName, String fullOriginalDocumentPath,
    int saveOperationType);
 戻り値:書き込みが成功したらtrue、失敗したらfalse
 引数:fullDocumentPath:実際に書き込みを行う文書ファイルのパス名
    documentTypeName:文書の種類を示す文字列
    fullOriginalDocumentPath:ユーザが指定した文書ファイルのパス
    saveOperationType:保存か名前を付けて保存かなどを示す

☆文書をファイルに書き込む
 boolean 〈NSDocument〉.writeToFile( String fileName, String type);
 戻り値:書き込みが成功したらtrue、失敗したらfalse
 引数:fileName:実際に書き込みを行う文書ファイルのパス名
    type:文書の種類を示す文字列

要は、次のようなメソッドの連鎖が行われるのである。

writeWithBackupToFile
└→writeToFile(4)
  └→writeToFile(2)
    └→dataRepresentationOfType
    ┌─┘
  ┌─┘
┌─┘
└→keepBackupFile
┌─┘

これらのうち、dataRepresentationOfTypeは必ずオーバーライドして定義しないといけないメソッドだが、あとは必要に応じてオーバーライドする。その意味ではデフォルトの動作を知っておく必要はあるだろう。ここで、ユーザは実施に保存したいファイルのファイル名とフォルダを指定するのだが、それは、writeToFileでの引数fullOriginalDocumentPathとしては得られる。一方、writeToFileでの引数fullDocumentPathあるいはfileNameでは、実際に保存を行う一時的なファイルの名前が得られるのである。たとえば、保存するファイルが、

/Users/msyk/b.medit

だったとした場合、たとえば、fileName引数で得られる実際に書き込みを行うファイルのパスは、

/private/tmp/501/Temporary Items/com.apple.NSDocument_6567_32252318_1/b.medit

といったものだ。/tmpディレクトリにあることや、ファイル名自体は実際のファイル名と同じであるあたりがポイントになるだろう。
dataRepresentationOfTypeではファイルに保存すべきデータはNSData型で作っておくが、writeToFileでは、そのNSData型データを、ファイルに保存するというわけである。
もし、NSDocumentで想定されているような、ファイルを開いたときにファイルの全データをロードし、保存時には全データをストアするというような場合には、特に上記のメソッドはオーバーライドする必要はないだろう。一方、ファイルへのストレージを併用するような場合だと、書き込みはもちろん、読み込み時にも関連するメソッドをオーバーライドして、必要な情報だけを取り込むということを実現しなければならない。また、文書ファイルが複数のファイルで構成されるような場合でも、writeToFileあたりのメソッドをオーバーライドする必要がある。なお、writeToFileなどのメソッドをオーバーライドしたときには、必要に応じて元になっているクラスの同名のメソッドを呼び出しておくことは忘れないようにしよう。

では、ファイルタイプとクリエイタを保存したファイルに設定するには、writeToFileの引数が2つのメソッドをオーバーライドして…と思ってなんとなくうまく動きかけたのだが、上書き保存するとファイルタイプが消えてしまう。どうやら、一時的なファイルに対してファイルタイプやクリエイタを設定するのはできているけどもそれをコピーする段階で、BSDレベルのコールを使っているせいだろうか(?〜想像だが)、情報がすべてコピーされていないような気がする。そこで、MyDocumentクラスに次のように、メソッドをオーバーライドした

public boolean writeWithBackupToFile( String fullDocumentPath,
String documentTypeName, int saveOperationType) {
boolean retVal = super.writeWithBackupToFile(fullDocumentPath,
documentTypeName, saveOperationType);
int fTypeInt;
if(documentTypeName.equals("MOSAEditor Document"))
fTypeInt = NSHFSFileTypes.hfsTypeCodeFromFileType("‘rtf ’");
else
fTypeInt = NSHFSFileTypes.hfsTypeCodeFromFileType("‘TEXT’");
Integer values[] = {
new Integer(NSHFSFileTypes.hfsTypeCodeFromFileType("‘ome9’")),
new Integer(fTypeInt)};
String keys[] = {"NSFileHFSCreatorCode", "NSFileHFSTypeCode"};
NSDictionary attributes = new NSDictionary(values, keys);
NSPathUtilities.setFileAttributes(fullDocumentPath, attributes);
return retVal;
};

(上記のソース中‘’の部分は実際には半角のシングルクォート)

まず最初に、一連のNSDocumentで定義されたデフォルトの作業をやらないといけないので、super.writeWithBackupToFileによって、元のメソッドの呼び出しを行う。その後に、保存された文書ファイルに対して、ファイルタイプとクリエイタの設定を行っているのである。文書のsh類に応じてファイルタイプが異なる。ファイルタイプやクリエイタは、NSDictionaryクラスのオブジェクトで指定するが、タイプやクリエイタは整数値でなければならない。その整数値は、NSHFSFileTypesクラスのhfsTypeCodeFromFileTypeメソッド(長い!)で得られる。なお、ファイルタイプとクリエイタだけを指定したいので、NSDictionaryのキーにはそれに相当する文字列だけを指定しておけばいいというわけである。
(この項、続く)

カテゴリ:ユーザインタフェース, Cocoa, 今から始めるCocoaプログラミング


KBase》iPhotoに関する文書が公開、スペルチェックができることなど

iPhotoに関する文書がKnowledge Baseに公開されているので、それらをまとめておこう。

◇iPhoto: Information and Download
 http://www.info.apple.com/kbnum/n120049
iPhotoのダウンロードや実行環境の説明などがある。Mac OS X専用であり、G3で400MHz以降の機種が動作環境となっている。

◇iPhoto: How to Spell Check
 http://www.info.apple.com/kbnum/n61005
iPhotoにはスペルチェックの機能があるが、その利用方法が説明されている。「編集」メニューの「スペル」を使うが、もちろん英語のスペルチェックのみである。

◇iTools: How to Edit HomePage Photo Albums Created With iPhoto
 http://www.info.apple.com/kbnum/n61007
iPhotoで作成したホームページは、iToolsのHome Pageサービスにログインして編集作業をすることができる。

◇iPhoto: Prices for Prints and Books Are in U.S. Dollars
 http://www.info.apple.com/kbnum/n61009
印刷やブック作成サービスは、アメリカドルでの金額が表示されており、アメリカおよびカナダの利用者のみの受付となる。

◇iPhoto 1.0: ’Changes to your account could not be saved’ Alert Message
 http://www.info.apple.com/kbnum/n61006
印刷サービスを注文したときに、クレジットカードの期限がきれている場合に出てくるエラーについて記載されている。

カテゴリ:Knowledge Base(旧TIL), デジタルカメラ


【MacWIRE配信予定】MDOnline Digest》年末年始のMDOnlineから

――――この原稿は、MacWIRE様に掲載していただくための原稿で、MDOnline読者様向けにはすでに周知の事実も含まれていますが、あらかじめご了承ください。

Macintosh関連の開発情報や技術情報をお届けしている有償の日刊メールマガジン「Macintosh Developer Online(MDOnline)」で、2001年の年末から2002年の年始にかけてお届けした内容のダイジェストを紹介しよう。

2001年の年末には、ちょうど、Mac OS Xで使える、あるいは使えると想定される通信アダプタが相次いで発売されたので、それらを紹介した。FlashGate Valueは正式には対応品とはなっていないものの、試用した範囲では問題なくMac OS Xでもインターネット接続ができた。

2002/1/5●MacOS Xで使えるもう1つのモバイルPHSアダプタ:FlashGate Value
2001/12/26●Browsing Mac OS X》Slipper Xを使う(1)ちょっとでかいがやっとモバイルできるようになった
2001/12/26●Browsing Mac OS X》Slipper Xを使う(1)モバイル通信を考える

2002年1月に発売されるMicrosoft OfficeのMac OS X対応版については、Entourageについての紹介をしてみた。ユーザインタフェースの違いもあるが、アラームはOfficeのアプリケーションが起動してなくても出てくるなど、使い勝手も高まっている。

2001/12/25●Microsoft Office v.X for MacのEntourageを使ってみる

CarbonLib 1.5のSDKが正式にリリースされており、Carbonプログラマは要チェックというところだろう。Mac OS XのCarbonは1.4であるが、CarbonLib 1.5はMac OS Xの機能を取り入れており、内容的には揃っているものと言えるようだ。

2001/12/25●CarbonLib 1.5 SDKが完成、諸機能をMac OS X 10.1と整合

連載のコーナーのうち、倉橋浩一氏の「WebObjects Practice」では、「倉橋浩一、じつはWebObjectsで飯食ってます」のコーナーで紹介した掲示板をWebObjects 5向けに移植するときの実際の方法を解説している。また、「倉橋浩一、じつはWebObjectsで飯食ってます」では、Mac OS X 10.1とWebObjects 5についてのポイントを説明している。

2001/12/28●倉橋浩一のWebObjects Practice》WebObjects 4.5で作った掲示板をVer.5に対応する
2001/12/28●倉橋浩一、じつはWebObjectsで飯食ってます》Mac OS X 10.1とWebObjects 5

森下克徳氏の「崖っぷちからWebObjects」は引き続いてMySQLのライセンスについての解説だ。大津真氏の「XはUNIXでサーバで」は、以前に紹介したBIND 9をMac OS Xで稼働させる方法の補足で、リモート管理をできるようにする方法が解説されている。

2001/12/28●森下克徳の崖っぷちからWebObjects》第21回〜MySQLでコミュニティサイトを作るv5/FPLって?
2001/12/25●大津真=XはUNIXでサーバで》BIND 9.2の補足説明

「今から始めるCocoaプログラミング」のコーナーでは、以前より「文書ファイルを扱うアプリケーションを作る」として、Cocoa-JavaでのDocument-basedアプリケーション作成を紹介しているが、ちょうどニュースも少なくなってきた時期なので、以下のように、テーマはどんどんと進んでとりあえずのエディタアプリケーションとしてはファイルの保存や開くことに対応するところまでできあがった。

2001/12/25●(6)既存のnibファイルの設定を見てみる
2001/12/25●(7)文書ウインドウにNSTextViewを配置する
2001/12/27●(8)新規にウインドウを開くときの処理
2001/12/27●(9)NSTextViewの使い方
2001/12/28●(10)保存結果と文書ファイル
2001/12/28●(11)ファイルを開く
2001/12/28●(12)開いたときにカーソルを点滅
2001/12/28●(13)Revertを組み込む

AppleScript Studioを紹介する「AppleScript Working」のコーナーでは、個別のコンポーネントとに絞っての説明に入った。まずはボタン系のコントロールから解説しているが、チェックボックスの利用方法はちょっと独特である。

2002/1/5●AppleScript Working》ボタン系のコントロールを使ってみる

★MDOnlineは、ローカスが発行するオンライン情報メディアで、日刊のメールマガジンを中心に、Macintoshの開発情報や技術情報をお届けしている。過去の記事はWebサイトですべて参照できるようになっている。Mac OS Xの話題を積極的に取り上げるとともに、Knowledge Baseの公開情報を要約するなどAppleからの情報をフォローし、開発ツールやシステム関連ユーティリティなどのサードパーティ情報も扱う。購読料は有償で、年間8,000円、半年5,000円、1か月1,000円(消費税込みの基準価格、支払い方法により金額が増減する)。購読はWebページから申し込むことができ、郵便振替、クレジットカード(QQQシステム)、WebMoneyやBitCash(プリペイドカードやクレジットカードでのオンライン購入)での支払いに対応している。
Macintosh Developer Online

カテゴリ:MDOnline Digest