MOSA Multi-OS Software Artists

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

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

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

2006-07-25
 

目次

  • MOSA理事コラム          第3回   佐藤 徹
  • 「「Wonderful Server Life」   第12回  田畑 英和
  • 小池邦人の「Carbon API 徒然草」
  • SqueakではじめるSmalltalk入門  第66回  鷲見 正人
  • ニュース・解説               木下 誠

MOSA理事コラム   第3回

         佐藤 徹 有限会社ガラパゴス・システムズ

MOSA会員のみなさま、暑い夏いかがお過ごしでしょうか? 休日に外に出る方は、熱中症予防に気をつけましょう。

さて、MOSA幹事持ち回りのコラムを今回担当いたしますが、WWDC直前ということで、WWDC2006のセッション内容などを含めてアップルの今後の動きを予想してみたいと思います。

1. WWDC2006のセッション
 [Cocoaのセッションが多い]
 今回、Cocoaのセッションの数が非常に多くなっていますが、これは、いよいよTiger以降は新しく追加された機能はCocoaへの機能追加ということになっているので、Tiger以降の新機能に関するセッションは結局Cocoaのセッションということになっているためです。Carbonは無くなるかといえば、現在はCarbonがCore Foundationの上に実装されていますので、Carbon自体はなくならず、今後はどの機能もCarbonとCocoa両方から使えるということになります。
 Cocoaは全く新しいアプリケーションを創る場合にもっとも力を発揮するわけですが、日々の業務をこなしつついままでの顧客をしっかりサポートしようとするサードパーティーは、なかなか大胆な新規アプリケーション開発に取り掛かれず、まだまだCarbonによる既存アプリケーションのアップグレードの方が多いのが現実です。でも、Carbonでもちゃんとユニバーサルバイナリーアプリケーションをリリースできるので、ご安心を。

 [Webに関して]
 Webに関するセッションはプログラミングとIT、その他のセッションにまたがって関連するものが多くなっています。そもそもWorld Wide WebはMac OS Xの前身であるNeXTSTEP上で開発されたので、Mac OS Xは最も古いWebサポートプラットフォームとも言えるでしょう。話題のWeb2.0はiTunes Music StoreをはじめとするアップルのWebサービスで実践されています。今後、さらに発展するWebですが、来るべき超広帯域ブロードバンド利用(アメリカはかなり先になる可能性がありますが)を見据えて、テキストによる情報発信から映像による情報発信への準備へ入るのでしょう。映像へのタグつけの有効な方法のひとつとしてGPSによる画像撮影位置情報がありますが、MacにGPS受信機を内蔵することができれば、将来、お互いにその日一日の様子を画像でアップロードするようになるとどこかで(たとえば山手線で)隣に座った人がどんな人だったかわかるかもしれないですねえ。
 推薦図書 「Web進化論」梅田望夫 著(ちくま新書)、「Web2.0でビジネ
スが変わる」神田敏晶 著(ソフトバンク新書)

2. Windowsとの対決
 Tigerの発表の時から、アップルはマイクロソフトとまた激しく対立しようとしているように感じられます。Leopardでは、Vistaと真っ向勝負するのかもしれません。Tigerの発表の時に、「レッドモンドの皆さん、コピーの用意はいいですか?」という挑戦的なメッセージを出したけど、レッドモンドはコピーした上にちゃんと他の対抗手段をOfficeとWebアプリケーションサービスで組み込んできたようです。Vistaと前後して発表されるOffice 2007の目玉はGrooveというコラボレーションツールで、P2Pを使ったグループウエアです。
しかも、Office Liveというサービスを通じてオンラインでアプリケーションを使えます。アップルもこのGrooveに対向できるものを出してくるのだと思いますが、Office 2007がMac OS Xでサポートされなくなってしまうとかなり困りますねえ。そうなってしまったら、いっそのこと、DarwinにWin32 API移植プロジェクトのWINEを入れてしまって、Windowsアプリケーションがスムーズに移植できるようにしてしまった方がいいかもしれないですね。WINEはゲームプログラムで使われるDirect3Dなんかもサポートしており、かなり強力な武器になる可能性を持っています。

