MOSA Multi-OS Software Artists

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

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

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

2006-06-13
 

目次

  • MOSA理事コラム         第1回   矢野 孝一 ★新企画★
  • 「「Wonderful Server Life」   第6回  田畑 英和
  • 小池邦人の「Carbon API 徒然草」
  • SqueakではじめるSmalltalk入門  第63回  鷲見 正人
  • ニュース・解説               木下 誠

MOSA理事コラム   第1回
         ヤノ電器株式会社 代表取締役社長 矢野 孝一

 ちょっとした機会からストレージに関り始め、既に20年が過ぎてしまいました。皆さんからは、ストレージの専門家と云って頂く事もありますが、その度に勉強不足の自身を反省しもっと勉強しなければと思います。 ただ、20年に渡って供給する側としてストレージに関ってこれた事で、僅かながらも経験と思慮の積み重ねは出来たのかなと考えています。
 そうした立場で、最近考えている事をご紹介させて頂きます。 物事が大きく変化する時、その前段階においては混沌とする時期があるという様な事が、幾つかの本にも書かれていました。 そうした視点で見ると、ストレージもその進化と云う点では、大きな変革を前にした混沌の時代なのかと思います。
 様々な機能が付いた製品が作られていますが、どれも「本流」というものではなく多様なニーズに対応したというモノになっているように思われます。 小手先の対応や手前だけを見たモノ作りになっているように感じるのです。 つまり、供給する側、デバイス、メディアを作り供給する側のはっきりとしたメッセージや志が、伝わって来ないのです。ユーザーの立場からみると、自身の課題に対してどのデバイス、メディアを使用すれば良いのか、明確な説明を受ける事もないまま選択してしまっているのではないでしょうか。

Apple社のiPodやそれに関る事業を見ても、単なるデバイスの変化というのではなく、本質的なデータの取扱方法の変化の兆しを見て取れます。ストレージレスのPCやNC等と云った製品もありますが、これとは大きく異なる質のものだと思います。
 私たちも、こうした変革に向けてサードパーティーであり続けるためにも、本質的な変化をしっかり理解しそれをメッセージとして伝えられる製品や事業に移行をしたいと考えています。 そのためのパートナー作り、仲間作りを急いでいます。 もし、興味のある方があれば是非声をかけて頂きたいと思います。
 90年代のPC革命からWeb革命の時代に移って来ているとも言われますが、当時から云われていた「個人に力を」をというスローガンによって実現された大量の情報が創り出されるようになりました。 それらを、どう保持していくのか、共感されるビジョンを創り具現化の手法を提案をしていきたいと考えています。

矢野 孝一 ヤノ電器株式会社 代表

●執筆者プロフィール
矢野孝一(やの たかかず)
ヤノ電器株式会社 代表取締役社長

1958年岡山市生まれ。大阪教育大学 教育学部を卒業後FAエンジニアリング会社にハード&ソフトのエンジニアとして勤務、その後大阪府立中学校講師をつとめるなどしたのち、ヤノ電器株式会社にて「C&Eコンピュータ」の名称でコンピュータ関連の事業をスタート。1998年より同社代表取締役に就任、現在に至る。2000年よりMOSA会長を務める傍ら全国組織「教育とコンピュータ利用研究会」事務局長も務めている。

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

 この連載を開始してからなんだかインストールの話ばかりしていますが、今回でようやくインストールの解説は終わりになります。これまでリモートインストールの方法を中心に解説してきましたが、今回はそのほかのインストール方法について解説したいと思います。
 今回解説する方法はMac OS X ServerだけでなくMac OS Xでも共通して利用できますので、参考にしていただければと思います。

