MOSA Multi-OS Software Artists

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

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

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

MOSADenバックナンバー 2005年6月発行分

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

    2005-06-28

    目次

    • 「WebObjects Dev Report」     第11回  田畑 英和
    • 藤本裕之のプログラミング夜話 #71
    • 高橋真人の「プログラミング指南」  第69回
    • WWDC2005レポート 高橋政明          ★MOSA会員専用記事★
    • ニュース・解説                小池 邦人

    「WebObjects Dev Report」  第11回  田畑 英和

     前回はWWDCのレポートをお送りしましたが、本題に戻りまして前々回に引き続きモデルファイルの作成について解説したいと思います。簡単におさらいしますと、データベースとアプリケーション間のマッピングをおこなうのがモデルファイルの役割になります。WebObjectsでアプリケーションを作成するさいには必ずといっていいほどこのモデルファイルを作成することになるでしょう。同一のデータベースにアクセスするアプリケーションであれば、モデルファイルをフレームワーク化して、複数のアプリケーションから共有するような場合もあります。データベースを利用するWebObjectsアプリケ−ションでは、モデルファイルの作成が開発ワークフローの起点となります。

     モデルファイルではデータベースの構造(スキーマ)を定義すると同時に、アプリケーション上で扱うデータのクラス定義をおこなうことになります。つまりモデルファイルを作成するには、あらかじめデータ構造の定義をおこなっておく必要があります。開発をスタートする時点でどこまで厳密にデータ構造を決めておくかですが、もちろんガッチリと設計をしてからモデルの実装をおこなってもよいですし、プロトタイピングを兼ねて必要な部分から段階的に実装していってもよいでしょう。
     実際どのようなアプローチをとるかは実践する開発プロセスにもよりますが、モデルの変更はデータベース側の変更をともなうことが多いため、計画的に開発を進めて行く必要があります。

     それでは今回は、実際にモデルファイルを作成していく過程をレポートしてみたいと思います。モデルファイルを作成する場合、通常1つのモデルファイルにいくつものEntity(データベースのテーブルに相当)を追加していくことになりますが、今回はまずシンプルに1つのEntityのみを作成する場合について取り上げます。作成するモデルファイルですが、ビジネスマッチングシステムのユーザ情報を例にしてみたいと思います。
     モデルファイルにEntityを追加するには、Entity名と対応するデータベース上でのテーブル名が必要になりますが、それぞれ以下のように定義してみました。このときEntitiy名は通常そのままクラス名としても使用し、大文字で始まる名前を設定します。

    Entity:MOSAUser
    テーブル名:MOSA_USER

     次に現行のシステムを参考にして、MOSAUserで扱うAttribute(データ)を以下のように定義してみました。

    Attribute

      MOSA ID、氏名(姓)、氏名(名)、カナ(姓)、カナ(名)
      E-MAIL、性別、生年月日

     これらのAttributeを実際にEntityに追加するには、Attribute名とそれに対応するデータベース上のカラム名が必要になります。このときAttribute名はプログラム上でのアクセッサメソッドのメソッド名にも使用され、小文字で始まる名前を設定します。また、Javaとデータベース上でのデータタイプも定義し、文字列型の場合は文字列長の指定などもおこないます。今回はOpenBaseをデータベースに使用し、以下のようにAttributeの属性を定義してみました。

    MOSAUser Entity

    ・MOSA ID
    mosaID, MOSA_ID, String, char(16)
    ・氏名(姓)
    lastName, LAST_NAME, String, char(64)
    ・氏名(名)
    firstName, FIRST_NAME, String, char(64)
    ・カナ(姓)
    firstNameKana, FIRST_NAME_KANA, String, char(64)
    ・カナ(名)
    firstNameKana, FIRST_NAME_KANA, String, char(64)
    ・E-MAIL
    eMail, E_MAIL, String, char(64)
    ・性別
    sex, SEX, Number, int
    ・生年月日
    birthDate, BIRTH_DATE, NSTimestamp, date
    ※左からAttribute名、カラム名、Javaデータタイプ、OpenBaseデータタイプ

     Attributeを設定するさいにはさらにいくつかの属性を設定することができますが、主な設定項目は次のとおりです。

    ・Allows Null
      Attributeをnullにできるかどうか
      かならず入力が必要になるAttributeはこの設定をOff
    ・Locking
      EOFがサポートするoptimistic lockingの対象にするかどうか
      LockingをOnにしておくと、データのFetch後に他のユーザによって
      書き換えられたかどうかがチェックされる
    ・Primary Key
      Primary Keyとして使用するAttributeの指定
    ・Class Property
      プログラム上で直接操作しないAttrituteはこの設定をOff
      Primary Keyは通常Class Propertyとして設定しない。

     他にも様々な属性をAttributeに設定することができますが、基本的な項目としては以上のものを最低限確認するようにしてください。

     最後にPrimary Keyについて解説しておきます。EOFではPrimary Keyを自動的に管理する機能があります。レコードを追加するさいに自動的に連番を生成して、Primary Keyを自動発行してくれます。また、Primary Keyは同一テーブル内での各レコードを識別するために利用しますので、ユニークである必要があり、不用意にPrimary Keyの値を変更してしまいますとデータ構造に不整合を生じる可能性があります。
     そこでEntityを作成するさい、プログラム上での処理対象となるAttributeとは別にPrimary Key専用のAttributeを追加し、Class Propertyの設定を外すようにします。MOSAUserの場合次のようなPrimary Key用のAttributeを設定しました。

    ・Primary Key用Attribute
    mosaUserId, MOSA_USER_ID, Number, int

     これで1つのEntityが出来上がりました。あとは同様に他のEntityを追加していくことになりますが、次回はEntity間の関係を定義するRelationについて取り上げてみたいと思います。

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

     さて、前回原稿を書いてから半月あまり。今月初めにはサンフランシスコでWWDCがあり、そこではアップルがMacintoshのCPUをIntel製に切り替えるという「衝撃の発表」があり、その余波としてXcode2.1のデベロッパー・リリースが配られ、ついでに我々は日本公開に先立って「スターウォーズ・エピソード3:シスの復讐」を観てきたわけであるが皆さんいかがお過ごしですか。
     編集部からは、「今回の原稿、連載の内容から外れた『WWDCインプレッション』みたいなものを書いてもいいですよ」と言われたのだけど、NDAもあるし、帰国してからもなんだかドタバタしててWWDC会場でとってきたノートの内容も整理できていない状態なので……あ、フジモトさんがそんなことするんですかと言われそうだがするんである。時間が経てば経つほど記憶が薄れて自分の書いた読めない英語だけが記憶のよすがになっちまうからな、それは勘弁してもらって前回の話を続けることにする。

     思い出してほしいが前回最後に残った疑問は、NSViewの描画メソッドのひとつ、「display」は、もったいないもヘチマもなく、描く必要があろうがなかろうが闇雲に、そう、まるでブレーキの壊れたダンプカー(というのはその昔、若かりしころのスタン・ハンセンのキャッチフレーズである)さながらに描画を行なってしまうようなんだがこいつにどんな使い道があるのか、というモノであった。皆さんは答えを見つけましたか?
     ヒントは前回の拙稿の中にある。「setNeedsDisplay:」の説明のところ、引用すると、「これを呼んでおけば、現在進行中のイベント処理が終わった時点で各ウィンドウに『displayIfNeeded』が送られ、それがまたそのサブビューたちに『displayIfNeeded』を送り、という形で必要な描画を完成させることができる」って部分ね。これをよく読むと、この仕組みで必要な描画をコンプリートするには「そのイベント処理が滞りなく終了すること」が絶対条件であることがわかる。すなわち、

     ア) イベント発生
         ↓
     イ) 対応する処理のあと、必要があれば「setNeedsDisplay:」
         ↓
     ウ) 描画が行なわれる。

    なんだが、(イ)の「対応する処理」というのにえらく時間がかかってしまうと、本来すぐに起きるべき描画がなかなか始まらないということになっちまうのである。
     ……アニメーションなんかを想像してもらうと判りやすいかもしれない。イベント・ループに同期して描画するアニメーションは、そのイベントの処理によってぎこちない動きになってしまうだろう。NSViewに用意されている「すぐ描くメソッド」群、すなわち「display」、「displayRect:」、「displayRectIgnoringOpacity:」はそういうときに使われるわけだ。

     では次回から、NSViewのもう一つの顔、というか、NSResponderから継承したメソッドを追いつつ、Cocoaにおけるイベントハンドリングの詳細を追って行く。どうも巷間誤解しているヒトが多いらしい部分なので、ちょっとしたテストプログラムを書いて具体的かつ実証的にヤってみようと思う。乞うご期待。
    (2005_06_23)

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

    UNIXとしてのMac OS X

    〜Perlについて(15)〜

     こんにちは、高橋真人です。
     さて前回は、「ただの文字列も立派な正規表現である」というところから始め、文字クラスによる表現を使って「大文字、小文字を問わない」表現についてお話をしました。
     そこで今度は、’ABC’のうちのすべての文字が小文字になってもマッチするというケースについて考えてみましょう。
     まず、’ABC’のうちの「どの文字が小文字であっても構わない」というケースを見てみます。言ってみれば、これは以下の8通りの文字列のすべてにマッチするということです。

    ABC aBC abC abc aBc AbC Abc ABc

     このケースに当てはまる正規表現は、

    [aA][bB][cC]

    となります。
     確認ですが、文字クラスというのはあくまでも1文字を表すものですから、[0123456789]であれ、[a-z]であれ、[ABC]であれ、いずれも「1文字にしかマッチしない」ことをしっかり認識してください。
     最初のうちは当たり前に思っていても、だんだん正規表現が複雑になってくると、ついこの簡単な事実を忘れて混乱する人が多いのです。

     さて次は、今のものとかなり似ている例ですが、「すべてが大文字か小文字」というケースを考えてみましょう。今度はABCとabcのどちらかのみで、大文字・小文字の混合はなし、ということです。
     文字クラスによる表現の場合、あくまで個別の文字ごとに候補から1文字が選ばれるので、それらの相互の組み合わせという形での制御はできません。ですからこのような条件を満たす正規表現は文字クラスは使わずに以下のようになります。

    ABC|abc

     ところで、この辺は正規表現のどちらかというと苦手な分野なのではないかという気がします。たとえば、このような検索処理をCで書いたとしましょう。

    const char s1[] = "This is string sample. abc...";
    char *p1, *p2;
    p1 = strstr(s1, "abc");
    p2 = strstr(s1, "ABC");
    if (p1 != NULL || p2 != NULL) {
        /* 検索が成功した */
    }
    


     検索するものが少数に限られている場合には、あえて正規表現を使わずに文字列そのものを指定した方が直接的です。
     でもこのような場合ですらPerlでは正規表現を使う理由があります。Perlにポインタがないこともその一つですが、検索には置換が付き物だというのがその理由です。
     もちろんPerlでも上記のCと似た書き方は可能です。

    $p = index $string, $s;
    または
    $p = index($string, $s);

     $stringも$sも文字列であるという想定ですが、$stringの中に$sが含まれる場合、$stringの先頭からの$sの開始位置を数値で返します。(見つからなかった場合は-1)
     $pに返った位置情報を元に置換処理をする場合、書き方が少々面倒です。

    substr($string, $p, 3) = ’0123′;
    (ここでは、カッコは必須です)

     substrという演算子は、上記の例では、$stringの$pの位置から3文字を(文字列として)返すのですが、この式をそのまま代入式の左側に置けるのがPerlの面白いところです。その場合、返される3文字の部分がそのまま右側の’0123′という文字列で置き換えられます。
     これが面倒だと言うなら、一体どんな簡単な書き方があるのでしょう。
     Cでこの手の処理を書く場合にはこんな書き方は普通ですよね。というより、このsubstr演算子を使った書き方でも、Cで書くよりはずっと簡単だと言えるでしょう。確かに、Perlでもこういうケースではsubstr演算子を使うのがピッタリだし、処理も高速です。
     ただ、それでも正規表現を使う理由があるのです。私のような「怠惰なPerlユーザ」の場合、処理効率が多少落ちても、もっと「頭にラク」な以下のような書き方を選びます。

    $string =~ s/ABC/0123/;

     これで、$stringの中の’ABC’が’0123′に置き換えられます。$stringの中に’ABC’が複数個所含まれていた場合、置き換えられるのは最初の1つだけですが、すべてを置き換えたければ、以下のように末尾にgを付けるだけです。

    $string =~ s/ABC/0123/g;

     この、s///演算子(一体、どう読むんでしょうか?)こそが、Perlにおける強力なツールの一つです。私の場合、正規表現を使うケースの8割ぐらいはこのs///演算子と共に使っていると言ってもいいぐらいです。

    MOSA会員専用記事

    WWDC2005レポート 高橋政明

    話題の中心はやはりインテルへの移行

     インテルCPUに移行するとの衝撃の発表があったWWDC2005のレポートをお送りします。
    私にとっては一年で最もたくさん歩きたくさんしゃべる一週間です。Macプログラマの強化合宿であります。参加者の話題はやはりインテルCPUでした。基調講演が終わってCPU移行作業の事を考えると気が重かったのですが週末までにはずいぶんと気分的に楽になりました。

     確かにCPUの切り替えは可能だしこれまでもPowerPCに変更した実績があります。しかし追加の作業が必要になることは間違いありません。PowerPCに移行した時はシステムも同時に移行だったのでいろいろと苦労がありました。コンパイラ等の開発環境も移行発表時には十分ではありませんでした。
    今回はシステム(Mac OS X)は既に移行を終えている(少なくともデスクトップ機の基本部分は)ようですしXcode2.1で今すぐに開発可能です。かなり詳しいドキュメントも出ていてどのような対応が必要かがわかります。
    ・Universal binary Programming Guidelines
    http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/index.html

     会場内のラボで自由に実機に触れることもでき安心できました。もしかするとプログラマに『インテル対応特需』があるかも知れません〔^_^;〕。

     しかし発表されていないことも多いですね、サーバーはどうするか? 64ビットはどうなるか? PowerPCは本当に2007年にやめてしまうのか? これらの疑問は次回以降のWWDCを待つしかないようです。
    皆さん既にご存知でしょうがWWDCの基調講演はこちらで見る事ができます。
    http://www.apple.com/quicktime/qtv/wwdc05/

    配布印刷物は激減

     さて今年のWWDCの運営は例年に増してwebに重点が移ってしまいました。そのため印刷物は最小限でした。これまでのように各セッションの概要を記した印刷物はまったくなくなりました。期間中はwebで確認できますが、後々になって確認する時に不自由しそうです。一年以上たってDVDで内容を確認したい時もありますし、webよりも印刷物の方が見やすいのでこの点来年は改善しもとに戻して欲しいものです。
    登録時に配布されるバッグやボールペンはほぼ昨年と同じでしたがメモパッドも昨年同様ありません。オライリーの本 Mac OS X Tiger Pocket Guideがもらえました。これはWWDC2005エディションと印刷されています。オライリーのMac OS X関連の表紙は『犬』でしたがこの本は『虎』の表紙です。

    実感させられた参加者数最大

     さて事前に発表されていたハンズオンセッションは、その場でAirMacでアクセスするような形式ではなく、利用する資料やサンプルはあらかじめ配布されていました。このため大勢の参加者がいても支障があるようなものではありませんでした。
     AirMac環境は参加者の密度が高いため接続しにくい状態が多く残念でした。基調講演の待ち時間は最も参加者が集中するので接続できなくてもあきらめざるを得ませんが、二日目以降もなかなかつながらないことがありました。
     基調講演でも参加者数が最高と発表されていましたが、実際に(時には限界を感じるほど)混雑していました。セッション間の休み時間も以前より短いように感じましたがこれは短時間で終了するセッションがなかったためです。朝食は二階から一階に変更となり昼食会場と同じになりました。朝もゆっくり椅子とテーブルで食べることができたのでこの変更はありがたかったです。
     参加者の楽しみのひとつであるキャンパスバッシュも大混雑でした。カンパニーストアも入場にも並び、入場して買うものを決めてもレジで並ばなければなりませんでした。私は到着後すぐににカンパニーストアに入るのはあきらめ帰り際に買い物をしました。その時間でも品揃えは十分だったようですがレジ待ちの列の長さには閉口しました。

     会場内はAirMacでインターネットに接続できます。私は日曜日の午後にレジストのために会場に行きましたがその時にも接続できました。
     月曜から金曜まで毎朝朝食と昼食が用意されています。昼食は袋に入った持ち出し可能のお弁当形式とビュッフェでのあたたかな食事が選べます。今年は毎日お弁当がありました、ランチセッションに参加する人やラボなどのスタッフなどが利用していたようです。
     午前と午後の休み時間にはコーヒーやソフトドリンクがあり、午後は果物やアメリカのスナック菓子やチョコレート等日替わりのおやつもあります。
    Apple Design Awards、ムービーナイトそれにキャンパスバッシュでは立食形式で夕食にもありつけますしビールやワインも用意されています。これらのサービスを利用すると自腹で食事を確保しなければならないことは少なく一週間の滞在ですが食費はさほどでもありません。

    日本人向けのサービス

     同時通訳がなくなってしまい、日本からの参加者が減るかと危惧しましたがそんなことはなくむしろふえたそうです。
     日本からの参加者向けに日曜日に会場近くのホテルでレセプションが催されました。思い起こせばこの時からかなりの混雑でした。参加者相互の交流の場として貴重ですし、夕食も確保できます。
     会場内にはインターナショナルラウンジが設けられセッションの合間などに利用する事ができます。昼休みの時間帯は日本のアップルスタッフが待機し質問に答えてくれていました。

     情報交換の場としてMOSAパーティは多くの参加者で盛り上がりました。日本のアップルからもたくさん参加していただき、お互いにほろ酔いでいろいろ貴重なお話が聞けたようです。
     MOSAデスクとして一階にはMOSA事務局の戸上さんが待機してくれていました。

    サンフランシスコはやはり参加しやすい

     会場のMoscone WestはダウンタウンのホテルからすぐでサンフランシスコMOMA等にも近い便利でわかりやすい場所にあります。アップルのリテールストアもすぐ近くですがこちらは銀座よりはかなり小規模です。
     サンフランシスコ国際空港からの公共交通手段もあり、ツアーを利用せずに日本から参加した人も少なくなかったようです。
     サンフランシスコで不便なのはキャンパスバッシュが開催されるアップル本社まで遠い事ですね。

    まとめ

     CPUの移行作業自体は実際のマシンがあればそれほど大量の作業は必要ないようです。
     68Kの時代のようにA7やA5といった特定のレジスタやアセンブラでなければ記述できない部分も通常のアプリケーションレベルでは存在せず、普通はエンディアン対策し再コンパイルで済むはずです。なによりアプリケーションがクラッシュしてもログが残り、システムの再起動は必要ないのですから開発効率はPowerPCへの移行時とは比べ物にならないほど高いでしょう。私の周りの開発者はほとんどPowerPCの移行とMac OS Xへの移行を経験して来た人たちです。皆一様にCPUの移行に対しては冷静です。また若い開発者はCocoa中心の人が多くエンディアンの影響はあまり受けないでしょう。
     それにしてもなぜ完全に切り替えるかとの説明や今後のロードマップが示されなかった事は残念です。これまで5年も暖めていたわけですから明確な計画を持っていないはずはありません。それを知りたいところですが今はまだ無理ですね。ヒントはラプソディにあるのかも知れません。ラプソディ発表時に示されたロードマップのうち何が残り何を発展させるのでしょうか?
     今年のWWDCはTigerの新機能を熟知する最良の機会でした。インテルマシンの発表とLeopardの詳細が明らかになる来年のWWDCは、今年以上に参加者が増えてしまいそうで、その点だけはちょっと心配です。

    ニュース・解説

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

    Carbon ドキュメント & サンプル & SDK ナビゲーション(2005/6/24)

    【開発環境】

    さっそくWWDC2005で配布されたXcode Tools 2.1をインストールしてみました。Xcode v2.1の方は、今のところ大きな問題は出ていません。しかし、同時にインストールされるInterface Builder(v2.5.1)で、ポップアップメニュー・コントロール(Carbon版)のメニューアイテムを編集しようとすると、任意アイテムを選択する度にメニュー全体が閉じてしまいます。ベベルボタンに付くポップアップメニューの編集ではこうした現象は出ませんので、きっとバグですね。いや〜、これは使い難いぞ(涙)早急に改善して欲しいところです。

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

    前回から6月24日の期間中、Apple社のDocumentationサイトにはWWDC2005開催に合わせて大量のドキュメントが登録されました。今回は、その中で改訂版を除いた新規のドキュメントのみをピックアップしておきます。WWDC2004で配布されたドキュメントでさえほとんどまだ目を通していないというのに…時代は恐ろしいスピードで流れていきます(笑)。加えて、デベロッパー向けに4つの読み物が登録されています。

    「Automator AppleScript Actions Tutorial」(PDFあり)
    「Unit Testing Guide」(PDFあり)
    「Universal Binary Programming Guidelines」
    「WebObjects 5.3 Reference」
    「WebObjects 5.3 Updates」
    「Xcode 2.1 User Guide」(PDFあり)
    「Apple Core Audio Format Specification 1.0」(PDFあり)
    「AudioToolbox Framework Reference」
    「Carbon Reference Update」(PDFあり)
    「Cocoa Design Patterns Guide」(PDFあり)
    「CoreAudio Framework Reference」
    「CoreMIDI Framework Reference」
    「CoreMIDIServer Framework Reference」
    「Dynamic Library Programming Topics」
    「FxPlug Reference」
    「FxPlug SDK Overview」(PDFあり)
    「Macintosh OpenGL Programming Guide」(PDFあり)
    「Model Object Implementation Guide」(PDFあり)
    「Safari CSS Reference」(PDFあり)
    「Safari HTML Reference」(PDFあり)
    「Safari Web Content Guide」
    「Sdef Scriptability Guide for Cocoa」
    「Spotlight Reference」
    「Sync Services Tutorial」
    「vecLib Reference Update」(PDFあり)
    「Xgrid Foundation Reference」

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

    「Porting Multithreaded Apps from Win32 to Mac OS X」(読み物)

    http://developer.apple.com/macosx/multithreadedprogramming.html

    「Installing Your Application on Mac OS X: Developer Guidelines」(読み物)

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

    「Creating an Application with Tiger Technologies」(読み物)

    http://developer.apple.com/macosx/tigerapp.html

    「Mathematica Supports 64-bit Addressing」(読み物)

    http://developer.apple.com/business/macmarket/mathematica.html

    前回から6月24日の期間中、テクニカルノートは5つ登録されました。そのうち「Quartz Composer」に関する内容が3つあります 。新規テクニカルQ&Aの方は7つ登録されています。 こちらも「Quartz Composer」がらみの内容が多いですね。QA1435は、10.4と10.4.1で発生しているDrawerのバグのフォローです。そこには「バグは10.4.2で直っている」と記述されていますが、現時点で10.4.2はまだ登場していません(笑)。

    TN2145「Efficiently using Quartz Composer compositions with QuickTime」
    TN2128「Frequently Asked Text Services Manager (TSM) Questions」
    TN2143「Getting images in and out from Quartz Composer compositions」
    TN2146「Making the most of Cocoa bindings in Quartz Composer」
    TN2127「Kernel Authorization」

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

    QA1435「Carbon Drawer problem in Mac OS X v10.4 and v10.4.1」
    QA1423「Unified window title and toolbar appearance in Carbon」
    QA1422「Weak Linking To Spotlight」
    QA1433「How can I optimize a Quartz Composer composition depending on the hardware it runs on?」
    QA1427「What is the Timebase submenu available in the contextual menu of some patches in Quartz Composer?」
    QA1425「When does the RSS Feed patch in Quartz Composer refreshes its contents?」
    QA1434「Why does my Quartz Composer composition render with a corrupted background in the QCView?」

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

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

    前回から6月24日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが大量に登録されました。ほとんどが、WWDC2005開催のタイミングに合わせて登録された新規サンプルソースコードです。

    「AppearanceSampleUpdated」(Tools関連)
    「Audio Unit Effect Templates」(Audio関連)(改訂)
    「CocoaSOAP」(Cocoa関連)
    「Duplicate Finder Items」(Accessibility関連)
    「enetlognke」(Device関連)
    「FSFileOperation」(Carbon関連)
    「KauthORama」(Security関連)
    「MouseMotionSeparate」(Java関連)
    「QTCoreVideo101」(Cocoa&QuickTime関連)
    「Reducer」(Cocoa関連)
    「SampleD」(Darwin関連)
    「SDKExample」(Carbon関連)
    「SeeMyFriends」(Carbon関連)
    「simpleJavaLauncher」(Java関連)(改訂)
    「Sketch-112」(Cocoa関連)
    「SkyCreator」(Java関連)
    「TemperatureTester」(Tools関連)
    「UnsharpMask」(Cocoa関連)
    「UpdateXcodeSubprojects」(Tools関連)
    「XcodeClientServer」(Tools関連)
    「VideoViewer」(Cocoa&QuickTime関連)
    「AnimationFlicker」(Java関連)
    「AutoUpdater」(Cocoa関連)
    「BindingsJoystick」(Cocoa関連)
    「BlockedEventQueue」(Java関連)
    「Bouncy」(Java関連)
    「CaptureAndCompressIPBMovie」(QuickTime関連)
    「CFLocalServer」(Darwin関連)
    「CIAnnotation」(Cocoa関連)
    「CITransitionSelectorSample2」(Cocoa関連)
    「CIVideoDemoGL」(QuickTime関連)
    「CocoaEcho」(Cocoa関連)
    「CocoaHTTPServer」(Cocoa&Networking関連)
    「CoreRecipes」(Cocoa関連)
    「Custom_HIView_Tutorial」(Carbon関連)
    「CWCocoaComponent」(Java関連)
    「DNSServiceMetaQuery」(Networking関連)
    「ExampleIPBCodec」(QuickTime関連)
    「filesystem_examples」(Carbon&Cocoa関連)
    「FilterDemo」(Audio関連)
    「Fortune」(Widget関連)
    「Fractal Performanc」(Java関連)
    「FSCreateFileAndOpenForkUnicode」(Carbon関連)
    「FSRemoveInheritedACEs」(Carbon関連)
    「Goodbye World」(Widget関連)
    「GridCalendar」(Cocoa関連)
    「Hello Welt」(Widget関連)
    「Hello World」(Widget関連)
    「HITextViewDemo」(Carbon関連)
    「ImageApp」(Carbon関連)
    「ImageBrowserView」(Carbon関連)
    「ImageClient」(Carbon&Cocoa関連)
    「ImageMapExample」(Cocoa関連)
    「ImageMapView」(Carbon関連)
    「Installer Tiger Examples」(Tools関連)
    「iSpend」(Cocoa関連)
    「JavaSplashScreen」(Java関連)(改訂)
    「JSheets」(Java関連)
    「JustDraw」(Carbon関連)
    「Link Snoop」(Cocoa関連)
    「LiveVideoMixer」(QuickTime関連)
    「ManagedObjectDataFormatter」(Cocoa関連)
    「MouseMotionCombined」(Java関連)
    「MouseTracking」(Carbon関連)
    「MovieVideoChar」(QuickTime関連)
    「Moving To GCC 4.0」(Tools関連)
    「MyFirstJNIProject」(Java関連)
    「MyPhoto」(ImageCapture関連)
    「NetworkAuthentication」(Security関連)
    「OpenALExample」(Audio関連)(改訂)
    「PDFKitLinker2」(PDFKit関連)
    「People」(Cocoa関連)
    「QCCocoaComponent」(Java関連)
    「QTCarbonShell」(QuickTime関連)
    「QTCoreImage101」(QuickTime関連)
    「QTKitAdvancedDocument」(Tools関連)
    「QTKitCommandLine」(Tools関連)
    「QTKitCreateMovie」(Tools関連)
    「QTKitFrameStepper」(Tools関連)
    「QTKitImport」(QTKit関連)
    「QTKitProgressTester」(QTKit関連)
    「QTKitSimpleDocument」(QTKit関連)
    「Quartz Composer Live DV」(Quartz Composer関連)
    「Quartz Composer Matrix」(Quartz Composer関連)
    「Quartz Composer Offline Rendering」(Quartz Composer関連)
    「Quartz Composer Texture」(Quartz Composer関連)
    「Quartz Composer WWDC 2005 Composition」(Quartz Composer関連)
    「Quartz Composer WWDC 2005 TextEdit」(Quartz Composer関連)
    「QuartzCache」(Quartz2D関連)
    「QuartzLines」(Quartz2D関連)
    「SampleRSS」(Widget関連)
    「ScriptView」(Cocoa関連)
    「SimpleHIMovieViewPlayer」(Carbon&QuickTime関連)
    「Spotlight」(Strage関連)
    「SpotlightAPI」(Strage関連)
    「StarMenu」(Carbon関連)(改訂)
    「StickiesExample」(Carbon&Cocoa関連)
    「TexturePerformanceDemo」(Cocoa&OpenGL関連)
    「TradingCards」(WebObject関連)
    「VertexPerformanceDemo」(Cocoa&OpenGL関連)
    「Voices」(Widget関連)
    「WebKitCIPlugIn」(WebKit関連)
    「Worm」(Cocoa関連)
    「ZombieInfection」(Java関連)

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

    【デベロップメント SDK】

    前回から6月24日の期間中、Apple社のSDKサイトには新しいSDKがひとつも登録されませんでした。

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

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

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

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

    2005-06-21

    目次

    • 「WebObjects Dev Report」    第10回  田畑 英和
    • 小池邦人の WWDC2005参加レポート      ★MOSA会員専用記事★
    • SqueakではじめるSmalltalk入門  第41回  鷲見 正人
    • ニュース・解説               木下 誠

    「WebObjects Dev Report」  第10回  田畑 英和

     今年もサンフランシスコで開催されたWWDCでは、MacのCPUをPower PCからIntelへ移行することが発表されました。CPUの移行については事前に情報が流れてはいましたが、まさに衝撃的な発表でした。
     新たにリリースされたXcode2.1では、CPUの移行をサポートするためにPower PC/Intelの両方のCPU上で動作するバイナリー「Universal Binary」の生成が可能になりました。またXcode 2.1ではなんとWebObjectsの開発環境が組み込まれるようになりました。そこで今回はXcode 2.1に組み込まれたWebObjectsについてレポートしたいと思います。

    WebObjects 5.3

     Xcode 2.1に組み込まれたWebObjectsですが、バージョンアップがおこなわれておりVer 5.3となっています。Ver 5.3に関する情報ですがApple社のサイトでは以下のような情報が公開されています。

    ・WebObjects 5.3 Release Notes
    http://developer.apple.com/releasenotes/WebObjects/WO53_ReleaseNotes/
    ・WebObjects 5.3製品紹介
    http://www.apple.com/webobjects/
    ・WebObjects 5.3 API Reference
    http://developer.apple.com/documentation/WebObjects/Reference/API/

     製品紹介のtech specsページをみてみますと、サポートプラットフォームが変更になっているのが分かります。日本語のWebObjects製品ページはこの原稿を執筆している時点ではまだVer 5.2のままですので、こちらで紹介されている情報から変更点を簡単にまとめてみると以下のようになっています。

    ・開発プラットフォーム
      Windows 2000が未サポート
    ・運用プラットフォーム
      Windows 2000/Solaris 8が未サポート
    ・データベース
      MySQLが3.23.51から4.1.10aへ
      OpenBaseが7.0.8から8.0へ
      Oracleが8.1.7および9.2.0.1から10gと9iへ
      ※SQL ServerとSybaseも引き続きサポート
    ・Webサーバ
      Sun ONE Web ServerとIISが未サポート

     ようするに開発/運用プラットフォームがMacのみになり、Webサーバもこれまで複数のサーバをサポートしていましたが、Mac OS X Serverに搭載されているApacheのみがサポート対象となっています。これまでWebObjectsは複数のプラットフォームをサポートしていることが特長だったこともあり、この変更は特にWindows上で開発をおこなっているデベロッパーにとっては影響が出るものと思われます。
     さいわいまだWebObjects 5.2のパッケージ販売も継続しているようですのでしばらくは現状維持ということにもできますが、いずれ開発プラットフォームの変更を検討する必要がでてくるでしょう。もっともVer 5.2の時点ですでにWindows上での開発環境とMac OS X上での開発環境には大きな差がでていましたし、ついに(あるいはようやく)この日がきたかといったところです。
     運用環境に関しては基本的にはJava環境があればよいわけで、こちらに関しては開発環境の変化よりはインパクトが少ないものと思われますが、今後ライセンスがどのように変化していくかは注意が必要です。
     一方データベースに関してはサポートプロダクトの変更はなく、それぞれサポート対象のバージョンが上がってきています。とくにOracle 10gを正式にサポートしたことはエンタープライズ系の方々にはよいニュースなのではないでしょうか。

    新機能

     では次にVer 5.3で具体的になにが変わったのかを紹介します。主な変更点をまとめると次のようになっています。

    ・Xcode 2.1にWebObjectsの開発環境が組み込み
    ・XcodeのEO Model design toolでモデルの作成が可能に
    ・WebObjects BuilderがバージョンアップしHTML/XHTMLのサポートを強化
    ・Java Collection Classのサポート
    ・Webサービスのアップデート

     フレームワークには大きな変更はなく、今回のバージョンアップでは主に開発ツールの変更がおこなわれています。IDE環境はすでにProject BuilderからXcodeへの移行がおこなわれていましたが、ようやくEOModelerやWebObjects Builderも新しい環境へと移行がおこなわれるようになりました。
     これまではWindows版もサポートしていたせいか、開発ツールの進化がすっかり停滞していましたが、今後は開発プラットフォームがMac OS Xのみに限定されるでしょうから、よりよい開発ツールへの対応を期待したいところです。
     EOModelerについてはCore Data用に開発されたModel design toolへと移行していくようですが、WebObjects 5.3にはまだEOModelerも含まれており、完全に移行するにはまだ時間がかかるようです。
     また一番大きな変更はWebObjectsの開発環境がXcodeに統合されたことですが、これにより今後より多くのデベロッパーがWebObjectsを利用できるようになるでしょう。

    Intel

     最後にIntelへの移行がWebObjectsに及ぼす影響ですが、WebObjectsはJavaで実装されていますので、Intel版Macに搭載されるJava VM上で基本的にはなんの変更もなく動作するということになります。Universal Binaryへの対応についてはすでにドキュメントが公開されていますので、詳しくはこちらを参照してください。Javaに関する注意事項なども記述されています。

    ・Universal binary Programming Guidelines
    http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/index.html

     またWebObjectsでJavaで実装されていないものとしては、起動用のスクリプトと、Webサーバのアダプターがありますが、スクリプトに関してはIntel上でも動作するはずですし、Webサーバのアダプターに関してはソースコードも公開されていますので、さほど大きな影響はないものと思われます。
     ただし、Intelへの移行時には、使用しているプログラムがPower PC用なのかIntel用なのか、あるいはUniversal Binaryなのかを注意する必要があるでしょう。
     昨年のWWDCではWebObjectsに関する新しいアナウンスはなにもなかっただけに、今年のWWDCでの新バージョンの登場は嬉しいニュースでしたが、その性能については今後しっかりと評価していきたいと思います。

    MOSA会員専用記事

    小池邦人の WWDC2005参加レポート(2005/5/20)

    3年連続でサンフランシスコ・モスコンセンターで開催されたWWDC2005(World Wide Developers Conference)でしたが、今年は珍しく1日だけ雨が降りました。WWDCへは何度となく参加している筆者ですが、会場へ向かう道中で傘をさした記憶はほとんどありません。IBMの「涙雨」だったのでしょうか(笑)。直前にTiger(Mac OS X 10.4)の販売が開始されたこともあり、今年のWWDCは、そのフィードバックとハンズオン(Apple社の技術者と共に最新技術を実装をする実習)が中心になると予想されていました。よく言えば「堅実で平穏」、悪く言えば「目玉無しで新鮮みに欠ける」WWDCになると考えていたのは筆者だけではないでしょう。そんな雰囲気の中でも、Jobsの基調講演においてPowerBook G5や4CPU PowerMacの発表があるかもしれないと、密かに期待していた参加者も多かったと思います。筆者もそのうちの一人でした。

    ところが、ふたを開けてみてビックリ仰天!Jobsの基調講演において、MacintoshのCPUをPowerPCからIntel版へ切り替えるというビッグニュースが飛び出しました。QuickDrawとは今回でサヨナラだと覚悟を決めていたのですが、先んじてPowerPCとサヨナラするとは思いもよりませんでした(笑)。確かに、事前にメディアからそうした噂が流れていたため、WWDC開催前から参加者の間ではザワザワとした雰囲気が漂っていました。しかし、その時点ではみんな半信半疑、どちらかと言うと「それはないだろ?」という声の方が多数を占めていました。兎にも角にも、この発表により、平和で平穏な5日間となるはずだったWWDC2005が一気にヒートアップしました。ただし、CPU切換という大事件に対しても、Intelマシン上のMac OS Xで自社アプリをデモするなど、Apple社側が周到な準備を整えていたため、デベロッパー側からは大きな反発はありませんでした。どちらかというとCPU切換に対する賞賛の声の方が大きかったかもしれません。まあ、基調講演で私の隣に座っていた青年は「オー、ジーザース」とうなっていましたが(笑)。

    CPU切換のロードマップですが、2006年の6月までに最初のIntel版CPU搭載のMacintoshを発表し、2007年度中にはすべてのMacintoshのCPUをIntel 版へと切り替えるという内容です。移行準備のためにApple社側がデベロッパーに対して用意したツールは、x86コンパイラを実装したXcode 2.1とUniversal Binaryフォーマットの定義、Mac OS X起動可能なIntel版CPUを搭載したマシン「Developer Transition Kit」、そしてPowerPCコードをx86コードへ変換するバイナリトランスレーション技術の「Rosetta」です。Xcode 2.1のCD-ROMはWWDC会場ですぐさま配布され、同時にADCサイトからもダウンロードが可能となりました。$999の値が付いたDeveloper Transition Kitの方も、すぐさまADC Select&Premierメンバーに対して販売が開始されました。初日は販売サイトが恐ろしく混雑していて接続出来ませんでしたが、数日後、筆者も無事購入することができました。そして、直接の移行用ツールではないですが、Rosettaの存在は、Intel版CPUへの対応が遅れているアプリケーションでも問題なく使えるという安心感をユーザへ提供します。

    Developer Transition Kitで提供されるだろうマシンは、WWDC会場のラボにも複数台設置され、誰でも自由にチェックできるように配慮されていました。さっそく多数のデベロッパーが自社製品のソースコードをラボへ持ちこみ、Rosettaでの動作確認やXcode 2.1によるx86コードへの変換を試みていたようです。現在では、周辺機器ドライバなどのコアな箇所でも昔のようにアセンブラコードに依存しているようなことはありませんので、CPUを680xxからPowerPCへ移行した時よりも、全体の作業量は少なくて済むはずです。しかし、今回も大きな問題が2つ存在します。一つは「エンディアン変換」、もう一つは「AltiVecコードの排除と修正」です。詳しい技術的解説は省略しますが、エンディアン変換の方は時間をかけて力ずくで行えば解決できる問題です。しかし、AltiVecコードの修正の方は幾つか難しい問題を含んでいます。なぜなら、AltiVecコードを通常コードへと切り替えるのは割と簡単なのですが、メイン処理の高速化にAltiVecが貢献しているようなアプリケーションでは、その部分をIntel版CPUのSSEコードなどへ書き換えないと弊害が発生すると考えられます。これは、AltiVecコードを大量に利用しているデベロッパにとっては実に頭の痛い問題です。

    本当であれば、「エンディアン変換」や「AltiVecコード」の問題は、CPU側でハード的に解決してくれると嬉しいのですが…。まあ、Intel版CPUにAltiVecユニットが搭載される可能性はないでしょうが(笑)、エンディアン変換機能ぐらいは「友好の証」として付けて欲しいところです。この機能、実際にG4には搭載されており、Virtual PCの処理速度向上に貢献していると聞いています。もし可能になれば、Rosettaの処理スピード向上や、コード移行作業の軽減に大きく貢献するはずです。それから、Intel版CPUへの切り替え発表により、私が期待していた64bit化 CarbonとCocoa Frameworkの発表もリセットされてしまいました(涙)。ところで、Intelにも64bitアーキテクチャのCPUが存在しています。そこで、64bit化に関するいくつかのセッションに参加し、その件について注目していたのですが、Intel版CPUのIA-64を含めた64bitアーキテクチャに関連する発表は何一つありませんでした。つまり対応については「未定」ということのようです。64bit化に関する詳細については、来年のWWDC2006を待つしかないようです。

    多分、Jobsの最終目標は、x86用Mac OS X(ハードも?)を他社にもライセンスし、そのシェアをWindowsに近づけることだと思います(きっと)。以前に失敗したMacintoshクローンビジネスを教訓に、OSライセンスを実行しても会社の収益に問題が生じないタイミングを見計らっているのは間違いないでしょう。そのタイミングの第一歩として、Tigerの評判が良くiPodの売り上げが好調なこの時期にIntel版CPUのMacintoshを市場に投入しようとするのは、大きな壁をひとつ乗り越えるためには絶妙のタイミングなのかもしれません。今回の発表により、PowerPC搭載のMacintoshの買い控えが心配されますが、市場には大量のPowerPCマシンが存在しますので、かなりの期間(ほぼ半永久的)に、デベロッパーはPowerPCとx86コードを搭載したUniversal Binaryフォーマットのアプリケーションを供給します。よって、CPUが異なるMacintoshというだけで、本質的には大きな問題は存在しないはずです。新しいマシンを購入しようと考えている方は(Classic環境を継続利用したい方は特に..)、逆に今が買い時かもしれません。

    今年は3800人という最大の参加者を集めたWWDCとなりました。おかげで、アップルキャンパス内で開催されたBeer Bashパーティも人、人、人! 食べ物もビールもあっという間に無くなり、カンパニーストアは終了間際になっても長蛇の列です(涙)。こんな調子だと、次期Mac OS Xバージョン「Leopard」等の大ネタが出るだろうWWDC2006はどうなってしまうのでしょうか? 楽しみと心配が交錯する今日この頃です(笑)。

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

     本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。

     前回は、先頃リリースされた日本語版Squeak「SqueakNihongo7」において、日本語文字列の扱いがどうなっているのかを見てみました。結論として、内部的に新しいクラスであるMultiStringが設けられてはいるものの、オブジェクトの持つ“多態性”のおかげで、我々ユーザーはその違いを意識することなく、従来の公式版でのアルファベットの文字列となんら変わらない扱いが可能、ということでした。オブジェクト指向万歳!ですね。

     文字列の他に、日本語の扱いで無視できないのがファイルの入出力です。これらについても文字列とほぼ同様のこと(つまり、日本語であることを意識せずに扱える…)が言えそうですが、ただ文字コードというものが絡んでくるため、じゃっかん複雑なことになりそうです。Squeakシステムでは、ファイルの入出力はストリーム(Stream)というクラスに属するオブジェクトを介して行なわれます。とりあえず今回はこの「ストリーム」というものに親しんでおきましょう。

     ストリームというのは“絶え間のない(データの)流れ”を意味します。コレクションはランダムアクセスが可能でしたが、ストリームはアクセスできる場所(ポジション)が決まっていて、そのポジションを必要に応じて前後に移動しながら、そこに位置するデータを読み書きします。磁気テープと磁気ヘッドの関係のようなイメージですね。なお、ファイルなどの外部情報へのアクセスを目的としないストリーム(内部ストリーム)は、コレクションをデータの置き場にして作られます。

     まず、ストリームを束縛するグローバル変数「MYSTREAM」を定義してください。これを使って、ストリームの振る舞いを調べたいと思います。

    Smalltalk at: #MYSTREAM put: nil

     まず読み出し専用のストリーム(a ReadStream)を作って、今、定義したグローバル変数に束縛します。基になるコレクションを指定するために「on: aCollection」というメッセージをストリームのクラスReadStreamに送るか、あるいは、基にしたいコレクションに「readStream」というメッセージを送ります。

    MYSTREAM _ ReadStream on: #(‘this’ #is $a 10)
    ” もしくは ”
    MYSTREAM _ #(‘this’ #is $a 10) readStream

     データ読み出しの場所(ポジション、position)は初期値では 0 になっています。

    MYSTREAM position ” => 0 ”

     「next」というメッセージを送るとデータを読み出し、positionをひとつ次へ移動します。メッセージ「next: anInteger」なら、指定した数だけデータを読みながらポジションを移動させ、読み出したデータは配列でまとめて返します。

    MYSTREAM next       " => 'this' "
    MYSTREAM position   " => 1      "
    MYSTREAM next: 2    " => #(#is $a) "
    MYSTREAM position   " => 3      "

     メッセージ「position: anInteger」の送信で直接移動もできます。「peek」はポジションを移動させずにデータを読み出すためのメッセージです。

    MYSTREAM position: 2; peek ” => $a ”

     ポジションが最後にきたかどうかは「atEnd」を送信することで知ることができます。

    World findATranscript: nil. ” トランスクリプトを表示 ”
    MYSTREAM reset. ” ストリームをリセット ”
    [MYSTREAM atEnd] whileFalse: [Transcript cr; show: MYSTREAM next]

     ストリームが基にしているコレクションの内容を知るにはメッセージ「contents」を送ります。

    MYSTREAM contents ” => #(‘this’ #is $a 10) ”

     読み取り専用とは逆の、書き込み専用のストリーム「WriteStream」もあります。

    MYSTREAM _ WriteStream on: String new.

     書き込みに際しては「nextPut: anObject」を送信します。

    MYSTREAM nextPut: $a.
    MYSTREAM contents   " => 'a' "

     ただ、ここの例に限っては、基になっているコレクションが文字列(a String)なので、その要素は文字(a Character)でなければいけません。

    MYSTREAM nextPut: 1 ” => Error: Strings only store Characters ”

     データをまとめて流し込むこともできます。このときは「nextPutAll: aCollection」を使います。この例では、パラメータとして文字列を与えてもよいでしょう。

    MYSTREAM nextPutAll: #($b $c $d $e $f)
    ” もしくは ”
    MYSTREAM nextPutAll: ($b to: $f)
    ” もしくは ”
    MYSTREAM nextPutAll: ‘bcdef’

     読み出し専用ストリーム同様、ポジションの任意の位置への移動も可能です。

    MYSTREAM position: 2; nextPutAll: ‘CD’; contents ” => ‘abCD’ ”

     なお、書き込み専用ストリームでcontentsはポジションの位置までのデータしか示さないので、もし全データを参照したいときはsetToEndでポジションを既存の最後のデータの位置まで移動しておく必要があります。

    MYSTREAM setToEnd; contents ” => ‘abCDef’ ”

     余談ですが、書き込み専用ストリームは、長さ(要素数)固定のコレクションである文字列や配列の要素を自動生成したい場合などに重宝します。たとえば1から100までを要素に持つ配列は、次のように、ストリームを使って作ることも可能です。(もちろん1から100までなら、もっとシンプルな方法もありますが、あくまでもストリームを使った例ということで)

    | stream |
    stream _ Array new writeStream.
    (1 to: 100) do: [:each | stream nextPut: each].
    ^ stream contents
    


     この手続きを抽象化した「SequenceableCollection class >>#streamContents:」というクラスメソッドもあります。内部的には上とまったく同じことをしているのですが(「streamContents:」を選択後、browse itでソースを確認してみてください)、一時変数の宣言が不要で、要素の生成ロジック(とストリームへの追加)だけを記述すればよいので全体のスクリプトもよりすっきりとしたものにできるでしょう。

    ^ Array streamContents: [:stream |
       (1 to: 100) do: [: each | stream nextPut: each]]

     以上を踏まえて、次回はファイルストリームとそこでの日本語データの扱いについて触れます。なお、今回使用したグローバル変数MYSTREAMは、次の式をdo itすれば削除できます。

    Smalltalk removeKey: #MYSTREAM

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

    ニュース・解説

    今週の解説担当:木下 誠

    WWDCも無事終了しましたね。MOSADeNの読者からも、多くの方が参加したと思います。今回は、はじめにIntelチップ採用という大きなニュースがありました。いまから対応策を検討している方もいるでしょう。その反面、OSの大きなアップデートは2006年末か2007年まで行われないことが確認され、ソフトウェア関連ではあまり大きな発表はありませんでした。

    次の一年間は、Intelチップへの対応と、Tigerテクノロジーの熟成がテーマになりそうです。

    ———————————————————————-
    次期Macintoshで、Intelチップを採用
    ———————————————————————-

    すでに各所で報じられている通り、2006年よりMacintoshにIntelチップが採用されることになりました。

    開発者に向けては、Intel inside Macintoshを試すための、Developer Transition Kitの提供が始まっています。$999でIntel Macを手に入れることができます(要返却)。また、PowerPCとIntelの両チップに対応する、Universal Binaryを作成するためのガイドラインが公開されています。一言で言うと、Xcodeを使って、エンディアンに気をつけろ、という内容ですね。

    Developer Transition Kit
    http://developer.apple.com/transitionkit.html

    Universal Binary Programming Guidelines
    http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/

    ———————————————————————-
    Xcode 2.1が公開、フリーとなるWebObjects 5.3を含む
    ———————————————————————-

    Intelチップ採用の話に合わせて、Xcodeがアップデートし、2.1となりました。このバージョンでは、PowerPCおよびIntelチップ向けの、Universal Binaryを作ることができます。PowerPC上では、Mac OS X 10.4 (Universal)SDKを選択してコンパイルすることになります。Intelバイナリの実行には、とうぜんIntel Macが必要です。

    また、WebObjects 5.3が公開され、このバージョンからEOModelerがXcodeに統合されることになりました。これにより、Core Dataのモデリングツールを使って、EOModelの編集を行うことができるようです。さらに、XcodeにWebObjects開発環境が付属することになりました。Xcodeは無料で配布されるので、WebObjectsもフリーで手に入れることが出来るようになるようです。詳しくは、田畑さんの「WebObjects Dev Report」も参照して下さい。

    Tools – Xcode
    http://developer.apple.com/tools/xcode/index.html

    WebOjbects 5.3リリース
    http://pcweb.mycom.co.jp/news/2005/06/07/027.html

    Apple、WebObjectsをフリーアプリケーションとしてリリース
    http://www.itmedia.co.jp/enterprise/articles/0506/17/news013.html

    ———————————————————————-
    WWDCで使われたサンプルが大量に公開
    ———————————————————————-

    ADCで、WWDCのセッションで使われたサンプルが、一般に公開されていました。すべてではないですが、かなりの量が見れます。ADCのSample Code Listのうち、6月1日から6日あたりの日付で公開されているものが、それにあたります。

    WWDCのセッションはNDAのもとで行われますが、今年はTigerのすでに公になっている情報に基づくセッションが多かったためか、多くのサンプルが公開されることになったようです。

    Sample Code List
    http://developer.apple.com/samplecode/index-date.html

    ———————————————————————-
    Web Kitオープンソース化
    ———————————————————————-

    Web Kitがオープンソースプロジェクトとなり、ソースコードが公開されました。従来、そのサブフレームワークである、WebCore(KHTMLベース)とJavaScriptCore(KJSベース)だけが公開されていましたが、ほとんどのコードが公開されることになりました。一部、セキュリティに関するところは、公開されていません。CVSに直接アクセスして、ダウンロードできます。

    The WebKit Open Source Project
    http://webkit.opendarwin.org/

    ———————————————————————-
    アップルが日本語ドキュメントを公開
    ———————————————————————-

    アップルジャパンが、SpotlightおよびDashboardに関するドキュメントの日本語訳を公開していました。AJが翻訳を公開することは、重要なことだと思います。なかなかやりませんが。

    Spotlightインポータのプログラミングガイド
    http://developer.apple.com/ja/documentation/Carbon/Conceptual/MDImporters/index.html

    Spotlightの概要
    http://developer.apple.com/ja/documentation/Carbon/Conceptual/MetadataIntro/index.html

    Dashboardプログラミングガイドの紹介
    http://developer.apple.com/ja/documentation/AppleApplications/Conceptual/Dashboard_Tutorial/index.html

    ———————————————————————-
    Dashboardプログラミングの解説本が発売
    ———————————————————————-

    Dashboardプログラミングを解説した本、「Programming Dashboard」がBNN新社より発売されました。Dashboardのウィジェットを作成する手順を、ていねいに解説しています。2,940円です。

    自分の本で恐縮なんですが、私、木下が書きました。宣伝です。すいません。全国の本屋で発売中なので、よろしければ手に取ってみてください。

    BNN Books: Happy Macintosh Developing Time! Programming Dashboard
    http://www.bnn.co.jp/books/archives/2005/04/happy_macintosh_1.html

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

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

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

    2005-06-07

    目次

    • 「WebObjects Dev Report」     第9回  田畑 英和
    • 藤本裕之のプログラミング夜話 #70
    • 高橋真人の「プログラミング指南」  第68回
    • ニュース・解説               小池 邦人

    「WebObjects Dev Report」  第9回  田畑 英和

     前回に引き続きモデルファイルの作成方法について解説します。実際にモデルファイルを作成するにはWebObjectsの開発環境に含まれる「EOModeler」を用います。既存のデータベースを利用する場合は、データベースの情報をもとにモデルファイルを自動生成することもできますが、今回はデータベースの作成も新規におこなう場合の手順を解説したいと思います。

    モデルファイルの新規作成

     モデルファイルを新規に作成する前に、まずはあらかじめ対象となるデータベースを作成しておきます。モデルファイルを作成するときに接続先のデータベースを指定することになりますので(作成時に接続先を指定しないことも可能)、この場合あらかじめデータベース側の準備が必要になります。
     データベース側の準備が整えば次にEOModelerでモデルファイルを新規に作成するわけですが、現在のEOFはデータソースとしてJDBC接続によるRDB、もしくはJNDIを用いたLDAPのようなディレクトリサービスをサポートしています。新規にモデルファイルを作成する場合、まずはデータソースへの接続方法としてJDBCかJNDI(あるいは接続方法の指定なし)を選択します。
     JDBCを選択した場合、JDBCへの接続情報を指定しますが、こちらは前回紹介しましたJDBCのURLやパスワードの情報になります。あらかじめ「JobMatch」という名前のデータベースを作成していたとすると、URLは以下の形式になります。

    ・JDBCのURL(OpenBaseの場合)
    jdbc:openbase://127.0.0.1/JobMatch

     JDBCの接続情報を入力した後は、EOModelerのWizardがこれから作成するモデルファイルのパラメータを確認しますが、新規にデータベースも作成する場合は特に指定するパラメータもありませんので、JDBCの接続情報を指定しただけで新規のモデルファイルを作成することができます。
     モデルを新規に作成した直後はまだファイルとして保存されていませんのでとりあえず名前を付けてファイルを保存します。モデルファイルのファイル名は例えばデータベース名と合わせて「JobMatch.eomodeld」などとしておくのがよいでしょう

    Entityの追加

     データベース上には一般的に複数のテーブルを作成することができます。モデルファイルではオブジェクトとデータベースとのマッピング情報を定義していきますが、まずはテーブルレベルでのマッピングをおこないます。
     データベース側でのテーブルに相当するものをEOF上では”Entity”と呼んでおり、このEntityはプログラム上ではクラスに相当します。EntityのマッピングをおこなうにはEOModeler上でEntityを追加し、Entity名(Name)とデータベース名(Table)を入力します。このとき自動的に”EOGenericRecord”がクラス名として設定されますが、これはEOFが提供しているクラスであり単純なデータアクセスをおこなうだけであればこのままでもかまいません。ですが、独自のビジネスロジックを追加していく場合にはビジネスロジックを実装するクラス名を設定しておきます。ここで設定したクラス名をもとにEOModelerは自動的にクラスファイルの生成をおこないます。

    ・Entityの例
    Name = JMUser, Table = USER, Class Name = JMUser

    Attributeの追加

     Entityを追加しただけの状態でモデルファイルを保存しようとすると次のようなメッセージが表示されます。

    “Entity JMUser does not have a primary key defined”

     EOModelerはモデルファイルの保存時に自動的にモデルファイルをチェックしますが、モデルの内容に不整合があった場合にはこのようにエラーメッセージが表示されます。今回のエラーメッセージは、本来Entity上に必要なプライマリキーの設定が存在しないといった内容になります。
     Entityを追加した後は、Entity内にAttributeの追加をおこないます。データベースのテーブルには一般的に複数のカラムが存在しますが、Entityとテーブルをマッピングしたのと同様にAttributeはカラムとマッピングします。
     Entityのマッピングをおこなったさいには名前をマッピングしただけでしたが、Attributeのマッピングをおこなった場合には型情報のマッピングもおこないます。データベース上の型とプログラム上の型はそれぞれ定義が異なっていますので、プログラム上での各データの型をデータベース上の各カラムの型とマッピングします。さらに、追加したAttibuteにはプライマリキーの属性やNullを許可するかどうかの属性などを指定することができます。

     さて、今回はモデルの作成の基本的なところをご紹介しました。この記事が配信されるころにはすでにWWDCが開催されているかと思いますが、今年は基調講演でどのような発表があるのでしょうか。それではまた次回

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

     前回に引き続き、NSViewの「描かれ方」を詳しく追ってみる。その目的は、とかく混同されがち、というかそのフルマイが誤解されがちな以下のメッセージ群の関係をきっちり確認することである。

     -(void) setNeedsDisplay:(BOOL)flag;
     -(void) displayIfNeeded;
     -(void) display;
     -(void) drawRect;

     今ドキュメントを調べてみたら遂にCarbonにおいても「Unsupported」になっていたが、かつて「InvalRect()」というAPIがあった。正確には

     void InvalRect (const Rect* badRecr);

    てなもんで、これが何をするモノだったかというと、指定された矩形領域を「ココは描きなおされなければならないぞリスト」に加えていたわけである。重なり合ったウィンドウの上のヤツが動くと、下のウィンドウの今まで隠されて見えなかった部分が見えるようになる。見えるようになるからには描かねばならない。描かねばならないからって委細構わず闇雲に描いていい道理はないので(つうかたいへん非効率なので)、とりあえすはこのAPIを呼んで「ココは描きなおされなければあきまへんで」と覚えておき、次の描画タイミングでババっと一気に描くちうことをやってたわけだ。

     前回チェックボックスの描き替えについてみたように、CocoaのNSView、およびそのサブクラスにおいてこのInvalRectと同じ役割を担っているのが「setNeedsDisplay:」ということになる(正確にはよりInvalRect()に近い「setNeedsDisplayInRect:」ちうのがあるわけだが話を簡単にするためにここでは触れない)。これを呼んでおけば、現在進行中のイベント処理が終わった時点で各ウィンドウに「displayIfNeeded:」が送られ、それはまたそのサブビューたちに「displayIfNeeded:」を送り、という形で必要な描画を完了させることができる。ここまではよろしいか。

     ではココで問題である。それぢゃ「display」というメソッドは何のためにあるのでしょう? ドキュメントによればこのメソッドは「レシーバーおよびそのサブビューを可能なかぎりDisplayする」モノである。「Display」を「描画」と訳していいのかどうかは微妙なところだが言わんとすることは分かるよね? つまりこいつは「setNeedsDisplay:」によって「描き替えが必要ですよリスト」に載せられていようといまいと委細構わずそのオブジェクトを描いちゃうのである。早い話が(早くないか)上のInvalRect()の説明で「いい道理りはない」と断じたトコロの「闇雲なる描画」をするためにあるとしか言えないではないの、これ。

     試しにこういう実験をやってみた。テキトーなNSViewのサブクラスを作り、NSResponderの「keyDown:」をオーバーライドする。キーはなんでもいいが、例えば右向き矢印だったら

     [self setNeedsDisplay:YES];

    左だったら

     [self display];

    を呼ぶ。おのおのの前後に「いまこいつを呼んだぜ」「戻ってきたぜ」てなプリント文を配し、このオブジェクトの drawRect: にも「オレが呼ばれたぜ」というプリント文をかませる。右矢印を押すと、コンソールにプリントされる順番は「いまsetNeedsDisplayを呼んだ」「setNeedsDisplayから戻ってきた」「drawRectが呼ばれた」となるが、これが左だと「displayを呼んだ」「drawRectが呼ばれた」「displayから戻ってきた」となる。ね、確かにdisplay はイラチというか速戦即決というか、その場でdrawRect: を呼んぢゃうのである。が、こんなのをホイホイ呼んでたら描画のオーバーヘッドになること請け合いだ(これが請け合いでないならsetNeedsDisplay: なんて仕組みを作る必要はないんだから)。それではこの display というのはナンのためにありどんな時に使うのが正しいのでしょうか、というのが次回のお話しになる。ほんでは。
    (2005_05_31)

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

    UNIXとしてのMac OS X

    〜Perlについて(14)〜

     こんにちは、高橋真人です。
     では早速まいりましょう。miをダウンロードしインストールしたら、新規ドキュメントを開いて適当に文字を入力してください。(具体的に何を入力するかについては、このあとの解説を読んで実験するのにふさわしい文字列を適宜選んでください)
     次に「検索」メニューから「検索・置換」を選んで検索ダイアログを開きます。ダイアログの中央やや下寄りに並んでいるチェックボックスで、「正規表現検索」と「巡回」にチェックを入れます。それ以外の項目はそのままです。

     それでは、最初に「検索文字列:」フィールドに「ABC」(カギカッコは付けない。以下同様)と入力して、リターン(検索ダイアログがアクティブな場合)、もしくはコマンド+G(ドキュメントウインドウがアクティブな場合)を押してみてください。
     エディターウインドウに入力された文字列の中にABCの文字並びがあれば、反転され、検索されたことが分かります。(ABCがなければ何も起こりません)さらに連続してコマンド+Gを押すと、条件に合致する文字並びがある限り、順に反転されるのが分かります。

     おめでとうございます。
     これであなたは初めての正規表現による検索に成功しました。

     なぁーんて使い古されたプログラミング入門書のセリフみたいなことを申しましたが(笑)、申した中身は嘘じゃあありません。
     「ただ単に文字列を検索しただけなのに」と訝しげな方もおいででしょうが、実は「ただの文字列」も、れっきとした正規表現なのです。ABCという文字並びは、正規表現として解釈すると、「最初に半角大文字の(以下同様)A、続いてB、最後にCが連続して現れる『パターン』である」ということになります。
     この「パターン」という言葉、昨今ではオブジェクト指向において使われることが多く、「分かるようで分からない言葉」の一つかもしれませんが、正規表現においては一般に使われる言葉です。正規表現による検索のことを「パターンマッチング」と呼ぶこともあるので憶えておきましょう。(「検索」という言葉を「文字列照合」という少し硬めの表現に言い替えてみるとイメージが結び付きやすいのでは?)

     さて、もちろん単純な文字列だけならば、わざわざ正規表現を使って検索するまでもありませんから、いくつかの例を見ながら正規表現によってどのような検索の幅が出てくるのかを見ていきましょう。

     まずはごく簡単な例として、ABCに対して「Aが小文字でもよい」という条件を付けてみます。つまり、検索対象は「A(大文字か小文字)、続いてB、C」となります。
     正規表現が「文字の並びを表す表現」であるならば、「Aの大文字か小文字」を表す表現はどうなるでしょうか。

    [aA]

     これが、正規表現における「aもしくはA」です。この角カッコ(ブラケット)で囲ったものを正規表現では「文字クラス」と呼び、中に羅列されている文字のうちのどれか1文字に該当する文字とマッチします。
     文字クラスにはいくつかの注意点があります。
     まず、繰り返しになりますが、ブラケットの中に文字がいくつ並んでいても、これ全体で「1文字を表している」ということです。あくまでヒットするのは1文字だけです。初心者のうちは混乱する人が多いので注意しましょう。

     また、文字クラス表現の中において特殊な役割を持つ文字がいくつか存在します。まずは^です。^という記号は、通常の正規表現においては文字列または行の先頭を意味する記号(いずれ説明します)ですが、文字クラスの中で使われると全く違う役割を持ち、「除外」という意味になります。たとえば、

    [^aA]

    という表現は、「(すべての文字の中で)aとAを除外したものすべて」を意味します。もちろんこの表現は1つの文字とマッチしますが、検索で用いられた場合、最初に見つかった文字がaでもAでもなければ、その文字にヒットし、逆に最初の文字がaかAだった場合にはヒットせずに、順番に先を見ていって、aでもAでもない文字が見つかった時点でヒットするのです。

     ところで、^の文字が文字クラスの先頭、つまり開きのブラケットの直後に来ない場合には、^は特殊性を失いただの^という文字を意味します。従って検索したい対象が「aかAか^」のいずれか1文字の場合、^は必ず2番目以降に記述しなければなりません。

    [a^A]

    [aA^]

    という具合です。
     正規表現の正式な位置付けでは、先頭に^のある文字クラスについては「否定文字クラス」という別物の扱いのようです。

     文字クラスの中で特殊な意味を持つ記号には、あと-があります。これは範囲を表す役割を持ちます。つまり、

    [ABCDEFGHIJKLMNOPQRSTUVWXYZ]

    と書く代わりに、

    [A-Z]

    と書いても同様な意味になりますし、また、

    [ABCXYZ]

    という同等の表現として、

    [A-CX-Z]

    と書くこともできるわけです。(カンマとかを入れないように注意)

     さて、文字クラスについて少し深く見てみましたが、話を戻しましょう。「ABC、ただしAは小文字でも可」を表す正規表現は、

    [aA]BC

    となります。もちろん、[Aa]BCと書いてもOKです。

    ニュース・解説

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

    Carbon ドキュメント & サンプル & SDK ナビゲーション(2005/6/3)

    【開発環境】

    いよいよWWDC2005が開幕します。今年は、直前にTiger(Mac OS X 10.4)が販売開始されたことで、そのフィードバックとハンズオン(Apple社の技術者と共にソフトやハードに最新技術を実装をする実習みたいなもの)が中心になると予想されています。また、事前に発表されているカンファレンスセッションの内容や催し案内を眺めても、そうした雰囲気になるのは間違いなさそうです。ある意味、ちょっと新味に欠けるWWDCになるかもしれません。まさか、Mac OS Xの次期コードネーム(みんな興味あり)や、その内容の一部が紹介されるなんてことはないと思いますが(笑)、ハードだけでなく、開発環境やソフト方面でも何か大ネタが用意されているのを期待したいところです。

    そうした中、ほんのちょっとだけ私が期待しているのが、64bit化されたCarbonとCocoa Frameworkの発表です。Tigerでは64bitアプリケーションの開発と起動が可能になりました。しかし、それはあくまでもグラフィカルユーザインターフェースを持たない(CarbonもCocoaも使わない)アプリケーションのみに限定されます。確かに、32bitアドレッシングではアクセスできないような大容量データを、64bit化した別プロセスにより管理するといった作業は可能です。しかし、そうした大量データをユーザインターフェースを用いてリアタイム処理したい場合には、その制御や描画に関わるFrameworkが64bit化されていなければ不可能となります。私が関わっているVoxelデータの処理アプリケーションなどが、そうした状況に置かれている典型的な代物です。ところで、64bit Carbonの登場時には間違いなくQuickDrawとはサヨナラかもしれません…。その時が近づくのが嬉しいやら寂しいやら(笑)。

    Mac OS X 10.4における64bitアプリケーションの動作環境や開発については、以下のドキュメントを参照してみてください。

    「64-Bit Transition Guide」

    http://developer.apple.com/documentation/Darwin/Conceptual/64bitPorting/index.html

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

    前回から6月3日の期間中、AppleのDocumentationサイトには新規ドキュメントがひとつも登録されませんでした。年に数回あるかないかの現象ですが、WWDC直前のこの時期はいつものことです。今頃、Apple社の技術者達はKeynoteによるプレゼン作りで大忙しでしょう(笑)。

    http://developer.apple.com/appleapplications/ardsql.html

    前回から6月3日の期間中、新規のテクニカルノートはひとつも登録されませんでしたが、新規テクニカルQ&Aの方は2つ登録されました。QA1416の方については、前号の木下さんの解説も参考にしてください。

    QA1242「Developing for VFS」
    QA1416「Specifiying if the CPU or the GPU should be used for rendering」

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

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

    前回から6月3日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードがひとつも登録されませんでした。

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

    【デベロップメント SDK】

    前回から6月3日の期間中、Apple社のSDKサイトには新しいSDKがひとつも登録されませんでした。

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

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

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