3. 新しいMac
 Intel Macが出て6ヶ月以上たったわけですが、マシンを見ていると、PowerPCの時代と違って、もはやアップルは筐体デザインくらいしかやっていなくて、本体の設計はほとんど他社に任せていますねえ。エンクロージャーデザインとごく小さな部分の追加だけで、蓋を開けてみると(発売当日に必ず『バラす』人がいるわけですが)オリジナルはマザーボードのアップルのレジストだけってこともあるかもしれません。でも、それでいいんです。欲しいのはMac OS Xの環境なわけですから。でも、そうなると、他社のマシンでも良いってことになりますねえ。。。。。

4. 新しい市場
 私は最近中国の合弁企業と仕事をしています。巨大な生産工場であり、巨大な消費市場でもある中国は新しい市場です。残念ながらアップル製品は製造(組立)はしているけどほとんど売れていないという状態が続いていますが、インターネットユーザが急速に拡大(最近の統計によるとBlogを持っている人の数が1億2千万人近くいる)しているし、高い経済成長に低いインフレ率(2004年は10%成長にインフレ3.9%、2005年は10%成長に1.8%のインフレ)を保っているここ数年の間にますます発展するのでしょう。コネが無いとなにも話が進まないし、日本とはずいぶん違う中国の商習慣で、困惑もしますが、国に勢いがあるというのはやはりすごいことです。中国で一つ驚いたのは、テレビのCMです。中国では各行政区毎にチャンネルを持っていて、全国ネットワークがほとんど無いのですが、アメリカのケーブルテレビと同じようにCMがひっきりなしに流れます。しかもアメリカと同じ、商品名とその売りの特徴の連呼型(実際は詳しい内容はわからないけど)です。本当にこれから近代的な先進国になろうとしている国ですので、テレビ・インターネットなどメディアでのビジネスもこれから急速に伸びていくのでしょう。このようなコンテンツを作るのに最適なMacをこれから買ってくれるのかもしれません。
 中国では、日本向けのソフトウエア産業も急速に大きくなっています。ビジネス向けのアプリケーション開発を日本語で請け負う会社がたくさん出来つつあるそうです。彼らは大学で日本語でコンピュータサイエンスやソフトウエアエンジニアリングを勉強するのです。単価が日本の1/10~1/7程度なので、すごい勢いで伸びていくのでしょう。我々は彼らに負けないよう、そして協力して開発できるような体制を整えていく必要があります。WWDCでそういう出会いがあるとよいのですが。

いろいろ新しいことがありそうな、今年の夏、8月のWWDC2006への参加、とても楽しみにしています。なお、MOSAのメンバーでWWDC2006に参加される方に、現地でのMOSA主催のささやかなパーティーを企画しています。単独開催ですので、ちょっと参加費が高くなるかもしれませんが、意見交換といつもの仲間との楽しい時間をお過ごしいただけるよう、鋭意企画中です。

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

 まずは前回の記事の訂正から始めます。IPアドレスの変更を補助するコマンドの”changeip”を解説しましたが、コマンドの使用方法の表記が間違えておりましたので訂正しておきます。

誤)
$ changeip [directory-node | -)] old-ip new-ip [old-hostname new-hostname]

正)
$ changeip [directory-node | -] old-ip new-ip [old-hostname new-hostname]


□サーバのアップデート
 初期設定後に設定をひととおり確認したら、次にシステムのアップデートを行いましょう。市販されているMac OS X Serverのパッケージはv10.4.0だったりしますので、本格的な運用を始める前に最新版にアップデートしておきます。原稿執筆時点でのMac OS X Serverの最新版はMac OS Xと同様v10.4.7です。
 システムのアップデート時には再起動が必要になります。通常は常時稼働させておくサーバの場合いつでも再起動できるとは限りませんので、利用可能なアップデートは運用を開始する前にインストールしておきましょう。サーバであってもiPodのアップデートなどが利用可能ですが、インストールする必要がないアップデートは使用を停止することができます。
 また、Mac OS X Server v10.4からはソフトウェア・アップデート・サービスが利用可能になりましたので、ローカルのアップデートサーバを構築することも可能です。アップデートサーバを構築しておけば他のマシンにアップデートを提供することができます。
 Panther Server(v10.3)のころは10.3.9までアップデートされましたので、Tiger Server(v10.4)もあと数回はアップデートがリリースされるのではないかと予想されます。