□インストール対象のマシンをターゲットディスクモードで起動
 まず、インストール対象のマシンをターゲットディスクモードで起動します。ターゲットディスクモードで起動するには、キーボードの「T」のキーを押しながらマシン本体の電源を入れます。あるいはTigerでは「システム環境設定」の「起動ディスク」パネルからターゲットディスクモードによる起動ができますので、すでにOSがインストールされている環境では「システム環境設定」からターゲットディスクモードで起動することもできます。
 ターゲットディスクモードで起動したマシンはFireWireの外付けハードディスクとして扱えます。ですのでほかのマシンにFireWireケーブルで接続して、アクセスできます。この方法を使えばCD/DVDドライブを搭載していないXserveクラスタノードモデルにもインストールディスクからOSをインストールすることができます。
 つまり、ほかマシンをインストールディスクで起動して、そこにターゲットディスクモードで起動中のインストール対象のマシンをFireWireケーブルで接続します。OSのインストールは内蔵/外付けにかかわらず任意のボリュームにインストールできますので、マシンを2台組み合わせればターゲットディスクモード経由でOSのインストールができるのです。
 ただし、注意していただきたいことがあります。最近のMacは冷却ファンの回転数をOSで管理していますが、ターゲットディスクモードで起動中のマシンは冷却ファンの回転が制御されず、派手にまわることになります。そのため周囲に騒音をまき散らしてしまうことになりますので、作業場所にはくれぐれもご注意ください。

□ターゲットディスクモードで起動したマシンを外付けドライブとして使用
 今度は先ほどとは逆の方法です。ほかのマシンをターゲットディスクモードで起動して、インストール対象のマシンにFireWireケーブルで接続します。こうすることでほかのマシンに搭載されているCD/DVDドライブを、外付けのドライブとして使用することができます。つまり、Macを外付けCD/DVDドライブとして使用することにより、インストールができます。

□ネットワークインストール
 NetBootのテクノロジーを利用してOSをインストールします。この方法を使えばインストールディスクからマシンを起動する必要がなくなり、インストールディスクを使用した場合とくらべて、インストール時間も短縮することができます。OSのインストールを頻繁に行うような環境ではかなり威力を発揮します。
 Mac OS X Serverを用意してNetBootサービスを設定し、インストールするOSをあらかじめディスクイメージとしてサーバ上に用意しておく必要はありますが、設定さえしてしまえば、ネットワーク上で複数台のマシンを同時にインストールすることができます。マシンを大量にインストールしなければならない環境ではかなり省力化に貢献することになります。NetBoot/ネットワークインストールについては機会があればまた別途詳しく取り上げてみたいと思います。

□コマンドラインからのインストール
 さらに上級のテクニックとしては、コマンドラインからインストールを行う方法も用意されています。この方法を利用することはあまりないかと思いますが、興味のある方はinstallerコマンドについて調べてみてください。

□インストールしない
 各マシンにはあらかじめOSがインストールされた状態で出荷されていますので、もちろんそのまま使ってもよいわけです。ただしパーティションを分割したいといったような場合には基本的にはインストール前に作業を行う必要がありますので、この場合はパーティションを分割してからOSをインストールすることになります。

というわけで、これまでOSのインストール方法について解説してきました。OSのインストールが完了した後は初期設定を行う必要があります。Mac OS Xとはまた違った初期設定がMac OS X Serverでは必要になりますので、次回は初期設定について取り上げてみたいと思います。

つづく

小池邦人のCarbon API 徒然草(2006/06/09)

〜 アプリケーションのUniversal Binary化(その10) 〜

今回から数回に分けて、Universal Binary化における最大の難関(笑)PowerPCのAltiVecコードをIntel CPUのSSE/SSE2コードに変換する作業を解説します。加えて「アプリケーションでAltiVecやSSE/SSE2を利用すべき箇所はどこか?」などについても、色々と考察してみたいと思います。

PowerPCが、画像、映像、サウンド、圧縮伸張、科学演算処理などを高速に実行できるという評判を得ていたのは、その内部にベクトル演算ユニットであるAltiVecを搭載していたからです。AltiVecは、SIMD(Single Instruction Stream Multiple Data Stream)アーキテクチャに分類される演算ユニットです。つまり、単一の命令により複数のデータを同時に処理することができます。AltiVecは、ひとつの命令で4つの浮動小数点(単精度)もしくは4つの整数値(long値)に対して、かけ算や割り算などを効率よく実行することが可能です。そのため、単純な演算を何回も繰り返すような処理(画像フィルタ処理など)には、絶大な威力を発揮します。

