MOSA Multi-OS Software Artists

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

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

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

2007-01-30

目次

  • 「Wonderful Server Life」       第35回  田畑 英和
  • 藤本裕之のプログラミング夜話  #107
  • 高橋真人の「プログラミング指南」  第105回
  • ニュース・解説                小池 邦人

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

  〜アクセス権編〜

 今回は「ワークグループマネージャ」を使用したPOSIXのアクセス権の設定方法を解説します。「ワークグループマネージャ」はネットワークに対応していますので、ネットワーク上のMacからリモートでアクセス権の設定が可能です。他にリモートでアクセス権を設定する方法としてはsshで接続してコマンドライン上でアクセス権を設定することもできます。sshを使用する場合は、Mac以外のプラットホームからでも設定が可能です。

◇サーバ上のファイル/フォルダのブラウズ
 「ワークグループマネージャ」を起動して目的のサーバに接続したら、まずツールバーから「共有」をクリックします。画面左側の「共有ポイント」リストにはすでに共有が設定済みのフォルダの一覧が表示されています。
 サーバ上の任意のファイル/フォルダに対してアクセス権を設定するには、「共有ポイント」の右側の「すべて」をクリックします。「すべて」にはサーバ上のボリュームが表示され、ここからボリューム内のファイル/フォルダをブラウズすることができます。

・「共有ポイント」
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_01.png
・「すべて」
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_02.png

◇アクセス権の確認
 目的のファイル/フォルダを選択し、次に画面右側に並んでいるボタンから「アクセス」をクリックします。POSIXのアクセス権はすべてのフォルダ/ファイルに対して必ず設定しますので、まずは既存のアクセス権を確認することができます。Finder上で確認したときと同様に「オーナー」「グループ」「全員」に対するアクセス権が確認できます。Finderでは「その他」と表記されていたところが、「ワークグループマネージャ」で「全員」と表記されています。これは同じことを意味しています。
 「ワークグループマネージャ」で設定可能なPOSIXのアクセス権は、Finder上で設定可能なアクセス権と基本的に同じです。Finderではフォルダとファイルで設定可能なアクセス権が異なりましたが、「ワークグループマネージャ」ではフォルダにもファイルにも同一のアクセス権を設定することができます。アクセス権の種類の表記がFinderと少し異なりますが、たんに用語が異なるだけです。「ターミナル」上でコマンドラインを使ってアクセス権を確認すれば、それぞれどのようなアクセス権が設定されているかが確実に確認できます。

・アクセス権の確認
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_04.png

・ワークグループマネージャ上で設定可能なPOSIXのアクセス権の種類
 ・読み出し/書き込み(Finderでは読み/書き)
 ・読み出し専用(Finderでは読み出しのみ)
 ・書き込み専用(Finderでは書き込みのみ)
 ・なし(Finderではアクセス不可)

◇アクセス権の設定
 アクセス権を変更するには「オーナー」「グループ」を変更する場合と、アクセス権の種類を変更する場合があります。アクセス権の種類を変更するだけであれば、右側の3つのポップアップメニューから目的のアクセス権を選択するだけです。設定を変更したら最後に必ず画面右下の「保存」ボタンをクリックしてください。

・アクセス権の種類の変更
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_05.png

 「オーナー」や「グループ」を変更する場合は、既存の設定を直接書き換えることができます。ここにはユーザ名(ショートネーム)を入力すればよいのですが、ドラッグ&ドロップで設定する方法もあります。直接入力しなければ打ち間違えることもありませんので、慣れないうちはドラッグ&ドロップで設定するのがよいでしょう。
 画面の下ある「ユーザとグループ」をクリックすれば、ウインドウの右か左端にユーザとグループのリストが表示されます。

・ユーザのリスト
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_06.png
・グループのリスト
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_07.png

 あとはリストから目的のユーザ/グループを選択して、「オーナー」や「グループ」にドラッグ&ドロップすれば適切なパラメータが自動的に入力されます。 
OpenDirectoryのマスターを使用している場合には、サーバ上にはNetInfoで管理するローカルドメインとLDAPで管理する共有ドメインが存在しています。アカウントはドメインごとに存在しますが、アクセス先のドメインを変更するにはユーザとグループのリストの上にあるポップアップメニューを使用します。

