Macintosh Developer Online (MDOnline)


2001年8月10日発行号 - PHPのプログラム自動生成



昨日はニュースが少ないと言っていたら、なんかKnowledge Baseにいっぱいあって、それどころじゃないですね。で、Knowledge Baseは「KB」とすると言っていましたけど、すみません「KBase」にします。ころころ変わって申し訳ないです。もうこれで変えないと思います。
会社のサーバはほとんどがミニタワーなんですが、場所がもったいなからっていうことで、1Uなどのラックタイプにしようなどと画策しています。ま、しかし、動いているものをそう簡単には移せないものの、いったいどれくらいの値段なんだと思って調べてみました。一番安いところで、79800円というラックサーバがありますね。Dellとかだと15万円前後しますけど、以前に比べてだいぶんと安くなりました。ただ、ちょっとある用途を考えて、3ポートで1Uってないのかを調べたらあることはあるのですね。マザーボードに2ポートあるやつがあって、それのPCIにカードを追加すればいいんですが、そのマザーボードって、ポートもツインならCPUもツインなんですね〜。だから、21万円とけっこう高くなるものの、Pentium III 933MHzが2つというゴージャスなスペックになります。ただ、さがしてやっぱりなかったのはPCIカードのネットワークアダプタで10BASE-Tの端子が2つあるってタイプです。21万円と言えば組み立てPCの世界では高級品ですけど、Macintoshだったら廉価タイプかもしれませんね(笑)。また、Macintoshにはラックタイプがたとえ高価でもないというのはやっぱり今後は競争上厳しくなるような気がします。Mac OS X Serverなんて、やっぱりラックマウントサーバで運用するといった用途を目指しているのじゃないかとも思ってしまいます。Power Mac G4 ServerはQuickSilverじゃなくってラックマウントに1票ってところでしょうか。
(新居雅行 msyk@mdonline.jp


お知らせ》MDOnlineからお届けする記事タイトルの表記について

2001年8月8日に配信した『Knowlegde Baseの特定の日の文書を検索する方法が判明、KBの記事を今後も継続』という記事で、Knowledge Baseの記事タイトルは「KB」と記号をつけると説明しましたが、読者の方からの御指摘によりKBaseの方が適切ではないかとの御意見をいただきましたので、今後は「KBase》」とタイトルに記載することにします。たびたびの変更をお詫びいたします。

カテゴリ:


WebObjects 5とOpenBaseを使ってみる/6.Webページにテーブルのレコードを一覧(1)

前回に続いて、WebObjects Builderを使ってMainページの編集を行うことにしよう。Mainぺージは、Project BuilderのWebObjects Applicationのひな形で最初から用意されているページだった。Main.woという名前のアクア色のアイコンをダブルクリックすると、WebObjects Builderで開いて編集ができるようになる。前回はそこに、データベース接続の足掛かりになる2つの変数を定義した。それそれ、Display Groupとテーブルを元に作ったキーである。

このWebObjects Builderは、WebObjectsによって生成されるWebページを設計するツールである。画面をざっと眺めて分かるようにツールバーにボタンがあるので、基本的にはこれらのボタンを使ってページの編集領域にコンポーネントを並べていくのである。いくつかのボタンは、通常のHTMLのタグに対応する。たとえば、「B」ボタンは、選択範囲をBタグで囲むといった具合だ。ツールバーの右下に、濃いブルーのボタンが並んでいる。以下の図では、「Add WOString」というチップヒントが出ているあたりのボタンだ。これらはWebObjectsだけが理解できる特別なタグをページに埋め込む。タグと言うよりも、一般的にはWebObjects専用のコンポーネントを組み込むのである。ボタンをクリックすると、挿入ポイントにコンポーネントは配置される。以下の図は、WOStringというコンポーネントを配置したところである。

◇WebObjects BuilderにあるWebObjectsコンポーネント
 

このWOStringは文字とおり文字列を表示するためのコンポーネントだ。適切な設定を行うと、このページを生成した時に、WOStringは、データベースの特定フィールドの値に置き換わる。つまり、データベースの中身に置き換わるのである。WebObjectsコンポーネントは基本的にこうしたデータベースの中身を表示するといった用途に使うことができる。もちろん、汎用的ないろいろな機能はあるが、まずはデータベースの内容を表示するためのコンポーネント(実体はタグと諸設定が組み合わされる)と考えておけばよいだろう。(以後の作業のために、WOStringを削除しておいてもらいたい。)

ここでいきなりだが、テーブルの内容を一覧表示してみたい。そうした表示は、1レコード分の表示処理を繰り返すということで実現される。レコードの数は場合によって異なるので、そうした手配をするというのは特に異義はないと思う。問題はどうすればいいかだが、「存在するレコードの数だけ繰り返す」という機能をWebページに埋め込むWebObjectsコンポーネントが存在する。WORepetitionと呼ばれるコンポーネントでもちろんツールバーから配置可能だ。以下の図では、マウスポインタのあるツールがWORepetitionである。WOStringの2つ右のものだ。配置するとページにはちょっと複雑そうなコンポーネントが並ぶが、これらが一連のWORepetitionコンポーネントである。

◇WORepetitionをページに配置した
 

WORepetitionは繰り返しを発生するコンポーネントだが、「どのデータの繰り返しなのか」ということをコンポーネントに教えてやらないといけない。つまり、テーブルのデータを繰り返しコンポーネントに引き渡すような定義が必要である。そのために、次のように設定を行う。
まず、下側の領域でDisplay GroupのpersonaladdressDiplayGroupを選択する。右の列にあるdisplayedObjectsをクリックする。このDisplayedObjectsは、テーブルの中身(データベースから取り出した内容)全体を示すオブジェクトと考えればよい。このDisplayedObjectsからドラッグを始めて、以下の図のように、WORepetitionの前の方にある白い四角形のボックスにドラッグを行う。線は自動的に引かれる。

◇Display GroupのDiplayedObjectsとWORepetionのボックスをむすぶ
 

白いボックスは、ドラッグ後はドラッグしてきた項目の名前が(長々とだけど)表示されているのがわかる。言いかえれば、何が設定されているのかが分かるというわけだ。
次に、以下の図のようにすでに作成しているAddressKeyと、WOReptitionの2つ目の白いボックスをドラッグして結ぶ。2つ目のボックスは、WORepetionで繰り返し表示されるレコードの、現在のレコードを管理するための項目である。ここで作ったAddressKeyはいわば1レコードを代表するような変数であるため、イメージ的にはこのオブジェクトに1レコードずつ保持しながら繰り返し並べるようなことを考えれば良いだろう。

◇テーブルのキーとWORepetitionを結ぶ
 

続いて、WORepetitionの中に、フィールドのテキストを表示するためのWOStringコンポーネントを配置する。WORepetitionは最初からRepetitionという文字列が見えているが、この文字列の最後に文字挿入ポインタを置き、そしてdeleteキーで文字を消して、WORepetitionの中に挿入ポイントがある状態で、WebObjects BuilderのWOStringのツールバーボタンをクリックする。そうして、WOStringを配置する。もちろん、操作手順はどうやってもいいのだが、実はWebObjects Builderのエディタはちょっとコツがいると言えばいいだろうか。ワープロなどのように、スムーズに編集が行かないこともあるので、挿入ポイントや選択されているものを注意深く確認をしながら作業を行ってほしい。
そして、配置したWOStringはnameフィールドのデータを表示した。ここでは、下側の領域でAddressKeyを選択すると、中央にテーブルのフィールド一覧が出てくる。そこで、その中のnameから、WOStringの白いボックスにドラッグ&ドロップする。その後は、ボックスに「AddressKey.name」と表示されるはずだ。

◇WOStringを配置しnameフィールドと結び付けた
 

同様にして、WOStringを合計5つ配置し、5つのフィールドそれぞれをドラッグ&ドロップで割り当てた。ちなみに、1行目にnameを配置し、次のtelephoneフィールドの前後には、全角文字で()が入っている。さらに(の前には全角のスペースが入っている。とりあえず、全角文字を入れるとどうなるかをチェックしよう。繰り返しの1行目と1行目は<BR>タグによる改行だが、これは、shift+returnで入力できる。
さらに、5つのフィールドを並べた後は、水平線(つまり、<HR>タグ)が埋め込まれている。ツールバー上段の右から6つ目のボタンをクリックすると配置できる。

◇WORepetition内に各フィールドを表示するWOStringを配置した
 

ここまでの設定を行い、Command+Sキーで保存をしておこう。なお、保存は忘れても後から保存をしますかとたずねてくるので安心だが、基本は編集結果は自分で保存をするということである。
Project Builderに切り替えて、ビルドして実行する。ボタンをクリックしてもいいが、ビルドと実行を両方行うCommand+Rがいちばん手軽だろう。

◇ビルドして実行する
 

実行すると、Internet Explorerが起動し、最初にメッセ−ジを表示した後、設定に間違いがなけらえば、次のように、テーブルの内容を一覧されるページが表示されるはずである。今回はいい加減なデータを入れたので、ちょっと見づらいが、OpenBaseManagerで適当に入力したレコードのデータがそのまま見えているのを確認してもらいたい。2レコードあるので2回繰り替えされているが、WOStringがフィールドのデータに置き換わってページが表示されているあたりが大きなポイントとなるわけだ。ところで、画面に?マークが表示されているが、この部分は全角の空白やカッコなどである。とりあえず日本語文字列は出て来ないが、それはさておいて、とにかくテーブルの内容をWebブラウザで参照できたのである。

◇Webページにレコードのデータが一覧された
 

カテゴリ:データベース, WebObjects


WebObjects 5とOpenBaseを使ってみる/6.Webページにテーブルのレコードを一覧(2)

文字化けしているのはあまり気持ちのいいものではないので、ここで日本語がきちんと表示されるようにしておこう。WebObjectsでは、Webクライアントからのリクエストを受け取り、そして、処理を行ってページを生成し、それをクライアントに戻すという一連の動作で動いている。そうした動作の細かい部分はもちろんプログラムが動いているのだが、その処理にプログラマが割り込んで自由に処理を組み立てることができると考えれば良い。ページごとにそうしたカスタマイズをプログラムでできると同時に、アプリケーション全体に渡って共通のカスタマイズをすることができるのである。
具体的には、Project BuilderでClassesグループにあるApplication.javaというソースを変更する。左側でソース名をクリックすると、右側にソースが出てくる。以下の図の、選択した部分を加える。なお、このプログラムはどのアプリケーションでもほぼ一定だから、テキストでも記しておこう。コピー&ペースト等で利用できるだろう。

◇Application.javaにプログラムを加える
 


public void takeValuesFromRequest(WORequest aRequest, WOContext aContext) {
aRequest.setDefaultFormValueEncoding("x-euc-jp");
aRequest.setFormValueEncodingDetectionEnabled(true);
super.takeValuesFromRequest(aRequest, aContext);
}

public void appendToResponse(WOResponse aResponse, WOContext aContext) {
aResponse.setContentEncoding("x-euc-jp");
super.appendToResponse(aResponse, aContext);
}


このプログラムのうち、appendToResponseというメソッドが、WebObjectsからWebブラウザへの返答、つまりここではデータベースから取り出した結果を含むHTTPの通信に、エンコードの指定を含める。setContentEncodingは、Javaでのエンコードを指定する文字列を記述するが、ここではEUCとして、この文字列にした。データベースでの記録文字コードととりあえずいっしょにしておく。エンコードを指定する文字列は同じエンコードでもいくつもあるので、もちろん、ニーズに応じたエンコードを示す記号を指定することは言うまでもない。(Javaの国際化については、アスキーから出版されている書籍「Javaプログラミング・ノート 国際化と日本語処理」風間一洋著を御覧になることをお勧めする。)オブジェクトの定義が敬称されたものであるため、デフォルトの動作を行うために、親オブジェクトの同一名のメソッドを呼び出している。
そして、再度アプリケーションを実行してみると、Webブラウザでは?は見えず、半角の()やスペースがきちんと表示されている。

◇日本語文字列がきちんと表示されてる
 

なお、追加するプログラムのうち、takeValuesFromRequestは、Webブラウザからのリクエストに文字コードについての情報を加えるものである。いずれにしても、Application.javaにこれらのプログラムを加えるというのが、WebObjectsでの日本語対応の基本になっている。

カテゴリ:


ソースコードの自動生成も含む、PHP/MySQL向けのプログラム開発ツール

See Jane Codeは、PHP向けのソースを自動生成するツール「JaneBUILDER 1.0」をリリースした。UNIX系OSで広く使われているサーバサイドスクリプト処理システムのPHPと、オープンソースのデータベースMySQLを使ったサーバにおいて、一覧や更新などの一定の作業を行うソースコードを自動的に生成することができる。Mac OS XおよびMac OS 9での利用が可能だ。価格は$49である。PHPとMySQLを利用したアプリケーションを作る場合には、支援ツールとして検討する価値はあるだろう。

関連リンク:See Jane Code
カテゴリ:開発ツール, データベース


日本語版のAuthoring Support 1.1.2のアップデータが公開

Mac OS 9で、iTunesやDisc Burnerを使って、CD-RWドライブでのディスクの書き込みを可能にする機能拡張ソフトのAuthoring SupportのVer.1.1.2の日本語版アップデータが公開された。すでに配付されているVer.1.1をインストールした状態で、Ver.1.1.2にアップデートすることができる。新たに、TeacあるいはPlextorのドライブを使ったQue! Fire 16x10x40x、Teacのドライブを使ったVST 8x Bus Powered FireWire CD-RW、そしてTeacのドライブを使ったLogitec 12x10x32 LCW-P1210BFが対応ドライブとして加わった。Appleシステムプロフィールも更新される。(なお、執筆時点では、以下のページのDownloadリンクからはTech Info Libraryへのリンクとなっていて、そちらには英語版のソフトウエアのリンクしか存在していなかった。つまり、実際にダウンロードはできない状態である。)

関連リンク:Authoring Support 1.1.2 Update
カテゴリ:OS関連ソフトウエア, メディア制作


KBase》Mac OS Xではシステム関連のファイルのアクセス権は変更しないようにする

Mac OS XおよびMac OS X Serverでは、システムのコンポーネントのアクセス権を変更した場合、最悪ではシステムが起動しなくなるので注意が必要であることがKnowledge Baseに掲載されている。これは、ゲストでアクセスした時にソフトウエアを動作させるためなどでアクセス権を変更した場合に起こりうる。ディスク全体を共有してアクセス権を変更するようなことをしないようにするなどの配慮が必要になる。

関連リンク:Mac OS X: Changing Privileges for System Software Components May Prevent Proper Startup
カテゴリ:Knowledge Base(旧TIL), Mac OS X Server, Mac OS X


TIL》WebObjects 5のアプリケーションで日本語文字列を利用できるようにする方法

WebObjects 5で作成するアプリケーションで、日本語を扱う方法がTech Info Libraryに掲載された。HTTPのリクエストとレスポンスに応答するメソッドに、文字コードを指定するメソッドを書き加えるのであるが、プログラムとともに紹介している。(なお、このプログラムの追加については、MDOnlineでの『WebObjects 5とOpenBaseを使ってみる』の一連の連載で詳しくお届けする予定だ)

関連リンク:WebObjects 5: WebObjects 5.0 において、Webアプリケーション中で日本語を扱う方法
カテゴリ:Tech Info Library-J, WebObjects


TIL》WebObjects 5で各種のデータベースに接続するときの設定のポイント

Tech Info Libraryに、WebObjects 5から、OpenBase、Oralce、Sybaseへ接続する場合の設定方法が紹介されている。EOModelerで接続の設定を行う時に、URLなどをどのように指定するのかということが簡単に紹介されている。

関連リンク:WebObjects 5: WebObjects 5.0 から各種データベースへの接続
カテゴリ:Tech Info Library-J, WebObjects


TIL》WebObjects 5はOracle 8iとの接続ではJDBC-OCIドライバを使う

Oracle 8iにWebObjects 5から接続する場合、Oracleから配付されていJDBC-ThinドライバはしようできないことがTech Info Libraryに掲載されている。Oracle 8iとの接続ではJDBC-OCIドライバを利用する必要がある。EOModelerでのパラメータ設定のポイントも記載されている。

関連リンク:WebObjects 5: Windows 版 WebObjects 5.0 からの Oracle8i への接続について
カテゴリ:Tech Info Library-J, WebObjects


KBase》DirectActionでのEOEditingContext利用でエラーが出る場合の対処

WebObjects 5で、DirectActionのメソッドにおいてEOEditingContextを利用しようとした場合にエラーが出る問題について、Knowledge Baseで掲載された。これは処理前にロックをして、処理後にロックを解除することで回避できる。簡単なサンプルプログラムが掲載されている。

関連リンク:WebObjects: "EOEditingContext: Access With No Lock" in a DirectAction Method Errors
カテゴリ:Knowledge Base(旧TIL), WebObjects


KBase》WebObjects 4.5.xでLDAPアダプタを使う時のトラブル対策

WebObjects 4.5/4.5.1において、LDAPアダプタを使った場合、2度目から反応しなくなる問題について、Knowledge Baseに掲載されている。LDAPサーバが30分以上経過すると接続を切るのに対して、アダプタは接続をしたままにするためである。そこで、アダプタの接続を切るようにプログラムを追加することで対処ができる。追加するプログラムのサンプルが掲載されている。

関連リンク:WebObjects: LDAPAdaptor Stops Responding When Trying to Use Channel to Refetch
カテゴリ:Knowledge Base(旧TIL), WebObjects


KBase》WebObjects 5でのEOValidationの動作の変更とそれに伴うJavaConverterの問題

WebObjects 5のVer.4.5からの違いとしてEOValidationクラスのAPIの変更があり、JavaConverterの動作にも違いがあることがKnowledge Baseに記載されている。Ver.4.5ではObjective-Cがベースになっていたため、通常はポインタを戻すなどの動作になっていたが、Javaではvoidを戻していた。Ver.5ではJavaでの動作でも値を戻し、問題がある場合には例外を発生するようになった。こうした違いに付いて詳しく記載されている。これにともなって、JavaConverterの変換結果にも変更が発生しているが、こうした変更に伴う部分は手作業でプログラムの修正が必要になるとしている。そのための例のサンプルプログラムも掲載されている。

関連リンク:WebObjects: JavaConverter and EOValidation API Changes
カテゴリ:Knowledge Base(旧TIL), WebObjects


KBase》イジェクトキーのないキーボードでイジェクトを行う方法

Power Mac G4のQuickSilverタイプで、イジェクトキーのないキーボードを使う時に、CDやDVDのイジェクトを行う方法がKnowledge Baseに掲載された。Mac OS 9ではイジェクトを行うアプリケーションを使うか、コントロールバーを使ってイジェクトを行う。これらは、Apple ExtrasフォルダにあるAbout Eject Extrasを参照すること。Mac OS Xの場合はiTunesを起動してイジェクトを行う。

関連リンク:Power Mac G4 (QuickSilver): How to Open Empty CD/DVD Tray
カテゴリ:Knowledge Base(旧TIL), Power Mac


ファイルメーカーProでグラフ作成を行うプラグインがアップデート

X2max Softwareは、FileMaker Proでグラフ作成を行うプラグイン「xmCHART 2.0」をリリースした。FileMaker Pro Ver.4.0以降で稼動するが、Mac OS Xではネイティブで動作しない。ネイティブ版は2001年秋にリリース予定で、Ver.2.0のユーザには無償で配付される。棒グラフ、折れ線グラフ、領域グラフ、散布図、円グラフ、バブルチャート、高低グラフ、ガントチャートといったグラフが作成でき、さまざまにカスタマイズが可能となっている。誤差範囲や近似曲線の機能や、グラフィックスを配置することも可能だ。Ver.2では複数のグラフを配置したり、Y軸を2軸化するなどの機能が追加されている。価格は1ユーザ版で99ドルだが、ユーザ数に応じて細かく設定されている。また、Developerライセンスがあり、一定の範囲内で自由に配付することも可能だ(ライセンス条件はWebサイトを参照してもらいたい)。

関連リンク:xmCHART 2.0
カテゴリ:データベース