MOSA Multi-OS Software Artists

MOSAはソフトウェア開発者を支援します

  • iPhone/iPod touch アプリ紹介
  • MOSA掲示板
  • 活動履歴
  • About MOSA(English)

MOSA Developer News[MOSADeN=モサ伝]第235号

2007-01-16

目次

  • Macworld Conference & Expo San Francisco 2007 レポート  堀口 幹城
  • 「Wonderful Server Life」       第33回  田畑 英和
  • 藤本裕之のプログラミング夜話  #106
  • 高橋真人の「プログラミング指南」  第104回
  • ニュース・解説                小池 邦人

Macworld Conference & Expo San Francisco 2007 レポート  堀口 幹城

 MOSA会員の皆様、こんにちは。
 バックスクラチャイープランオフィスの堀口です。今回初めて、モサ伝にレポートを書く事になりました。文章表現のいたらないことがあると思いますが、お許しください。

 今年もMacworld Conference & Expo San Francisco(MacExpoSF)に行ってきました。MacExpoSFは、一昨年、去年と、今回で3回目です。

 さて、今回の感想ですが、基調講演の内容については、すでにインターネット上のサイトで報告されていますので、そちらにおまかせして、展示会場についての報告を述べたいと思います。今回の展示会場は、SouthとNorthの一部が使われ、展示会場が広くなっていました。(昔から来ている人に言わせるともとに戻ったらしい)

 Appleブースについて、展示会場の開場直後に展示会場に入ったのですが、Southホール中央のAppleブースで最初に見たのがブース手前中央に並んでいる、“Apple TV”。
 大画面液晶TVに接続された、“Apple TV”が何台も並んでいる。当然、今回発表された製品であるため、人だかりがすごい状態。説明員の方々も大忙しって感じです。それでも何とか写真を撮ったりはできました。それからブース内には2つの巨大モニターがあり、一つは“iPhone”、もう一つは“Apple TV”の説明をしていました。(基調講演時とほぼ同じ内容)こちらも視聴している人が多く通り抜けるの大変な状態です。ブースの両端にショーケースに入った“iPhone”が展示されて、(それも、ちょっと高い位置に)ここも人だかりだが、ショーケース脇に警備員がいてショーケースに触れると怒られます。

 Appleブースの他の展示として、“iLife06”、“iWork06”、“iTunes+iPod”、“Final Cut Studio”等がブースの両脇にあったが、こちらは今回真新しいものがなかった為、あまり人気がなく説明員も暇そうにしていました。尚、今回発表のあった“AirMac Extremeベースステーション”の展示は見られませんでした。

Apple以外のブースについて、まずはApple以外のブースについて報告を述べる前に、過去2年のMacExpoSFの傾向について。2005年がMac Expoと言うよりはiPod Expoと言う感じの展示がメインだった。2006年はiPod周辺機器メーカ(ほとんどがiPodのケースを扱っていたメーカ)が淘汰され、少しずつではあるがOSXのデベロッパが元気になり始めた感じがした。で、今年のMacExpoSFですが、

1.iPodの周辺機器が再び多数出展されている。
 特に、iPodのケース関係が多数出展。2年前に出展されているケースとは違い、材質やデザインに趣向をこらしたものが多くなってきています。中には、日本の携帯電話でもあった、直接ペインティングしたものもありました。それと、iPod用のスピーカ関係、こちらも各出展者がデザインをこらしたものが多数出展されています。(小さいものから、大型のものまで各種あり)
かわったものでは、高さが1mほどのジュークボックスで、iPodの接続とCDプレーヤ、ラジオが使用できるようになっておりました。
また、トイレットペーパホルダーにiPodの接続とアンプ&スピーカをセットしたものまでありました。
2.バッグ関係
 過去2年の出展にくらべ、今回はバッグ類を扱う出展者が多くなっており、デザインや機能が各メーカいろいろ趣向をこらしたものが多数出展されています。私も、17inch用にいいのがあったので、つい購入してしまいました。ちょっとかわったバッグの出展として、上記iPod周辺機器ともいえるデイバッグがありました。表面にはスピーカがありバッグ内にアンプとバッテリ−が格納されていてるものとか、バッグ表面に太陽電池を備えたものまでありました。
