データ - みる会図書館


検索対象: UNIX MAGAZINE 2001年5月号
60件見つかりました。

1. UNIX MAGAZINE 2001年5月号

皐 847 1416928 1 1227 認 78 210 印 2545382 198168 MAT14EMATiCAl SYSTEVIS 爪 ふた の Linux 版 →デ新登場 ! をイテうい ・ s - 戸 .2 0 ・ 分新手法選沢 因子分材 ノ上分分新 第回婦分新 ラフ 樹形モテソレ 3 し ゥノドウ、住オプ・ノ ( ー ) 、ト " な bs ド n そ S - PLUS は高度なテータ解析機能と豊 富なグラフィックス機能の両方を備えた 本格的なテータ解析システムです。 対話型の素早い明快な処理で利用者の 創造性を大幅に支援し、オプジェクト指 向に基づく卓越したデータハンドリング 能力により、データの可視化・再加工・ 再解析というフィードバックループを納得 理工学、医薬学、社会科学、金融工学から教なの分野まで、 いくまで何度も繰り返すことができます。 全国の名企業・研究機盟・大学での豊富な実績を誇ります。 特定分野ソリューションのためのアドオンモジュール 主な特長 ・ S + WAVELETS ・ ・ニ千以上の高度で最新の解析機能。 ( 基本演算、行列演算、 ・ S + SpatiaIStats ・ 探索的データ解析、多変量解析、回帰分析、分散分析、線 ・ S + GARCH ・ 形モテル、時系列解析、シミュレーション、信号処理、検定、 ・ S + NUOPT ・・ OR その他 ) ・数十種類のカスタマイズ自在なグラフィックス機能。 ・オブジェクト指向の s 言語での本格的なプログラミング機 能により、個別の解析システムや G 団を簡単に構築できま す。 Windows 版では OLE や ODBC も利用できます。 ・常設のトレーニングコースその他の強力なサポートでソ リューションを側面支援します。数理科学を専門とする スタッフが、個別のコンサルティングにもお応えします。 ・・話題のウェープレット解析のための 500 以上の機能 ・実験計画法のための数多くの関数とグラフィックス ・・環境・資源エ学などで話題の本格的空間統計モジュール ・・金融工学などで話題の G RCH モデルのために ・・最適化問題を解決する数値計画法モジュール ・・ ArcView G / S のテタに統計解析 ( Ⅳ / ndO Ⅳ s. 版のみ ) S + WAVELETS 主要 LJNIX Sun 、 HP 、旧 M Ⅸ ) 、 DECaIpha (UNIX) 、 SGI 、 Linux(lntel) ※ S-PLUS は MathSoft, ⅲ c. が開発しライセンスしています ※会社名および商品名は各社の商標または登録商標です ( 詳しい製品情報は s - PLUS ホームペーシ http://www.msi.co.jp/splus/を御参照ください。 ) S - PLUS 無料紹介セミナー定期実施中 当社新宿セミナールームにて一人一台のパソコンを用いて S - PLUS を ご説明さしあげています。お気軽にお申し込み下さい。 S 十 SPATIALSTATS Windows Ⅳⅵ do Ⅳ S98 、 2000 、 NT 対応機種、 OS S-PLUS および ArcView のお問合せ先 株式会社数王里・シ / フ、ア工、 s-PLUS グループ 〒 160 新宿区新宿 2-4-3 フォーシースンビル 10F TEL. 03-3358-6681 FAX. 03-3358-1727 e-mail: splus-info@msi. CO. jp (URL)http://www.msi.co.jp/splus/ お問合せ : 平日 10 : 00-17 : 00 (FAX 、 e - ma ⅱは 24 時間随時 ) 1 ' ■ 0 S 十ま ~

2. UNIX MAGAZINE 2001年5月号