・ドメインの選択
http://homepage.mac.com/htabata/MXS10.3/img/WGM_Sharing/WGM_08.png

 共有ドメインにアクセスするには「/LDAPv3/127.0.0.1」を、ローカルドメインにアクセスするには「ローカル」を選択します。「検索パス」を選択すれば共有ドメイン上とローカルドメイン上の両方のアカウントをまとめて表示することができます。

つづく                               

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

 前回の続き。NSArchiverによってアーカイブされたNSIndexSetを受け取る側の話である。これを受け取るための仕組みも、書き出しに使ったメソッド、
tableView:writeRowsWithIndexes:toPasteboard: と同様、NSTableDataSource
protocolに定義されているので、対象テーブルの datasource になっているオブジェクトにインプリメントする。まずは(長ったらしいが)、

-

 (NSDragOperation) tableView:(NSTableView*)tableView
                 validateDrop:(id )info
                  proposedRow:(int)row
        proposedDropOperation:(NSTableViewDropOperation)operation;

このメソッド、簡単に言えばテーブル上にドラッグされてきたデータを調べ、受け取って処理できるものであれば、そのオペレーションの種別を返すもの。オペレーションは以下のようにNSDragging.h に定義されている。

enum {
    NSDragOperationNone = 0,
    NSDragOperationCopy = 1,
    NSDragOperationLink = 2,
    NSDragOperationGeneric = 4,
    NSDragOperationPrivate = 8,
    NSDragOperationAll_Obsolete = 15,
    NSDragOperationMove = 16,
    NSDragOperationDelete = 32,
    NSDragOperationEvery = UINT_MAX
};


今回我々はテーブルのアイテムの位置を移動しようというわけなので、パラメータ info の中身を調べてそれが移動のための情報であればNSDragOperationMove を、そうでなければNSDragOperationNone を返せばいい。こんな感じ……。

- (NSDragOperation) tableView:(NSTableView*)tableView
                 validateDrop:(id )info
                  proposedRow:(int)row
        proposedDropOperation:(NSTableViewDropOperation)operation {
     if([[info draggingPasteboard] availableTypeFromArray:
          [NSArray arrayWithObject:@"DraggingIndexSet"]] != nil) {
               [tableView setDropRow: row
dropOperation:NSTableViewDropAbove];
                    return NSDragOperationMove;
               }
          }
     }
     return NSDragOperationNone;
}


 上のコードで NSTableView に対して送っているメッセージ、setDropRow:dropOperation: は、ドロップの行き先がアイテムとアイテムの間であること(NSTableViewDropAbove)を通知している。意味判るよね? iTunesを起動してもらうと分かりやすいんだけど、何かプレイリストを作って一番左にある番号のカラムを選択すると(他のカラムではそのデータ順でソートされてしまうので順番を変えられない)、トラックをひっつかんで曲順を変更できるよね。そんときドラッグ先はアイテムではなくてアイテムとアイテムの間になるでしょ。
 対して、つかんだトラックを左の方の他のプレイリスト(スマートプレイリストだとダメ、理由は自明ですね)のところへドラッグするとそのプレイリストそのものがドロップの対象になる。Finderでファイルやフォルダを他のフォルダの上にドラッグしたときと同じ。こういうことをやりたい場合はNSTableViewDropAbove の代わりにNSTableViewDropOn を指定するわけ。
 そしてそれがドロップされた時に送られてくるメッセージが、これ。

- (BOOL)tableView:(NSTableView *)aTableView
       acceptDrop:(id )info
              row:(int)row
    dropOperation:(NSTableViewDropOperation)operation;


 これについては次回の説明とさせていただく。
                            (2006_01_25)

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

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