3.その他
 今回は会場が広くなった為、(広くなった分、出展数も多くなった感じもしますが)デベロッパー関係の出展会場もスペースがあり、見学するのもゆったり見学できました。

以上が簡単ですが、現地での報告です。

 最近は、MacExpoもここサンフランシスコでしか行われなくなってきていますし、Appleの新製品の発表だけでなく、商品開発や販売をしている方にとっては、他社の扱う製品の傾向や動向等を知る上でも、MacExpoSFは貴重な情報収集の場となると思いますので、来年のMacExpoSFを見学を是非、検討されてはと思います。ちなみに来年の開催は、2008年1月14−18日です。都合がつけば、また来年も来てみたいと思っています。

■プロフィール
堀口幹城(ほりぐち もとくに)
1962年生まれ 群馬県高崎市出身
1984年より日立マイクロコピュータエンジアリングにて、高速SRAMの設計、評価、量産立ち上げに従事。その後、1994年退社後フリーにて活動。
活動実績として、デジタル系回路設計、基板設計、ASIC設計、半導体評価、顧客要素技術を使用した商品企画及び試作評価等MOSA入会年は、2003年。WWDC参加回数 4回

「Wonderful Server Life」  第33回  田畑 英和

  〜アクセス権編〜

 サンフランシスコで開催されたMacWorldでは、iPhoneやらApple TVが華々しくお披露目されました。Leopard/Leopard Serverはすっかり話題をもっていかれたような気がしますが、リリース日もまだ発表されていないことですし本連載は引き続きTiger Serverを中心に解説を行って行きます。

 これまでインストール、DNS、Open Directory、AFP(ネットワークホーム)と解説を行ってきましたが、AFPの次はファイルのアクセス権について解説したいと思います。
 アクセス権というと、どちらかといえば地味な話になりますが、アクセス権についての仕組みを正しく理解していないと、ファイルサーバにファイルが書き込めなかったり、ファイルを他のユーザに勝手に削除されるといったことが発生してしまいます。そこで適切にファイルサーバを運用できるように、アクセス権の仕組みをじっくりと解説していきたいと思います。

◇POSIXとACLのアクセス権
 それではまずアクセス権の概要から解説を始めていきます。ファイルシステムのアクセス権としては、Mac OS X Server v10.3まではUNIXの世界で古くから使われてきたPOSIXのアクセス権しかサポートされていませんでした。
 Mac OS X Server v10.4からはあらたに、より細かな種類のアクセス権が設定できるACLのアクセス権がサポートされるようになりました。ですのでアクセス権の種類としてはPOSIXとACLの2つが存在することになります。
 ちなみにMac OS X Server v10.4ではファイルシステムのACLの他に、サービスのACLという機能もサポートされています。

 POSIXのアクセス権はいつでも有効になっていますが、ACLのアクセス権はボリュームごとに有効/無効を設定することができます。つまりこれまでどおりにPOSIXのアクセス権のみで運用するということもできます。また、POSIXのアクセス権とACLのアクセス権の両方が設定されている場合にはACLのアクセス権が優先されるというルールになっています。
 Mac OS X Serverのファイルサービスは何種類かのプロトコルをサポートしていますが、ACLのアクセス権が適用されるのはAFPとSMBの2種類になります。

◇アクセス権の設定方法

 アクセス権を設定するには、大きく分けて次の3つの方法があります。

【ワークグループマネージャ】
 「ワークグループマネージャ」を使えば、接続先のサーバの任意のフォルダおよびファイルのアクセス権を設定することができます。POSIXおよびACLのアクセス権の両方を設定することができ、ボリュームごとにACLのアクセス権の有効/無効を設定することもできます。
 また、アクセス権の設定ではありませんが、「ワークグループマネージャ」からサーバ上に新規にフォルダを作成することもできます。

【Finder】
 Finderでもアクセス権を設定できますが、FinderではPOSIXのアクセス権のみが設定可能で、ACLのアクセス権は設定することができません。またPOSIXのアクセス権も一部のアクセス権は設定することができませんが、これは「ワークグループマネージャ」を使用した時も同様です。

