特定非営利活動法人MOSA

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

  • iPhone/iPod touch アプリ紹介
  • MOSA掲示板
  • 活動履歴
  • About MOSA(English)
  • BIZMATCH
  • メールマガジン好評配信中

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

2006-11-07  

目次

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

「Wonderful Server Life」  第25回  田畑 英和
  〜Open Directory編〜

 前回は「ディレクトリアクセス」を使用してクライアントコンピュータからOpenDirectoryのサーバに接続する方法を解説しました。今回は接続の確認方法について説明します。

◇接続の確認
 アドレスの入力ミスなどで接続に失敗することも考えられますが、そもそも前回解説した方法で「ディレクトリアクセス」を使って設定しますと、接続に失敗した時点でエラーメッセージが表示されます。
 こういった場合には入力したアドレスを確認したり、ネットワーク接続に問題がないかどうかを確認することになります。
 設定が終わったあとの確認方法ですが、まずサーバに接続ができていても設定によっては2つの状態がありえることを覚えておいてください。具体的には次の2つの状態です。

・サーバに接続できているが、ネットワークユーザの認証ができない
・サーバに接続できていて、ネットワークユーザの認証もできる

 クライアントコンピュータ上でネットワークユーザを使用するには後者の状態でないといけないわけですが、ネットワークユーザの認証ができているかどうかは次の方法で簡単に確認できます。

◇ネットワークユーザの認証の確認方法

1)「ターミナル」を起動します。

「ターミナル」は「/アプリケーション/ユーティリティ/」にインストールされています。

2)loginコマンドでネットワークユーザとして認証します。

% login [user]

 例えば「example」というユーザ名のネットワークユーザで認証ができるかどうかを確認する場合、以下のようになります。

【実行例】
% login example
Password:
No home directory 99!
Logging in with home = "/".
Welcome to Darwin!

 loginコマンドの引数でユーザ名を指定します。するとパスワードの入力が求められますので、exampleユーザのパスワードを入力します。ここでは入力したパスワードが画面上に表示されませんので、打ち間違いのないように注意してください。
 ホームの設定が行われていない場合には3行目のようなエラーメッセージが表示されますが、最後に「Welcome to Darwin!」と表示されればユーザ認証が成功したことを確認できます。
 認証に成功するとexampleユーザとしてログインしたことになりますが、ログアウトするにはlogoutコマンドを入力します。また「Ctrl + D」と入力するだけでもログアウトできます。

◇認証に失敗した場合
 入力したユーザ名やパスワードが正しくない場合には次のようなメッセージが表示されます。またloginプロンプトも表示されますので、引き続きユーザ名を入力してユーザ認証が実行できます。

・認証に失敗したときの表示

Login incorrect
login:

 正しいパスワードを入力しても認証に失敗する場合には、念のために「ワークグループマネージャ」でパスワードを再設定してみてください。それでも認証に失敗する場合には、ユーザ名の入力が間違えているかあるいは「ディレクトリアクセス」の設定に問題があることが考えられます。
 ネットワークユーザの認証を行うには「ディレクトリアクセス」の「認証」設定画に、ネットワークユーザを登録したOpen Directoryのサーバが追加されている必要があります。

・「認証」設定画面
http://homepage.mac.com/htabata/MXS10.3/img/DA/DA_07.png

 「ディレクトリアクセス」の設定に問題がなく、入力したユーザ名にも問題ない場は、Open Directoryのサーバへの接続に問題があることが考えられますので、ネットワーク接続の確認を行ってみてください。あるいは別のクライアントコンピュータから確認を行ってみるのもよいでしょう。

ネットワークユーザとしてユーザ認証ができるかどうかを確認するには、ログイン画面からいきなりログインを試してみてもよいのですが、現時点ではまだホームの設定を行っていないため、今回は「ターミナル」上から確認する方法を解説しました。
 一度にあれもこれもと設定をしてしまいますと、問題が発生したときに原因の究明に手間取ってしまいますので、設定と確認を繰り返しながら作業を進めていくとスムーズにサーバ構築ができるようになります。
