MOSA Multi-OS Software Artists

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

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

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

2007-03-20 

目次

  • 「「Wonderful Server Life」    第42回   田畑 英和
  • 小池邦人の「Carbon API 徒然草」
  • SqueakではじめるSmalltalk入門  第81回   鷲見 正人

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

〜DHCP編〜

 先週に引き続きMac OS X ServerのDHCPサービスについて解説します。サブネットの基本的な設定ができれば「サーバ管理」のツールバーから「サービスを開始」ボタンをクリックしてDHCPサービスを開始します。なお前回も説明しましたが、サブネットの一覧画面で「使用可能」にチェックを入れるのを忘れないように注意してください。

◇サービスの監視
 DHCPサービスを開始すれば、同一ネットワーク上のコンピュータに、ネットワーク設定を提供できるようになります。クライアント側からはどのサーバからDHCPによるネットワーク設定を受け取るかを選択することはできませんので、混乱のないように同一ネットワーク内でのDHCPサービスは1台のサーバだけで運用するようにしましょう。
 「サーバ管理」を使えば現在どのコンピュータに対してネットワーク設定を提供しているかが確認できます。DHCPサービスの「クライアント」画面を表示すると、DHCPでネットワーク設定を受け取っている各コンピュータについて、次の情報が一覧表示されます。

・コンピュータ名
・ハードウェア・アドレス
・クライアントID
・残りのリース時間

 ハードウェア・アドレスとはMACアドレスのことです。このアドレスにより、どのコンピュータに対してどのIPアドレスを提供しているかが分ります。ただし、MACアドレスではコンピュータを特定するのに手間がかかる場合もありますので、コンピュータの特定をやりやすくしたい場合にはクライアントIDを設定しておくと便利です。
 クライアントIDは、クライアントコンピュータ上の「システム環境設定」で設定します。「システム環境設定」の「ネットワーク」であらかじめ「DHCPクライアントID」を設定しておくと、クライアントで設定したクライアントIDが「サーバ管理」上に表示されます。

・「クライアント」
http://homepage.mac.com/htabata/MXS10.3/img/DHCP/DHCP_ADMIN_06.png
・「システム環境設定」>「ネットワーク」
http://homepage.mac.com/htabata/MXS10.3/img/DHCP/PREF_NETWORK_01.png

◇LDAP
 Mac OS X ServerのDHCPサービスでは、これまで説明してきたIPアドレスやDNSの設定に加え、LDAPの設定を行うこともできます。LDAPとはディレクトリサービスのためのプロトコルですが、Open Directoryを利用するにはクライアント側でLDAPの設定を手動で行う必要があります。
 ですが、DHCPサービスでLDAPの情報もあわせて提供すれば、クライアント側での設定を自動化することができます。Open Directoryのクライアント側の設定については次回以降詳しく説明したいと思います。
 DHCPでLDAPの設定を行うには最低限「サーバ名」と「検索ベース」を設定する必要があります。サーバ名はサーバのDNS上での名前を入力し、検索ベースはDNSの名前に基づいて設定します。検索ベースはOpen Directoryのマスターを設定するときに指定したものを使用します。「サーバ管理」でオープンディレクトリサービスの「設定」>「プロトコル」>「LDAPの設定」画面を表示すると、実際に使用されている「検索ベース」を確認できます。

 「ポート」はデフォルトのポート番号(389)を使うのであれば設定する必要はありません。LDAPの通信を暗号化するには「SSLを使ったLDAP」にチェックを入れます。もっとも実際にSSLを使用するには、サーバ側で「サーバ管理」を使って、LDAPのSSL設定を事前に行っておく必要があります。SSLを使った場合は、636ポートが使用されます。

・「設定」>「サブネット」>「LDAP」
http://homepage.mac.com/htabata/MXS10.3/img/DHCP/DHCP_ADMIN_04.png

◇静的マップ
 DHCPでは、どのIPアドレスが割り当てられるかは割り当てられるまで分らないのが通常ですが、「静的マップ」の設定を行えば、DHCPを使って特定のコンピュータに固定のIPアドレスを割り当てることができます。
 静的マップの設定を行うには、「ハードウェア・アドレス(MACアドレス)」と「IPアドレス」のペアを設定します。このように設定しておけば、設定したハードウェア・アドレスをもつクライアントコンピュータのネットワークポートに、常に固定のIPアドレスを割り当てることができます。