【ターミナル】
 「ターミナル」からはPOSIXおよびACLの両方のアクセス権を設定することができます。ローカル上の任意のフォルダ/ファイルのアクセス権を設定できることはもちろん、sshを使ってリモートのサーバ上のアクセス権を設定することもできます。
 また、「ワークグループマネージャ」やFinderでは設定できないアクセス権もありますが、「ターミナル」を使えばすべてのアクセス権を設定することができます。
 ボリュームごとにACLのアクセス権の有効/無効も設定でき、「ターミナル」を使えばMac OS X ServerだけではなくMac OS X上でもACLのアクセス権を設定することができます。

 というわけで、まずはアクセス権の概要から説明を始めました。以前からサポートされていたPOSIXのアクセス権に加え、Mac OS X Server v10.4からはACLのアクセス権もサポートされるようになりましたので、両方のアクセス権を使用する場合はそれぞれの仕組みをしっかりと把握しておく必要があります。 それでは次回からは「ワークグループマネージャ」を用いた設定を中心に、アクセス権の解説を続けていきます。

 つづく

藤本裕之のプログラミング夜話 #106

 御慶。……去年も同じ挨拶をしたが、これは「ぎょけい」と読んで、落語「御慶」で富くじに当たった八五郎が金持ちになったからにはってんで紋付き袴をあつらえ、近所中に新年の挨拶に行くためにご隠居に教わる「最も短くて覚えやすい新年の挨拶」なんである。そこは落語のことだから、似合わない紋付き姿の八五郎にいきなり「ぎょ、ぎょけい!」と怒鳴られて長屋の連中はその意味が判らず、一悶着も二悶着も起きるんだけど、それはまた別の話。

 こちらの話題は昨年の続き、NSTableView におけるドラッグ&ドロップである。もちろん NSTableView からでもこれまで見てきたのと同じように、他のアプリケーションに向けて選択されているセルの中身……例えば文字列などをドラッグすることはできるのだが、それについては昨年の解説を応用してもらうとして、ここでは NSTableView からそれ自身に選択したセルをドラッグ&ドロップすることによってセルに入っているデータの順番を変更する方法を説明したい。
 まずドラッグの始まりだが、これは NSTableView の dataSource(NSTableViewとその dataSource に関する説明は割愛するので各自「NSTableDataSource protocol」とかのドキュメントをひもといてくだされ)になっているオブジェクトで、

- (BOOL)tableView:(NSTableView*)tableView
        writeRowsWithIndexes:(NSIndexSet*)rowIndexes
        toPasteboard:(NSPasteboard*)pboard;

というメソッドをインプリメントすることで実現する。これ、OS X 10.3.9までは

- (BOOL) tableView:(NSTableView*)tableView
        writeRows:(NSArray*)rows
        toPasteboard:(NSPasteboard*)pboard;

だったんだけど、新しい方だけ解説するので古いほうについては類推+確認よろしく。
 このメソッドには現時点で選択状態にある Row のインデックスがNSIndexSetというオブジェクトの形で渡される。例えば10個のデータがエントリされているテーブルがあるとして、その上でコマンドキーを押しながら、1個目、3個目、5個目をセレクトする(……あ、この記述は言うまでもなくallowsMultipleSelection がYESのときね)と、それらが NSIndexSet に格納されてくるわけである。要はこの NSIndexSet をそのまんまドラッグ用のペーストボードに入れて送り出してやればいい。あとは受け取った側の話だからね。
 さて、ここで問題になるのは、NSPasteboard は NSString や NSData などは受け取るけれども NSIndexSet なんてオブジェクトを受け取ってくれないということである。つまりこいつにデータをセットするメソッドは、

- (BOOL)setPropertyList:(id)propertyList forType:(NSString *)dataType
- (BOOL)setData:(NSData *)data forType:(NSString *)dataType
- (BOOL)setString:(NSString *)string forType:(NSString *)dataType