□Admin Tools
 それでは次に、サーバ上にインストールされた管理ツールを確認しておきましょう。管理ツールのインストール先ですが、Mac OS X Serverをインストールすれば「/アプリケーション/サーバ」に管理ツールがインストールされます。
 ネットワーク上の別マシンからMac OS X Serverをリモートで管理する場合は、アップルのWebサイトから「Server Admin Tools 10.4」をダウンロードしてインストールすることができますが、この場合はインストールされないツールがいくつかあります。
 それでは、Mac OS X Serverをインストールしたときにどういった管理ツールが利用可能なのなのかを解説します。

・AppleShare IP マイグレーション
 Mac OS Xがリリースされる以前に「AppleShare IP」というサーバソフトがありましたが、こちらで管理していたデータを移行するためのツールです。

・FiberChannel ユーティリティ
 ハードウェアRAIDのXserve RAIDは、FiberChannel経由でXserveやPower Macに接続します。このとき使用するFiberChannelカードの情報を確認したり、設定を行うためのツールです。

・MySQL マネージャ
 Mac OS X Serverに搭載されているデータベースソフトのMySQLを管理するためのツールです。といいましても極めて最低限の管理機能しかありませんのでこのツールだけでMySQLが管理できるわけではありません。

・QTSS Publisher
 Mac OS X Serverには、ストリーミングを行うQuickTime Streaming Server(QTSS)が搭載されています。QTSS PublisherはQTSSで配信するデータを管理するためのツールです。ムービーファイルをストリーミング用のファイルに変換する機能があります。

・RAID Admin
 Xserve RAIDの管理ツールです。Xserve/Power MacからXserve RAID上のデータにアクセスするにはFiberChannelを使用しますが、Xserve RAIDの管理は別途Ethernet経由で行います。Xserve RAIDにはFiberChannelのインターフェイスと、管理用のEthernetインターフェイスが装備されています。

・Xgrid Admin
 Xgridとは複数のコンピュータ上でグリッドを作成し、複雑な処理を分散して実行するためのテクノロジーです。Xgrid AdminはXgridの管理ツールです。

・ゲートウェイ設定アシスタント
 Macをゲートウェイとして使用するさいに利用する各種サービスを一括して設定するためのツールです。具体的にはNAT、FireWall、VPN、DHCP、DNSの設定を行います。このツールは各サービスの既存の設定を上書きするため、サーバを構築する初期段階で使用するのがよいでしょう。

・サーバアシスタント
 具体的な使い方についてはすでに解説済みですが、Mac OS X Serverのインストールおよび初期設定をリモートで実行するためのツールです。

あといくつか紹介していない管理ツールがありますが、それらは次回解説したいと思います。

つづく

小池邦人のCarbon API 徒然草(2006/07/21)

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

今回は、AltiVecからSSE/SSE2へのコード変換における実作業についてお話します。例題を取り上げることでコード変換作業(少々やっかい)について解説します。

以前にも紹介しましたが、Universal Binary化においてAltiVecコードをSSE/SSE2コードに変換する作業を行う場合には、まず以下のドキュメントを参照してください。

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

現在のSSE/SSE2はAltiVecよりも命令数が少なく、その処理速度もかなり低速です。次世代のIntel版CPU(Core 2 Duo)では、SSE/SSE2に新たな命令が追加され(SSE4と呼ばれる?)、演算ユニット自体の処理速度も向上すると言われています。しかし、実機が存在しない現段階では何とも判断できません。よって、変換後のソースコードの記述が下手だと、PowerPCではAltiVecを利用することで高速化していた整数処理が、SSE/SSE2に書き換えた途端に、CPU自身の整数処理を使うより遅くなってしまう可能性もあります。大規模なコード書き換えの前に、まずは小規模なコードを書き換えて、処理速度の詳細な比較を行うことが肝要でしょう。

XcodeプロジェクトでSSE/SSE2コードを利用するには、Accelerate.frameworkをリンクし、ソースファイルの最初にヘッダファイルとしてAccelerate.hを定義します。

#include 

SSE/SSE2に関する様々な定義はAccelerate.hが間接的に参照している以下のヘッダファイルに記述されています。

・SSEについては「xmmintrin.h」
・SSE2については「emmintrin.h」
・SSE3については「pmmintrin.h」

また、上記ファイルはDeveloperフォルダの以下の場所に保存されています。

/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1/include/