et ・ s PIay with UNIX ⑩ う。酸素の摂取量が追いつかなくなってくるのだ。 このように運重虫度と・討白数には密接な関係があり、運 重丿 ( 卩座に討白数に反映される。だから、・討白数をモニ ターしているだけでもなかなかおもしろい。たとえば、腕 をひょいと上げるだけで 3bpm (beats per minute) は 上昇するし、編集者と締切直前の駆引きをしているときは ふだんより 30bpm ほど上昇している。おそらく、次から 次へと言い訳を繰り出すためにどんどん脳に酸素を送っ ているのであろう。こんな現象か起きるのは私だけかもし れないが、人間というのはなかなかよくできている。 さて、心甘 t ( キャットアイの MSC シリース ) を装着 して 1 カ月、すでにかなりのデータか蓄積されたので、こ れを読んでみることにした。 Perl スクリプトの msc2dxdl を使ってデータを PC に転送し、それをスプレッドシー ト abs でグラフ化する。 OS は Linux MLD5 である。 msc2dxdl msc2dxdll は、通常の perl スクリプトととくに変わ るところはない。私は、実行可能モードにしたファイルを ホーム・ディレクトリに置いて起動している。 ます、 MSC シリーズのダウンロード・ユニットを PC の COMI ポートに接続し、本体を置いてダウンロード 用の設定をしておく。 msc2dxdl では、引数としてダウン ロード・ユニットを接続したシリアルテパイスを指定する。 Linux では、 COMI ポートは /dev/ttySO なので次のよ うにすればいい。 $ . /msc2dxd1 /dev/ttySO ok これで、データの取彳寺ちの状態になる。デバイスへの アクセス権限がないユーサーで実行する場合は、以下のよ うに root になってユーザー名を指定する。 $ su Password : # . /msc2dxdI —$user=toshimi /dev/ttyS0 ok この状態で MSC シリーズの本体を操作し、データの転 送を始める。中幻医カ鮗ると、次のような名前のファイルが できているはずだ。 20010318 ー 085435 ー km ー 5 ー 1 . auto 1 http://pub.ks-and-ks.ne.jp/cycling/msc2dxdl.html UNIX MAGAZINE 2001.5 最初の数字は転送を実行した日時である。この例では、 2001 年 3 月 18 日 8 時 54 分 35 秒ということになる。 その後ろは、データの属性である。これは、 MSC シリー ズの本体を操作して設定する。ー己の例では、それぞれ次 のような意味である。 ・ km : 距離や速度を km 単位 ( マイルと切り替えられる ) で言求した。 ・ 5 : データのサンプリングを 5 移澗隔でおこなった。 ab s (bpm) 、距離 (km) カ当求されている。 のように、空白を区切り文字として速度 (km/h) 、心寸白数 16 . 2 117 0 . 11 15 . 9 111 0 .09 13 . 8 107 0 .07 9 . 2 105 0 .05 13 . 8 106 0 .04 15 . 3 102 0 .02 このファイルをエデイタで開くと、 ・ auto : データの言則モード。 ・ 1 : メモリバンク中の 1 番目のデータである。 を選ぶとグラフか表示される。デフォルトでは A 列の速 データ領域を指定し、 Chart メニューから "Create' に、グラフを作成してみた。 をチェックする ( 図 1 ) 。読み込んだデータ ( 図 2 ) をもと み込む。このとき、データの区切り文字として、、 Space" Data FiIe... " を選び、 msc2dxdl て沖云送したデータを読 abs を起動したら、ます Tools メニューから、、 lnsert i386. rpm というパッケージを使ってインストールした。 L ⅲ ux3 というディストリピューション用の abs ー 0.7 ー 3. から入手できるが、今回は rpmfind2 で検索した ASP- ・ http://www.ping.be/bertin/abs/ 分である。ソースコードなどは、 残念ながら日本語は扱えないが、今回のような目的なら十 ートで、ある程度の表計算とデータのグラフ化ができる。 UNIX べースの OS で利用できるフリーのスプレッドシ このデータを abs に読み込む。 abs は、 Linux などの 3 http://www.asp-linux.com 2 http://www.rpmfind.net/linux/RPM/ 143

3. UNIX MAGAZINE 2001年5月号

在〔れ B ヨ ng インターネット業界の巨んヤフー創始者 テビッド・ファイロが語る インターネットビジネスの未来 業界ボ - ダーレス化で S E の新キャリア急浮上 ! 今こそー T コンサルタントになる 何が聞かれる ? どこがホイント ? NTT データ面接現場潜入リポート 50 兆円、 100 万人の巨大産業出現 ! バイオ・ジェノミクスは 工ンジニアの新天地となるか ? 点松下通信工業が描く モバイルテクノロジ - の未来社長川田隆資氏 テックビーインク \ 290 、 4 ・ 40 発売 キャリア動向再現リポート注目業界 工ンジニアの仕事発見ガイド FO 「 the Future of Next Gen Engineers. 穹の・社にエンン : アとしての第第は、けるか ? ンン : アのは・第第わイト 在〔れ B g イ 00 第 1 トーンス 0 ンスムマイ 10 ンスをなス ′ : - ー駅をイン■・一ヤ・ . 物イ : - : フツンなと 工ンシニア「 30 歳」最上の選択 ー NTT テータ ] ー複環場第入リネート今こそー T コンサルタントになる バイオ・シェノミクスはエンジニアの新天地となるか ? 毎月第 1 水曜日発売・書店・駅売店・コンビニエンスストアにてお求めください http://www.isize.com/TECH 一人スへン・、・ソ 7 ト 1 ェア・一のためのキャリアア 1 プ一・一・まトフ - クーー * 広告の内容は予告なく変更する場合があります