つづく

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

 読んでいるみなさんには関係ないがこれを書いているオレの本日は何を隠そう文化の日である。いや別にだからどうだってこたないんですけどね、こうやって世間様がお休みの日に仕事をしていると、その昔成田のホテルで行われたNeXT Developer’s Campで講師をやっていたランディ(ラストネームは忘れた)がメッセージパッシングについて説明しているとき「ボス、ボス、ボクはこんなに一所懸命働いているんですよぉ」とジェスチャーたっぷりに叫んだのを思い出す。あいつ、元気かなぁ。

 閑話休題。前回まで我々は、ビューオブジェクトを「ドラッグ&ドロップに反応できる」ようにするために必要なメソッドのインプリメントを行ってきた。が、ちょっと何か足りないような気がしませんでした? まぁ何も気がつかないヒトの人生もそのまま続いてはいくわけなんだけど、つまり前々回、オレが示した draggingEntered:の例ではNSFilenamesPboardType にしか応えないという態度だったが、他のにも応えたいときにはどうするのか、つうかそもそもそのNSXXXXXXPboardTypeつうのは何種類、どんなもんがあるのか……。

 まず、NSFilenamesPboardTypeの仲間はXcodeで開いたソースファイル上でこの文字列を選び、コマンド+ダブルクリックをすれば「NSPastebord.h」というのが開いてそこに定義されている。ものぐさな読者のため(そして行数稼ぎのため)に書き写すと、

APPKIT_EXTERN NSString *NSStringPboardType;
APPKIT_EXTERN NSString *NSFilenamesPboardType;
APPKIT_EXTERN NSString *NSPostScriptPboardType;
APPKIT_EXTERN NSString *NSTIFFPboardType;
APPKIT_EXTERN NSString *NSRTFPboardType;
APPKIT_EXTERN NSString *NSTabularTextPboardType;
APPKIT_EXTERN NSString *NSFontPboardType;
APPKIT_EXTERN NSString *NSRulerPboardType;
APPKIT_EXTERN NSString *NSFileContentsPboardType;
APPKIT_EXTERN NSString *NSColorPboardType;
APPKIT_EXTERN NSString *NSRTFDPboardType;
APPKIT_EXTERN NSString *NSHTMLPboardType;
APPKIT_EXTERN NSString *NSPICTPboardType;
APPKIT_EXTERN NSString *NSURLPboardType;
APPKIT_EXTERN NSString *NSPDFPboardType;
APPKIT_EXTERN NSString *NSVCardPboardType ;
APPKIT_EXTERN NSString *NSFilesPromisePboardType ;
APPKIT_EXTERN NSString *NSInkTextPboardType ;

ざっとこんなもんである(一部注釈とかは省いた)。これらの中身の詳しい解説はドキュメントを読んでもらうことにして、知っておいて欲しいのは、多くのアプリケーションがこれらのうちの一つではなく、複数のタイプをPastebordに入れてドラッグ&ドロップを始めるということである。確認するために以下のようなメソッドを書いてみた。

- (unsigned)draggingEntered: (id ) sender{
     int            t;
     NSPasteboard*  pb = [sender draggingPasteboard];
     NSLog(@"pb types count = %d", [[pb types] count]);
     for( t = 0; t < [[pb types] count]; t++){
          NSLog(@"type [%d] = %@",
                    t, [[pb types] objectAtIndex:t]);
     }
     return [super draggingEntered:sender];
}


このビューにFinderからファイルをひとつ、ドラッグしてみると……

pb types count = 8
type [0] = CorePasteboardFlavorType 0x6675726C
type [1] = NSFilenamesPboardType
type [2] = Apple URL pasteboard type
type [3] = CorePasteboardFlavorType 0xC46C6E6B
type [4] = CorePasteboardFlavorType 0x73646C74
type [5] = CorePasteboardFlavorType 0x626E6368
type [6] = CorePasteboardFlavorType 0xC4706431
type [7] = CorePasteboardFlavorType 0xC4697475


という結果。どう見ても内部で使ってるらしい「CorePasteboardFlavorType」は置くとしても、前回我々が「処理」した「NSFilenamesPboardType」の他に「Apple URL pasteboard type」というのをFinderは送ってきているわけだ。次回はこの「Apple URL pasteboard type」をもうちょっと追求していこう。
(2006_11_03)

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

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

〜クラス<4>〜

 こんにちは、高橋真人です。
 さて前回の最後でも触れましたように、今まで解説してきたクラスの実装定義では、最初に提示したコードは動作しません。
 「だったら、何で最初から動くコードを出さないんだ」といぶかられる向きもあるでしょうが、そこはひとえに説明を複雑にしないためということでご理解いただければ幸いです。
 そこで今回は、今まさに問題となっている部分をどうするかについて解説します。問題となっているのは以下の部分です。IntTypeのケースで説明しますが、この部分に関してはFloatTypeも同様のやり方で処理できます。