・「設定」>「静的マップ」
http://homepage.mac.com/htabata/MXS10.3/img/DHCP/DHCP_ADMIN_07.png

 というわけで、2回にわたってMac OS X ServerのDHCPサービスについて解説してきました。小規模なネットワークでDHCPサービスを利用するには、MacOS X Serverを使わなくても、例えばブロードバンドルータに備わっているDHCP機能を利用することなどが考えられますが、Mac OS X ServerのDHCPにはLDAPの設定ができるなどのユニークな面もあります。
 それでは次回ですが、今回も少し説明しましたクライアント側でのLDAPの設定について詳しく解説したいと思います。
つづく
                               

小池邦人のCarbon API 徒然草(2007/03/16)

〜 Carbonモダンアプリケーションへの道(その12) 〜

前回紹介したHIThemeOrientation()は、Compositing指定されたウィンドウやコントロール(HIView)のテキスト描画を担当しています。今回は、HIThemeTextInfo構造体の内容をさらに詳しく調べ、このAPIを用いたテキスト描画にチャレンジしてみます。

HIThemeTextInfo構造体は、3番目の引数としてHIThemeOrientation()に渡します。その内部には以下のような9つのメンバが定義されています。

truct HIThemeTextInfo {

 UInt32                      version;               // ゼロを代入
 ThemeDrawState              state;                 // 描画状態
 ThemeFontID                 fontID;                // フォント種別ID
 HIThemeTextHorizontalFlush  horizontalFlushness;   // 左右表示位置
 HIThemeTextVerticalFlush    verticalFlushness;     // 上下表示位置
 HIThemeTextBoxOptions       options;               // 矩形枠オプション
 HIThemeTextTruncation       truncationPosition;    // 文字の切り捨て方法
 UInt32                      truncationMaxLines;    // 最大表示行数
 Boolean                     truncationHappened;    // 切り捨てられたかどうか
};


今のところversionにはゼロを代入するよう指示されています。次のThemeDrawStateですが、Appearance.hを調べてみると以下のような定数が定義されています。

num {
 kThemeStateInactive           = 0,
 kThemeStateActive             = 1,
 kThemeStatePressed            = 2,  // ハイライト表示のこと
 kThemeStateRollover           = 6,
 kThemeStateUnavailable        = 7,
 kThemeStateUnavailableInactive = 8
};

enum {
 kThemeStateDisabled           = 0   // Inactiveと同じ(別の呼び方)
};

enum {
 kThemeStatePressedUp          = 2,  // カウンターボタン用(上向き)
 kThemeStatePressedDown        = 3   // カウンターボタン用(下向き)
};

typedef UInt32        ThemeDrawState;


これだけを見ると、コントロールの各状態に準じて(例えばInactiveなら薄く)テキストを描画をしてくれそうな感じなのですが、実際にはstateにどの定数を代入しても描画状態に変化はありません。現状では機能が実装されていないのか? 指定するフォント種類によって違うのか? それとも継承して間接的に使うパラメータなのか? その理由は不明なのですが、とりあえずはkThemeStateActiveを代入しておけば問題なさそうです。3番目のThemeFontIDは、同じくAppearance.hにおいて以下の様に定義されています。

enum {

 kThemeSystemFont              = 0,
 kThemeSmallSystemFont         = 1,
 kThemeSmallEmphasizedSystemFont = 2,
 kThemeViewsFont               = 3,
 kThemeEmphasizedSystemFont    = 4,
 kThemeApplicationFont         = 5,
 kThemeLabelFont               = 6,
 kThemeMenuTitleFont           = 100,
 kThemeMenuItemFont            = 101,
 kThemeMenuItemMarkFont        = 102,
 kThemeMenuItemCmdKeyFont      = 103,
 kThemeWindowTitleFont         = 104,
 kThemePushButtonFont          = 105,
 kThemeUtilityWindowTitleFont  = 106,
 kThemeAlertHeaderFont         = 107,
 kThemeSystemFontDetail        = 7,
 kThemeSystemFontDetailEmphasized = 8,
 kThemeCurrentPortFont         = 200,
 kThemeToolbarFont             = 108,
 kThemeMiniSystemFont          = 109
};

typedef UInt16        ThemeFontID;