例えば、筆者は、CPUの浮動小数点演算を用いていた画像フィルタルーチンをAltiVecコードで書き直した経験があります。この書き直しにより、なんとフィルタ処理速度が7倍も高速になりました。さらに、この処理をマルチCPUに最適化することで、トータルで13倍の処理速度を得ることができました。1.5倍とか2倍でも「おっ、結構速くなったぞ!」と実感できるのですが、13倍となるとまったく別次元となります。逆に言えば、ちゃんとやれば高速化できるのに、AltiVecやマルチCPUに最適化していないため本当の能力を発揮できていないアプリケーションが、世間にはまだまだ沢山あるのも事実です(笑)。

当然、Intel版CPUにはAltiVecは搭載されていませんが、その代わりSSEと呼ばれるSIMD演算ユニットが搭載されています。SSEは、SSE、SSE2、SSE3といった呼び名が示している通り、CPUが世代交代するのに伴いその命令数を拡張してきました。何やら、次世代のCPU(Core 2 Duo)では、これがSSE4に拡張され、さらなる高速処理が可能になると言った話も聞こえてきます。アプリケーションの処理内容によっては、Universal Binary化する時に、AltiVecコードで高速化していた箇所をSSE/SSE2コードに置き換えないと、Intel環境での処理速度がPowerPC環境と比べて見劣りすることになります。

一番分かり易い例はQuickTimeです。QuickTimeは、画像や映像処理のボトルネックにおいて、AltiVecの能力を最大限に生かしました。当然、Intel版CPU用QuickTimeでは、その代役としてSSE/SSE2を活用していると思われます。ところが、現在のSSE/SSE2はAltiVecよりも命令数も少なく、その速度も優秀ではありません。ちまたで行われているベンチマークを見た時、マルチメディア処理においてはPowerPC G5搭載のMacintoshの方がIntel版より良い結果を示しているのは、こうした理由があるからです。まあ、QuickTimeの最適化がどこまで進んでいるのかも怪しいのですが、開発者が処理速度を稼ぐのに結構苦労している様子がうかがえます。

そんな事情もありますから、何でもかんでもSSE/SSE2に書き直せばOKかと言うと、物事はそんなに簡単ではありません。筆者の経験からすると、最新のIntel版CPU(Core Duo)は、整数処理については同クロックのPowerPC G5より2倍以上高速です。ところが、浮動小数点処理は7割、SIMD処理については5割ぐらいの速度しか出ません。つまり、PowerPCではAltiVecを利用して高速化していた整数処理が、SSE/SSE2に書き換えると、CPU自身の整数処理を使うより遅くなってしまう場合も有り得るわけです(下手くそな記述をすると)。

このように色々と難しい問題もありますが、まずは、Apple社が提供しているAltiVecとSSE/SSE2に関するドキュメントを紹介しておきます。AltiVecコードに精通されており、Universal Binary化においてAltiVecコードをSSE/SSE2コードに変換する作業が必要な方は、まず最初に「AltiVec/SSE Migration Guide」ドキュメントを参照しましょう。と言うより、AltiVecとSSE/SSE2に関する詳しいドキュメントは、これしか存在しません。

「AltiVec/SSE Migration Guide」「Accelerate_sse_migration.pdf」(PDF 44ページ)

http://developer.apple.com/documentation/Performance/Conceptual/Accelerate_sse_migration/index.html

次に紹介するのは、AltiVecやSSE/SSE2を使うことで特定の処理を高速化するために用意されたFrameworkの解説ドキュメントです。これらのFrameworkでは、処理の高速化のためPowerPC用ではAltiVecが、Intel版CPU用ではSSE/SSE2が積極的に使われています。こうしたAPIは「Accelerate.framework」にまとめられており、アプリケーション作成時にこれをリンクすることで、自作ソースコードから呼べるようになります。

このうち、フィルタなどの画像処理関連ルーチンは「Optimizing Image Processing With vImage」ドキュメントで解説されています。また、ベクトル演算やマトリックス演算、そして高速フーリエ変換などについては「vDSP Library」ドキュメントを、その他の多様な演算については「vecLib Framework Reference」ドキュメントを参照してみてください。もし、AltiVecコードでガリガリ記述していた箇所を、こうしたFrameworkのルーチンに差し替えることができれば、SSE/SSE2への書き換えの手間を大幅に削減できるわけです。

