MOSA Multi-OS Software Artists

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

プログラマーに興味がある方なら誰でも入会いただけます。
MOSA Multi-OS Software Artists
===SINCE 1995===

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

MOSADenバックナンバー 2004年7月発行分

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

    2004-07-27

    目次

    • SqueakではじめるSmalltalk入門   第4回  鷲見正人
    • 小池邦人の「Carbon API 徒然草」
    • 「Behind the WebObjects」    第24回  田畑 英和
    • 高橋政明のWWDC2004参加レポート  ★MOSA会員専用記事★
    • ニュース・解説

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

     本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkがどんなものであるかを知っていただこう…というテーマで、最近話題のSqueakを紹介しています。今回は、簡単なSmalltalkコードを記述して実行してみます。

    Smalltalk言語には文法というほどのものはありません。LispにおいてS式ですべてを記述できるのと同じように、Smalltalkではすべてをメッセージ式で記述します。メッセージ式とは、送りたいメッセージとそれを受けるオブジェクトを「object message」という順番でスペースで区切って記述するものです。Objective-Cでいうところの[ ]内に記述するアレです。

    書式の“object”のところにはあらかじめオブジェクトを束縛しておいた変数、もしくは、新しくオブジェクトを生み出すリテラル式、あるいは、返値を期待する別のメッセージ式を記述します。“message”のところには、先のオブジェクト(レシーバ)に対して送信するメッセージを記述します。メッセージにはパラメータ(つまりレシーバとは別のオブジェクト)を伴わせるか否かで3種類あって、それぞれ単項メッセージ、二項メッセージ、キーワードメッセージと呼ばれます。

    単項メッセージは、いわゆる引数をとらないメッセージです。なお、Squeakでは文字列リテラルはダブルクオートではなく、シングルクオートで括ります。一方、ダブルクオートはコメント文として解釈されます。

    3 factorial “=> 6 ”
    Float pi “=> 3.141592653589793″
    ‘Squeak’ reverse “=> ‘kaeuqS’ ”

     キーワードメッセージは引数をひとつ以上とるメッセージで、引数の前にObjectvie-Cでお馴染みの「:」を置きます。ただ、Objective-Cとは違って、Smalltalk言語の場合、「:」の前には少なくとも1文字のアルファベットが必要なので「:」だけでメッセージの末尾に引数が追加されることはありません。

    3 raisedTo: 4 “=> 81 ”
    ‘Squeak’ copyFrom: 3 to: 4 “=> ‘ue’ ”
    Workspace openLabel: ‘untitled’ “ウインドウを表示”

     二項メッセージは引数がひとつだけの特殊なキーワードメッセージと考えることができます。メッセージセレクタ(メッセージから引数とスペースを取り除いた文字列)はアルファベットを含まず、引数の前(つまりセレクタの末尾)には「:」は付きません。主に数式や等式などをメッセージ式として違和感なく表現するために用意されたものだと思われます。そう、Smalltalkでは数式(のように見える式)もメッセージ式です。たとえば「3 + 4」は、3と4の加算を意味する二項演算ではなく、「3に+ 4というメッセージを送信する」と解釈し、内部的にも(バイトコードへのコンパイルまでは)そう処理されます。

    3 + 4 “=> 7 (和)”
    3 * 4 “=> 12 (積)”
    3 = 4 “=> false (等価か)”
    3 ~= 4 “=> true (不等価か)”
    3 // 4 “=> 0 (除算の商)”
    3 4 “=> 3 (除算の余り)”
    3 / 4 “=> (3/4) (分数オブジェクトの生成)”
    3.0 / 4 “=> 0.75 (除算)”

     メッセージが複数混在するとき、二項メッセージはキーワードメッセージに、単項メッセージは二項メッセージに優先して送信されます。たとえば「3 raisedTo: 4 + 5 factorial」は「3 raisedTo: (4 + (5 factorial))」の順で評価されます。もちろん括弧で括ることで優先順位を明示的にしたり、評価の順番を変更することもできます。二項メッセージと単項メッセージのみが連続する場合は、左にあるものから順に送信され、その結果として返ってきたオブジェクト(返値)に対して次のメッセージが送られます。「3 + 4 – 5 * 3」は「((3 + 4) – 5) * 3」、「Float pi sin」は「(Float pi) sin」です。なお、二項メッセージにおける加減算に対する乗除算の優先はありません。乗除を優先したい場合は、あらかじめ括弧で括っておく必要があります。

    キーワードメッセージについては、これを連続して記述することはできません(別のメッセージセレクタとして解釈されてしまいます)。必ず括弧を使って最初のメッセージ式の返値に改めてメッセージを送ることを明示的にしてください。逆の例ですが「3 = 4 ifTrue: [5] ifFalse: [6]」は3 = 4の返値(当然false)にifTrue: [5] ifFalse: [6]というメッセージが送られることを意味し、「(3 = 4 ifTrue: [5]) ifFalse: [6]」のように解釈されることはありません。

    では複数のメッセージ送信を織り込んだ、メッセージ式の例を見てみましょう。

    (FileDirectory default fileNamed: ‘test.txt’) edit “ウインドウを表示”

     この式は、まずFileDirectoryという(グローバル変数に束縛されている)オブジェクトに対してdefaultというメッセージを送って、仮想イメージがあるディレクトリを示すオブジェクトを得ます。それに対し改めて、fileNamed:’test.txt’というメッセージを送っています。ここで、test.txtという名前のファイルがあればそれを、なければ作ってそれを制御するためのオブジェクト(StandardFileStreamのインスタンス)が返ってきます。さらにそのオブジェクトに対してeditというメッセージを送ることで、当該ファイルを編集するファイルエディタ機能を持ったウインドウが現われます。括弧でメッセージ送信の順を変えて、editが’test.txt’という文字列オブジェクト(Stringのインスタンス)に送られることを阻止しています。

    普段、ファイルを編集するだけなら、こんなメッセージ式の評価ではなく、別に用意されたFileListという名のファイラを起動してそのGUIを使います。ここでは、オブジェクトに対するメッセージ送信により各種オブジェクトの機能が発現していることを実感していただければ結構です。

    実際にdo itして動作を確認してみてください。Workspace openLabel:’untitled’で開くのとは違ったウインドウが現われます。このテキストエディタ内でももちろんSmalltalkコードを入力して実行できます。Smalltalk環境内では文字入力を受け付ける場所ならどこででも、Smalltalkコードを入力して評価(必要なら結果を表示)することが可能です。次のコードを入力して選択(cmd-A)し、続けてdo it(cmd-D)すると、赤いペンでマウスの軌跡を描くことができます。

    | pen |
    pen _ Pen new.
    pen defaultNib: 3.
    pen color: Color red.
    [Sensor shiftPressed] whileFalse: [
       | position |
       position _ Sensor peekPosition.
       Sensor redButtonPressed
          ifTrue: [pen goto: position]
          ifFalse: [pen place: position]]

     いささか稚拙ではありますが簡易ペイントソフトのできあがりです。shiftキーを押せば制御がGUIに戻ります。複数行のメッセージ式を区切るにはピリオドを使います。改行とタブ、余分なスペースはコードの見た目を整える以外の意味を持ちません。Smalltalkのコード中で使用する一時変数にはアルファベット小文字で始まる英数字を使用し、同じコード内であらかじめ「|」で括って宣言しておきます。変数へのオブジェクトの束縛は「_(アンダースコア。Squeakの画面では“←”と表示)」か「:=」で左辺に束縛したい変数を、右辺に束縛したいオブジェクトを返値に持つ式(メッセージ式かリテラル式)を置きます。

    この短いコードとその動きから、どんなオブジェクトにどんなメッセージが送られているのか、じっくりと考えてみてください。なおこの記述は、ウインドウの黄ボタンメニューからaccept→overwrite that fileで保存できます。再び開くには、デスクトップメニュー→open…→file listで呼び出すことができるファイラ(FileList)を使うか、ひとつ前に示した「(FileDirectory…」という式を記述して評価します。ウインドウを閉じずに置いておき、環境を終了するときにsaveする、という方法でもよいでしょう。

     次回はこのプログラムの解説と描いた絵を保存する機能の拡張を試みます。

    小池邦人の「Carbon API 徒然草」(2004/07/23)

    Main Event Loopへ入る前準備-その2

    今回は、サンプルアプリケーションに実装される一番最初のCarbon Event Handlerの話をします。イベントハンドラは、コントロールやウィンドウといった各オブジェクトに対してそれぞれ用意することが可能です。初期化ルーチンのstartApplication()から呼ばれているsetupApplicationEvent()では、このうち「アプリケーション」自身に届くイベント(Carbon Event)を処理するためのハンドラルーチンを実装しています。

    例えば、ユーザがウィンドウ上のボタンをクリックしたとします。すると、「コントロールがクリックされた」というイベントが、まずはコントロール自身のハンドラへ送付されようとします。もし、コントロールにハンドラが実装されていなければ、今度はコントロールが配置されているウィンドウへ、それもなければ最終的にはアプリケーションへと送付先が切り替わり処理されます。通常、ボタンクリック等のイベントは、コントロールかウィンドウのイベントハンドラで処理されますので、アプリケーションのハンドラまで届くことはありません。アプリケーションのハンドラで処理するような例としては、ウィンドウが表示されていない時のメニュー選択で発生するイベントなどがあります。

    以下が、アプリケーションにイベントハンドラを実装しているsetupApplicationEvent()です。アプリケーションにハンドラを実装するのには、EventTypeSpecのリストに受諾を許可するイベントのクラス名(eventClass)と種類(eventKind)を列挙しておき、ハンドラルーチンの名称と一緒にInstallApplicationEventHandler()に渡します。今回は、4種類のイベントに対応するようにEventTypeSpecのリストが作成されています。

    void setupApplicationEvent(void)
    {
        EventTypeSpec  list[]={
                                  { kEventClassCommand, kEventProcessCommand },
                                  { kEventClassCommand, kEventCommandUpdateStatus },
                                  { kEventClassMenu,kEventMenuBeginTracking },
                                  { kEventClassMenu,kEventMenuEndTracking }
                              };
    
        InstallApplicationEventHandler( myApplicationEventHandler,
                                        GetEventTypeCount(list),list,NULL,NULL );
    }

    同様に、コントロール用であればInstallControlEventHandler()を、ウィンドウ用ならばInstallWindowEventHandler()を、メニュー用ならばInstallMenuEventHandler()を使いイベントハンドラを実装することができます。本サンプルアプリケーショの場合は、アプリケーションメニューの「MOSAについて…」「MOSAを終了」、それからファイルメニューの「新規」と「開く…」が、アプリケーション用ハンドラルーチンで処理されます。つまり、これらは、ウィンドウが何も表示されていない時でも選択できるメニュー項目となります。今回は、そうした処理をアプリケーション用ハンドラで実行していますが、状況によっては、メニュー用ハンドラで実行した方が都合が良い場合もあるでしょう。「どのオブジェクトのハンドラでどんなイベントを処理するのか?」この課題に対していかに効率的な設計を行えるかどうかが開発者の腕の見せ所となります。

    以下のmyApplicationEventHandler()が、InstallApplicationEventHandler()で実装されているアプリケーション用のイベントハンドラルーチンの本体です。

    static pascal OSStatus myApplicationEventHandler( EventHandlerCallRef myHandler,
                                                    EventRef event,void *userData )
    {
        short            ret=eventNotHandledErr;
        unsigned long    ekind;
        WindowRef        wptr;
        HICommand        cmd;
        long             cls;
    
        cls=GetEventClass( event );   // イベントのクラス名を得る
        ekind=GetEventKind( event );  // イベントの種類を得る
        if( cls==kEventClassCommand ) // Carbon Eventのクラスはコマンド
        {
            switch( ekind ) // Carbon Eventの種類を判断
            {
                case kEventProcessCommand:  // ユーザの操作でコマンドが発生した
                                            // コマンドの種類をパラメータから得る
                    GetEventParameter( event,kEventParamDirectObject,typeHICommand,
                                                NULL,sizeof(HICommand),NULL,&cmd );
                    switch( cmd.commandID )  // コマンドIDの種類を判断
                    {
                        case 'new ': // ファイルメニューの「新規」
    
                            newCatalogWindow( &wptr );  // 新規ファイルルーチン
                            ret=noErr;
                            break;
    
                        case 'open': // ファイルメニューの「開く...」
    
                            loadCatalogFile( &wptr );  // ファイルロードルーチン
                            ret=noErr;
                            break;
    
                        case 'abou': // アプリメニューの「MOSAについて」
    
                            openAboutWindow();  // アバウト表示
                            ret=noErr;
                            break;
    
                        case 'quit': // アプリメニューの「MOSAを終了」
    
                            if( quitApplication() )  // アプリケーションの終了
                                ret=noErr;
                            break;
                    }
                    break;
    
                case kEventCommandUpdateStatus:  // メニューの状態チェック開始
                                                 // MenuRefをパラメータから得る
                    GetEventParameter( event,kEventParamDirectObject,typeHICommand,
                                                NULL,sizeof(HICommand),NULL,&cmd );
                    ret=mainteApplicationMenu( cmd.menu.menuRef );
                    break;  //  メニューの表示、非表示の切り替えを行う
            }
        }
        else if( cls==kEventClassMenu ) // Carbon Eventのクラスはメニュー
        {
            switch( ekind ) // Carbon Eventの種類を判断
            {
                case kEventMenuBeginTracking:   // メニュー選択が開始された
    
                    menu_tarck=1;  // EventTimer用の外部変数のmenu_tarckをセット
                    break;
    
                case kEventMenuEndTracking: // メニュー選択が終了した
    
                    menu_tarck=0;  // 外部変数のmenu_tarckをクリア
                    break;
            }
        }
        return( ret );
    }
    


    イベントのクラス名と種類は、GetEventClass()とGetEventKind()で得ることができます。クラス名と種類の両方が判明したらケース文を使いそれぞれの処理を切り分けます。例えば、メニュー選択により届くイベントは、クラス名が「kEventClassCommand」で種類が「kEventProcessCommand」となります。ただし、この時点ではどのメニュー項目が選択されたのか(どんなコマンドIDが届いたか)は判断できないので、GetEventParameter()により、そのイベントに添付されているパラメータを調べます。コマンドIDを調べたい場合には、パラメータ名に「kEventParamDirectObject」を、タイプに「typeHICommand」を指定し、HICommand構造体を得ます。この構造体のメンバーのcommandIDに、メニューに設定されている(Nibファイルにおいて設定済み)コマンドIDが代入されているので、それをチェックすることでメニュー項目ごとに処理を切り分けます。

    今回で、Main Event Loopへ入る(RunApplicationEventLoop()を実行する)までにやっておかなければいけない「アプリケーション初期化」についての話はすべて終了しました。次回からは、「新規や」「開く…」など、メニューから選択できる機能を各ルーチンごとに追跡して行くことにします。

    つづく

    「Behind the WebObjects」  第24回  田畑 英和

     さていよいよ今回からProject WONDERの具体的な使い方を解説していきたいと思います。とはいいましてもProject WONDERは様々なフレームワークから構成されていますので、どこから紹介していったらいいものか迷ってしまいますが、次のような理由からまずはERCnahgeNotificationJMS(以下ERCN)を取り上げてみたいと思います。

     ・他のProject WONDERフレームワークに依存していない
     ・アプリケーション側のコードを修正する必要がない

     まずどういったときにこのフレームワークが役立つかを説明しておきます。WebObjectsの実行環境ではインスタンスを複数起動することにより手軽に負荷分散をおこなうことができます。WebObjectsの運用環境は、ライセンス上のインスタンス数の制限はありませんので、ぜひともこのマルチインスタンスによる負荷分散の機能は積極的に使っていきたいところです。
     しかし、インスタンスを複数にした場合には考慮しなければならない問題が発生します。それはインスタンス間でのEOの同期です。デフォルトの状態ではインスタンスごとにデータのスナップショットが作成されますが、同一のデータを複数のインスタンスで共有する場合、このスナップショットの挙動を正確に理解しておく必要があります。
     例えば2つのインスタンスでデータベース上の同一のデータ”A”をFetchしたとしましょう。次に、インスタンス1でデータ”A”を”B”に変更してデータベースに保存します。このときインスタンス1とデータベースではデータが”B”に変更されますが、インスタンス2のスナップショットは”A”のままです。つまりインスタンス間でデータの内容が食い違う状態になります。
     そしてインスタンス2でデータを”C”に変更して保存したとします。しかしこのときの保存処理は失敗します。なぜならば、EOFはデータの更新時にまずスナップショットのデータ(インスタンス2のスナップショットはまだ”A”のまま)とデータベース上のデータ(すでに”B”に変更済み)を比較し、違いがなければ保存処理を実行し、違いがあればデータのコンフリクトが発生したということで保存処理をキャンセルするからです。
     設定によっては同一インスタンス内であってもコンフリクトが発生することもありますし、コンフリクトの検出機能をOFFにすることもできますが、処理の流れを簡単にまとめますと以下のようになります。

     インスタンス1:A > B > B
     インスタンス2:A > A > C <- Fetch後にデータベース上のデータが変更
     データベース :A > B > B <- インスタンス2の変更は保存できない

     またFetchをおこなったときに、スナップショットに該当するデータがあれば、EOFはスナップショットのデータを用いてEOを作成します。つまりFetchをしたからといって、常に最新のデータにアクセスできるとは限りません。
     スナップショットを明示的に破棄するようなプログラミングもできますが、いずれにせよスナップショットを常に意識してプログラミングをおこなう必要があります。
     そこでERCNが登場するわけですが、このフレームワークを用いるとインスタンス間で自動的にスナップショットの同期をおこなってくれます。上記の2インスタンスの例の場合以下のような挙動になり、Fetchしたときも常に最新のデータにアクセスすることができます。

     インスタンス1:A > B > C <- インスタンス2の変更内容が自動的に反映
     インスタンス2:A > B > C <- インスタンス1の変更内容が自動的に反映
     データベース :A > B > C <- 両方のインスタンスでの更新は成功

     しかも、アプリケーションをERCN対応するにはフレームワークをプロジェクトに追加するだけでよく、ソースコードは一切変更する必要がありません。
     ただし、ERCHはあくまでもWebObjects向けのフレームワークですので、同じデータベースを編集する非WebObjectsアプリケーションまではサポートできませんし、自動的に同期をとらないほうがよい場合も考えられます。

    さらに、ERCHを用いる場合にはあらかじめOpenJMSをインストールしておく必要があります。OpenJMSはJavaのメッセージサービスの規格であるJMSのオープンソースによる実装です。JMSではPublish-Subscribeモデルをサポートしており、Publiserは複数のSubscriberに対してメッセージを送信することができます。ERCHでは、このJMSの仕組みを利用することにより複数のインスタンス間でのデータの同期を実現しています。
     今回は背景を説明しただけになってしまいましたが、次回はOpenJMSを含むERCHのセットアップ方法を紹介する予定です。

    ・JMS
    http://java.sun.com/products/jms/
    http://www.oreilly.co.jp/BOOK/jms/
    ・OpenJMS
    http://openjms.sourceforge.net/

    MOSA会員専用記事

    高橋政明のWWDC2004参加レポート

     少し時間がたってしまいましたが、WWDCレポートをお送りします。

    ジャパン・オリエンテーション

     開催前日の日曜日、会場近くのホテルを会場にApple社による日本からの出席者向けの立食パーティが開かれました。初日の基調講演を聞くにためにほとんど参加者は前日までには現地に入っています。日本からの参加者が最初に顔を合わせる機会がこのパーティです。
     日本からもずいぶんたくさんの方が参加していることにあらためて驚いてしまいました。Windows業界のことはわかりませんが、毎年ではないにしても技術的な発表の場にこれほどたくさん日本から開発者が詰めかけることはあるのでしょうか?
     料理も充実していて夕食代が浮きました。なおこのパーティはAppleの無料ご招待で、WWDC期間中の身分証明であるバッジを見せると入場できました。日本のApple DTSのスタッフはもちろん、Mac雑誌の編集者、そして開発者の皆さんが勢揃いです。このように参加者同士の情報交換や交流もWWDCの大きな魅力です。

    Tiger

     いつものように基調講演の内容以外は機密事項なので書いたり解説したりすることはできませんが私なりの印象をまとめます。Tigerについてはずいぶん詳しいプレビューがAppleのwebですでに公開されています。
     基礎的な部分では32bitと共存できる64bitに大きく生まれ変わります。実は64ビットと言われてもピンと来なかったのですが、100万台規模でのクラスタも可能とはすごいですね。
     そのほか多くの特徴が発表されました。ただOSとしての機能とアプリケーションの機能が並列で紹介されていました。あえて区別せず発表した印象です。
     Spotlight、Core Image、VoiceOver、Automator、Dashboard、など10.3までの機能や安定性の上に実現される訳ですが、これらの機能のアイディアのルーツはコープランドであるものも少なくないように感じました。コープランドとはもちろんSystem7の後継として発表されたOSのコードネームです。(もう9年程前でしょうか)
     基調講演は充実していて時のたつのを忘れましたが、後から冷静になって考えるとMacintosh20周年の話題がありませんでした。ちょっとひねくれた見方になりますがMacの歴史に触れるとコープランドなどの話題も登場するからだったのかも知れません。

    2005年前半としか発表されていないTigerの登場時期、実際に現段階ではいつ「登場させるか」は決まっていないのでしょう。
     個人的印象ですがTigerに搭載予定の機能すべてを洗いざらい発表したとは考えられません、現在開発中で今回発表されなかった機能も少なくないはずですし、Finderがどうなるのかといったことは今回のWWDCでは触れられませんでした。
     Spotlightをはじめ今回発表された機能だけでもかなり魅力的でこれまでと違った使い勝手が期待されます。当然Finderをはじめとするシステム全体が今回の新機能を搭載してくるはずですが、その詳細は来年までまたなければなりませんね。(まったく新しいiアプリの登場の可能性ももちろんありますね)
     我々開発者はTigerの新機能をどう応用するか、ある意味ではAppleとの競争が始まっています。
     Tigerではこれまでの高性能化の延長とは次元が違う飛躍がありました。その飛躍をWWDC参加者がどのように料理し、創造するか来年のTiger正式登場もそしてそれ以降も対応ソフトの登場が楽しみです。

    WWDC2004の感想

     Redmond, start your photocopiers. などの今年のスローガンは個人的には印象が悪いものでした。何を狙い誰に向けたメッセージだったのでしょうか?
     セッションスケジュールに初日まで空欄があったことも残念です。基調講演の内容と関係し発表できなかったのかも知れませんが、少なくとも参加者だけが見る配布印刷物の空欄は避けてほしいものです。
     エンタープライズITとQuickTimeとデジタルメディアを加えたとは言え同じ時間帯に10ものセッションが同時進行するため、どのセッションに参加するかは悩ましい問題です。実際ぜひ参加したいセッションが3つあるいは4つ重なった時間帯がありました。
     参加できなかったセッションは後日DVDで確認する事になります。すべてのセッションを録画していたわけではないようでした、DVDがどんな構成で送られてくるのか気になります。

    WWDCの一週間は開発者にとって強化合宿のようなものだと参加するといつも感じます。朝9時から夕方6時頃までセッションと情報交換に明け暮れる。会場が広いのでとにかく歩く。そしてカリフォルニアの青空でリフレッシュし、アップル本社キャンパスでのパーティとカンパニーストアでの買い物は自分へのご褒美です。世界の開発者のパワーを肌で感じやる気は自然に高まります。

    今回得た情報をもとにTigerを研究するのはかなり刺激的な体験となりそうです。

    最後に宣伝ですが日本国内で参加できるミニ合宿であるMOSAの「湘南ミーティング」は11月です、ぜひ予定に組み込んでください。

    ニュース・解説

    今週の解説担当:新居雅行

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ┃REALbasicで作ったMac用Office向けのユーティリティ集
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    REAL Softwareは、Microsoft Office向けのユーティリティ集「Office Power Pack Volume 1」をリリースした。REALbasicで開発された5つのアプリケーションからなる。Microsoft Office XおよびOffice 2004 for Macintosh上で利用可能なアプリケーションとなっている。Office X以降、ExcelやWordのマクロ作成ツールとしてREALbasicが利用できるようになっている。Windows版Officeと違ってMac版Officeのプログラミング機能は遥か以前のバージョンから変化がほとんどないため、本格的なソリューション開発にはREALbasicを使う方がより効率的であるとも言えるのだが、その実例に加えて実用になるものをReal Software社自身が提示したものと言えるだろう。アドレスブックをWordのラベル印刷文書などに展開する「Address Book Merge」、アドレスブックをExcelに取り込む「Address Book Export」、QuickenのデータをExcelに取り込む「Quicken Data Mover」、アドレスブックのデータを元にFAXの送信票を作成する「Fax Cover Sheet Maker」、伝票作成の「Invoice Maker」が含まれて、価格は$49.95となっている。

    Office Power Pack
    http://www.officepowerpack.com/

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ┃FileMaker Pro 7でイベント処理を記述可能なプラグイン
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    Waves in Motionは、FileMaker Pro 7向けのプラグイン「Events 4.0 for FileMaker Pro 7」をリリースした。Eventsを使えば、FileMaker Proのデータベースでイベント処理ができる。たとえば、レコードを作成したり、フィールドにデータを入力したタイミングを見計らって処理を記述する事ができる。前のバージョンEvents 3.0はファイルメーカーPro 6までに対応するが、Events 4.0はFileMaker Pro 7向けだがかなりの部分を作り直して高いパフォーマンスを発揮できるとしている。価格は、1ユーザライセンスが$129などとなっている。

    Events 4.0 for FileMaker Pro 7
    http://wmotion.com/events/events_4.html

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ┃Mac OS X以外でMac独自機能を含むJavaプログラムのコンパイル
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    サンプルコードで公開されていた「AppleJavaExtensions」が改訂されている。Mac OS XのJava環境では、Apple独自のクラスがいくつかあるが、それらの利用を含んだソースコードをMac OS X以外の環境でコンパイルするときに、クラス定義情報が必要になる。そのために使うのがAppleJavaExtensionsで、1つのjarファイルにまとめられているのでこのファイルをコンパイル時に参照するようにしておけばよい。改訂では、Mac OS X以外でダウンロードしたときに扱いやすいようにzipで圧縮されるようになり、一部欠けていたメソッドが含められている。

    Sample Code: AppleJavaExtensions
    http://developer.apple.com/samplecode/AppleJavaExtensions/AppleJavaExtensions.html

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ┃Visula Basicプログラマ向けREALbasicの解説
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    Real Softwareは同社のサイトで、Visual Basicのプログラマ向けに、REALbasicを使ってMac OS XやLinux向けに開発したアプリケーションの移植をしようといった趣旨のドキュメントを公開した。移植における考慮点や言語の違い、さらにはオブジェクトの違いやユーザインタフェースの違いなどがまとめられている。

    Porting VB Applications to Linux and Mac OS X
    http://www.realsoftware.com/realbasic/guides/portingvisualbasic/

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ┃FileMaker Pro 7の初心者向けセミナー
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    コンピュータワークスは、FileMaker Pro 7の初心者向けのセミナー「ファイルメーカーPro 7 エントリー編」を、2004年8月25,26日に開催する。受講料は42,000円で、会場は大阪のEPSONスクエア御堂筋。初心者だけでなく、ある程度FileMakerを使った経験のある人でも知識を整理するのに参加することも勧めている。

    コンピュータワークス
    http://www.computerworks.co.jp

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ┃FM-Techが大阪や札幌でファイルメーカーProのトレーニング
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ファイルメーカーPro関連のトレーニングを展開するFM-Techは、7月から8月にかけて、トレーニングを実施する。8月3,4日は大阪で「基礎習得」(57,750円)、8月10,11日は札幌で「基礎習得」(57,750円)、8月19,20日は大阪で「中級」(63,000円)、8月23日は大阪で「リレーション」(31,500円)、8月24,25日は大阪で「Web1」(63,000円)、8月26,27日は大阪で「Web2」(63,000円)、となっている。講習はファイルメーカーPro 6を使って行われる。

    FM-Tech
    http://www.fmtech.jp/

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

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

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

    2004-07-20

    目次

    • SqueakではじめるSmalltalk入門   第3回  鷲見正人
    • 藤本裕之のプログラミング夜話 #49
    • 高橋真人の「プログラミング指南」 第48回
    • “WWDR & MOSA Meeting in WWDC 2004″レポート 佐藤 徹
    • 戸上尚子のWWDC&MOSAブース体験記
    • ニュース・解説

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

     本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkがどんなものであるかを知っていただこう…というテーマで、最近話題のSqueakを紹介しています。今回は、Squeak環境のGUIの簡単な解説と、きわめてシンプルなSmalltalkコードの実行を試みます。

     Squeakの前身であるSmalltalk環境のGUI、特にマルチウインドウシステムは、もともとLisaやMac、ついでをいえばWindows、UnixのX-Windowの手本になったものなので、こうした環境に馴れている人にはきわめて直感的に扱えるはずです。加えて、Squeakの前身になるApple SmalltalkからSqueakになったときに、Macライクなタイトルバーが“逆輸入”され、さらに3.0からはSmalltalk環境で特徴的だった左側にポップアップするスクロールバーも廃止されたので、少々デザイン的に野暮ったいことに目をつぶれば、違和感はほとんどないはずです。ウインドウ右下にサイズボックスはありませんが、ウインドウのサイズ変更は縁にポインタを合わせてドラッグするWindowsスタイルで行なえます。

     メニューに関しては徹底してポップアップメニューが使われている点でMacのUIデザインとは趣を異にします。メニューバーに相当するものはデスクトップにも、ウインドウ内にも原則としてありません。Finderのメニューに相当するものはデスクトップをクリックしたときに表示されるデスクトップメニュー、あるいはワールドメニューと呼ばれるメニューがその役割りを担います。各ウインドウ(あるいはペインと呼ばれるウインドウ区画)で利用できる機能を収めたメニューは、スクロールバー上端にあるメニューボタン、あるいは、そのウインドウ内で特殊なクリックをしたときに現われるように設計されています。

     ここで、特殊なクリックについて説明しておきましょう。ご存じのとおりAltoのマウスは3ボタンで、そこでデザインされたSmalltalk環境は3ボタンマウスを前提に設計されました。ただ、当時のマウスの形状やボタンの配置についてはまだ試行錯誤の過程にあり、ボタンが今のように横に並ぶとは限りませんでした。そこで、左-中-右とは呼ばず、それぞれを赤-黄-青と呼ぶ規則がSmalltalk環境には適用されました。これは主に、ポインティングデバイスの形状に左右されないコーディングを可能にするための配慮ですが、UIの説明にもこの色を用いてなされるのが通常です。

     ウインドウ(正確にはウインドウ内区画=ペイン)に依存的な機能を用意したメニューは「黄ボタンメニュー(yellow button menu)」と呼ばれ、その名のとおりウインドウ(ペイン)内での黄ボタンクリックで呼び出すことができます。たとえば、選択した文字列に対するカット、コピーといった命令をメニューから実行したいときは、対象となる文字列を選択した後、ホイールボタン(あるいは2ボタンマウスなら右ボタン、ワンボタンならoptionクリック)を押して現われるメニューからcut、あるいはcopyを選ぶ、と言った具合に使います。ちょうどコンテキストメニューのような役割りと使い勝手ですね。

     青ボタンは、かつてSmalltalk-80では青ボタンクリックしたウインドウ全体に対する機能(たとえば、タイトル変更とかウインドウ移動、サイズ変更、最小化など)をメニューを介して行ないたいときに使われていましたが、GUIデザインの変更に伴いこの機能はタイトルバーに全面的に委譲されたため、現在はウインドウ操作とは関係ない別の機能が割り当てられています。よって、ウインドウシステムにおける通常の作業では黄ボタンだけ知っていれば事足ります。

     3ボタンマウス(ホイールマウスでホイールがクリック可能なものも含めて)では左-中(ホイール)-右が、赤-黄-青にそれぞれ対応しますが、2ボタンマウスの場合は、左と右が、それぞれ赤と黄、青がcmd(コマンドキー。Windowsの場合はalt)赤クリックです。ワンボタンの場合は、通常のクリックが赤、黄がoptionクリック、青がcmdクリックです。この連載では、よく使用する黄ボタンクリックはそのまま「黄ボタンクリック」と、他方で青ボタンクリックは「cmd-クリック」と記するつもりです。

     ウインドウ内のテキストの入力や操作は、これまたMacでUIをデザイン・実装をしたのと同じラリー・テスラーらがSmalltalkにおいても関与していた経緯もあり、我々が知っているものとかなり似ています。大きく違うのはダブル(トリプル、あるいはそれ以上…の)クリックという概念がないことでしょうか。単語のダブルクリックによる選択はキャレットのクリックにより実現されています。トリプル以上クリックの段落全体や全文章の選択は、クリックされるキャレットの置かれている場所(当該段落の先頭や末尾、あるいは全文章の先頭や末尾)で判断されます。

     こうして選択された文字列がSmalltalkコードの場合、cmd+P、あるいはcmd+Dというキーボードショートカットで評価、実行することが可能です。このことは、Smalltalk環境内では、文字が入力できさえすればどこででもSmalltalkコードを評価、実行することができることを意味します。cmd+Dはdo itを意味し式の評価だけ、cmd+Pはprint itで式の評価と直後への結果の挿入というふうに使い分けます。たとえば「3 + 4」と入力して選択しcmd-Pとタイプすると答えの「7」が得られます。ウインドウを新しく開くことを意味する「Workspace openLabel: ‘untitled’」という式の返値にはあまり意味がないので、cmd-Pではなく、cmd-Dを使います。

    余談ですが、通常の言語処理系やそのIDEの扱いに慣れた人がSmalltalk言語を学ぼうとしてまず戸惑う要因として、このようにどこでも式を書き評価できるSmalltalk環境におけるSmalltalk言語の「気軽さ、気ままさ」が挙げられると思います。あらゆるGUIベースのOS向けの、いかなるlightweightと表される言語と比べても、他に類を見ないlightweightさに思わず気後れをしてしまうのでしょう。

     次回はもう少し長めのSmalltalkコードを記述してみます。

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

     「恋ははしかのようなもの、遅くかかると始末が悪い」という名言で有名な19世紀イギリスの劇作家、ジェローム・K・ジェロームは嘘に関してもなかなか深淵な言葉を残している。いわく「本当のことを言うのは常に最善の方針だ、もちろんあなたが格別な嘘つきであればこの限りではないが」。
     ニフティなどでBBSの管理をやっていた経験から言えばこれはスコブル付きの真実である。ネット上で論争が発生すると、自分の意見を正当化したり、相手を言い負かすためにチョロっと嘘をつくヒトは多いのだ。例えば「これは法律家に聞いたんですが」と言ってみたり、読んでもいない本を「もちろんワタシだってその本くらい読んでますよ」とか言っちゃうんですな、これが。
     で、そういう嘘はたいがいバレる。「法律家ってどんなヒトですか? 弁護士? それとも大学の先生とかでしょうか?」と突っ込まれて「いや、実は法学部の学生なんだけど」とトーンダウンしたり、「ではあの本で誰々がこういう議論をしているのは知っていますよね?」と聞き返されて「いや、読んだのはずいぶん昔のことなので」とか言い訳を余儀なくされたりする。一度こうなったら自分の論旨が正しいとか間違っているとかは関係ない、相当面の皮が厚い奴でもせいぜい負け惜しみっぽい悪態をついて消えて行くことになるのである……。
     こういうコトが起きるたび、ワレワレ管理者は「もめ事になったら正直者が一番強い」と再確認したものである。ちょっと考えれば理の当然なのである。嘘をつき通すためには動揺を押し隠す鉄の意志と汗をかかない鋼のニクタイ、そして何よりハードディスクのような記憶力が必要なのだ。そっちにエネルギーを使いながら説得力ある論陣を張れるヤツなんて滅多にいないのだ。

    コンピュータの販売会社に勤務し、長いこと電話によるユーザーサポートをやっていた友人がよく言っていた言葉に「ユーザーは無意味な嘘をつく」というのがあった。
     「例えばユーザーが電話をかけてきて突然●●ができなくなった、という。昨日までは問題なく動いていたのに、自分はなにもしてないのにってね。で、こちらが『もしかして▲▲の設定を変えませんでしたか?』と訊くと、『いや、絶対にそんなことはしてません』と嘘をつく。こっちはプロなんだし、何度も同じケースに遭遇しているわけ。はっきり言えば、頭にネクタイでハチマキをしていながら「オレは酔ってませんよぉだ」とか言ってるオヤジみたいなもんなんだけど、ざっと10人のうち8人は嘘をつくよね。そもそもオレに嘘ついてどうなるんだよ、なぁ?」
     そのユーザーだって彼に嘘をついてもなんにもならないことくらい分かっている。普通の感覚の持ち主であれば、その嘘が彼に見抜かれてしまってることも分かってるだろう。彼も商売だからお客の嘘を追及はしない。
     「しようがないから『そうですかぁ、では他に原因があるかも知れませんねぇ。今のところこちらで把握している●●のトラブルは▲▲の設定のケースだけなんですが……』つって間を置くわけね。すると嘘ついたヒトは必ず早口になって『わかりました。こっちでもいろいろ試してみます。どうもありがとうございました』といい、電話を切る。受話器を置きながら、今頃あわてて▲▲の設定を元に戻してるんだろうな、と(笑)」
     アメリカの生物学者ロバート・トリヴァースによれば、嘘つきとして一番理にかなった戦略は自分の嘘を信じ込むことである。スタニラフスキーの「メソッド演技」にも通じることだが、自分が心からそう信じている場合、少なくとも情動面から嘘が露見することはない。問題は上の▲▲の話のように、嘘の客観的な証拠が存在してしまう場合である。

    プログラミングやコンピュータの素人には驚かれるかも知れないが、ちゃんとしたプログラマというのは他のプログラマのスキルや技量をちょっとした会話や振る舞いなどからかなり正確に類推することができる。他のことはともかくことプログラミング技術に関しては、仲間内で見栄を張るのは不可能に近い。なにしろプログラムという客観的な証拠が残るので、ベテランほど嘘もつかないし知ったかぶりもしない、見栄も張らない。
     ……でも、恥ずかしながらオレにも経験があるんだけど、若いウチはそういうことが分かんないんだよね。うまく取り繕えば自分の実力を実際以上に見てもらえると思っちゃう。しかもプログラマ以外のヒト、ぶっちゃけた話がマネージャーと称する上司とか営業のヤツとか、仕事によっては顧客までは簡単に騙されてくれるので、だんだんそういう嘘の怖さに無頓着になっていく。
     だけど技術に関する知ったかぶりや嘘は絶対にバレるし、それを指摘して追及してくれるほど優しくてなおかつヒマのあるプログラマなんてそうはいない。かく言うオレも、そんなこたぁ絶対にしない。仕事でそういうタイプのヤツに出会ってしまったら、そいつを当てにしないで手早く終わらせ、以降お近づきにならないようにするだけである。陰口は叩かないことにしているけどそういう評判が広まるのは速いよ、自戒なさい。
     とはいえ、人間には誰にも避け得ない「自己欺瞞」という嘘がある。誰もが自分の成功は実力によるものと感じ、失敗は運にその責任を帰するわけだ。プログラマだってヒトの子なので、処理時間が改善した原因は自分のコードにあると思いたがり、他のアプリとのコラボレーションが上手く動かないのは相手の仕様ミスだと決めつけがちだ。この感情だけはいたしかたない。われわれはミスター・スポックではないのである。
     が、プロである以上、その感情を結論とするのは甚だ無責任なことだし、プログラマの仕事は「誰のせいか」を決めることではなく、プログラムを動かすことである。BBSでの論争よろしく、無駄な感情の揺らぎを背負い込めばそれだけ仕事は遅れるのである。
     前に出て来た生物学者のトリヴァースは、自分の学説を否定する論文を読んでそれが悪意と中傷に満ち満ちていると感じたが、数年経って読み返すと自分の記憶しているより表現は穏当で呈している疑問も妥当なものであることに驚いたそうだ。冷静になるのに数年もかけられるなんて、生物学者というのはプログラマよりもずいぶん地球人向きな職業だよな。
    (2004_07_16)

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

    オブジェクト指向のとっかかり(33)

    〜Macにおけるオブジェクト指向〜

     こんにちは、高橋真人です。
     さて、きわめて簡単ではあるのですが、前回で改良版のプログラムに関しての解説を一通りは行ったことにしまして次のテーマに移りたいと思うのですが、そろそろ私のオブジェクト指向に関するネタも底を突いてきつつあります。そこで、今まで思いつくままにオブジェクト指向について語ってきた「オブジェクト指向のとっかかり」は、最後に少しまとめをしてこの辺で一区切りを付けたいと思います。
     折よく、鷲見さんによるSqueakでのSmalltalkの入門記事が始まりました。私もこの連載には期待している一人です。私の経験ではオブジェクト指向を学ぶにはいろんな切り口を経験することが効果的ですので、私の連載を読んでオブジェクト指向に興味を持ってくださった皆さんにも是非鷲見さんの連載をお勧めします。
     もっとも、私のモサ伝での連載自体が終わるわけではありませんので、今までの連載の中で「そのうち説明します」と言ったまま未だに解説をしていないことや、読者の皆さんの中で特定のテーマに関しての解説をお望みの方などありましたら、是非ともモサ伝編集部にリクエストをお寄せください。モサ伝編集部ではいつでも読者の皆さんからのご意見やご感想を心待ちにしておりますので、私の対応できることがあれば、可能な範囲で今後もお応えしていきたいと思います。

    さて、オブジェクト指向のお話を終えるに当たって、最後に少し現在のMacの開発環境を見渡して感じたことをお話ししたいと思います。
     Macにおけるオブジェクト指向と言えば、真っ先に挙がってくるのはCocoa、そしてJava(WebObjectsも含む)ということになるでしょう。ですが、ここでは少し目を転じて、Core Foundationに注目してみたいと思います。
     Core Foundationというのは、Carbonプログラムの中で多く使われます。Cocoaにおいても間接的に(時には直接的に)使わているフレームワークです。また、Carbonフレームワークとリンクせず単独で使うこともできるため、デーモンなどのバックグラウンドプロセスにおいても使うことができます。
     Core Foundationで興味深いのはAPIはすべてCであるにもかかわらず、極めてオブジェクト指向ライクに作られていることです。つまり、設計にオブジェクト指向の仕組みが多く取り入れられているのです。
     リファレンスをチラッと見るだけでもこれは分かります。例えばいちばん多く使われるであろうCFStringを見てみましょう。

    http://developer.apple.com/documentation/CoreFoundation/Reference/CFStringRef/index.html

     冒頭に「Derived From: CFPropertyList : CFType」と書いてあります。Cocoaのリファレンスを見たことのある方ならば、これがCocoaのクラスでの記述と極めて近いことに気づかれるでしょう。
     Cocoaが「Inherits」という言葉を使っているのに対してCore Foundationの場合は「Derived」となっているものの、ニュアンス的にはかなり近いのではないかと思います。
     私が経験した中でも特に興味深いのが「これ、ポリモーフィズムじゃん!」というやつ。行数が尽きてきましたので、続きは次回のお楽しみということで。

    “WWDR & MOSA Meeting in WWDC 2004″レポート

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

     開催場所 : Marriot Hotel San Francisco
     日時 : 6月30日 11:00~11:45 (米国西海岸時間)

     WWDC2004の開催中、アップル本社のWWDRとMOSAの理事との打ち合わせを行いました。短い時間でしたが、お互いの意見交換を行い、昨年のWWDC期間中のミーティングから1年間の、お互いの活動の成果を確認し合いました。
     出席したのは、Apple WWDRより、ロン・オカモト ワールドワイドデベロッパリレーションズ担当副社長と、新任のWWDR部長、アップルジャパンよりワールドワイドデベロッパリレーションズ服部部長、上田課長、MOSA側からは岩田副会長、林副会長、大谷理事、恩田理事、佐藤常任理事、事務局 戸上さんでした。

    まず最初に2003年のMOSA活動報告を行いました。
    イベント:
     2003年中に行った各種イベント
     各イベントの参加人数やその様子
    セミナー:
     開催済みセミナーとその参加人数、参加者の動向
     MOSAが行ったメンバー向けサービス
     ビジネスマッチング・法人部会.特別販売.MOSAカフェ等
     メールマガジン MOSADenの紹介と購読者数
     新年会

    また、2004年の活動計画を報告しました。
     湘南ミーティングの開催
     会員募集(特に学生会員勧誘に力を入れること)
     WWDC報告会の開催
     WWDRとの会合を持つこと
     MOSA カフェの継続開催
     MOSA主催セミナー
     MOSA協賛セミナー
     セミナーは有料のものを増やしていく方針
     各種メンバーサービスの継続と拡充

    等を報告しました。

    やり取りの中では、MOSAの会員が増加傾向にあるのはADCの会員増加傾向と一致しており、お互いにやりがいのある次の一年になりそうであるということが話し合われました。
    MOSAの会員増加の理由として、新規購入者や、既存の開発者がMac OS Xに接して、初めてマックを知り、MOSAに登録するケースが増えているという推測をお話しましたが、その点はADCも同じで、UNIXを使っている若い世代の加入者が増加しているとのことでした。

    前年にもWWDRから提案があったのですが、MOSAがApple Store Ginzaと共同して、活動をすることには問題なく、しかるべき担当者とコンタクトを取り、Apple Store Ginzaの施設を利用した有料セミナーなどを開催していくことが可能であることを確認しました。

    また、WWDRから、現在、急激に売り上げが伸びているiPod関連商品(アクセサリーやケース等)を製造・扱っている開発者・販売業者が日本にいれば、積極的にサポートしていきたいという要請がありました。
    これも今年、積極的に進めていくべき課題であるとの認識をしました。

    今後も、WWDRとMOSAはお互い協力し、コンタクトが途切れないように努力し、可能であれば定期的に会合をもち、日本の開発者のためにサポートしていくことを確認しました。

    今回は(前回同様)会合の時間は非常に短く、日本で吸い上げられた技術的な問題やマーケティングに関する意見交換の時間等はとれなかったのですが、今後も引き続き本社スタッフとのコミュニケーションを行っていくことを確認しましたので、MOSAはアップルに対するもう一つの情報チャンネルとして機能していくことができると確信することができた非常に有意義な会合でした。
    WWDRを含め、アップル本社の人たちはもっと積極的な日本からのフィードバックを欲しがっています。
    アップルジャパンの方たちと協力して、より多くのフィードバックを行えるよう、今年も活動できればと思います。

    戸上尚子のWWDC&MOSAブース体験記

     今年のWWDC(Worldwide Developers Conference)にはMOSAが記念すべき初参加を果たしました。MOSA事務局のわたくし、戸上が開催地サンフランシスコに意気揚々と乗り込んだのですが、現地ではハプニングもあり、この体験記ではWWDCの全体的な印象や「Exhibit Fair」と呼ばれる展示会の様子、それから現地で開催したMOSAの懇親パーティーの模様などをご紹介したいと思います。

     WWDC開催地のサンフランシスコは、夜も日本と同様遅い時間まで外出していても特に危険を感じることはありませんでした。ただ、前号で小池さんが書かれていたように、夏だというのにヒジョーに寒かったです。
     さて、現地での私の主なミッションは、出展ブースでのMOSA PRと現地での懇親パーティーの運営です。「Exhibit Fair」は、WWDC初日のキーノートの後から水曜までの3日間開催されました。出展場所となった1Fの大会場は、半分がカフェテリアとなっており、食事時には必ず参加者が訪れるという構造になっていました。場所柄もあって、食事のついでに多くの方が立ち寄ってくださいました。
     ブース出展数は全部で約70程で、セッティング日に各ブースをざっと見学してみました。目立つポスターやチラシを沢山用意して気合い入りまくりのブース、はたまた、ささやかなチラシが遠慮がちに貼られ、PowerBook一台だけがぽつんと置かれたブースなど、規模もスタイルも様々でした。今回、MOSAのブースでは、MOSAの日本での活動を紹介するとともに、MOSA理事がMac対応の開発に協力している3D液晶の展示を行ないました。

     MOSAの活動については、ビジネスマッチングへの関心が高く、立ち寄られた方から多くの問合せをいただきました。また、韓国から参加していたグループには、MOSAの運営や実施しているセミナーについて熱心に質問を受けました。
    聞けば、韓国でMacOS X開発者の会を立ち上げたばかりだそうで、まだ手探りの状態で活動をしているとのこと。私の英語でうまくコミュニケーションが取れたか怪しいものですが、お互いの国に帰ってから再度連絡を取り合うことを約束しました。同じアジアのお隣の国ですし、このきっかけを活かして、来年あたり「MOSA 韓国デベロッパ交流ツアー」など企画できたら良いのですが…。
     一方、3D液晶の展示は、好奇心旺盛なMacデベロッパの注目を大いに集め、性能や購入について沢山の質問を受けました。この液晶の開発・販売元のシャープ株式会社はこれまでMacには未対応でしたが、これを機に是非Mac対応を積極的に進めて欲しいものです。

    と、ブース出展の方は、出発前の不安をよそにまずまずの成果が得られたのですが、悪夢はMOSA主催の懇親パーティーの前日に起こりました。数日前に現地で直接店に予約の確認をしていたにもかかわらず、予定していたパーティー会場がダブルブッキングで使えないことが分かったのです。 既にパーティーの予約は50名を超えており、この期に及んでキャンセルなんて勿論許されません。代替の会場探しに奔走しました。

     幸いにも元の会場の2軒隣のメキシコ料理のお店をなんとか押さえ、パーティーを予定通り開催することが出来ましたが、悪いことはかさなるもので、パーティー開始時間に予想を上回る沢山の方が来てくださり、収容人数オーバーで会場がパンクしてしまったのです! 座席調整で開始時間が遅れ、大変ご迷惑をおかけしてしまいました。皆さんの暖かい好意と協力のお陰で、パーティーはどうにかこうにか幕を閉じました。このパーティ、私には初WWDCの忘れられない思い出となりました。

    右も左も分からない状態で駆け抜けた私のWWDCウィークでしたが、世界中のデベロッパとともに自己のスキルアップに集中するこの1週間は、セッションを受けなかった私から見てもとても充実していると感じました。日常を離れ、刺激ある環境に身を置くことは、やはり何にも替えがたいメリットがあると思います。WWDCへ参加されない方には「費用面」や「語学力」など色々の理由があるかと思いますが、MOSAでは参加をためらわせるハードルを少しでも低くするため、カンファレンスチケットの割引や、現地までの格安ツアーのご紹介など、日本のデベロッパの皆さんをサポートしていきたいと考えています。
     まだ参加したことの無い方は、是非来年は参加を検討してはいかがでしょう? 今回この記事に書いたトピックの画像をMOSAのホームページでご紹介しています。こちらも是非ご覧ください。
    http://www.mosa.gr.jp/topics/WWDC2004-report.html

    【編集部注】
     今回展示した専用メガネなしで立体表示を見る事のできる3D液晶カラーモニタは8月中に日本国内での販売が開始されるそうです。
    http://www.sharp.co.jp/corporate/news/040610-a.html
     MOSAブースでの展示に使用したソフトはオッティモの小池さんが開発した「Look3D」(開発バージョン)です。

    ニュース・解説

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

    Carbon ドキュメント & サンプル & SDK ナビゲーション(2004/07/16)

    【開発環境】

    Apple社の四半期の業績(黒字だった)についての質疑応答において、8月ParisのExpoで発表されるだろう新型iMacにはG5プロセッサー(90ナノPPC970)が搭載されることが発表されました。今までだと、こうした内容はJobsの基調講演まで完全に隠されていたのですが、今回のように事前にApple社から情報が提供されたのは非常に珍しいケースではないでしょうか?今回の異例の発表は、新型iMacの発表が遅れた原因が、IBM社のG5プロセッサーの供給遅れにあることを明確にしたかったのかもしれません。それに加えて、今回に限っては、旧型iMacの在庫が売れなくなる心配はないようですから…(笑)。

    噂では、新型iMacのデザインは「お椀」タイプから脱却し、アルミ・シネマディスプレーの背中にロジックボードを「おんぶ」した形になるのではないかと言われています。ディスプレーの足の部分にHDとDVD-ROMを配置し、背部にはCPUと基盤、加えてCPUは小型の水冷装置で冷却されているという仕組みはどうでしょうか(笑)。まあ、G5搭載のiMacが登場するということは判明したのですが、仕様やデザインについてはまったく謎のままです。結局、色々と想像を駆り立てられたユーザが、Jobsの基調講演により注目するわけですから、こうした部分的な発表も悪くないと思います。

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

    前回から7月16日の期間中、Apple社のDocumentationサイトにはドキュメントがひとつも登録されませんでしたが、デベロッパ向けの読み物として以下の解説が登録されています。WWDCも無事終了したので、新規ドキュメントの供給は一休みのようです(笑)。

    「The GNU Compiler Collection on Mac OS X」(読み物)

    http://developer.apple.com/tools/gcc_overview.html

    前回から7月16日の期間中、新規のテクニカルノートは2つ登録されました。両方とも以前に登録されていたテクニカルノートの改訂版です。また、テクニカルQ&Aの方はひとつ登録されました。

    TN2102「The System Sound APIs for Mac OS X 10.2, 10.3 and later」
    TN2091「Device input using the HAL Output Audio Unit」

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

    QA1356「Available FireWire Isochronous Bandwidth」

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

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

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

    「PasteboardPeeker」(Text関連)
    「SpellingChecker-CocoaCarbon 」(Carbon関連)

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

    【デベロップメント SDK】

    前回から7月16日の期間中、Apple社のSDKサイトには新しいSDKはひとつも登録されませんでしが、「USB Software Debug Kit for Mac」の最新版(10.3.4対応)が登録されています。

    「USB Software Debug Kit for Mac OS X 10.3.4」

    http://developer.apple.com/hardware/usb/usbloggers.htm

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

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

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

    2004-07-13

    目次

    • SqueakではじめるSmalltalk入門   第2回  鷲見正人
    • 小池邦人のWWDC2004参加レポート  ★MOSA会員専用記事★
    • 「Behind the WebObjects」    第23回  田畑 英和
    • ニュース・解説

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

     本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkがどんなものであるかを知っていただこう…というテーマで、最近話題のSqueakを紹介しています。今回は、Squeakの入手とインストールです。

     Squeakは、現在、アラン・ケイが主宰する非営利団体のViewPoint Research Instituteを拠点に、多くのボランティアの協力のもと活発な開発が進められています。いわゆるオープンソースソフトウエアです。squeak.orgという専用サイトに掲示されたリンクを介してFTPサイトより、これまでリリースされた公式バージョンの入手が可能です。本稿執筆時点では公式公開版としては、バージョン3.6へのリンクが張られています。

    【URL:squea.orgのダウンロードページ】
    http://squeak.org/download/

    【URL:公式公開版への直リンク】
    ftp://st.cs.uiuc.edu/pub/Smalltalk/Squeak/3.6/mac/Squeak3.6-current-MacOS-Full.sit

     上のURLよりgetした.sitファイルには、Squeakを動作させるのに必要なファイルがアーカイブされています。これを展開してApplicationsフォルダなどに移動すればインストールは完了です。展開先のフォルダ名は「Squeak3.6」とでもしておきましょう。このフォルダには、次のファイルとフォルダが収められています。
    pre style=”background-color:transparent;border:none;font-size:1.2em;font-family: ‘ヒラギノ角ゴ Pro W3′, ‘Lucida Grande’, Lucida, Verdana, sans-serif ”
    ReadMe.txt
    Squeak 3.6.1Beta5.app
    Plugins
    mpeg3Plugin
    mpeg3Plugin.bundle
    PrintJobPlugin
    PrintJobPlugin.bundle
    SerialExtendedMacOS9Plugin
    SerialExtendedUnixPlugin.bundle
    SqueakFFIPrims
    SqueakFFIPrims.bundle
    TestOSAPlugin
    TestOSAPlugin.bundle
    Squeak3.6-5429-full.changes
    Squeak3.6-5429-full.image
    SqueakV3.sources

     「ReadMe.txt」は、Squeak環境の簡単な解説です。これはSqueak環境内で同じものを読むことができるので、あらかじめ目を通しておかなければならない、というほどのものではありません。「Plugins」フォルダには、Mac OS用(拡張子なし)とMac OS X用(.bundle)それぞれのプラグインファイルが入っています。これは本来、唯一の実行可能なファイルである仮想マシン「Squeak 3.6.1Beta5.app」が持つべきコードが収められたファイルですが、開発途上で比較的頻繁に置き換えられる可能性があったり、極度に環境(Mac版の場合はMac OS)依存的な機能の場合はこうしてプラグインファイルとして提供されます。ReadMe.txtとプラグインは、Squeak環境をとりあえず動作させるにあたって特に意識せずともよいと思います。

     注目すべきファイルは、システムの起動に直接関わる「.app」「.image」、それと環境内の全オブジェクトの定義を収めた「.chages」「.sources」です。

     仮想マシンは実行可能なファイル(.app)ですが単独では意味を持った機能をしません。必ず仮想イメージ(.image)と呼ばれるファイルとそれに収められた情報を必要とします。仮想イメージ、「Squeak3.6-nnnn-full.image」(nnnnは4桁の数値)には環境を構成するオブジェクト群の実体が、それとペアのチェンジファイル「Squeak3.6-nnnn-full.changes」とソースファイル「SqueakV3.sources」にはその定義(正確にはオブジェクトのクラスの定義)、つまり、Smalltalkコードが入っています。

     .sourcesには、.imageの最初のバージョン(3.0)が作られたときまでのソースがまとめられていて、.changesには、現在の.imageに至るまでの過程、つまり環境内オブジェクトの特にその定義に対する改変履歴が追記されています。.changesと.sourcesの内容を合わせると、現在の.image内のすべてのオブジェクト定義がそろう算段です。.imageと.changesは拡張子以前が同名のものを必ずペアで用います。もし.imageファイルの複製を作るときは、同名の. changesファイルのも作成しておきます。名称変更をするときも同じ注意を払います。.sourcesは3.xの.image、.changesのペアで共通して使用できます。

     バイナリの.imgaeと違い、.changesと.sourcesはプレーンなテキストなので、通常のテキストエディタなどで内容を見たり、Smalltalkコードを理解できればそれを読み下すことも可能です(しかし“!”など、Smalltalkシステムがその内容を読み込むために手がかりとする余計な情報も含まれています)。ただ、環境内にはクラス定義を便利に閲覧する機能(つまり、これら2つのファイルの内容にシームレスに系統だててアクセスする機能)が用意されているので、高価で占有の許されないSmalltalk専用ワークステーションでしか環境が使えなかった昔ならいざしらず、今はこれらのファイルを開いてどうこうする必要はないでしょう。

     .image内のオブジェクトは、自分のソースコードが記載されている位置(チャンク情報)を記憶しています。不用意に内容を変えてしまい.image内情報との不一致を生じさせてしまうなどの事故を避けるために、安易に. changes、.sourcesファイルを開くことはやめておいたほうがよいと思います。改行コードはCRのみですが、この変換ももちろん御法度なのでFTPクライアントなどの介したファイル単体のやりとり、あるいはプラットフォームをまたぐ圧縮解凍作業の際にはユーティリティの設定などにも要注意です。

     仮想マシンとプラグインはMac OS(あるいはMac OS X)専用のものが必要ですが、.image、.chagnes、.sourcesは、プラットフォーム互換でMac OS専用ということはありません。つまり、仮想マシン(と、必要なプラグイン)さえ用意できれば、.image、.changesだけの移動で原則としてどこでもまったく同じ環境を使用できます。

     Squeak環境の起動は、使用したい環境を収めた仮想イメージ(.image)を仮想マシン(.app)にドロップインして行ないます。OS 9環境ではファイルタイプ不備からドロップインを受け付けないことがあるので、そのときは、とりあえず仮想マシンをダブルクリックで起動し、ファイルを開くためのダイアログから使用したい仮想イメージを改めて選択してください。仮想イメージは同名のチェンジファイル(.changes)と同じフォルダにあればどこにあっても構いません。特別な理由がなければ関連ファイルはすべて仮想マシンと同じフォルダにいれておくのがトラブルがなくてよいようです。

     Squeak環境が動き出すと、Mac OSの用意する標準ウインドウの中に環境の様子が描かれ機能し始めます。ちょうど、Virtual PCのウインドウモードと似た状態です。表示用のウインドウを介さず、仮想マシンのメニューも消して、全画面表示モード相当にすることもできますが、完全なSqueakマシンに見せかける必要がなければ、Mac OS環境との行き来を考慮してこのまま使います。

     Squeak環境の終了は環境内から仮想マシンに指示を出す方法と、Squeakを動かすのに使っているOS(この場合Mac OS/OS X)側から仮想マシンを終了する方法の二通りがあります。環境内から終了する場合は、デスクトップに相当する場所をクリックしたときに表示されるメニューから、quitを選びます。保存をしなくてよいかを確認してくるので必要なければNoを選びます。ここでYesもしくは、デスクトップメニューから直接save and quitを選ぶと環境の様子をそのまま仮想イメージに上書き保存して終了します。

     なお、先に述べたようなOS 9環境におけるファイルタイプ不備が引き起こすドロップイン障害は、いったんsaveしておけば解消します(昔ながらのファイルタイプ編集ユーティリティでSTimに変えても同じです)。Squeakは起動時に、仮想イメージ内の情報をメモリに一気に読み込んで以後、その内容は無視します。したがって、終了時にsaveさえしなければ多少無茶をしても大丈夫なので、しばらく遊んでGUIの調子を掴んでみてください。saveをしないのなら、環境外、つまりMac OS/OS Xが用意するFileメニューからQuit do not saveを選んでも同じです。

     次回は、Squeak環境のGUIの簡単な解説と、シンプルなSmalltalkコードの実行を試みます。

    MOSA会員専用記事

    小池邦人のWWDC2004参加レポート(2004/07/09)

    今年もサンフランシスコで開催されたWWDC(Worldwide Developers Conference)でしたが、会期が7月に入るというのは初めての経験でした。昨年の会期は6月中旬で、最初の2日ぐらいは涼しかったのですが、残りの日々は猛暑。その経験から推測して今年も暑いのだろうと夏服しか用意していなかったのですが、これが大外れ!毎日が涼しいというより寒いのです。早朝などは、コートやダウンジャケットを着込んで通勤する人が目立ち、とても夏一歩手前とは思えません(どうやらSFとしては昨年が異常で今年が正常だった模様)。なのに、セッション会場の冷房は効き過ぎていて(毎年のこと)皮下脂肪の少ない筆者にはトテモつらい!そこで、セッション中は、ほんのりと暖かいPowerBook G4を膝の上にのせ、懐炉のかわりとして重宝しておりました(笑)。今年は、すぐ横の会場で「Java One」も開催されていましたので、ダウンタウンの中心部は黒い鞄(Java One組ももらえた)を持った「その筋の人々」であふれかえっておりました(両方に参加していた人もいたとかいないとか...)。

    毎年恒例の「WWDCに参加しているデベロッパーがどんな機種のモバイルマシンを所有しているのか?」という調査ですが。今回は15インチのアルミPowerBook G4が圧倒的に多数でした。続いて17インチと12インチのアルミPowerBook G4が多く、この3種類だけで全体の80%以上は占めていたのではないでしょうか?アルミPowerBook G4も既に3世代目となりましたので、さすがに15インチのチタンPowerBook G4は少数派になりました。ついにG4化されたのですが、14インチを含め、iBookを持っている人は昨年同様にわずかでした(デベロッパーの見栄なのか?)。絶滅していると予想された黒色筐体のPowerBook G3とシェルタイプのiBookですが、どっこいしぶとく生き残っており、Mac OS Xマシンとして活躍しておりました(限りなく少ないですが...)。さて、来年のWWDCでは、この構成にPowerBook G5が加わっているのでしょうか?期待したいところです。

    アップル社の発表によると、WWDC2004には日本から300名近い方が参加されたようです。全体の参加者数も昨年と比べて17%増えていたそうです。昨年よりセッション数が増えたために、日本語同時通訳が入らないセッションもいくつかありました。QuickTimeコンテンツ、エンタープライズ、インターネット&ウエブなど、開発関連以外のトピックスを紹介するセッションでは、外部からのスピーカーが多数招待されており、「実体験」にもとづいた説得力のある話を聞くことができました。セッション終了時のQ&Aで発言する人には大学関係者も多く、昨年感じた「WWDC参加者の職業分野が広がってきている」という思いは、よりいっそう強くなったわけです。「WWDC=デベロッパーのイベント」から、「WWDC=Macintoshコミュニティのイベント」への変貌がより鮮明になりつつあるのは確かなようです。Jobsの基調講演でも必ず新製品発表がされるようになったので、ついでにMACWORLDクラスの大規模な展覧会も併設したらどうでしょうか(笑)。

    さて主役のTigerですが、追加された新機能の内容については、アップル社のTigerサイトを参照するのが近道です。このサイトを読めば、Jobsの基調講演で発表された内容をほとんどカバーすることができます。

    http://www.apple.co.jp/macosx/tiger/index.html

    昨年のPanther(Mac OS X 10.3)の発表の時には「10.2から随分変わったなぁ!」と感激したのですが、今回はそういった思いは正直少なかったですね。まあ、それだけMac OS Xも成熟したと言うことでしょうか?加えて内部的な改良はデモなどでは紹介不可能なわけですし...。新機能の中でも一番力を入れて説明されていたのが「Spotlight検索」です。つまり、大量に蓄えられたファイルから自分の欲しいファイルをより効率的に見つけ出す方法が大幅に改善されたわけです。しかし、ファイルをちゃんと整理して保存しておく癖がついている筆者(旧タイプMacintosh使い)としては、ファイル検索より、Finder自身の機能アップが皆無だったのが残念でした。つまり、Finderの機能を使い(検索機能ではなく)必要なファイルをピックアップするという従来の手法についても、継続した機能強化が欲しいわけです。これからは、ファイルは何でもかんでもすべて「書類」フォルダに入れておき、欲しい時には「Spotlight検索」で見つけ出すというスタイルが普通になるのでしょうかねぇ?

    Jobsの基調講演の中で断然拍手が大きかったのは「iChat AV」の4面ビデオチャット画面を表示した時でした。その逆に、一番反応が鈍かった(と言うより何をしているのかよく分からなかった)のは「Safari RSS」でした(笑)。しかし、「iChat AV」「Safari RSS」「Automator」などは、Tigerを待たずとも、現状のPantherでも動きそうな気もします。事実、デベロッパーからもすぐに実装しろという声が上がっておりました。まあ、こうしたアプリケーションもTigerに実装される予定の新しいFrameworkなどを利用しているでしょうから、あまり無理を言ってもいけません。Tigerまで待つしかなさそうです。基調講演ではデモされなかった「VoiceOver」ですが、これが英語にのみ対応と言うのはちょっと?です。実際に、同じような機能を有するソフトも存在しているわけで、これを日本語や別の言語に対応させることは、そんなに困難ではないと思うのですが(やる気がない?)。

    続いて新しい開発ツールについてです。Apple社はTigerに「Xcode 2.0」をバンドルすると発表しました。Xcode 2.0では、モデリング&デザイン機能の追加、技術資料の検索やリモートデバッグ機能の強化、gcc 3.5の採用、64bitメモリーアドレッシングが可能なアプリケーションの開発など、いくつかの新機能が追加されています。gcc 3.5では待望のAltivec(Velocity Engine)Auto-vectorizationも採用される予定です。Tigerのプレビューサイトには「PowerPC G4およびG5プロセッサが持つVelocity Engineのパワーを、ベクトル化のためのコードを1行も書くことなく引き出すことができます」などと記載されていますが、大きな期待は禁物です(笑)。関連セッションを聞いたところでは、それほどスゴクはありません。とりあえず、そうした方向へ一歩踏み出したとポジティブにとらえておくことにしましょう。

    今年のWWDCのマイブームはズバリ「OpenGL」でした。Tigerで新しく導入されるCore ImageやCore Video、それからQuartz 2D、Quartz Extreme、Quartz Composer、加えてQuickTimeなど、すべてOpenGLの能力(というよりGPUの絶大な能力)を生かすことで高速2D表示を実現しています。つまり、あらゆる描画システムの下層にOpenGLレイアが存在することになるわけです。こうした理由から、これからはOpenGLの技術動向がより重要視されるかもしれません?また、2D表示だけでなく、3D表示に関してもいくつかの興味深いセッションを聞くことができ大変満足でした。それにしても、今年もInterface Builderに関してのセッションがほとんどなかったのは残念でした(たったひとつだけ)。世界中のデベロッパーの方々は、文字列、アイコン、カーソル、イメージ、パタン、ToolBarのようなユーザインターフェースオブジェクトが、Interface Builderで直接編集できないのに不満はないのでしょうか?私は大いに不満があります(涙)。

    今回のWWDCの大きな特徴は、各セッションで解説された技術内容やサンプルソースコードが逐次ADCメンバーサイトにアップロードされたことです(WWDC参加者のみダウンロード可能)。まあ、昔もいくらかのアップロードはありましたが、今回は質、量ともに非常に充実しており、その項目数は70を超えています。「WWDC技術資料の即時アップロード」が、Apple社内の約束事として根回しされた結果でしょう。こうしたアフターケアーの充実を含め、今回のセッションの質と量が、次回のWWDCにも引き継がれることを望みたいと思います(できれば食事をもう少し美味しくしてほしいが...)。また、今回は参加を見合わせたデベロッパーの方々も、WWDCが大きな価値のあるイベントに成長したことは間違いありませんので、次回はぜひ参加できるよう努力してみてはいかがでしょうか。

    Tiger正式版の登場は来年上半期ということですが、WWDC2005開催の時点でまだ出荷されていないという事態に陥らないよう、Apple社には気合いを入れてがんばってもらいたいと思います。

    「Behind the WebObjects」  第23回  田畑 英和

     このところProject WONDERの機能紹介が続いていますが、今回は2度目のメジャーリリースであるVer2.0での変更点についてご紹介いたします。

    ちょうどWWDC2004期間中にProject WONDER Ver2.0のリリースが正式に発表されました。このバージョンは前回のメジャーリリースから1年半以上をかけて様々な機能追加が行われています。Ver2.0はソースコードおよびビルド済みのものが次のURLからダウンロードできます。

    http://sourceforge.net/project/showfiles.php?group_id=45176

     それではVer2.0のリリースノートの情報を中心に、追加された機能をみていきましょう。

    Common/Frameworks

     Common/Frameworksには次の3つのフレームワークが追加されました。

    ・ERExcelLook
      Direct To Web用のテンプレート
    ・ERPlot
      グラフ生成のJavaライブラリJFreechart(*1)を使用したフレームワーク
    ・ERPrototyes
      FrontBase, MySQL, OracleそしPostgreSQL用のPrototype(*2)

     既存のフレームワークにも様々な変更が加えられています。ERExtensinosでは、EditingContextの自動ロック/アンロック、Session storeのデッドロック検出、フォーマッタの自動ローカリゼーション、パスベースのリクエストハンドラ、scpを用いたファイルコピー、統計情報のロギングなど機能が追加されています。他にも様々な機能追加がおこなわれていますが、そのなかから一部のクラスを紹介しておきます。

    ・ERXRuntimeUtilities
      コマンドラインの実行用クラス
    ・ERXCompressionUtilities
      圧縮ライブラリ
    ・ERXComponentActionRedirector
      コンポーネントアクションのリダイレクト
    ・ERXBatchingDisplayGroup
      必要に応じてFetchをおこなうWODisplayGroupの改良版
    ・ERXGracefulShutdown
      シグナルハンドリングでのGraceful shutdown
    ・ERXMailAppender
      コンポーネントをメールで送信可能なLog4Jのアペンダ

     他のフレームワークですが、ERDirectToWebでは様々な改良やテンプレートの追加がおこなわれ、ERNeutralLookではjavascriptサポートの改良が、そしてERCoreBusinessLogicではERMailerからのコードが追加されています。
     またERChangeNotificationJMSではJMSサーバへの再接続機能などが追加されより安定性が向上するようになっています。

    *1 JFreeChart
    http://www.jfree.org/jfreechart/

    *2 Prototype
    http://developer.apple.com/documentation/WebObjects/UsingEOModeler/
    4WorkingWithAttributes/chapter_4_section_4.html

    Common/Examples

     サンプルプロジェクト「ERMovies」が追加されています。このプロジェクトではWOMvoiesデータベースにアクセスするアプリケーションが、ERExtensionsやERDirectToWebを用いて実装されています。

    Adaptors

     Apache2用のWebObjectsアダプタが追加されました。

    ExcelGeneration

     Excelファイルを生成するフレームワークです。Apache Jakartaプロジェクトで開発がおこなわれているPOI(*3)をベースに実装されています。

    *3 POI
    http://jakarta.apache.org/poi/

    Experimental

     1.0.1では含まれていたWOWebLogが削除されました。興味深いフレームワークが含まれていただけに復活が望まれます。

    PlugIns

     PostgreSQL用のプラグインです。

     また、すべてのプロジェクトではないですが、Eclipseのサポートなどもおこなわれています。
     過去のバージョンとの互換性ですが、既存のコードに変更が加えられている部分もあり、バイナリー互換ではなくなっています。場合によってはアプリ側でのコードの変更が必要な場合もあり、変更点がリリースノートにまとめられています。
     以上2.0での新機能を簡単にまとめてみましたが、実際にはこの他にも多くの機能が加えられています。また2.0がリリースされたといっても開発は引き続き続けられていますので、最新版に関してはCVSからソースコードを入手したりWONDERのメーリングリストで情報を収集してください。

     さて、この原稿はWWDC開催期間中に執筆していますが、WWDCといえば数年前に基調講演にてWebObjectsの劇的な値下げが発表されました。例年どおり今年のWWDCも基調講演がストリーミングされていますのですでにご覧になった方も多いかと思いますが、WebObjectsに関する新しい発表はなにもありませんでした。フレームワークの機能的な完成度は高いのですが、ツールの改良などまだまだ改善が求められている部分もあるだけに非常に残念です。
     これまではProject WONDERの機能紹介をおこなってきましたが、いよいよ次回からは具体的な使い方を紹介していきたいと思います。

    ニュース・解説

     今週の解説担当:新居雅行

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ┃MacTech X Magazineへリニューアル、技術情報もカバー
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    米国で発行されているMac向けのプログラミング情報雑誌「MacTech Magazine」が、2004年の夏の終わりに発行する号より「MacTech X Magazine」にリニューアルする。内容を刷新し、プログラミング情報だけでなく、Mac OS Xの技術的な情報も取り扱うようになり、プログラマ以外も読者ターゲットとなる。

    MacTech
    http://www.mactech.com/

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ┃Interface BuilderでSwingコンポーネントを設計可能なライブラリ
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ByteConsult GmbHによって開発された「nib4j」は、Interface Builderを使ってSwingを使ったユーザインタフェースを開発できるようにするライブラリだ。NIBファイルをロードし、そこに定義されたコントロールやウインドウ、メニューを、Swingのコンポーネントとして参照可能にするなどの機能を持ったライブラリが主要なコンポーネントだ。JNIのバイナリも含まれているようでMac OS Xでしか使えないが、Swingの方が慣れているというプログラマにとってInterface Builderでのリソース設計ができるようになるというメリットは大きいだろう。nib4jを商品に利用する場合には$199で購入し、それ以上のロイヤリティは不要である。なお、個人利用の場合はフリーなので、気楽に試す事ができるだろう。
    nib4jに含まれているサンプルを実際に見てみよう。NIBファイルを開くと、ウインドウやメニューの設計が見えているが、これらはCarbonのコンポーネントを使って配置する。マニュアルにコンポーネントの種類とSwingでのクラスの一覧が示されているが、たとえば、コントロールのプロパティとして、nameというタグを付けておけば、名前でそのコンポーネントへの参照を取り出すことができる。参照を取り出す部分がnib4jのオリジナル機能ということになる。いずれにしても、ともかくCarbonコンポーネントでメニューやウインドウ、その内容を作り込む。

    http://msyk.net/mosa/DeN/fig009.png

    実際に実行してウインドウを表示してみた。確かに、Interface Builderでの設計通りに表示されている。また、メッセージを一部日本語にしてみたが、これを見る限りは問題なく表示されている。実際のプログラムは、NIBファイルのロード、そして、そこからウインドウを名前を指定して参照し、JFrameクラスのオブジェクトへの参照を得ている。サンプルプログラムでは、コントロールへのアクセスまでは行っていない。

    http://msyk.net/mosa/DeN/fig007.png

    nib4jに付属のnib4j viewerというアプリケーションでNIBファイルを開くと、Interface Builderに似たウインドウが見えるが、ここでアイコンを選択してコードを表示すると、たとえばそのウインドウに配置されているコントロールを参照するためのJavaのコードが自動的に生成される。クラスの形式になっているものは、そのままコントロールにアクセスするクラスとして使える。もちろん、コードの断片を使ってもいいが、こうしたサポートアプリケーションを併用する事で、コントロールの利用を手軽にするという仕組みになっている。

    http://msyk.net/mosa/DeN/fig008.png

    nib4jには、NibFileやNibServiceといったクラスが用意されていて、そこからNIBのロードなどを行う。NIBのロードは、NibServiceのスタティックメソッドを使い、

     nib = NibService.loadNibFile("example");

    のように記述する。その中にあるウインドウは、例えば次のようなメソッドを使って名前で参照できる。

     previewWin = (JFrame) nib.createWindow("Preview");

    こうした独自のライブラリ機能を使うものであり、一般的なJava系ツールのように設計したユーザインタフェースと同等の結果を得るJavaの完全なソースコードを生成するものではない。逆に言えば、Cocoa的な使い方をSwingでもできるようにするライブラリと表現できるかもしれない。また、こうした機能の実現方法としても興味をそそられるプロダクツである。

    nib4j
    http://www.nib4j.com/index.html

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

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

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

    2004-07-06

    目次

    • SqueakではじめるSmalltalk入門   第1回  鷲見正人
    • 藤本裕之のプログラミング夜話 #48
    • 高橋真人の「プログラミング指南」 第47回
    • ニュース・解説

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

     オブジェクト指向の歴史や参考書には必ずと言っていいほど登場するSmalltalk。ですが、実際にコードを組んだり、処理系をいじったことがある人は少ないようです。この連載は、簡単に入手でき、Smalltalk処理系としても使えるSqueakを用いて、Smalltalk、ひいてはそれが実現する由緒正しくもお手軽な、オブジェクト指向プログラミングの世界を楽しんでいただこうという趣向で進めてゆきたいと思います。

     

    まずは意外と知られていない、Smalltalkの歴史から。

     Smalltalkは、GUIベースの統合化開発環境(IDE)「Smalltalk-80」として’80年代半ばに「BYTE」誌に特集が組まれるなどして、センセーショナルなデビューを飾ります。開発開始自体は、それからさかのぼること十余年と、FORTRAN、LISP、BASICに次ぐ比較的長い歴史を持つ古い言語です。プロトタイプこそミニコンで動作するBASICで作られましたが、比較的小型で安価で高性能なAltoがチャック・サッカーの手により作られるとすぐに、Cの前身と言われるBCPLで移植され、Smalltalk自身でGUIを記述することも可能な処理能力を得て、それをよりどころに本格的な進化を開始します。

     Smalltalk誕生以前にすでに、ALGOLを拡張したSIMULAという言語により「クラス」と「オブジェクト」という言語機能は実現されていました。しかしこの時点では、いわゆる“オブジェクト指向”という考え方はまだなかったようです。アラン・ケイは、オブジェクトが動的に関数を実行する様子を、まるで生物やその細胞がなにかの刺激に反応するかのようなイメージになぞらえて彼のオブジェクト指向、つまり「オブジェクトにメッセージを送信して、なにかをさせる」というメタファを言語に取り入れるという考え方を確立します。それをダン・インガルスがかたちにしたのが「Smalltalk」というわけです。

     なお、現在の“オブジェクト指向”は、このメッセージ送信メタファに加えて、後にビアルネ・ストラウストラップ【編集部注】がC++で利用可能とした「カプセル化」「継承」「多態性」、つまり抽象データ型を発展させた問題解決手法を組み合わせたものとして語られます。C++はSmalltalkの影響は受けていない(ことになっている)ので、それぞれの言語のユーザーによる異文化交流の結果、両言語のコンセプトを便宜的に(ある意味、それぞれの生みの親であるケイやストラウストラップの意向を無視するかたちで)組み合わせたものが広まったのが、どうやら今の“オブジェクト指向”の正体のようですね。

     閑話休題。

     Smalltalkは、およそパーソナルコンピューティングで必要とされるであろうあらゆるものをオブジェクト指向、ここではつまり「オブジェクトに対するメッセージ送信」により実現できないかというチャレンジのもと、開発が進められました。たとえば、3+4も「3というオブジェクトに、+4というメッセージを送る」と解釈し、そのように実装する…というところから始まって、if-then-elseといった制御構造も、メモリやプロセスの管理といったOSの仕事も、果てはGUIまで、すべてをオブジェクト指向で実現して見せ、オブジェクト指向の問題解決手法としての有効性のアピールに成功します。

     そんなふうに進化を遂げたSmalltalkは、’70年代中盤にもなると、単なる言語処理系ではなく、GUIベースのOSの様相を呈してきます。言うまでもなく、これが(暫定的ながら)アラン・ケイの目指した「ダイナブック環境」そのもの、というわけです。ここからは皆さんよくご存じのとおり。残念ながらSmalltalkをOSとしたAltoが製造販売されることはなく、Altoはダイナブックとは直接関係のないStarというシステムを搭載したワークステーションに技術転用され、試作機としての使命を全うします。

     Smalltalkは言語してもOSとしても(もちろんそこから身をやつしたIDEとしても…)特筆すべき点を多数持っていましたが、いかんせん富豪的で高速処理に向かず、なおかつ非常に高価であったため評価はされども普及することはありませんした。Smalltalk-80は、その後、名前を「VisualWorks」と変え、販売元もCincomに移りましたが現在も健在で今なお、言語・処理系としての進化を続けています。現在も相変わらず高価ですが、非商用に限り無償です。

     Squeakは、Smalltalk-80の販売直前版(v1。販売されたのはv2から)をAppleがMac Plus用に移植した「Apple Smalltalk」をベースに派生的に作られた、新しいけど中身は古い、フリーでオープンなSmalltalk環境です。’90年代半ばごろ、当時AppleフェローとしてAppleに在籍していたアラン・ケイの指導のもと、ふたたびダン・インガルスらPARC時代のメンバーがタッグを組み、その作業に当たりました。

     Squeakを“蘇生”させた本来の目的は「Squeak eToys」という非開発者向けのビジュアルプログラミング言語(Smalltalkとは言語仕様が異なる別言語)とその処理系を構築することにありますが、eToys利用にこだわらなければ、純粋なSmalltalk環境として使うこともできます。そんなSqueakは、Smalltalkerと呼ばれるSmalltalk-80以降の正統派プログラマには古くさいと不評です。しかし一方で、すっかりIDE然とした姿が板についてしまったVisualWorksより、かつてジョブズが見た“Alto OS”にずっと近い存在だとも言え親しみが持てます。本連載では、このSqueakを使って、現在に蘇った暫定ダイナブック環境における“理想のプログラミングの世界”を体験していただきましょう。

     次回は、Squeakのインストールとセットアップです。

    【編集部注】ビアルネ・ストラウストラップ:Bjarne Stroustrup

    執筆者プロフィール:鷲見正人(すみ・まさと)
    Macintosh BASIC(β版リリース後消滅)、Excelマクロ(VBAに置換)、HyperTalk(放置)、NewtonScript(開発中止)、AppleScript(多国語化打切り)…と不遇のユーザースクリプティング環境を渡り歩いて気が付けばはや18年。ついにSmalltalkという安住の地を見つけたものの、こんなことならMac Plus時代に端からSmalltalkに本腰を入れて取り組んでいれば…と後悔先に立たずの自称“オムニユーザー”(プログラミングにも手を出すエンドユーザーの呼称)。北海道・札幌Squeakユーザー会(SqUASH)主宰。

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

     それはフジモトさん歳のせいぢゃないですかと言われると反論が難しいのだが、自分の書いたプログラムコードの意図とか仕組みとかをあんまり覚えていられなくなって来た。細部まで覚えているのはせいぜい1月くらいなので、勝手な言い草で恐縮でありますが、納品後の障害とか仕様変更などの報告はその期間中にしていただけると助かります、などとほざいている。
     もちろん忘れてしまっていても、他ならぬ自分のコードだから読めばああそうだったっけと思い出すのは早い。が、逆に自分のコードだけに読んでも意図が掴めずなんでこんなことをやっておるのだろうと疑問を持ってしまった場合の焦燥もまた深いのである。

     特に問題になるのはCocoaのようなクラスライブラリを使ったプロダクトにおいて、「全てのツジツマが合っているからこそ現在動いている」という前提があり、なのにその一部、しかも自分の手になる一部に「自分が見てどうもツジツマが合ってないような見える」箇所がある場合だ。
     「でも動いているんだからいいぢゃない?」
     という態度は当然ながらよろしくない。そりゃいよいよ時間がなくなればオレとて過去の自分を信頼し、納得いかぬコードでも動けば納めることもある。が、仕事はそれで終わりとしても、心中に芽を出した不安の種・疑問の萌芽はプライベートな時間をかけても合点するところまで調べておくべきだ。
     調べた結果、拍子抜けするくらいバカバカしい記憶違いならそれでよし、もしかすると過去のバージョンで存在したクラスライブラリのバグへの対処で今は要らぬコードかも知れず(まぁその場合はいくらオレでもコメントを書くけどさ)、また仕様書ではありえないことになっている異常なデータが実際に来たことへの対策だったかも知れない。稀には盲腸コード(絶対に実行されないコード)だってあるだろう。

     誤解されると困るのだが、オレが言いたいのはそうやってプライベートな時間を使ってまで真面目に仕事をしなさい、プロダクトに貢献しなさい、泣きなさい笑いなさい、いつの日かいつの日か花を咲かそうよ♪ というようなことではない。ではなくて。
     仕事でも遊びでも飲み屋で出た話題の中で思い出せなかった女優の名前でもいいんだが、なんつうか頭のなかの片足あげたままどこにも降ろせないでいるような状態に馴れてしまうのはいいことぢゃないよ、ということである。
     もちろん合点、納得のレベルは人それぞれだ。が、オレ達が医者に身体や病気についての深い知識を期待し、タクシーの運転手は道に詳しくあって欲しいと思うように、プログラマにだって自ずと要求される知識の水準というものがあるのであり、しかもそれは放っておくと相対的に低下するのである。
     200年前の名医はやたら患者に水銀を処方したし(知ってると思うがありゃ毒である)、50年前のタクシーの運転手は東京の街を走れまい。2004年のこんにち、MS-DOSのシステムコールを全部知ってたってあんまり役に立つとは思えない(昔取ったキネ旬でいくつか覚えていたりするんだけどさ)。

     でね、そのテの水準維持ってのは損得づくでやろうってのはなかなか上手くいかないもんなのだ。毎年毎月毎日毎時、情報処理に関わる新技術はこれでもかこれでもかと発表され、喧伝され、もてはやされるそばから廃れて行く。全部をフォローするのは物理的に不可能だし、またほとんどは単なるウタカタだ。
     アルファベットの3文字や4文字の名前がついたそれらのうちのあるモノは、それが果たして言語なのかシステムの名前なのかはたまたプロトコルなのか規格なのか、意表をついて団体名だったりするのかも分からないウチに一時本屋のコンピュータの棚を席巻して潮が引くように消えて行ったりしちゃうんである。
     オレのような者にまでこう訊く人がいる。「フジモトさん、●●(雑誌名)に『これからのシステム開発は■■■■(謎のアルファベット4文字)を抜きにしては語れない』と書いてあったんですが、やっぱりボクも■■■■を勉強した方がいいですかね?」
     知らねーっての。
     仕事に関係あろうがなかろうか、将来役に立とうが無駄になろうが、そんなことにはおかまいなく、とりあえず日々の疑問をそのままにしないという態度を心がける方が、将来よっぽどお得ですよ。きっとぼけ防止にもなるし、というお話でした。
    (2004_06_23)

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

    オブジェクト指向のとっかかり(32)

     こんにちは、高橋真人です。前回は番外編としてちょっと予備知識的なお話をしましたが、今回は再びコードの解説に戻ります。
     さて、今回のプログラムの改良方針は、あくまで「改行コード変換プログラム」らしく読み取り書き出し共にMac、DOS、UNIXに対応することです。コンパイルのし直ししなくても、ですね(笑)。では最初から見ていきましょう。
     まずはユーザーから得たファイル名に従ってファイルを開きます。この時点ではまだ改行コードが何であるのかが分かりませんから、ファイルはバイナリモードで開く必要があります。蛇足ながら、理由を説明します。どうしてバイナリモードにする必要があるのかと言いますと、テキストモードというのは改行コードを自動変換するモードのことでして、基本的には実行環境の改行コードを’?n’に置き換えるというモードだからです。
     今回のコードはmain関数の7行目を見ますと、(以下、コード例のstd::は省略します)

    ifstream ifs(inputFile.c_str(), ios::binary);

    という具合に、コンストラクタに渡す引数が、前回のものからひとつ増えています。
     ANSI Cのfopen()で、

    fopen(filename, “rb+”);

    などと、複数のオプションを同時に与えることができるように、ifstreamでも複数のオプションを指定することができます。
     指定の仕方はビット和を取る形で行います。例えばこんな感じです。

    // 入力ファイルストリームをバイナリモード、追加モードで開く
    ifstream ifs(filename, ios::binary | ios::app);

     読み取るファイルをバイナリモードで開いたら、次は改行コードの判定をします。ここでは、TextContentクラスのスタティック関数(クラスメソッド)がそれを行います。

    TextContent *tc = TextContent::InstanceFactory(ifs);

     ファクトリーという名前が付いているのはどうしてかと思われるかもしれませんが、これは「デザインパターン」というものを説明しないとどうしてこのような名前が付いているのかは分からないかもしれません。今は「この関数はインスタンスを作る役割を持った工場なのだ」ぐらいに考えておいていただければいいでしょう。
     で、この「工場」がどのようにインスタンスを作るかですが、やっていることは単純です。ファイルを先頭から1バイトずつ読んで行き、CR、LF、もしくはCR+LFを見つけた時点でそれをこのファイルの改行コードだと見なし、その改行コードに対応したインスタンスを生成して返します。
     InstanceFactory()によって、TextContentクラスのインスタンスが生成されたら、次はそのインスタンスがファイルの中身を実際に読み取る番です。読み取りファイルは既に開かれていますから、改行コードを判定するために進められていたファイル位置指示子を戻してから、全体を一気に暫定バッファに読み取ります。
     その後、あらかじめ判明されている改行コードを区切りとして、行単位でvectorの中に格納していきます。
     次にユーザーに書き出す際の改行コードを尋ね、その結果に従って新たなインスタンスを作ります。このインスタンスはいずれもTextContentクラスのサブクラスで、この辺からは前回のプログラムとやっていることはほぼ変わりません。
     新しいインスタンスはTextContentクラスのインスタンス、つまり変換前のデータを保持したインスタンスを引数にとって構築されます。言い方を変えれば、各サブクラスのコンストラクタはTextContentクラスのインスタンスを引数に取るということです。
     以下、前回のプログラムと同様にデータが書き出されていき、変換の作業は終了となります。

    ニュース・解説

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

    Carbon ドキュメント & サンプル & SDK ナビゲーション(2004/07/02)

    【開発環境】

    WWDC2004において、Mac OS Xの次期バージョン「Tiger」(Mac OS X 10.4)の詳細が発表されました。 WWDCの参加者にはTigerのプレビュー版が配布され、さっそく自分のマシンにインストールしその全貌を把握しようとする猛者たちで会場はにぎわっています。Tigerには数々の新機能が追加されているのですが、そうした機能についてどこまで詳細な話をしてよいのか?現状ではまったく判断できないのが辛いところです(笑)。

    予想通り、スケジュールがTBA(To be announced …内容未定)となっていたセッションには、Tigerで導入される新技術についての解説がセッティングされています。また、各セッションで解説された内容やサンプルソースコードが、逐次ADCメンバーサイトにアップロードされているのも今回の大きな特徴です(WWDC参加メンバーのみダウンロード可能)。まあ、昔もいくらかはありましたが、今回は内容、量ともに非常に充実しており、その数はすでに50項目を超えいます。

    Tiger正式版の登場はもう少し先の事になりますが、その前に、デベロッパにはシーディングとの長い戦いが待ち受けています。その準備も含めて、今年の後半は大変忙しくなりそうです(うれしい悲鳴)。

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

    前回から7月2日の期間中、Apple社のDocumentationサイトにはドキュメントが28も登録されました。WWDC2004のセッション内容に付随したドキュメントも含まれていますが、残念ながらTigerの新機能についてのドキュメントはまだ存在していません。

    「Power Mac G5 Developer Note」(PDFあり)
    「Transitioning to Quartz 2D」(PDFあり)
    「Adding Search to Your Application (Preliminary版)」 (PDFあり)
    「Application Menus and Pop-up Lists」
    「Audio, FireWire, SCSI, Storage, USB Device Access」
    「Basic Event Handling」
    「Certificate, Key, and Trust Services Programming Guide」 (PDFあり)
    「Core Foundation Reference」
    「Device Drivers (Kernel/IOKit)」
    「DNSServiceDiscovery API Reference for Java」
    「Drawing and Views」
    「Drawing With Quartz 2D」(PDFあり)
    「Enabling Secure Storage With Keychain Services」(PDFあり)
    「Force Feedback Device Access」
    「HeaderDoc Unfettered」(PDFあり)
    「Integrating Carbon and Cocoa in Your Application」 (PDFあり)
    「Kernel Extensions (Kernel/libkern)」
    「Managing Networked Storage With Xsan」 (PDFあり)
    「Matrices」
    「Network Configuration, Connection, and Reachability」
    「QuickDraw Reference」 (PDFあり)
    「Search Fields」
    「Search Kit Reference」(PDFあり)
    「Security Objective-C API (Preliminary版)」
    「Strings」(PDFあり)
    「Upgrading to the Mac OS X HIToolbox」(PDFあり)
    「Workspace Services」
    「Xcode Workflow」(PDFあり)

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

    加えて、デベロッパ向けの読み物として以下の解説が登録されています。内容は、Carbonアプリケーションで利用するHIToolboxやHIViewについての詳しい解説です。

    「The Benefits of HIToolbox: The Evolving Widget Set」(読み物)

    http://developer.apple.com/carbon/HIToolbox_feature.html

    前回から7月2日の期間中、新規のテクニカルノートは2つ登録されました。また、テクニカルQ&Aの方はひとつ登録されました。

    TN2035「ColorSync on Mac OS X」
    TN2112「Using the 3DMixer Audio Unit」

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

    QA1083「Dynamically registering a bundled component」

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

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

    前回から7月2日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが5つ登録されました。「CocoaInCarbon」では、CarbonからCocoaのユーザインターフェース(このサンプルではウィンドウ)を呼び出す方法が紹介されています。

    「SimplePlayThru」(CoreAudio関連)
    「DialogsToHIViews」(HIView関連)
    「HIObjectThreadController」(HIObject関連)
    「CocoaInCarbon」(Carbon関連)
    「DropDraw」(QuickTime関連)

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

    【デベロップメント SDK】

    前回から7月2日の期間中、Apple社のSDKサイトには新しいSDKがひとつも登録されませんでした。その代わり、CHUDの最新版と「Rendezvous for Windows」のプレビュー版が登録されています。

    CHUD(Computer Hardware Understanding Development Tools) Ver.3.5.2

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

    「Rendezvous for Windows Technology Preview」

    http://developer.apple.com/macosx/rendezvous/

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

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