上記3つのファイルに加えてMMX用(懐かしい)のヘッダファイルとしてmmintrin.hがありますが、MMXについてはSSE/SSE2の登場で時代遅れになってしまいましたので、今後使用を検討する必要はありません。SSE/SSE2で用いるルーチン名は、上記ヘッダーファイルにアゼンブラコードをインライン展開する形式で定義されています。例えば4つの浮動小数点2ペアーをかけ算するルーチンは、ソースファイル上には_mm_mul_ps()と記述することになります。これは、xmmintrin.hにおいて以下の様に定義されています。

static __inline __m128 __attribute__((__always_inline__, __nodebug__))
_mm_mul_ps (__m128 __A, __m128 __B)
{
  return (__m128) __builtin_ia32_mulps ((__v4sf)__A, (__v4sf)__B);
}

SSE/SSE2のアゼンブラコードは__builtin_ia32_mulpsですが、それをC言語の関数風に記述できるよう考慮されているわけです。次にベクトル化した数値データ(変数や引数)の記述方法です。こちらは、AltiVecとSSE/SSE2でそれぞれ異なる形式として定義されています。しかし、VecLib.hから呼ばれているvecLibTypes.hでは、両方の定義の差異を吸収するための再定義がされており、利用者の便宜を図っています。例えば、128bitのレジスタに4つのfloat値(32bit)を代入したい場合には、AltiVecではvector floatと定義するのに対してSSE/SSE2では__m128(先頭のアンダーラインは2本…よく間違える)と定義しますが、以下のtypedefを利用していれば、どちらもvFloatと記述できるわけです。

まずは、Altivecの場合….

typedef vector unsigned char    vUInt8;
typedef vector signed char      vSInt8;
typedef vector unsigned short   vUInt16;
typedef vector signed short     vSInt16;
typedef vector unsigned int     vUInt32;
typedef vector signed int       vSInt32;
typedef vector float            vFloat;
typedef vector bool int         vBool32;


続いて、SSE/SSE2の場合…

typedef __m128i                 vUInt8;
typedef __m128i                 vSInt8;
typedef __m128i                 vUInt16;
typedef __m128i                 vSInt16;
typedef __m128i                 vUInt32;
typedef __m128i                 vSInt32;
typedef __m128i                 vBool32;
typedef __m128                  vFloat;
typedef __m128i                 vUInt64;
typedef __m128i                 vSInt64;
typedef __m128d                 vDouble;


この定義を用いれば、Universal Binary化において#ifや#endifなどを使いソースコードを切り分ける必要がなくなりますので非常に便利です。上記定義を見ると、SSE/SSE2ではユニット内でlong long値(64bit)やdouble値(64bit)同士の演算が可能だと言うことが理解できます。残念ながら、AltiVecでは64bit長の数値は取り扱うことができません。

以下は、原点(0,0)からある座標(x,y)までの距離を、4座標まとめて同時に計算するルーチンです。最初は、AltiVec用ルーチンです。

vFloat vecDistAltiVec( vFloat x,vFloat y )
{
    vFloat    x2,dd1,dd2;

    x2=vec_madd( x,x,(vFloat)(-0.0f) );   // X*X
    dd1=vec_madd( y,y,x2 );               // Y*Y+X2
    dd2=vsqrtf( dd1 );                    // √
    return( dd2 );
}


AltiVecには単純に2ペアーをかけ算するルーチンはありません。その代わり、vec_madd()は一発で「A*B+C」という演算を行います。そのため、最初のvec_madd()では3番目の引数に0.0を渡してかけ算のみの実行としています。次が、SSE/SSE2用ルーチンです。

vFloat vecDistSSE( vFloat x,vFloat y )
{
    vFloat    x2,dd1,dd2;

    x2=_mm_mul_ps( x,x );                   // X*X
    dd1=_mm_add_ps( _mm_mul_ps( y,y ),x2 ); // Y*Y+X2
    dd2=vsqrtf( dd1 );                      // √
    return( dd2 );
}


AltiVecと異なり、SSE/SSE2には「A*B+C」という演算を一発でこなす命令はありません。よって、この部分はかけ算_mm_mul_ps()と足し算_mm_add_ps()を併用します。また、最後にvsqrtf()を用いてルート値を得ていますが、この関数はAccelerate.frameworkに定義されており、AltiVecとSSE/SSE2共通で利用できます。また、Accelerate.frameworkを用いることで、単純な演算であれば以下のような「ごく普通」の表記をすることも可能です。この表記は、AltiVecとSSE/SSE2共通で利用できますので、やはり#ifや#endifでソースコードを切り分ける必要がなくなり大変便利です。