〜再利用化について(1)〜

 こんにちは、高橋真人です。
 さて前回MLTEとPowerPlantの具体的な例から、カスタマイズということについてお話をいたしました。今回は、話をもう少し抽象的なレベルに移し、オブジェクト指向と非オブジェクト指向でカスタマイズの仕方にどのような違いが出るのかを話してみたいと思います。

 オブジェクト指向は再利用化のための技術だ、と言われます。しかし再利用化ということ自体はオブジェクト指向の専売特許というわけではありません。たとえば、ANSI Cで書かれたCライブラリはまさに「何度も利用されることを目的に構築されて」いる枠組みです。このことから言えば「Cライブラリは再利用化のための技術だ」と言えなくもないわけです。
 では、何が違うんでしょう?
 この辺は微妙なので、説明するのはかなり難しいことです。というのも、この、オブジェクト指向はどのように再利用化を促進するかということは、オブジェクト指向の本質的な部分とも言えるからです。そのため、昔から数多くの入門書や解説記事などで、いろいろな人がさまざまな切り口でこのことについて語っています。 書籍や記事でオブジェクト指向を題材に取り上げる時点で、ほぼ間違いなくオブジェクト指向を肯定的にとらえているわけですから、当然読者に対しては「いかにオブジェクト指向はよいものか」を分かってもらおうとします。(ごくまれに否定的な記事を見ることもないわけではありませんが)
 しかし、先ほども言ったように再利用という点について言えば、これは必ずしもオブジェクト指向特有のメリットというわけでもありません。
 最も代表的な機能にしてですらこのような状態なので、その他の機能に関しても、それが「オブジェクト指向だけにある」というふうにはなかなかならないわけです。確かに違いがあるのは明らかなのですが、いざ未経験者に説明しようとするとなかなか機能面での際立った違いを見せることが難しいのです。 そこで話を「考え方」という部分に振ってしまって「オブジェクトとは、つまりはモノだ」という毎度おなじみの解説が展開されるわけです。さらには動物を引き合いに出して継承の概念やら何やらを解説していくと。
 まあ、この「オブジェクトを動物になぞらえて解説する」なんてのは今や古典とすら言えるもので、これ以外にも、工業の世界、建築の世界、料理の世界、交通の世界と、この世のありとあらゆるものを引き合いに出してきてオブジェクト指向を説明しようと試みているのですね。

 しかしいくらそんな話をたくさん読んでも、「言っていることは分かるんだけど、何となくピンと来ない」という人は必ずいます。というか、そういう人の方が多いのかもしれません。なので、もしかしたら今これを読んでおいでのあなたもそんな人の一人なのかもしれませんね。
 残念ながら、「これからあなたの疑問をきれいさっぱり氷解させてあげましょう」などと言うことは当然私にもできません。そもそも私自身が何かの本を読んで「一気にオブジェクト指向が理解できた」なんて経験をしていないわけで。(もし、そんな経験があれば、「ズバリこの本を読め」と推薦するだけで済ませちゃいます)
 だとしたら、私がどうやってオブジェクト指向という技術を理解するに至ったかと言いますと、これはもう「経験」に尽きます。
 もしあなたが現在プログラマーとして日常を送られている方なら、自分がプログラミングという技術をどうやって理解し、身に付けたのかを思い出してもらえれば分かるでしょう。それと同じなんです。結局、詰まるところ経験の積み重ね以外にはないのです。

 ですから、もしこの連載を読めば「オブジェクト指向が理解できるかも」と淡い期待を抱いている人がいるとしたら、悪いことは言いませんから、なるべく早く何らかのオブジェクト指向言語を選んでプログラムを書くことをやってみるべきです。特に、今まで例えばCで書いたようなプログラム(ある程度の規模があることが理想です)をオブジェクト指向言語で書き直してみるのがお勧めです。
 もちろん、最初からうまく行くことはないでしょう。
 特に、C++のようなオブジェクト指向言語「としても」使うことのできる言語だと、よほどオブジェクト指向で書くことを強く意識して取り組まないと、今までのものと何の違いもないものになり兼ねません。
 お勧めなのは、既に出来上がっているフレームワークに少しずつ手を加えながら変更していくことです。もともとオブジェクト指向で動作している枠組みを、できればソースコードも含めた部分を観察してなるべくその流儀を崩さないように意識しながら徐々に手を加えていくのです。
 流儀の維持よりも機能を実現しようという気持ちが強くなればなるほど、出来上がってみたら「全然、オブジェクト指向っぽくない」と感じるものになってしまうはずです。しかし、そこでくじけずに何度もチャレンジしてみてください。オブジェクト指向っぽく書こうと常に意識し続けることが大切です。
 こういう経験を何度も繰り返していくことで、知らず知らずのうちに体の中にオブジェクト指向っぽさがしみ込んでいきます。
 「ソースコードのあるもの」と言いましたが、ソースコードの提供されているフレームワークも最近ではオープンソースの影響で増えてきたものの、そんなに多くあるとは言えないかもしれません。(ソースコードを変更しながら、という点では鷲見さんが連載されているSqueakなんかは最適のような気がします)
 まあ、話をかなり理想化してしまったので、「現実にはそんなもの、あり得ない」というケースがほとんどでしょう。もともと動いている枠組みで、あなたの過去に書いたものと似たものが見つけられたら、かなり幸運だと思ってもよいかもしれませんね。
 で、不幸にして運に恵まれないほとんどの人には「デザインパターン」という技術をひも解いてみることをお勧めします。デザインパターンでは、多くのプログラムが書かれる際に頻繁に使われる実現方法を、抽象化した形でカタログ化してまとめてありますので、部分的にであれ、あなたのやりたいことのオブジェクト指向的なアプローチのヒントが見つけられる可能性はずっと高いはずです。

 話がかなり逸れてしまいました。次回は、オブジェクト指向が再利用化をどのように実現しているのかという部分について見ていきたいと思います。