の3つしかないのね。なので我々は(と、突然「共犯者用語」を使うけど)
NSIndexSet をあじゃこじゃしてこれらのどれかを使える形にしなければなら
ない。
 結論から言うと、ここで NSArchiver と NSUnarchiver というとっても便利なNSCoder のサブクラスを使う。こいつらの機能は、簡単に言えばあるオブジェクトを梱包して NSData の形にする、NSData になってるそれを荷ほどきして元のオブジェクトに戻す、というもの。早い話がこれを使えばNSIndexSet をNSData に化けさせて上の setData:forType でペーストボードに渡せるのである。そのコードは以下の通り。

NSData* indexData = [NSArchiver archivedDataWithRootObject:rowIndexes];
[pboard declareTypes:[NSArray arrayWithObject:@"DraggingIndexSet"]
owner:self];
BOOL result = [pboard setData:indexData forType:@"DraggingIndexSet"];


 上のコードで @”DraggingIndexSet” というのは今即席でねつ造したこのデータを受け渡すためのタイプ識別子。これを例えば(中身と合ってないけど)NSStringPboardType みたいなアリモノにしちゃうと他のアプリケーションとかがドロップされたとき受け取っちゃって始末に困るでしょ? もちろんその NSTableView が自身以外へのドラッグ&ドロップをサポートしない場合には、前回のケースで「無くても支障がないけど?」と書いた

- (unsigned int)draggingSourceOperationMaskForLocal:(BOOL)isLocal;

を使ってローカルでないドラッグを無効にしてしまえばいいんだけど、それでも混乱を避けるためこういうのはちゃんと区別がつくようにしておくに越したことはない。よね?
 と、いうわけで無事に選択状態にある Row のインデックスを送り出せた。
次回はこれを受け取ってその順番を変更するほうを解説したい。(2007_01_11)
                            

高橋真人の「プログラミング指南」第104回

プログラマのためのオブジェクト指向再入門(12)

〜カプセル化について(3)〜

 こんにちは、高橋真人です。
 さて年を越してしまいましたが前回の続きです。
 前回のお話で私がお伝えしたかったのは、使い方を簡単にするために作られたオブジェクト指向の仕組みが、かえってカスタマイズの邪魔をすることがある、ということでした。
 これはどういうことかというと、クラスの設計の仕方によってはクラスの柔軟性を奪うことになるということです。
 例として取り上げているMLTEは、かなり大掛かりな仕組みとして提供されているため、随分といろんなオプションが用意されています。しかし、機能が多彩であることと引き換えに、使うためにはそれなりの手順や手間がかかることがある場合も少なくありません。

 たとえば文字サイズを変更したいとしましょう。MLTEでは、単に文字のサイズを変更するだけでも以下のようなコードが必要となります。

Fixed    textSize;
TXNTypeAttribute    attributes[1];
attributes[0].tag = kTXNQDFontSizeAttribute;
attributes[0].size = kTXNFontSizeAttributeSize;
attributes[0].data.dataValue = (UInt32)textSize;
ItemCount attrSize = sizeof(attributes) / sizeof(TXNTypeAttribute);
TXNSetTypeAttributes(mlteObject, attrSize, attributes,
     kTXNUseCurrentSelection, kTXNUseCurrentSelection);

初めて見る人にはかなり複雑に見えるでしょう。簡単に解説します。

・属性のための構造体を用意
・構造体の各メンバに文字サイズ変更に必要な各値を設定
・適用範囲をしてして、TXNSetTypeAttributes()を呼ぶ

 上記のコードは、こんな感じのことをやっています。なぜ、文字サイズを指定するだけなのにこんな大仰なやり方が必要かと言えば、これは正に「多彩さ」のためなのです。
 何となく想像の付く方もおいでと思いますが、TXNTypeAttributeという構造体は、MLTEの文字属性を指定するためのインターフェースです。つまり、ここにさまざまな値を設定することで、文字サイズに留まらない実に多くの文字属性を変更できる仕組みになっているわけです。
 しかし、「ただ文字サイズを変えたいだけ」の人にとってはそんなことは「余計なこと」ですから、迷惑な話です。だからと言ってそれでMLTEを使うことをやめられるならいいのですが、テキスト編集の仕組みを自力で組めないような人であれば余計に、MLTEはなかなかに捨てがたい魅力的な機能をたくさん備えているのです。

 そこでPowerPlantです。前回もご紹介したPowerPlantのLMLTEPaneというクラスでは、SetFontSize()というメンバ関数に文字サイズを与えて呼び出すだけで、上記の処理を代行してくれます。言ってみれば、「MLTEの多彩さを隠して簡単に呼び出せる仕組みを提供した」ということです。
 ですが、「簡単に呼び出せるインターフェース」と「多彩な機能」は基本的には相反するものです。
 LMLTEPaneの用意した文字サイズ変更の仕組みがユーザーの目的に完全に合致するならばよいのですが、LMLTEPaneのSetFontSize()は現在の選択範囲に対してしか指定した文字サイズを適用してくれません。それが微妙にニーズと異なる場合もあるでしょう。
 そんな時、何らかのコードを書き足したり、書き換えたりすることが必要になるわけですが、できることなら「既存の仕組みをできるだけ生かしたい」と思うのではないでしょうか? 前々回お話ししたケースですが、私は単にMLTEがユーザーのドラッグ&ド