「Optimizing Image Processing With vImage」「vImage.pdf」(DF 366ページ)

http://developer.apple.com/documentation/Performance/Conceptual/vImage/index.html

「vDSP Library」「vDSP_Library.pdf」(PDF 73ページ)

http://developer.apple.com/documentation/Performance/Conceptual/vDSP/index.html

「vecLib Framework Reference」「vecLib.pdf」(PDF 111ページ)

http://developer.apple.com/documentation/Performance/Conceptual/vecLib/Reference/reference.html

「vecLib Reference Update」「vecLibRefUpdate.pdf」(PDF 26ページ)

http://developer.apple.com/documentation/Performance/Reference/vecLibRefUpdate/index.html

「Accelerate Reference Updat」「AccelerateRefUpdate.pdf」(PDF 24ページ)

http://developer.apple.com/documentation/Performance/Reference/AccelerateRefUpdate/index.html

次回は、今回紹介した幾つかのトピックスのうち、フィルタなどの画像処理に活用できるvImage.frameworkのルーチンを、例題を示しながら解説したいと思います。

つづく

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

 本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。今回は、Morphic GUIフレームワークが提供する、システムウインドウ(…という複合モーフ)が、マウス操作に対してだけでなく、Smalltalkコードを介したメッセージングに対し、どのように振る舞うかを見てみましょう。

 Squeakシステムのアプリケーションはたいてい、システムウインドウを用い、そこに各種機能をサブモーフとして登録することで構築されています。書きかけのメモ帳である「ワークスペース」、クラス定義の閲覧・編集用でお馴染みの「システムブラウザ」、ファイラとエディタを兼ねた「ファイルリスト」など、ALTO時代から続く旧MVC GUIフレームワーク上に構築された古典的なSmalltalkアプリケーションの多くは、新しいMorphic GUIフレームワークへの移行後も、引き続き利用できるように移植されました。

もちろん例外もあって、Morphic GUIフレームワークへの移行後に新たに必要とされて作られたソフトの中には、システムウインドウを使わないものもあります。たとえば、ゴミ箱の中味にアクセスするためのモーフ(ゴミ箱はAppleの発明で、ALTO時代にはありませんでした)や、各種モーフを分類して引き出せるようにする「オブジェクトのカタログ」…などがこれにあたります。この種のソフトでのウインドウ(もどき)の移動やサイズ変更は、コマンドクリックによりモーフとして選択した後、ハローを使って操作します。

 さて、話をシステムウインドウに戻しましょう。

 前々回の分解や、インスペクタによる解析からもお分かりいただけたように、システムウインドウは、ベースとなる矩形枠とタイトルバーにより構成されています。タイトルバーにはさらに、中央にウインドウタイトル、左側にはクローズボタンとウインドウメニューボタン、右側にはズームボタンと折りたたみボタンがあります。折りたたみボタンというのは、ウインドウをタイトルのみにする、旧Mac OSで言うところのウインドウシェード機能を司るボタンです。余談ですが、ゴミ箱と違い、この機能はALTO/Smalltalkシステムのほうがずっと先(1970年代半ば)です。

前回提示したスクリプトにも含まれていましたが、システムウインドウ(a SystemWindow)というモーフを作って画面に呼び出すには、次のような式を評価(選択して、do it(cmd + D))します。

(SystemWindow labelled: 'Window Title') openInWorld

 他の一般的なモーフ同様、カーソルの位置に表示するには、openInWorldの代わりにopenInHandを送信します。

(SystemWindow labelled: 'Window Title') openInHand

 新しく作られたウインドウが、マウスポインタについてくる(ピックアップした状態になる)ので、最初にクリックした場所に設置することができます。

もちろん、作ったウインドウをテンポラリ変数に束縛し、そこにメッセージを送っても、まったく同じです。

| window |
window := SystemWindow labelled: 'Window Title'.
window openInWorld


 メッセージ「setWindowColor: aColor」をシステムウインドウに送信することで、その色を自由に変えられます。