かなり種類が多いので、個々の定数がどういう意味を持つのかを説明することは省略します。それぞれの違いを理解するには、ヘッダファイルに記載されているコメントを参照するのが近道です。例えば、kThemeSmallSystemFontは、Smallサイズのコントロールのテキストを描画する時に用いられるフォントで、kThemeMiniSystemFontだと、Mac OS X 10.3から採用されたMiniサイズのコントロールのテキストを描画する時に用いられるフォントを指示します。

注意すべき点は、ThemeFontIDはダイレクトにフォントの種類を設定するパラメータではないと言うことです。例えば、fontID=-28671のように「ヒラギノ明朝 W3」のフォント番号をダイレクトに代入しても正しくテキストは描画はされません(何も表示されない)。描画用フォントに「ヒラギノ明朝 W3」の
「24ポイント」を使いたい場合には、fontIDにはkThemeCurrentPortFontを代入しておき、描画対象となるCGrafPort(port)に対し、以下のような指定をすればOKです。

SetPortTextFont( port,-28671 );  // ヒラギノ明朝 W3
SetPortTextSize( port,24 );      // 24ポイント


このThemeFontIDですが、「Interface Builder」を使うと、ウィンドウに配置
したコントロールに対して個別に設定することが可能です。対象となるコントロールのInspectorウィンドウを開き、上部のポップアップメニューで「Control」を選択します。すると、真ん中あたりに「Font Style」というポップアップメニューが表示されますので、そのメニュー項目を見ると、先ほど紹介したThemeFontIDの種類がすべて並んでいることが分かります。

HIThemeTextHorizontalFlushは、テキストを矩形枠の左右か中心のどちらに揃えて描画するのかを決定します。同様に、HIThemeTextVerticalFlushの方は、テキストを矩形枠の上下か中心のどちらに揃えて描画するのかを決定します。

enum {

 kHIThemeTextHorizontalFlushLeft = 0,     // 左揃え
 kHIThemeTextHorizontalFlushCenter = 1,   // 中心揃え
 kHIThemeTextHorizontalFlushRight = 2     // 右揃え
};

typedef UInt32         HIThemeTextHorizontalFlush;

enum {

 kHIThemeTextVerticalFlushTop  = 0,     // 上揃え
 kHIThemeTextVerticalFlushCenter = 1,   // 中心揃え
 kHIThemeTextVerticalFlushBottom = 2    // 下揃え
};

typedef UInt32         HIThemeTextVerticalFlush;


次のHIThemeTextBoxOptionsは、現状では一種類のみ定義されていますが、このオプションを設定しても描画状態に変化は起こりません? こちらも機能未実装なのでしょうか? ThemeDrawState同様に謎のパラメータです(どなたか効果を御教授ください)。

enum {
 kHIThemeTextBoxOptionNone     = 0,
 kHIThemeTextBoxOptionStronglyVertical = (1 << 1)
};


HIThemeTextTruncationは、テキストが矩形内に表示しきれなかった場合の処理を指示します。Finderのファイル名表示でファイル名が長すぎると、途中に省略していることを示す「...」が表示されますが、その印を付けるかどうかの指定ができます。この時、次のtruncationMaxLinesにより表示するテキスト最大行数を指定しておく必要があります。またテキストの切り捨て(全部表示できなかった)が発生した時には、truncationHappenedにtrueが返りますので、何らかの対策を実行するかどうかの判断が可能となります。

enum {

 kHIThemeTextTruncationNone    = 0, // 「...」を付けない
 kHIThemeTextTruncationMiddle  = 1, // 「...」を真ん中に付ける
 kHIThemeTextTruncationEnd     = 2  // 「...」を最後に付ける
};

typedef UInt32          HIThemeTextTruncation;


上記の定数は、Appearance.hではなくHITheme.hの方に定義されていますので注意してください。HIThemeOrientation()に対してHIThemeTextInfo構造体の内容を全て設定して渡していると煩雑ですので、簡易的にテキストを1行だけ表示するルーチンの例を上げてみます。このルーチンでは、引数で渡すHIThemeTextInfo構造体のパラメータは、フォントIDと左右の描画位置の2種類のみとなっています。