ロップを受け付けた時にだけ、ドロップされたテキストデータをちょっと変更したかっただけなのです。しかし、それを実現するためにはMLTEの用意しているドラッグ&ドロップの仕組みのほとんどすべてを諦めなければなりませんでした。
 こういうのは解せませんよね。なかなか思うように動いてくれないコードをデバッグしながら、何度「MLTEつかうのやめちゃおうかなぁ」と思ったことか(笑)。こういうときに、「もしMLTEがオブジェクト指向で作られていたらなぁ」と思ったりするわけです。
 PowerPlantのように実装コードが付属していれば言うことはないのですが、それは無理でも元々の挙動を極力生かしつつ、自分のニーズに合うように必要なところだけを変更する。これができれば、言うことはないんですよね。
 巧妙に設計されたクラスでは、この辺が絶妙です。自分が変更したいと思っていた部分に適したインターフェースがそれこそ「かゆいところに手が届く」ような感じで用意されていたりするのです。(まあ、かなり理想化しているとは思いますが・笑)

 ところで、PowerPlantの名誉のために一言加えますが、前にもお話ししたようにLMLTEPaneはPowerPlantの末期に加えられたクラスです。そのため他のクラスに比べて作り込みがあまりされていないのです。
 PowerPlantの他のクラスはオブジェクト指向フレームワークの中でも設計の良さで知られるものが少なくありません。
 例えばPowerPlantを使う人なら必ず使うと言ってもよいLPane、LView、LWindow。これらのクラスはかなり巧妙に設計されていて、例えば私の場合などは、ウインドウの動作を制御するために自力でちまちまと書き込んだコードをデバッグしていて、ふと「げ、LWindowにこんなメンバ関数があったのかよぉ」と、自分が何時間もかけて書いたコードと同等またはより高機能な仕組みがとっくに備わっていたことに気付くことも珍しくありませんでした。

ニュース・解説

 今週の解説担当:小池邦人

● Carbon ドキュメント & サンプル & SDK ナビゲーション(2007/01/12)

【開発環境】

先週のサンフランシスコのExpoで待望の「iPhone」が発表されました。まだ商標関連でゴタゴタしているようですが、USでの発売開始が6月なので、それまでには何とかなるでしょう。さっさと違う名前にすればイイような気もしますが、きっと大将がガンとして譲らないのでしょうね(笑)。ただ残念なことに、携帯電話として日本でちゃんと使えるようになるのには、まだ相当に時間が掛かりそうです。加えて、Apple社はiPhoneをクローズド環境(iPodと同じ)として取り扱うようでして、デベロッパに対して搭載アプリケーション開発用のSDKなどを配布する予定はないようです。

Macintoshを中心に置いたソリューションを構築する時、Macintoshと親和性の高いデタ入力用の小型携帯端末が必要となるケースが多々あります。筆者が開発している歯科用データベースでも、フットワークの面から検査データの入力にPalmを利用しています。ちなみに、以前はNewtonを使っていたのですが(笑)ご存じの通りApple社が開発を止めてしまったため、やむを得ずPalm OS製品に切り替えたわけです。その後、メーカをIBM にしたら販売終了…Sonyに代えた途端に販売終了…と、結局日本語を正式にサポートしたPalm OS製品は消えてしまいました(今回の件でPalm自体もやばい?)。