4. UNIX MAGAZINE 2001年5月号

第 2 版の作成 UNIX Communication Notes 山口英 情報整理の技術 ( 8 ) CGI フログラミング スへのアクセスを制御する機能がない。 5. セキュリティ面で脆弱な部分がある。とくに、サービ 今回も、 Web を用いた情報の管理について考えていく。 前号では、 FAX 送伺啾を例にとり、情報が作成される 段階から集中して管理するガ去を説明した。定型業務はコ ンヒュータによる処理に適しているか : なかでも Web の CGI 機能を用いた集中管理方式を適用しやすい。前回作 成した第 1 版では、次のような機能を実現した。 ・ FAX 送伺啾に必要な情報を Web ページからフォーム (form) の機能を用いて入力させる。 ・ Web サーバー側では、入力されたデータにもとづいて I*TEX ファイルにデータを埋め込み、 DVI ファイルを 作成する。その後、 DVI ファイルを PostScript ファ イルに変換してプリンタに出力する。 実現にあたっては、 CGI プログラム (PerI スクリフ ト ) を用意し、さらに小さなシェル・プログラムによって I*TEX のソースから PostScript ファイルを生成するま での手順を自動化した。 このように、第 1 版は簡単に作れる小さなプログラムか ら構成されている。しかし、前回も説明したとおり、以下 に示すようないくつかの題か残っている。 1. フォームで入力されたデータむ耐妾い TEX ファイルに 埋め込むため、データか再利用しにくい。 2. 送伺のテンフレートが選べない。 3. 出力先プリンタが選べない。 4. 送信者の情報か選べない ( 弉伏では、送信者帯にをテン プレートに直接埋め込むかたちになっている ) 。 UNIX MAGAZINE 2001.5 今回は、これらの間題を鮹夬するために、第 1 版を匿 しながら第 2 版を作成する。 解決方法 上記の課題のうち、最後のセキュリティに関する問題は Apache の機能を用いてアクセスを制限するか、あるいは CGI プログラムのなかでクライアント側アドレスを示す 環境変数 REMOTE-ADDR をもとにしたアクセス制御 を実装すれば対応できる。 Apache でアクセス制御をおこなうには、設正ファイルに アクセスリストを記する。具 f 勺な去は、 Apache の設定 マニュアルや解説書 [ 1 ] などを参考にするとよい。 環境変数を用いたアクセス制御については、実装の方針だ けを記しておく。工竟変数 REMOTE-ADDR には、 IP ア ドレスか文字列形式 ( 163.221.148.52 など、通常のドットで 区切られた表記 ) てオ絲されている。したがって、この文字列 から具ー勺な値を取り出し、アクセスを許可していないネット ワークまたはホストからアクセスされている場合は、ただちに プログラムを終了 ( 、 exit(O);" を実行 ) すればよい。 一方、 1 ~ 4 については、 CGI プログラムの改良によっ て対応できる。 1 の間題は、ユーサーが入力したデータを一定の書式 の中間ファイルに格納し、そのファイルをもとにあらた めて出力すれはよい。この場合には、中間ファイルとテ ンプレートさえ保存しておけば、それ以外の INIbX や PostScript ファイルなどは破棄してもかまわない。 59

5. UNIX MAGAZINE 2001年5月号

連載 /UNIX Communication Notes— 155 い。山も匠はセキュリティ関連の機能も強化されつつあり、 Web サーバーのバックエンド・データベースサーバーと 関イ系データベース・モデノレ しても使われている。 この 2 つのエンティティを関連づける属生として、ま とし、属生として表 2-b を与える。 のような属性がある。もう 1 つのエンティティを、、給与 " ます、、、社員 " をエンティティとした場合には、表 2 ー a 理に使うデータベースを考えてみる。 けをしたいことがある。一一例として、ある企業での人事管 このようなテープルを複数作成した場合、相に関連つ、 系 データベース内にテープルを構成できる " といえる。 ンプレート ) によって具体的なデータを整理することで、 属生を用いて論理的なデータ構造を定義し、その型紙 ( テ プル ( table 厂と呼ぶ。表現を変えると、、、エンティティと とができる。関係データベースでは、この一覧表を、、テー ば、エンティティに関する具イ勺な情報を - ・ -- 一覧表にするこ ように、それぞオ - し属・生値がある。これらの情報をまとめれ と、身長は太郎君が 178Cm 、花子さんが 156Cm という 理してみよう。 ) はに君や花子さんといった個人を例にとる 次に、あるエンティティに関する具体的なデータを整 いう観点からデータを整理していく。 どの属性がある。このように、エンティティとその属性と をエンティティと捉えれば、シリアル番号、価格、重量な 、ロロロ どの複数刎青報を属性としてもっている。あるいは商ロ (entity : 工ンティティ ) " は、名前や生別、身長、体重な 人に関する情報の管理を考えてみよう。人という、、もの データベースで扱う情報は構造をもっている。 間的に分かりやすいデータモデルから作られている。 データモデルを用いている。関係データベース・モデルは、 て利用できる MS SQL サーバ—/Access などと同様の で、たとえば商用 DBMS の OracIe や、 Windows 工竟 database) モデルにもとづくシステムである。その意味 MySQL は、いわゆる関係データベース (relational UNIX MAGAZINE 2001.5 2-c のような構造にすれは、、、社員 ID" という属生によっ 各社員に一意に決めた ID を付加する。そのうえで、表 いる場合にはうまくいかない。そこで、新たな属性として す考えられるのは名前である。しかし、同姓同名の社員が 表 2 工ンティティの属性 (a) 社員の属性 (b) 、給与 " の属性 月給 社員 ID 給与 - よるづけ 月給 名前 給与 入社日 生年月日 性別 名前 社員 ID → 社員 (c) 社員 ID に 入社年 生年月日 性別 名前 社員 機構 ( プログラム ) はデータベース・エンジンとも呼ばれ の SQL を解釈し、データベースに対して操作をおこなう データベースがなんらかのかたちでサポートしている。 SQL は標準化された言語であり、ほとんどすべての関係 も、データベースに対する操作は SQL を介しておこなう。 (Structured Query Language) である。 MySQL で ーフェイス言語のなかで、ひろく使われているのが SQL 関係データベースにおけるこれらの処理のためのインタ 処理もおこなう。 る。さらに、必要に応じてテープルの作成や廃棄といった 対して、データの抽出、追加、更新、削除など巣作をす ーイ勺には、データベースに用意した複数のテープルに SQL とテータベース・エンジン うにすれば、このような関係の表現か可能になる。 を用意しておき、テープル間では属性を相互に参照するよ もある。社員 ID のようなテープル内で一意に決まる属生 mapping) もあれは、 1 対多 (one ん m の mapping) テープルどうしの関連づけには、 1 対 1 ( 0 れ e ん one 、、キー (key)" と呼 用できる、テープル内での一意性が保証されている属生を て相互の関連づけが可能になる。このような関連づけに利 以上で入社 10 年飛月給が 50 万円飛岡の社員 " る。さきほどの人事管理用データベースの例なら、 るデータを適当な条件にもとづいて抽出できるところにあ 関係データベースの長所は、複数のテープルにまたが された SQL のサプセットに対応している。 る。 MySQL はデータベース・エンジンであり、標準化 63 とし ) っ 、、 35 歳