void drawCFString( CFStringRef cfstr,CGRect *crt,CGContextRef ctx,
                            ThemeFontID id,HIThemeTextHorizontalFlush pos )
{
   HIThemeTextInfo    info;

   info.version=0;
   info.state=kThemeStateActive;           // 描画状態(固定)
   info.fontID=id;                         // フォントID(可変)
   info.horizontalFlushness=pos;           // 左右描画位置(可変)
   info.verticalFlushness=kHIThemeTextVerticalFlushCenter;
                                           // 上下描画位置は中心固定
   info.options=kHIThemeTextBoxOptionNone; // オプションは無し
   info.truncationPosition=kHIThemeTextTruncationEnd;
                                           // 「...」は最後に付ける
   info.truncationMaxLines=1;              // 1行のみの表示
   info.truncationHappened=0;              // 切り捨てが起こると1が返る

   HIThemeDrawTextBox( cfstr,crt,&info,ctx,kHIThemeOrientationInverted );
}


次回は、HIThemeOrientation()によるテキスト描画を印刷(プリントアウト)に利用てみたいと思います。印刷といっても、ウィンドウ上のテキスト描画とそれほど違いはないのですが、幾つか注意すべきポイントを解説したいと思います。
つづく                                

SqueakではじめるSmalltalk入門   第81回  鷲見 正人

本連載では、Macと切っても切れない関係にあるSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。前回はSqueakの最新版である3.9をインストールして、日本語を扱えるようにするセッティング方法を解説しました。これにからめて(連載のタイトルからはちょっと離れてしまいますが…)Squeak以外にもOS Xで使うことのできるSmalltalk処理系について触れてみたいと思います。

▼VisualWorks(Cincom Smalltalk)について

Squeakは、Apple Smalltalkから派生させるかたちで、'90年代半ば、当時Appleフェローだったアラン・ケイらによって開発されました。ところで、このときもととなったApple Smalltalkは、'80年代初頭、XEROXから段階を経て供給される機能限定版の仮想イメージをLisaやMacできちんと動作させられるように、Appleの技術者(と申しましても、そこには、ラリー・テスラーらPARCからの移籍組=元Smalltalk開発者らが含まれていたわけですが…)が、専用の仮想マシンをしつらえるかたちで作られたものです。Smalltalkシステムというのは、仮想マシンよりは、仮想イメージの内容により強くその「特徴づけ」がなされるものなので、Apple Smalltalkはサブセットながらも純正Smalltalkシステムに近いものだと考えることできます(もちろん、後に、この仮想イメージにはApple独自の改良も加えられます)。

このような、Appleを含む当時の主要ハードウエアメーカーに対するSmalltalk移植を促す働きかけとは別にXEROXは、ParcPlace Systemsという専門の子会社を立ち上げ、そこを通じて独自開発した製品版のSmalltalk-80処理系の開発・販売もしています。各種OS向けのものが用意され、Mac版ももちろんありました。ただとても高価だったため、APDAから安価に提供されていたAppleSmalltalkに比べると、こちらのParcPlace版Smalltalkを実際に動かしたり触った経験がある人は読者の皆様の中にもごくわずかでしょう。このParcPlace版Smalltalkが、FileMakerばりにいくつかの会社を経て現在に至ったのが「VisualWorks」です。Cincomという会社が開発・販売しているので、
Cincom Smalltalkとも呼ばれます。

http://smalltalk.cincom.jp/scripts/smalltalk.dll/index.ssp

XEROX Smalltalk-80の仮想イメージ(さらに遡れば、ALTOを暫定的ダイナブックとして動作させていたGUI OSの実体)を受け継いだ「血筋」からすると、VisualWorksが“本家”、Squeakは“分家”といったかんじになりましょうか。いずれも名前から「Smalltalk」の文字が抜け落ちてしまったため、Smalltalkは滅びたものだと思いこんでおられる方が多いことが残念です。

▼VisualWorksの入手とインストール

ソフトウエア製品としての「VisualWorks」は、今もあいかわらず高価なのですが、非商用にかぎって無償での入手や使用が認められています。オンラインでのお定まりのユーザー登録作業が必要ですが、いったんそれを済ませてしまえば、ネットインストーラを介して、あるいは必要なファイルがすべて収められたCD-ROMイメージを入手することで、お手元のMacにVisualWorksをインストールすることが可能です。

http://smalltalk.cincom.jp/scripts/smalltalk.dll/visualworks/download.ssp