vFloat vecDistBoth( vFloat x,vFloat y )
{
    return vsqrtf( x*x+y*y );
}


今回をもって、長らく続けてきた「アプリケーションのUniversal Binary化」についての話を終了したいと思います。次回からは、新しいテーマにそったCarbon API関連の最新の話題を取り上げていきたいと考えています。お楽しみに!

つづく

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

本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。今は、簡単なGUIビルダを構築することを目指して、そのために必要なテクニックや知識を整理しているところです。

前回は最後に、a PluggableTextMorphで黄ボタンメニューを機能させることが可能な、次のような短めのコードを示しました。

| field |
field := PluggableTextMorph
   on: Workspace new
   text: nil
   accept: nil
   readSelection: nil
   menu: #codePaneMenu:shifted:.
field bounds: Rectangle fromUser.
field openInWorld


今回は、このように記述するとなぜ、黄ボタンクリックなどでメニューを呼び出すことができるようになるのか、そのしくみを調べてみましょう。

そもそも、クラス「PluggableTextMorph」に「on: Workspace new text: nil accept: nil readSelection: nil menu: #codePaneMenu:shifted:」というメッセージを送ることで起動されるメソッド「#on:text:accept:readSelection:menu:」は、いったい何をしているのでしょうか。この手の疑問が生じたとき、すぐにソースを確認してみることができるのがSmalltalkシステムのよいところです。

このメールの「on:text:accept:readSelection:menu:」をコピー&ペーストで持ってゆくか、あるいはワークスペースなどで「on:t」までタイプしてからcmd + Qを二度タイプすることで補完した後に、browse it(cmd + B)すると、当該メソッドのソースをブラウズできます。ブラウザには異なるクラスに定義された四つの#on:text:accept:readSelection:menu:が上のリストペインに列挙されますが、今、我々が興味があるのは上から二番目のクラスメソッド「PluggableTextMorph class >> #on:text:accept:readSelection:menu:」です。

PluggableTextMorph class >> on: anObject text: getTextSel
accept: setTextSel readSelection: getSelectionSel menu: getMenuSel

   ^ self new on: anObject
      text: getTextSel
      accept: setTextSel
      readSelection: getSelectionSel
      menu: getMenuSel

self、つまりPluggableTextMorphにnewを送ってインスタンスを作り、それに対してあらためて「on: anObject text: getTextSel accept: setTextSel readSelection: getSelectionSel menu: getMenuSel」というメッセージを送っていますね。これはnewの送信を省略するためによくあるパターンです。
では、そうして起動される同名のインスタンスメソッド「PluggableTextMorph>> #on:text:accept:readSelection:menu:」のほう(リストの一番目)の定義はどうなっているかというと、

PluggableTextMorph >>on: anObject text: getTextSel
accept: setTextSel readSelection: getSelectionSel menu: getMenuSel

   self model: anObject.
   getTextSelector := getTextSel.
   setTextSelector := setTextSel.
   getSelectionSelector := getSelectionSel.
   getMenuSelector := getMenuSel.
   self borderWidth: 1.
   self setText: self getText.
   self setSelection: self getSelection

というような記述であることが分かります。ほとんどはインスタンス変数への対応するパラーメータの代入(束縛)です。冒頭のスクリプトで最後のパラメータ(menu:キーワードのところ)であるところの、シンボル「#codePaneMenu:shifted:」は、getMenuSelを介して、getMenuSelectorというインスタンス変数に束縛されることも分かります。

では、このgetMenuSelectorというインスタンス変数は、PluggableTextMorphとそのスーパークラスに定義された他のどのメソッドでどのように使われているのでしょうか。こうした情報についても、ブラウザ中央の「inst vars」ボタンをクリックしてポップアップするメニューから「getMenuSelector」を選択することで簡単に調べることができます。

[fig.A]インスタンス変数に関与しているメソッドを探すためのボタン

結果、#on:text:accept:readSelection:menu:以外では、#hasYellowButtonMenuと#getMenu:という二つのメソッドで参照されていることが分かります。それぞれの内容をざっと確認すると、どうやら後者が黄ボタンメニューのポップアップを司るメソッドであるようです。