void
IntType::add(int n)
{
     number += n;
}

 この実装ですと、プログラムの以下の部分が動きません(正確にはコンパイルできない)。プログラム全体は連載の97回の冒頭をごらんください。

a.add(b);

 どうしてコンパイルができないのかと言いますと、add()に与えている引数であるbがaと同じIntTypeのオブジェクトだからです。ここでadd()が要求しているのは、ただのint(*注1)ですので、IntTypeのオブジェクトを与えると、型の不整合ということでコンパイルエラーとなるわけです。

 そこで対応策ですが、以下のようなものが考えられます。

void
IntType::add(IntType it)
{
     number += it.number;
}


 +=演算子の右辺にあるit.numberというのは、引数として渡されている側のオブジェクトの側のメンバ変数numberを表します。前にも少し触れましたが、メンバ関数の定義では、そのクラスのスコープが有効です。よって、特に修飾をしないでこのクラスの関数や変数を使用した場合、それは実際にその関数を起動しているオブジェクトの関数や変数を意味します。
 今回のケースでは、引数に与えられるオブジェクトも同じIntTypeであるため、単にnumberと、クラス変数を修飾せずに使ってしまうと、これは関数を起動している側の変数を表してしまうため、it.と、所有するオブジェクトを明示して記述してやるわけです。
 さて、number += it.numberという式で、オブジェクトの所有するnumberに別のオブジェクトのnumberが加算されますが、これらはintの変数同士ですから、問題なく演算処理できます。
 ところで、今紹介した関数はaddという名前を持っていますが、これは以前定義してあった、intを引数としたadd()を置き換えるものではなく、add()の新たなバージョンです。C言語の場合、同じ名前の関数を複数作ることはできませんが、C++などのオブジェクト指向言語の多くでは可能となっています。

 このように「名前は同じだが、引数の数や型が異なる関数を定義できること」を「オーバーロード機能」と呼びます。(いずれ登場する「オーバーライド」とは似ていますが別のものであるということにご注意ください。)
 引数の型や数が異なる同名の関数を用意しておくことによって、コンパイラがその場で適切な関数を選んでくれるわけです。もしこのオーバーロードの仕組みがないと、add_int()、add_IntType()、add_float()などと、引数の型が何であるのかをいちいち意識しながら関数の呼び出しをしなければならなくなるわけです。
 「そんな手間ぐらい、大したことはない」と思われるかもしれませんが、「手間のあるところ、バグの入り込む余地あり」というわけで、かけなくてよい手間はかけないに越したことはありません。
 もっとも、一つの関数名で複数のバリエーションに対応することができるのは、あくまで「呼び出しの記述」に限った話であって、それぞれの型に合わせた計算処理は当然、一つずつ書いていく必要があるわけです。実は、この辺をもっとラクにしてくれる仕組みをもった言語も世の中にはあるのですが、それはここのテーマからは逸脱してしまうので、今回は触れません。

さて、以上ご紹介したようなadd()の別バージョンを追加するという方法の他に、C++では、関数を追加しないで対処するやり方も可能です。具体的には「変換関数」とか「変換演算子」というものを用意します。例えばIntTypeオブジェクトが式や関数の引数などに使われているとき、状況(*注2)がIntTypeではなくintを要求する場合に、IntTypeがintとして振る舞うようにすることができるのです。
 ちょっと具体例を挙げないと分かりにくいかもしれませんが、C++での変換関数の実装は少し分かりにくい部類に属する技法と判断し、ここでは申し訳ありませんが割愛させていただくことにします。

注1:このように、クラス定義をしないで言語にもともと用意されている型をプリミティブタイプなんて呼んだりします。要は、基本型ってことです。
注2:こういうとき、「コンテキスト」という表現をよく使います。例えば、「intを要求するコンテキストでIntTypeのオブジェクトが使われている場合」などといった感じに使います。

ニュース・解説

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

・ Carbon ドキュメント & サンプル & SDK ナビゲーション(2006/11/03)

【開発環境】