| window |
window := SystemWindow labelled: 'Window Title'.
window setWindowColor: Color orange.
window openInWorld

 ウインドウの色は、あらかじめ設定しておくだけでなく、画面に呼び出した後に変えること可能です。たとえば、次のスクリプトでは、最初、オレンジで現れたウインドウが青色に変化します。変化の様子を把握しやすいように、途中で0.5秒のウエイトを入れてみました。

| window |
window := SystemWindow labelled: 'Window Title'.
window setWindowColor: Color orange.
window openInWorld.

(Delay forMilliseconds: 500) wait.
window setWindowColor: Color blue

 同様のことは、ウインドウのインスペクタでも行なえます。開いたウインドウをモーフとして選択(コマンドクリック)したときに現れる灰色のデバッグハローをshiftキーを押しながらクリックするか、次のスクリプトを評価して、ウインドウを束縛したインスペクタをあらかじめ呼び出しておきます。

| window |
window := SystemWindow labelled: 'Window Title'.
window setWindowColor: Color orange.
window inspect; openInWorld


 呼び出したインスペクタ下部の作業用ペインで、次のような式を評価することで、先のスクリプト中の式と同じ要領で色を変えることができます。ただ、レシーバがテンポラリ変数のwindowから擬変数のselfに変わっていることに気をつけてください。

self setWindowColor: Color yellow

[fig.A]インスペクタの作業用ペインでスクリプトを実行

 タイトルバーの各種ボタンをクリックしたときと同じことを、ウインドウへのメッセージングでも行なえます。…というよりは、各種機能ボタンをクリックしたときに、これらと同じメッセージがウインドウに送られる仕組みになっているので、当たり前、といえば当たり前ですね。

“ウインドウを最大化・元に戻すトグル”

self expandBoxHit

“ウインドウを折りたたみ・元に戻すトグル”

self collapseOrExpand

“ウインドウタイトルの変更”

self setLabel: 'Changed Title'

“ウインドウを閉じる”

self closeBoxHit

 閉じてしまっても、インスペクタが束縛している限りガベージコレクトの対象にはならないので、再び呼び出すことができます。

“閉じたウインドウの再度呼び出し”

self openInWorld

 通常はタイトルバーのドラッグによる位置の移動や、ウインドウ枠境界部のドラッグによるサイズ変更も同様にSmalltalkのスクリプトとして評価可能です。

“サイズを変えて、デスクトップ中央に移動”

self extent: 320 @ 240; center: World center

 次回は、このシステムウインドウのクラスであるSystemWindowを継承して、ほんのちょっとだけ機能を追加した新しいウインドウを定義してみましょう。

バックナンバー:

ニュース・解説

 今週の解説担当:木下 誠

———————————————————————-
WWDC 2006情報
———————————————————————-

今週はADCのサイトでの動きが少なかったですね。WWDCを控えた、嵐の前の静けさなのでしょうか。

WWDC 2006のサイトは、新規情報は少ないものの、Webサイト自体が充実しつつあります。Schedulesのページもできあがっていました。すでに公表されているセッションが埋まっています。

ざっと眺めてみると、まだまだ未発表のセッションがたくさんありますね。ここに、どのようなセッションが登場するのか。もう少しだけ待ちましょう。

WWDC 2006 – Schedules
http://developer.apple.com/wwdc/schedules/

———————————————————————-
Mac OS Xでのゲーム開発環境
———————————————————————-

「Developing Games on Mac OS X Using Third-Party Game Engines」という記事が公開されています。Mac OS X上で動作する、ゲーム開発用のエンジンが紹介されています。

取り上げられているのは4つです。Torque Game Engine、Torque Game Builder、Unity、PTKになります。3Dゲーム向けのものや、2Dゲームに特化しているものが含まれます。

そういえば、WWDC 2006でも、ゲーム開発者に向けた情報提供のサイトが作られていましたね(Community Focus: Games Development)。Mac OS Xの活躍する新しい領域として、ゲーム分野の開拓を狙っているのかもしれません。といって、何か特別な技術の提供がある訳でもないですが。

Developing Games on Mac OS X Using Third-Party Game Engines
http://developer.apple.com/games/gameenginesonmac.html

WWDC 2006 – Community Focus: Games Development
http://developer.apple.com/wwdc/games.html

 

◇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.