また、ぽっと出のSqueak(長らくApple社内でApple Smalltalkとしてうち捨てられていたのちにSqueakとして再生された…)と違って、25年余にわたってプロのツールとして鍛え抜かれてきたVisualWorks向けには、良質なSmalltalk関連ドキュメントが充実しています。ただ長い歴史を持つものの常で、そうしたドキュメントの多く(特に'90年代のもの…)は古いバージョンのVisualWorks向けに書かれていることもあり、現行の7.xは内容の読み替えが難しいときがあります。そんなときは、3.xなどの古めのバージョンVisualWorksを使ったほうがよいでしょう。

こうした以前のバージョンを含む、VisualWorksのインストール手順については、「じゅん」というマルチメディアライブラリの解説サイトが詳しいです。

http://www.sra.co.jp/people/h-asaoka/study/VisualWorksInstall/index.html

「じゅん」は、VisualWorksおよびJava(!?)向けに提供されており(残念ながらSqueak向けにはまだない…)、我々Macユーザーが身近なところではQuickTimeムービーの再生やその制御など、様々なマルチメディア情報をSmalltalkコード(じゅん for Javaの場合は、もちろんJavaの…)を介して行なうことを可能とするAPIを提供してくれます。

http://www.srainc.com/Jun/Main.htm

「じゅん」の主要開発者である青木淳氏は自他共に認めるスーパープログラマで、「じゅん」をはじめとするSmalltalkシステム向けソフトウエアはもちろん、多くのSmalltalk関連書籍や開発者向け雑誌の連載を著しておられることでも有名です。特に定番と名高い「Smalltalkイディオム」と「オブジェクト指向システム分析設計入門」については、在、Webで全文を読むことが可能ですので興味のあるかたにはご一読をお薦めします。

http://www.sra.co.jp/people/aoki/
http://www.sra.co.jp/people/aoki/SmalltalkIdioms/index.htm
http://www.sra.co.jp/people/aoki/IntroductionToOOAOOD/index.htm

▼VisualWorksの操作と終了

アラン・ケイが手を引いたあと、夢を追う「暫定ダイナブック環境」としてではなく堅実な「統合化開発環境」としての進化の道を辿ることになったSmalltalkの象徴的な存在であるVisualWorksは、古典的なSmalltalkやSqueakに見られる暫定ダイナブック然とした部分(その象徴は、独立したデスクトップと独自のGUIルック&フィールに現われている…)が排除されいて、ホストOSのアプリケーションソフト然として見せるような工夫がなされています。たとえば現行のVisualWorksは、OS Xで動かした場合、Aquaっぽい見た目で使うことが可能です。

[fig.A]VisualWorks起動時の画面

前述の通りSqueakでお馴染みの特徴的なデスクトップもデスクトップメニューもないので、各種開発用ツール類の起動はトランスクリプトウインドウ(「VisualWorks NonCommercial visualnc」とタイトルがついたウインドウ)に設けられたツールボタン、あるいは、トランスクリプトウインドウ内のメニューを介して行なうことになります。たとえば、クラスブラウザを起動したければ、気球(Smalltalkの象徴的存在)の下にメガネをあしらったアイコンをクリックします。ワークスペースなら右端のメモ帳のアイコンです。

クラスブラウザはSqueakに比べて見栄えもよく便利で高機能になっていますが(同時に、ブラウズする対称であるクラス階層も名前空間など新しい言語仕様の導入により若干複雑化しています…)、基本は、Squeakと一緒です。Squeakで慣れていれば、簡単なチュートリアルを経ることで、自在に使いこなすことができるようになると思います。いずれにせよ、オブジェクト(たとえばこの場合「クラス」)に対してどんなメッセージを送って情報を引き出そうとしているのかを念頭に置く習慣さえ身に付けていれば、GUIのルック&フィールの違いなどは些細なことに思えてくるはずです(笑)。

ワークスペースを含め、文字の入力できる場所なら原則としてどこでもSmalltalk式を評価できるのもSqueakと一緒です。たとえば、この連載でお馴染みの「Do it」や「Print it」などは(式を入力して選択後…)右クリックメニューからメニュー項目として選ぶか、Ctrl-D、もしくはCtr-Pとタイプして使うことができます。たとえばクラスブラウザは、前述のGUI操作でなくとも次の式の「Do it」で起動できます。

Refactory.Browser.RefactoringBrowser open

[fig.B]VisualWorksでの「Do it」

終了時に仮想イメージを保存(トランスクリプトウインドウのFileメニューから、Exit VisualWorks...→Yes)すれば、次回から同じ状態で作業を再開できる点も、やはりSqueakと同様です。

バックナンバー:
http://squab.no-ip.com:8080/mosaren/

 

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

 

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