前号で木下さんも紹介されていましたが、Apple社のDeveloperサイトに「Leopard Dev Center」サイトが新設されたのに合わせ、一般の人でも読むことのできるドキュメントとして「Leopard Technology Series for Developers」が登録されました。このドキュメントですが、Leopardに関する技術内容が、今までの説明より若干詳しく紹介されてます。

この記載の中で、筆者が一番「まいったなぁ!」と思うのは、QuickTimeのC APIが64bit版Carbonに含まれないことです。代わりに「QT Kit」(Cocoa API)を使えとは言っていますが、そうなると、結局その部分のソースコードは大幅な書き換えが必要です(仕事が増える)。また、CとObjective-Cソースコードの混在を嫌う人もいるでしょう。

ところで「QuickTime for Windows」の64bit版は存在しているのでしょうか?あるとするなら、そのC APIは直接使えるのでしょうか? Cocoa for Windowsが存在しない現状では、QuickTimeにアクセスしているコード部分をMac版とWindows版で共通モジュールにしたいと考えている(もうしている)デベロッパーも窮地に追い込まれてしまいます。

例えば以下のサイトに、いくつかのアプリケーションを64bit版に変更した時の32bit版との比較ベンチマークが載っています。

http://www.geekpatrol.ca/blog/160/

これを見て、処理速度が結構上がるのに驚きました。レジスタ数が増えることや、doubleの浮動小数点が1レジスタ内で処理できることなどが、処理速度向上に影響しているのでしょうか? この結果からすると、64bitアドレッシング(4Gbyte以上のメモリ領域アクセス)以外にも大きなメリットが得られることになり、すぐにでも自作アプリケーションの64bit化を実行してみたくなります。そんな場合でも、64bit版のQuickTimeのC APIが使えないという制限は大きな頭痛の種となります(筆者の場合)。

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

前回から11月3日の期間中、Apple社のGuidesサイトには新規ドキュメントが12登録され、Referenceのサイトの方には新規ドキュメントがひとつだけ登録されました。新型MacBook Proのハード仕様書の登録に合わせて、各種「Developer Note」が更新されています。また、Aperture 1.5の発表に合わせて「Aperture SDK Overview」と「Aperture Reference」が登録されました。加えて、デベロッパー向け読み物も3つ登録されています

「15-inch MacBook Pro Developer Note」(初版)
「17-inch MacBook Pro Developer Note」(初版)
「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」
「Aperture SDK Overview」(初版)(PDFあり)

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

「Aperture Reference」(初版)

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

「Working with the WebKit Nightly Builds」(読み物)

http://developer.apple.com/opensource/internet/nightlywebkit.html

「Leopard Technology Series for Developers: Overview」(読み物)

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

「Adding Accessibility to Custom Views in Cocoa」(読み物)

http://developer.apple.com/ue/accessibility/accessibilitycustomviews.html

前回から11月3日の期間中、新規テクニカルノートは2つ登録されました。新規テクニカルQ&Aの方も2つ登録されています。「The Font Panel for Carbon API」は、なんと4年ぶりのリニューアルですね(笑)。QA1393については、前号の木下さんの記事も参考にしてみてください。

TN2166「Secrets of the GPT」(初版)
TN2058「The Font Panel for Carbon API」

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

QA1484「How to add a folder to the contents of a package」(初版)
QA1393「Using static versions of existing dynamic libraries」(初版)

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

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

前回から11月3日の期間中、Apple社のSample Codeサイトには、サンプルソースコードが8つ登録されました。

「NSFontAttributeExplorer」(Cocoa関連)(初版)
「TremoloUnit」(Core Audio関連)(初版)
「SimplePlayThru」(Core Audio関連)
「FinalCutPro_AppleEvents」(FinalCutPro関連)(初版)
「AppleJavaExtensions」(Java関連)
「OSXAdapter」(Java関連)
「SeeMyFriends」(SyncService関連)
「CFFTPSample」(Network関連)

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

【デベロップメント SDK】

前回から11月3日の期間中、Apple社のSDKサイトには最新SDKがひとつだけ登録されました。FireWire SDKの最新版である「FireWire SDK 23 for Mac OS X」です。またToolsサイトには「Xcode 2.4.1」が登録されています。どちらもダウンロードするのためには、ADCのメンバーである必要があります。

「Xcode 2.4.1」

http://developer.apple.com/tools/download/

「FireWire SDK 23 for Mac OS X」

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

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

 

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