そんなわけで、Apple社が出す(それもOS X搭載)この手の製品は喉から手が出るほど欲しかったわけです。まあ、iPod同様にちゃんと契約したデベロッパには何らかの開発環境が提供されるのかもしれませんが、それより、iPhoneから携帯電話機能を外したバージョン(タッチパネルを持った小型Mac)を販売して欲しいところです。こちらについては日本で即座に販売可能なわけですし、アプリケーション開発も自由にできます。個人の活用だけでなく、先ほどのようなMacintoshとコラボするケースでも大いに活躍することができると思うのですが…さて、どうでしょうか?

【テクニカルドキュメント】

前回から1月12日の期間中、Apple社のGuidesとReferenceサイトには幾つかドキュメントが登録されました。しかし、そのほとんどがマイナーチェンジの改訂版です。Guidesサイトに登録された2つと、Referenceサイトに登録された3つのみが、新版もしくは内容が更新されたドキュメントです。また、デベロッパ向けの読み物も2つ登録されています。「Introducing Dashcode」は、Widget開発環境であるDashcodeの紹介ですDashcodeで作成したWidgetが、直ちに自分のiPhoneに転送できて使えたら最高なのにねぇ…。やはり、Apple社はiPhoneのクローズド環境を再考すべきです。

「Aperture 1.5.1 SDK Overview」(PDFあり)
「Universal Binary Programming Guidelines, Second Edition」(PDFあり)

http://developer.apple.com/documentation/index-rev-date.html

「Aperture 1.5.1 SDK Reference」
「Core Audio Data Types Reference」(初版)(PDFあり)
「Core Audio Glossary」(初版)(PDFあり)

http://developer.apple.com/reference/index-rev-date.html

「Leopard Technology Series: Introducing Dashcode」(読み物)

http://developer.apple.com/leopard/overview/dashcode.html

「Making modo a Great Mac App: Luxology Uses Xcode, Quartz, OpenGL」(読み物)

http://developer.apple.com/business/macmarket/modo.html

前回から1月12日の期間中、新規テクニカルノートはひとつも登録されませんでしたが、新規テクニカルQ&Aの方は3つ登録されています。

QA1498「AuthorizationCreate- FromExternalForm 100022 Error Explained」(初版)
QA1491「Volumes Not Showing Up On The Desktop」(初版)
QA1391「How can I determine the order of the languages set by the user
    in the Language tab of the International preference pane?」(初版)

http://developer.apple.com/technicalqas/index-rev-date.html

【サンプルソースコード】

前回から1月12日の期間中、Apple社のSample Codeサイトには、サンプルソースコードが2つ登録されました。「DTSCarbonShell」は、モダンCarbonアプリケーションの雛形です。Carbonを使い簡単なアプリケーションを開発しようと考えている方は、このソースコードを参考にすると良いでしょう。編集メニューの「特殊文字…」は、メニューコマンドに’chrp’を割り振るだけなんですね。知らなかった(笑)。

「KauthORama」(Kernel Authorization関連)
「DTSCarbonShell」(Carbon関連)(初版)

http://developer.apple.com/samplecode/index-rev-date.html

【デベロップメント SDK】

前回から1月12日の期間中、Apple社のSDKサイトには新しいSDKがひとつも登録されませんでした。

http://developer.apple.com/sdk/

 

◇MOSAからのお知らせと編集後記は割愛します◇

 

MOSA Developer News   略称[MOSADeN=モサ伝]
        配信停止 mailto:mosaden-ml@mosa.gr.jp
 記事内容に関するご意見 mailto:mosaden-toukou@mosa.gr.jp
      記事投稿受付 http://www.mosa.gr.jp/topics/mdn-toukou.html
Apple、Mac OSは米国アップルコンピュータ社の登録商標です。またそのほか
の各製品名等はそれぞれ各社の商標ならびに登録商標です。
このメールの再配信、および掲載された記事の無断転載を禁じます。
特定非営利活動法人MOSA  http://www.mosa.gr.jp/
Copyright (C)2007 MOSA. All rights reserved.