[fig.B]getMenuSelectorにアクセスしているメソッド一覧とそのソース

手続きの流れをざっと見ると、getMenuSelectorにメッセージ「numArgs」を送信してパラメータの数を得、その結果によって条件分岐をしていますね。冒頭のスクリプトの流れでは、getMenuSelectorには#codePaneMenu:shifted:が束縛されているので、実際にnumArgsを調べてみましょう。

#codePaneMenu:shifted: numArgs   " => 2 "

この式をprint it(cmd + P)するとパラメータが二つであることを意味する「2」を返してくるはずです。もっとも、Objective-C同様、Smalltalkのセレクタは、原則として、コロンの数が引数の数と一致するので、あらためてnumArgsを送ってみるまでもないのですが…。

さて。では改めて「getMenuSelector numArgs = 2」のところで何をしているか見てみると、

model perform: getMenuSelector with: menu with: shiftKeyState

という式が見つかります。#perform:with:with:は、第一パラメータをセレクタに含むメッセージをレシーバに送るメソッドなので、結果的に、次の式を評価するのと同じことになります。

model codePaneMenu: menu shifted: shiftKeyState

この際の作業について詳しくは、StringHolder >> #codePaneMenu:shifted:の定義を見ていただくとして、端的には、モデルに対して、黄ボタンメニューを作って返してくるよう“丸投げ”しているわけです。専門用語では「委譲」というテクニックですね。

a PluggableTextMorphを作る際、モデルと、そこにあらかじめ定義した黄ボタンメニューを返すメソッド名(セレクタ)を第一および第五パラメータとして添える必要があるのはこうした理由からです。どんなメニューをポップアップするかは、a PluggableTextMorph自身は関知せず、すべてモデル次第…というわけです。

同時にこのことは、クラス「PluggableTextMorph」の定義を変えずに、そのインスタンスの挙動を変化させるしくみが働いていることを意味します。PluggableTextMorphが、その名に“Pluggable”を冠している理由が、ちょっと分かったような気がしてきませんか?

バックナンバー:

ニュース・解説

 今週の解説担当:木下 誠

———————————————————————-
オーディオ系アプリのUniversal Binary移行
———————————————————————-

オーディオ系アプリケーションの開発者に、Universal Binaryへの移行についてインタビューした、「Going Universal: Audio Developers Catch the Wave」が公開されています。

Ableton、Bias、Metric Halo、Native Instruments、Rolandといったデベロッパがインタビューに答えています。それぞれ、Universal Binaryの利点、移行のためのアドバイス、Universalバージョンの開発、といった項目について、述べています。現場の声が垣間見えて、読み込むと面白いです。

Going Universal: Audio Developers Catch the Wave
http://developer.apple.com/audio/audiodevinterviews.html

———————————————————————-
CoreAudioとOpenGL Shading Languageのサンプル
———————————————————————-

ADCのサイトに、サンプルが2つ登録されています。

1つは、CoreAudioのものです。AUHALを作って、音声をAACでファイルに録音していくデモになります。

もう1つは、OpenGL Shading Languageのデモを行う、GLSLShowpiece。これは、Developer Toolsにも付属しているサンプルですが、このたび2.0のリリースになったようです。アニメーションとともに様々なテクスチャを表示するShading Languageのパワーを見せつけてくれるアプリケーションです。

RecordAudioToFile
http://developer.apple.com/samplecode/RecordAudioToFile/index.html

GLSLShowpiece
http://developer.apple.com/samplecode/GLSLShowpiece/index.html

———————————————————————-
キーイベントとMovieAudioExtractionのQA
———————————————————————-

QAも2つ公開されています。

1つは、Carbonでのキーイベントを取り扱うときの問題について。修飾キーとともに送られてくるキーイベントの変化について説明されています。特に、コントロールキーを押したときに、キャラクタコードが変化してしまう問題の理由と解決方法が述べられています。

もう1つは、QuickTimeについて。MovieAudioExtractionを使ったときに、オーディオファイルの終わりの方で、オーディオサンプルが失われることがある問題を説明しています。

QA1446: Losing the character code when using the control key
http://developer.apple.com/qa/qa2005/qa1446.html

QA1481: MovieAudioExtraction – Extracting all available audio samples
http://developer.apple.com/qa/qa2006/qa1481.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.