ニュース・解説

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

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

【開発環境】

Apple社(US)のデベロッパーサポートから「君がBug Reporterに上げてくれたバグを取ったから動作確認してみてね。」という趣旨のメールが届きました。内容を見てみると、対象OSがLeoperd(Mac OS X 10.5)となっています。ADCメンバーのデベロッパーの方ならご存じだと思いますが、開発中の製品のSeedingにおいては、Apple社に対して遭遇したバグの報告をすることができます。まあ、それがSeedingの主な目的ですから、大量のバグレポートが届けば届くほど、Apple社にとっては大変に有り難いわけです。

しかし、私はSeeding中のLeoperdに対して、まだバグを報告した記憶はありませんでした。「おかしいな?」と思いメールを再確認したところ、何とこいつはTigerのSeedingの時に報告したバグではありませんか(笑)。私が報告したバグは結局一世代の間寝かされていた事になります。さて、報告されたバグのうち、どれを取りどれを寝かしておくのかは、どうやって誰が決めるのでしょうか(多数決?)。私としては、結構みっともないバグだったので、すぐに取ってもらえると思ったのですが? 考えが甘かったですね…。

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

前回から1月26日の期間中、Apple社のGuidesサイトには10のドキュメントが登録されました。新型Xserveのハードウェア仕様書が登録された関係で、すべての「Developer Note」(ハードウェア関連)の内容が更新されています。また、デベロッパー向け読み物が2つ登録されています。そのうち「Using Pythonand Quartz on Mac OS X」については、前号の木下さんの記事も参考にしてください。

「AirPort Developer Note」
「Audio Developer Note」
「Bluetooth Developer Note」
「Ethernet Developer Note」
「FireWire Developer Note」
「PCI Developer Note」
「RAM Expansion Developer Note」
「Universal Serial Bus Developer Note」
「Video Developer Note」
「Xserve Developer Note」(初版)

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

「Built on Apple Technologies, iSale is Intuitive and Powerful」(読み物)
http://developer.apple.com/business/macmarket/isale.html

「Using Python and Quartz on Mac OS X」(読み物)
http://developer.apple.com/graphicsimaging/pythonandquartz.html

前回から1月26日の期間中、新規テクニカルノートが4つ、新規テクニカルQ&Aが3つ登録されました。「Creating an About Panel in Your Cocoa Application」がテクニカルノートになってしまうのが面白いですね(笑)。ディフォルト・アバウトの画像やテキスト内容の変更方法が中心ですが、独自デザインのウィンドウを開いてしまえば一発のような気もしますが…。

TN2185「C++ Tips and Tricks for Mac OS X」(初版)
TN2179「Creating an About Panel in Your Cocoa Application」(初版)
TN2165「Frequently Asked Questions about the X Window System (X11) for Mac
OS X」(初版)
TN2124「Mac OS X Debugging Magic」

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

QA1503「Preventing column reordering in NSTableView」(初版)
QA1501「Core Video – Available Pixel Formats」(初版)
QA1284「Creating install packages from the command line」

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

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

前回から1月26日の期間中、Apple社のSample Codeサイトには、サンプルソースコードがひとつだけ登録されました。Cocoaのカーソル表示用APIをCarbonアプリケーションから利用するためのサンプルです。しかし、この程度のAPIはCarbon側にも用意しておいて欲しいところです(涙)。

「CarbonCocoa_PictureCursor 」(Carbon&Cocoa関連)

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

【デベロップメント SDK】

前回から1月26日の期間中、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.