6. UNIX MAGAZINE 2001年5月号

0 faxcover 連載 /UNIX Communication Notes— トは次の 2 つである。 第 2 版の言暫面 に置く。 ・テンプレートとデータベースはディレクトリ ・プログラムを使って、データベースの内容を重加勺に反映 第 1 版と上交した場合、第 2 版における重要なポイン 破棄できるのも魅力的である。 中間で作られる DVI ファイルや PostScript ファイルを カか終了した時点で、生成に利用した L\TEX ファイル、 なったときにイ叫リだからである。さらに、プリンタへの出 っているのは、あとで FAX 送イ疆大をもう一度印刷したく 外部プログラムを用いてプリンタへの出力処理をおこな ンパクトになり、将来の保守も楽になる。 るほうがよいだろう。そうすればプログラムがきれいでコ に生成する部分が多い場合は CGI. pm を積極的に利用す で、ヒアドキュメントの機能を使っている。しかし重加勺 た faxcoverform. cgi では重加勺に生成する部分が少ないの ール CGI. pm を使うときれいに言当できる。今回作成し 前者はいわゆる動的ページ生成であり、 Perl のモジュ するために外部プログラムを利用する。 タファイルにオ褓内し、これを目的に合わせた形式で出力 ・ Web クライアント側から送られた情報をいったんデー する Web ページを自重加勺に生成する。 ・データの管理をシステムにイモ迂ることができる えられる。このガ去には、次のような利点がある。 を CGI プログラムから利用して情報を管理する去が考 そこで、将来的な拡張として、データベース・システム 処理するプログラムの作成も難しくなる。 とになる。さらに、取り扱う項目が多くなるとファイルを タか蓄積され、膨大な数のファイルを前に四苦八苦するこ という利点はあるが、日常的に運用するようになるとデー から直孑檗作している。このようなシステムは開発が簡単 ファイルにしている。そのため、これらのファイルを PerI 第 2 版では、データもデータベースもテキスト形式の 第 3 版の作成 とくに、データベース・サー 62 ーを構築すれば、ネット ワークエ竟においてサーバーの集約カゞ可能になり、 しやすいデータをまとめて管理できる。 ・プログラムを実装しやすい UNIX MAGAZINE 2001.5 するデータベースを構築するのであ川ま、とくに間題はな は可能であり、個人、または小規模なグルーフ。で共同利用 機能を備え、マルチスレッドを用いたある程度高速な処理 えない。しかしながら、データベースにとっての基本的な 較した場合、 MySQL はやはり劣っているといわざるを ランサクション処理性能という観点から商用 DBMS と比 大規模な DBMS を友するための機能や、いわゆるト え方で漣用できる。 るため、一殳に普及している関係データベースと同様な考 供し、さらに、インターフェイスとして SQL を用いてい 係データベース・モデルにもとづくデータベース機能を提 で、さまざまなプラットホームでひろく使われている。関 MySQL はオープンソースとして開発された DBMS MySQL に CGI からの利用友去を説明する。 た。以下では MySQL のインストールまでを述べ、次回 今回は、そのなかから MySQL をとりあげることにし ンソースとして開発されたものまで多種多様である。 agement System) についても、製品はもとより、オープ る。データベースを管理する DBMS (DataBase Man- データベース・システムは、世の中に星の数はど存在す してデータベース・システムを利用することにした。 そこで、第 3 版では CGI プログラムのバックエンドと 制御を必要とするデータの扱いか容易になる。 タベース・システムを導入すれば、きめ細かなアクセス のファイルシステムの機能に制限されてしまう。デー として格納するため、情報へのアクセス制御が UNIX 第 2 版で用いた方法では、すべてのデータをファイル ・個々のを又のアクセス制御が可能 べース・システムの利用は理にかなっている。 ログラムの作成や保守という観点からいっても、データ イスも用意されていることが多い。このため、 CGI フ る API だけでなく、去も丘は Perl に対するインターフェ から使えるように API を提供している。 C 言語に対す 大部分のデータベース・システムは、はかのプログラム

7. UNIX MAGAZINE 2001年5月号

連載 /UNIX Communication Notes— 所 : - p : ″】 / 0 - いⅳー物・ 0 の 3 は 0 第 図 4 FAX 送付状の入力醯 FAX Cover Sheet 0 2. 用 3. 送信者 5 フリンタ 4. 使用するテンプし一ト メッセージ 山口英コ m 可引 201 ー (Simple but enough) 朝 情報里用 CGI プログラム乍成 UNIX MÄGAZINE 2001.5 る。ヘッダの各行は、フォームに付けられたタグとそ刎直 され、ヘッダとメッセージのあいだには空行か挿入され メール ( RFC822 ) と同しくへッダとメッセージから構成 のファイルが作成される。このデータファイルは、電子 cover/data に日時をファイル名とし、拡張子が、、 . dat" たデータファイルを出力する点である。ディレクトリ fax- スファイル ) ではなく、送付状の生成に必要な情報を収め 第 1 版と大きく異なるのは、 FAX 送付状 (IATEX ソー cover. cgi をリスト 2 に小す この方針に従って作成した CGI プログラム mkfax- プログラム dat2ps を起動し、プリンタに出力する。 最後に、そのデータファイルから FAX 送付状を出力する 力に必要なデータをまとめたファイルを生成する。そして つのデータベース・ファイルと照合し、 FAX 送イ寸状の出 項目の ID を返すようにする。さらに、用意しておいた 3 テンプレート、プリンタについては、 j 尺項目に応じて各 新たに追加したプルダウン・セレクタで尺された送信者、 HTTP の POST 機能を用いてサーバー側に渡される。 前回も説明したように、ユーザーが入力したデータは を作成する。 ムに入力されたデータを処理するための CGI プログラム 次に、前回作った mkfaxcover. cgi を改造し、フォー 図 5 生成されるデータファイル列 SrcOrg : 奈良先端科学技術大学院大学 SrcDpt : 情報科学研究科 SrcPerson: 山口英 SrcTe1 : 0743 ー 72 ー XXXX SrcFAX : 0743 ー 72 ー YYYY SrcEmai1 : suguru@wide.ad. JP DestOrg : UNIX MAGAZINE 編集部 DestPerson: 担当者 DestTe1 : 03 ー 1234 ー 5678 Pr int er : prn—prof Temp1ate : temp1ate02. tex Date : 02 / 28 / 2001 16 : 32 Subject : 企画会議について 先日お約束した企画会議ですが、大学での会議とぶつかって しまい出席できません。もうしわけありませんが、後日、会 議の概要などのメモをお送りいただければさいわいです。よ ろしくお願いします。 をコロンてつないだ単鈍な構造になっている。データファ イルの例を図 5 に示す。 そのはかに、次のような改良を加えている。 第 1 版でプログラムの見通しカかった部分をサプルー チンとし、読みやすくした。 連想酉改」を用いてタグを簡単に管理できるようにした。 データファイルからい既 kX ソースファイルを生成して コンパイルし、 PostScript 形式に変換して出力する処理 は、 dat2ps というプログラムでおこなう。このプログラ ムの機能は第 1 版の latex2ps とよく似ているが、データ ファイルをもとに I*TFfX 形式のテンプレートを書き換え る処理が追加されている。 もちろん、シェル・プログラムである Iatex2ps を改造 し、テンプレートに埋め込まれたタグを awk や sed など で書き換えてもよいが、今回はこのプログラムも Perl で 言当した。作成した dat2ps をリスト 3 に示す。 インストール こまでに説明したデータベースとテンプレート、 3 っ のプログラムを用意し、次のようにインストールする。 ・ faxcoverform. cgi と mkfaxcover. cgi を、 Web サー バーの CGI プログラムのディレクトリにコピーする。 ・ dat2ps プログラムを、 FAX 送付状データを格納す るディレクトリ faxcover/data (/usr/local/www faxcover/data など ) ヘインストールする。 61

8. UNIX MAGAZINE 2001年5月号

連載 / UN Ⅸ便利帖ー⑩ で、接続を終了するには次のようにします。 く ?php pg-close($conn) ; pg-exec SQL 文によるデータベースに対する一一嗹の操作 ( デー タ挿入や削除、検索など ) をクエリー (query) といいま す。クエリーを実行するための関数は pg-exec() です。 pg-exec() は、 pg-connect() で得られた接続 ID と、 クエリーとなる文字列を引数にします。クエリーは psql で入力するのと同様な形式で記述できます。 pg-exec( は、クエリーの実行に失敗したり、無効な接続 ID を与 えられた場合は FALSE を返します。クエリーの実行に 成功した場合、そのクエリーがデータを返す類のものでな いとき ( たとえば insert や update など ) は TRUE を 返し、そうでないとき (select など ) はインデックスと呼 はれる値を返します。このインデックスは、 select などに よって得られたデータを実際に取得するときに、彳あする pgffetch-row() などて利用します。 たとえば、前節て例に挙げたデータの挿入を PHP で書 くと次のようになります。 く ?php $result = pg-exec($con•tl' insert intO if ( ! $result) { ( 'potato' echo else { echo 'inserted pg-fetch-row pg-exec() で select などデータを返すクエリーを実行 UNIX MAGAZINE 2001.5 if ( ! $result) { "select * from cart order by name; " ) $result = pg—exec ($c01)-11' く ?php 行すっ取得していく、というのが典型的な使い方です。 結果の行数を取得しておいてから、 pg-fetch-row() で 1 数にもちます。 pg-numrows() によってあらかしめその ンデックスと、何行目のデータカしいかを示す整数を引 の関数です。 pgffetch•ow() は、 pg-exec() カしたイ した場合、その結果を 1 行ごとに配列として取得するため e ChO exit ; 123 ☆ ( みやした・けんすけ京都女子大学 ) 例として参考になるでしよう。 このサイト自体も PHP を使って運用されているので、実 アルやサポートのための文書がたくさんあります。また、 PHP のページ (http://www.php.net/) には、マニュ や PDF 文書などを扱うことも可能です。 さまざまなネットワーク・プロトコルを処理したり、画像 することもできます。この連載では触れませんでしたが、 げたように、さまざまなデータベース管理システムと連動 列を HTML として扱うのも容易です。また、今回とりあ ので、 HTML の form 要素との ; 叫秀がとりやすく、文字 ジを作成できます。 WWW に特化したスクリプト言語な と、 CGI や Java などを利用せすに重加勺な WWW ペー PHP の話は今回でひとます終ります。 PHP を用いる きにスクリプト内で排他制御をしていました。 ケート結果をファイルに保存したので、これを更新すると くなり、スクリプトの見通しがよくなります。前回はアン この性質を利用すれば、自前でロックをおこなう必要がな PostgreSQL が自動的に当該レコードをロックします。 て処理する場合、 update や insert などのクエリーでは、 前回に紹介したアンケート結果を PostgreSQL を使っ て番号付きの箇条書きにしています。 際のデータを取得し、それを HTML の。 1 要素を利用し その後、その行数ぶんだけ pg-fetch-row() を実行して実 その結果に対して pgnumrows() で行数を取得します。 name の昇順に並べたものを select しています。次に この例では、先頭行で cart というテープルの内容を echo " く / 01 > \ n " ・ echo " く li>$row[$j] く / li > \ Ⅱ " for ($j 0 ; $j く count($row) ; $ j + + ) { echO " く 01 > \ Ⅱ " $ ro = pg-fetch—row($result, (i) ; for ()i = 0 ; $i く $ ⅡⅧ ; $ i + + ) { $num = pg-numrows ($result) ;

9. UNIX MAGAZINE 2001年5月号

インターフェイスの街角 図 3 Q-Pocket for Palm での項目の頂番変更 Q-Pocket Pal 「 n"iki Tips 面白そヨなもの 幅トーク創 SM 日 2 1 0 ー PÖ ( k T000 ・ こ QP - 疊 iki 韭追加 円 ( N にの俿い台 Mi ( 0 i ク - ラス ※ iS k 訂正 日 i On Llbi ( 0 「 nP2001 、を TO ロ 0 図 4 メモ帳 ~ 画面への移動 Q-Pocket PolmWiki Tips 面白そうなも PolmWiki 旧 MR2001 幅トーク創 5MR2001 ※ 0- Pr-l 臨 T000 こ QP - 勵 ki 目に遉加 P に N にの使いみち M 朝 00 i ク - ラス ※ iS ” k 訂正 日す On Llbi ( 0n1P2001 索できるようになります。 Q-Pocket ※ 0- F• ke す T000 Pal 「 n"iki Tips 面白そうなもの MF: 01 トーク創 ; MR2001 . ヨ こ 0 ト ki 韭追加 円 ( N にの使いち Mi ( ド 00 i ク - ラス ※ k 訂正 HssistOn Llbi ( 0n1P2001 そ弖な . も璽 メモ 24 ′ 24 各有用情 Q-Pocket for Palm は、 UNIX 版 Q-Pocket と同等 の機能を Palm で使えるようにしたシステムで、 UNIX 版と同じく、ローマ字による日本言韶 ) 検索カゞ可能です。 イ吏用例 Q-Pocket for Palm を起動すると、メモ帳データカ斤 しい順に表示されます。 こで、項目を上下にドラッグすると順番を変えること かて、きます。図 3 では、「※ Q-Pocket TODO 」という 項目をドラッグして一番上に移動させています。 項目をタッフするとメモ巾 ) 編集画面に移動します ( 図 4 ) 。このメモ帳の画面では PalmWiki のキーワードカ硬 われているので、その部分をタップするとさらに別の画面 に移動していくことができます。 文字列を入力すると、インクリメンタルに全文検索をお こなうことができます ( 図 5 ) 。さらに、ローマ字による漢 UNIX MAGAZINE 2001.5 字の検索も可能です ( 図 6 ) 。 . [ V ⅳ軽′ⅳ lb RIanKay ・ _[s れ′ 0- ( orn ーマ . トアマ .. リ . を [ h れ i 覊′ rn TO ( H ー論烹ー を卩 ik 旧 M の」 0 瞽ンイ . ラ 195 機器でこのような前処理をおこなったり、よぶんなデー るようにしていました。資源に限りのある Palm などの き、ローマ字によるテキスト文字列の重加勺曖昧検索ができ 文字列をローマ字に変換したものをあらかしめ作成してお 昨年 5 月号で紹介した Q-Pocket では、検索対象の ローマ字による検索の実装 ョンの異なるデータを保存するような場合にイ甦リです。 テンプレートをもとに新しいデータを作成したり、バージ すと、図 8 のように同じデータが 2 つできます。これは、 白そうなもの」という文字列を選んで省にドラッグして離 と、データが複製されて頁に追加されます。ペンで「面 項目をベンで選択してから右方向にドラッグして離す 含むデータカ斗索されています。 で登録されているので、、、 * t 。 do * " と入力すると、、※ " を 検索されます。図 7 では、、、※ " が、、 * todo * " という読み みのパターンを入力すると、それに対応する単語が ローマ字にかぎらす、 POBox 辞書で定義されている

10. UNIX MAGAZINE 2001年5月号

集 Plan 9 のフィルシステム この状況に不岡をもち、彳するアプリケーションにもっと明確な名前をケえたいと願って、 我々は近ごろは .. を次のように定義している。 「ディレクトリ X の親である X /.. は、 X のパス名の最後の要素を取り去ることによってでき る名前のディレクトリにアクセスしたときに得られる」 たとえは、 /a/b/c にいて、、 .. " に chdir すると、結果は / a / b に chdir を実行したときとまっ たく同じになる。 この定義は分かりやすく、自然に感しられる。だがこれは、ファイル名やマウントテープルと いった、カーネル内にあるデータ構造の調面をまったく無視した、純粋に、、字句的 " な定義であ る。我々の羽餓は、これを効勺に実装することだ。分かりやすい ( かっ正しい ) 実装は、パス名 を字句的に書き換えて、、 .. " を取り出し、ファイル名をルートから順番に評価することだが、これ はコストか高くつく魅力のない去である。ローカルな操作でファイル名を評価しながらも、ドッ トードットのグローバルな字句定義を系しようと考えている。これは、さして難しいことではな いはすだ。 ファイル名を字句的に操作するために、我々はカーネルの各オープンファイル、つまり、それ ぞれの ChanneI データ構造に名前を付けた。したがって、最初のステッフは、 char* をシステ ム内の各 Channel とともに「爛寺することだ。これを Cname といい、その Channel のルート から始まる絶対的なファイル名か当求されている。 Cname は完全にテキストの文字列として保 管さ効率よく扱うためにコピー・オン・ライトで共有される。課題は、それぞれの Cname を、ローカルな操作だけを使って正しい糸色寸名にし続けることである。 ファイルを開くと、叩 en ( または chdir 、 bind など ) システムコールのファイル名の引数は、 その結果できた Channel の Cname に言当求される。ファイル名がスラッシュで始まっていた ら、名前はそのまま保存され、次節で述べるクリーニング処理を受ける。そうでなければローカ ルな名前なので、カレント・ディレクトリの Cname の後ろにスラッシュを付けたものをその前 に置いて、絶対パスのファイル名にしなければならない。たとえば、 /home/rob にいるときに bin に chdir すると、その結果できた Channel の Cname は、 /home/rob/bin という文字列 になる。 これは、ローカルのファイル名に という要素が含まれていないことを想定している。含ま れていたら、たとえß/home/rob/.. という文字列 &f 尉寺する代わりに、既存の名前の最後の要 素を削除して、 Cname を /home とする。字句的な性質を糸財寺するために、評価の結果できる Cname が、ローカルの、、 .. " 操作によって得られるのと確実に同しディレクトリになるようにし なくてはならない。 カレント・ディレクトリかマウントボイントでない場合、字句的な属性を系財寺するのは簡単で ある。マウントボイントである場合でも、 PIan 9 なら糸旧寺することが可能だ。なぜなら、カーネ ルに存在するデータ構造であるマウントテープルに、名前空間の非階層的な結合に関する情報が すべて含まれているからであるにれに対し、 UNIX の場合は、シンポリック・リンクはカーネ ルではなくファイルサーバーに保管されている ) 。さらに、各 Channel の完全なファイル名がマ ウントテープル内に存し、日未さを孑余づーるのに必要な情報カ碍られる。 UNIX MAGAZINE 2001.5 99