Registerの報じる別のニュースでは、著作権強化で幸せなAdobe自体の足元に火がついた。AdobeがTrioのコードを使ったとしてAdobeがTrioに訴えられた事件で、判決はAdobeに問題のQuark-killer プログラムInDesignの販売を禁じた。
The Microsoft Collection と言うサイトがある。マイクロソフトの悪行に関する多数のソースを引用しリンクしている。マイクロソフトに関わる法律交渉に役立つだろう。
現在のマイクロソフト反トラスト解決策は不十分だ。不同意の9州や産業が、マイクロソフトはインターネットエクスプローラをオープンソースにすべしと争っている。関係企業のうちRed HatのCEO Matthew Szulikは上院法律委員会で、9州の矯正策の方が合理的だと証言した。Registerは各種矯正策の法律的解析をおこなっている。9州は突進しており、マイクロソフトは無効なパンチを繰り返すだけだ。
上院委員会公聴会でのLawrence Lessigの証言に面白い意見がある。Lessigは不適切な強化条項に焦点をおく。マイクロソフトだけが当面の競争相手ではなく、NET戦略にも言及した。
マイクロソフトに関する最新の訴訟は`Digital rights management operating system'’に与えられた特許紛争patent claim [cryptome.org]だ。これは「権利管理データ」の保護を容易にする特性のあるOSだ。例えば、当該データを使う信託を得たプログラムを走らせると、信託されないプログラムも走らせることが出来る。似たような特徴が色々ある。この話はCryptome.org の特許公開にしたがってRegisterが報じた。計画の運営にはユーザーPCの個々の項目のデータベースが必要になる。
Committee for Independent Technology (C-FIT) のSeth Johnson がaful.org ソフトウエアに対する厳しい査定を投稿した。MS DRMOS は、大衆が情報を扱う動き全体の大部分と思われ、それらを単なる受け身の消費者にしてしまうのが究極の狙いであると思われる。DRMOSの特許は、技術独占をもたらす。
ウイルスがLinuxに与える最も大きい影響は、ウイルス爆発のラッシュが続くと、セキュリティにやかましいカスタマが、現在の市場支配者の代わりを求めることだろう。安全な(少なくとも、より安全な)ソフトウエアは、アンチウイルス・ソフトウエアメーカーにとって悪いニュースに違いない。
●GPLの下でQuake2ソースコードをリリース
●実用 PostgreSQL PDF が入手出来る
Linux とPostgreSQLの開発者Command Prompt が実用PostgreSQLの製品化前リリースを発表した。実用PostgreSQLは、Command Prompt, Inc. とO'Reilly & Associates が共同作成した出版でPostgreSQL ORDBMSを記述する。下記のURLから受け取ることが出来る。
http://www.postgresql.info/practicalpostgresql.pdf
●インドLinuxユーザークラブの特別行事
インドLinuxユーザーズクラブがユーザー向けの行事を計画中。当日の主題はLinux上のシステム管理。2002年1月13日午前10:00から午後6:00まで、Jagganathpark,Nr.Malav、Talav,Jivarajpark、Ahmedabad-380051 Gujarat INDIAで開催される。
Linux はインテル・イタニウム・アーキテクチャ用Mandrake Linux 8.1 が入手出来ると発表した。イタニウム64ビットアーキテクチャは、サーバーに広く使われる高性能プラットホームである。
Register は、インストールが容易との観点から、最近Mandrake Linux 8.1 をreviewed 見直し、「Win-XPより容易である」ことを見出した。全体として、ディストリビューションに対する朗報である。(特に初期Red Hat の間に生じた試練に耐えた人に取って)。
●SuSe
SuSE Linuxは、"Virtual Private Networks" (VPN)に利用出来る「CD収容SuSE Linuxファイヤウォール」を発表した。
SuSE Linuxは、SuSE Linux 7.3 for Sun Microsystems' SPARC architectureが利用出来ると発表した。
新バージョンはダウンロードで入手出来る。SuSE、Sun4c 及びSun4m シリーズ32-ビットマシン用に Linux Kernel 2.2.20 、並びにSun4u シリーズ64-ビットマシン用にKernel 2.4.14 を提供する。目立った特徴は、Kernel 2.4.14が、新UltraSPARC モデル用に広い範囲のドライバとUSBのサポートを備えていることである。SPARC用SuSE Linux 7.3 はプログラムライブラリ glibc 2.2.4 に基づいており、XFree86 4.1.0を含む。
●Yellow Dog
TuxPPC.com に、 Yellow Dog Linux 関係及びディストリビューションが取るべき将来の方向の報告 report がある( Linux Today提供)。
Opera Software は、、新機能を持つLinux用Opera 6.0, Technology Preview 2 (TP) for downloadダウンロード用をリリースした。新機能には、 Romanでない文字の表示能力、完全に新しくカストマイズ出来るインターフェイス、ブラウズのスピードと楽しみを増す改良などが含まれている。
● Kohan:Immortal Sovereigns がLinuxに利用出来る
TimeGate Studios と Loki Software は、面白いリアルタイム戦略ゲームKohan: Immortal Sovereignsが、8月25日にLinuxプラットホーム用に出荷されたと発表した。
Kohanは$49.95 (USD)のMRSPを持っており、Loki webstore の注文で入手出来る。再販業者のリスト resellers も利用出来る。無料体験版は下記でダウンロード出来る。
http://www.lokigames.com/products/demos.php3
開発者 Running With Scissors は、Loki Softwareに協力して、待ち望んだPOSTAL PLUS のLinux版をウインドウズに飽いたゲームプレーヤに提供すると発表した。
●OpenFly
Jim Watkins がメールで OpenFly: を知らせてくれた。これは、フライトシミュレータ・ツールキット用オープンソース・ゲームエンジンで、Linuxに適合する。「このツールは、もの凄い計画で、Linuxで最初の新のコンバット・フライトシミュレータになるだろう」とのことだ。
●McObjectのLinuxベース・ベンチマーク論文
McObject's は、白書white paper (pdf): "Main Memory vs. RAM-Disk Databases: A Linux-based Comparison"(メインメモリ対RAMディスクデータベース:Linuxベースの比較)をリリースした。この論文は、Linux上で働く埋込システムにおけるデータベース管理への各種方法の性能及び利用性関係を扱っている。ハードディスク、RAMディスク及びメモリオンリー操作に埋め込まれたアプリケーションで働くデータベースを観察する。
McObjectのベンチマークは会社のMMDBを広く使われる埋込データベースに対して、在来のモード(ディスクベース)及びRAMディスクモードで、テストする。RAMディスクの展開は、在来データベースの性能を74パーセント増大するが、このテストではメモリオンリー・データベースより遅れる(Red Hat Linux バージョン6.2で実施)。
●VWware
VMware は、VMware ワークステーション3.0の立ち上げを発表した announced 。VMware ワークステーションは、確実で可搬型の物理的コンピュータ上で、多数のOSを走らせることを可能にする。ワ−クステーション3.0は、マイクロソフト・ウインドウズXP及び最新Linuxディストリビューションを含む最新OSに対するサポートを提供し、周辺装置をサポートし、ネットワーク及び全体性能を十分に強化する。
●Tommy HilfigerがLinux及びその他のIBMニュースを飾り立てる
IBM は、Tommy Hilfigerが、専門品小売り、工場及び雇用者に対する会社の連絡範囲を拡大する設計のe-ビジネス・インフラストラクチャに関しIBM及びLinuxに転向したと発表した。
Tommy Hilfigerは、Linuxを走らせるIBM e-サーバーxシリーズ、Java、DB2ユニバーサル・データベースを走らせるIBM e-サーバーiシリーズ及びIBM提携先e-Oneグループからのソフトウエア群を使用する新しい三つの革新的ウエブポータルを創っている。
IBMは、Eclipsベースのツール−Linuxベータのウエブシェア・スタジオ・アプリケーション・ディベロッパ−をLinux用に出荷し始めた。これは、新独立オープンソース開発社会に4000万ドルのソフトウエアー--コード名Eclipse --を寄付したときの予定にしたがったものである。ウエブシェア・スタジオその他Edlipseベースのツールを使う開発者は、共通の利用し易いインターフェイスを使う。これはベンダーに関わりなく一貫した「視覚と感覚」を与え、それがカスタマのトレーニングコストを引き下げる。Eclipsは又、ウエブサービスなどのe-ビジネス・アプリケーションを創るため使うビジネス処理をカスタマが統合することが出来るようにする。 IBM, Red Hat, TogetherSoft その他を含む150のソフトウエア・ベンダーが既にEclipseソフトウエア上で働いている。 Downloads here.
特に中小企業向け市場用の新Linuxソリューション開発のシミュレーションをおこなう一部として、IBMは、独立ソフトウエアベンダー用に「仮想Linuxサーバー」を発表している。eServer iSeries Linux 「テストドライブ」はIBMのメインフレーム吸収パーティション技術を使ってソフトウエアベンダーに、自分のiシリーズサーバーへのインターネットアクセスを与える。IBMは、eサーバーiシリーズ上で働くLinuxは、単一の管理し易いメインフレーム級サーバー上に整理統合することにより、コストと複雑さを軽減することの出来る組合せであると考えている。
●Linuxのプロジェクト管理ソフトウエア
SYSI GmbH ソフトウエアシステムが、Linux用プロジェクト管理ソフトウエアAUX RDP を開発した。AUX RDP は、多くのテキスト及びグラフィックレポートを用いるスケジュール、原資料、コスト、結果及びリスクを計画管理するためのツールである。加えてAUX RDP は、インターネット/インターネット間にプロジェクト情報を自動的に創るためのウエブベースプロジェクト情報システムのゼネレータを含む。AUX RDP は、シェアウエアとしてhttp://www.sysi-software.de/.からダウンロードすることが出来る。
●Linuxシステム管理コース
Training etc はそのLinux system administration course (Linuxシステム管理コース)を普及したいと考えている。このコースは、参加者にLinuxシステムを健全に保つツールを与える。実習には、Linuxシステムのインストレーション、故障探査、及び保守が含まれる。
● テキサス・インスツルメント、RidgeRun及びDSP
迅速なリアルタイム・アプリケーション開発を可能にする共同作業を拡張して、テキサス・インスツルメントとRidgeRunとは、TIの新システムレベル・デジタル信号プロセッサdigital signal processors (DSP)用の埋込Linux開発セットが利用出来ると発表した。TIのプログラマブルDSPを用いるRidgeRun DSPLinux OS とBoard Support Package (BSP)の組合せで、「リアルタイム埋込アプリケーション開発者のため、コスト、消費電力及びボード空間を40%減少する筈である」
はじめに
個人ウエブサーバーは、今日ほとんどのLinuxユーザーが持っており、ある人はこれを用いて実際にコンテンツをサービスし、他の人はPHP又はGUIプログラムの開発に使っている。私のようにブラウザを経由して文書を読んだりゲームをしたりするだけの人もいる。Apacheウエブサーバーを走らせるのは私の用途に荷が勝ち過ぎるので、CGIとPHPを受け入れるプロバイダにアクセスしている。だから自分のマシンでこれらをサポートする必要はない。巨大なApacheバイナリを走らせることなくファイルをサービスするだけだ。
その結果、リクエストがあったとき答えるだけの簡単なマイクロウエブサーバーを持って、自分のApacheウエブサーバーを走らせるのを止めることに決めた。ディスク空間のRAMの節約をもたらした。私のコンピュータは容量が大きいので、その重要性は小さいが、新しいソフトウエアと小さいが有用なソリューションをが欲しかった。
私のウエブサーバーについて本当にやりたかったこと
通常の事柄だけで、PHPやCGIは全く含まない:
これから重要な別の事柄が導かれる:少なくともディレクトリ・インデキシングの一部はウエブサーバーがサポートしなければならない。つまり、最終URL成分がディレクトリであるときは、そのディレクトリにリダイレクトして(最後のスラッシュを付け加える)そのディレクトリ内の index.html にサーブする。(ページウエンの関連リンクを正しく働かせるにはリダイレクトが重要)。これはcronjobsによりスクリプトを自動的に走らせておこなうことが出来るが、私は簡単な組込ソリューションを好む。これはApacheインデクス機能ほど複雑でなくて、うまく働く。
短く言うと:httpプロトコルをサポートするほとんど全部のウェブサーバーを使うことが出来るが、法外な特徴は必要としない。
膨大なコンフィギュレーションが必要だろうか?
全く不要だ。外部部品をウエブサーバーのルートディレクトリに記号結合するだけで出来る。「Alias」命令その他の複雑のオプションは要らない。ウエブサーバー・ルートさえあれば結構だ。多分ポートをカスタマイズしてウエブサーバーが聴くのだろう。
次のようなコマンド行だけで、私の目的には十分だ。
"binary /path/to/webserver/root".
スタンドアローン・サーバーか?TCP ラッパー経由で呼び出すか?
TCP ラッパー法を使うことに決めた。ウエブサーバー・バイナリは、本当にリクエストがある時に呼び出されるだけだ。initスクリプトでウロウロすることはない。/etc/inetd.conf の中の簡単な行だけで、進む。
しかし、このようなソリューションは余り完璧ではない。事実、少なくはないアクセスをサーバーに計画するときは、常時働くスタンドアローンサーバーで進むのがよい。
micro_httpd
ぎこちないソリューション(Java, bash, awkで書いたウエブサーバーがある)は横において、コンパイル出来るソリューションで進むこととした。
micro_httpd と言うウエブサーバーを、http://www.acme.com/software/micro_httpd/. で見付けた。これは普通のCで書いてあり、150行ほどなので、丁度欲しいものだった。TCPラッパーから走らせることが出来、CGIもPHPでもなく、インデキシング機能を用いてファイルを普通にサービスする。
コードに私の少し加えただけで、ボックスから働いた。
micro_http のソースを把握して、アンパックする。
ルートに来て、好きなエディタを使って/etc/initd.conf をエディット、それに次の行を加え、
http stream tcp nowait wwwrun /usr/sbin/tcpd /usr/local/sbin/micro_httpd /var/httpd/wwwroot/
私の SuSE 7.2 Linuxでは、ルートとして "/etc/init.d/inetd restart" とタイプする。
上の例の "/var/httpd/wwwroot/ を自分の新しいドキュメントルートの正しいパスで必ず置き換えること。
wwwrun を有効なユーザーアカウントで置き換える、セキュリティの理由で、システムにほとんど権利のないものが好適である。
ここで試して見る。新しいWWWルートに少しhtmlファイルを置いて、規定のユーザーアカウントで読めるようにする。次いで、好みのブラウザにhttp://localhost/ を指定する。自動化されたインデキス又は自分の index.html ファイルの何れかが得られる筈だ。
ここまでは旨く行っただろうか?宜しい、君のマイクロウエブサーバーが働いている。
注記:TCPラッパーは、サーバーへのコンテンツすべてを /var/log/messages にログする。しかし、これから完全なApacheスタイルのログを期待してはいけない。次のような行だけだ:
micro_httpd[886]: connect from x.x.x.x (x.x.x.x)
一般的に、inetd から走らせることの出来るウエブサーバーは何れも、このように設定することが出来る。だから、Freshmeat.を探し給え。
終わりに
君の必要がこの程度に簡単なら、Apacheからこの最小ソリューションへの切り替えは数分で終わる。
リクエストが多過ぎると、不具合になるかと案じたが、大変良く働く。通信量の少ない簡単な個人ウエブサーバーにはこれで十分だ。
少なくとも、私は満足している。君にも役立つだろう
Tuxについての詳細は, Red Hat's Tux 2.1 manual. を参照。Tux は標準kernelの中にあると思ったが、2.4.17, の中には見あたらないので、捜して欲しい。 -Iron.]
広告にあった新ゲーム"cuyo" をダウンロードすることにした。ウエブサイトに行ったら、−eメールでは利用出来るDebianアーカイブのことが説明してあったが−パケージではなくソースtarballしかなかった。大したことはない−前にやったことがある。
tarballを、ダウンロードtarball記憶の目的で特に創った私の "/home/ben/TGZs" サブディレクトリにダウンロードした後、そのコピイを "/tmp" に入れた。ここでソースをコンパイルする。ホーム伸したのディレクトリ "~/tmp" でおこなうのを好む人もいるが、その理由は "/tmp" がブートアップで通常掃き消されるので、そこでのコンパイルが全く悪いとマシンが止まってしまうからだ。この考えが悪いとは思わないが、自分のLinuxを信じて、私のやり方で進める。
ファイルの名は、"cuyo-1.03.tar.gz" なので、有用なファイルに入れる言葉は、
tar xvzf cuyo-1.03.tar.gz
である。これは、"cuyo-1.03" と言う名のディレクトリを "/tmp" の中に創る。
(実際にやったことは、Midnight Commanderを使ってtarballの中身を眺め、第二ウインドウに"/tmp"を開いて"F5"をヒットして圧縮ディレクトリに入れた。上記は人手でおこなう人のため書いた)
プログラム作者の中には、不親切でtarballを作らないで人がいて、ファイルの全リストが現行ディレクトリにダンプされてしまう。それがホームディレクトリだったりしたら悲劇だ。幾つかのファイルとディレクトリが元のものと混ざり合う。同じ名のファイル(上書きはしない)やディレクトリ(中に詰め込む)があるといよいよ混乱する。私がtarballを見てコピイする理由だ。 Midnight Commander などtarballの中身を見る能力のあるファイルマネージャを使わない人は、下記だけをおこなう:
tar tvf <filename>
これは内容を示す−すべての前にディレクトリ名が付いていないときは、気を付ける。しなければならないのはディレクトリを作ること(tarballの"progname"と同じにしておくと、後のトレースが楽)と、ファイルのその中にuntarすることだ。
mkdir rudeprogram-6.66 tar xvf rudeprogram-6.66.tgz -C rudeprogram-6.66
これで、"rudeprogram" tarball からのすべてのファイルが、特定のサブディレクトリに抽出される。
幸い、"cyro"の著者は親切で、それ自体のサブディレクトリにtarされている。中には "README" と "INSTALL" を含むファイルのリストがある。最初のものは、作者の紹介、推薦などである。第二は標準のもので、"configure" の操作を説明する。"configure" は、システムを正しく点検してプログラムのコンパイルに必要なMakefileを設定する "autoconf" が作る、極めて賢いプログラムだ。これの大きい利点は、作者がプログラムを注意深く作っていると、"configure" がMakefileをUNIXの何れのバージョン−及び多分別のOS−でも作成する。
脇道にそれるが、プログラムの中には簡単で"configure"を必要とせず、Makefile と一緒に来るものがある(これらは大文字か、又は全部小文字)。その他には、簡単だが−"progfile.c", 又は "progfile.cc" しかないものがある。これらのコンパイルは、前の場合は単に "make"を走らせ、後の場合は"cc progfile.c -o progfile"を走らせる。
兎に角−私は"cuyo"サブディレクトリで"configure"を走らせる。暫く経つとMakefileを構築する。一寸問題があった。"configure"が走るとき不具合があるとメッセージをプリントする(通常は止まってエラーをプリント)。貰ったメッセージは−止まらないで−
checking the Qt meta object compiler... (cached) failure (Qt メタオブジェクトコンパイラ点検中・・(キャッシュ)失敗
configure: warning: Your Qt installation seems to be broken!
(コンフィギュア:警告:Qtインストレーションが壊れています)
だった。兎に角、makefileは構築した。通常、致命的でないエラーは、プログラムの特性のどれかは得られないが、コンパイルはすることを意味する。試して見よう。
そこで、コマンド行で"make" とタイプして"make" を走らせる。これは規定値で"Makefile" を読み取る。続いてtargetで"all"を規定したコマンドを入れると・・・、
失敗だ。
この記事を書くことに決めたのはこの瞬間だ。tarballからのインストールはLinuxユーザー全部に必要な技量なので、故障探査も含めた手順を述べようと思った。お役に立てば幸いだ。
失敗だと言った。"make" はエラー無しで走る筈だ。受け取る警告の文言は同じでないことがある。ライブラリが違うか、コンパイラが厳密な物言いをするからだが、それは大した問題ではない。コンパイルを完了しないでコンパイルから出るエラー−それが修復しなければならないエラーだ。私が見たのは、次のようだった。
Baldur:/tmp/cuyo-1.03$ make
make all-recursive
make[1]: Entering directory `/tmp/cuyo-1.03'
Making all in src
make[2]: Entering directory `/tmp/cuyo-1.03/src'
c++ -DHAVE_CONFIG_H -I. -I. -I.. -DPKGDATADIR=\"/usr/local/share/cuyo\"
-Wall -ansi -pedantic -c bildchenptr.cpp
In file included from bildchenptr.h:21,
from bildchenptr.cpp:18:
inkompatibel.h:13: qglobal.h: No such file or directory
make[2]: ** [bildchenptr.o] Error 1
make[2]: Leaving directory `/tmp/cuyo-1.03/src'
make[1]: [all-recursive] Error 1
make[1]: Leaving directory `/tmp/cuyo-1.03'
make: * [all-recursive-am] Error 2
Baldur:/tmp/cuyo-1.03$
エラーは、"In file included..."で開始される行から始まって、 "...qglobal.h: No such file or directory"で終わる。分かった・・ヘッダーファイルがないのだ。"cuyo"のソースツリーを見て、作者が自分のファイルの一つをincludeし忘れていないこと(時々あるのだ)を確かめる。忘れていない。私のものに違いない。つまり作者のプログラムをコンパイルするのに必要で私が持っていなければならないライブラリと一緒に来るファイルを、プログラムが捜しているに違いない。どれだろう?勿論、何であろうと"qglobal.h"を含むものだ。
私のシステムでは、幾つかのスクリプトを設定して標準インストレーション作業を助けている。その一つは "pkgf" だ。これは、捜すファイルが何であろうと全Debianディストリビューションから探し出し、そのファイルが存在するパケージを教えてくれる("dpkg -S <file>" とは違う、これはインストールしたパケージのみについて同じことをおこなう)。Debianを使っているなら、<ftp://ftp.debian.org> から現在の "Packages.gz" をダウンロードしそれをファイル名について"zgrep"するか、又は <http://www.debian.org/Packages> に行ってそのサーチユティリティを使えば、同じ機能が得られる。主眼は、"qglobal.h" を含むパケージを見付けて、それをインストールすることだ。
pkgf "qglobal.h"
usr/include/qt/qglobal.h devel/libqt-dev
devel/libqt3-emb-dev
devel/libqt3-dev
devel/libqt-emb-dev
うまく行った。パケージを選んだようだ。"libqt3-dev" が最新のように思える。
apt-get install libqt3-dev
インストレーションは速く終わったが・・・"make" を走らせると、同じエラーが起こる。これは駄目だ。ここで思い出すべきことは、既に"./ configure"を走らせていることだ。古い(壊れた)値が、他の幾つかのファイルと一緒に未だMakefileの中にある。そこで、時間を掛けてそれらが何処にあるか見付ける代わりに:
ben@Baldur:/tmp/cuyo-1.03$ cd .. ben@Baldur:/tmp$ rm -rf cuyo-1.03 ben@Baldur:/tmp$ tar xvzf ~/TGZs/cuyo-1.03.tar.gz -C . ben@Baldur:/tmp$ cd cuyo-1.03
つまり、"cyro"ディレクトリを消し去って、ソースの新しいコピイで置き換えた。困ったとき元のソースに戻るのは、一般的に良い方法だ。今までの作業に未練を残してはいけない。
結果は???
ben@Baldur:/tmp/cuyo-1.03$ ./configure <No errors> ben@Baldur:/tmp/cuyo-1.03$ make <lots of output elided> make[2]: Leaving directory `/tmp/cuyo-1.03/src' Making all in data make[2]: Entering directory `/tmp/cuyo-1.03/data' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/tmp/cuyo-1.03/data' Making all in docs make[2]: Entering directory `/tmp/cuyo-1.03/docs' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/tmp/cuyo-1.03/docs' make[2]: Entering directory `/tmp/cuyo-1.03' make[2]: Nothing to be done for `all-am'. make[2]: Leaving directory `/tmp/cuyo-1.03' make[1]: Leaving directory `/tmp/cuyo-1.03' ben@Baldur:/tmp/cuyo-1.03$
やった!!ノーエラーだ! "cuyo-1.03/src" ディレクトリに入ると、そこには美しい実行可能 "cuyo" がある。この時点で、(ゲームを試すのではなく)インストレーションを続けたければ、
make install
とタイプする。これはMakefileを読んで、"install"ターゲットの下で、実行可能ファイル、マニュアル、ドキュメンテーションをインストールするすべてのコマンドを実行する。しかし、私は先ずプログラムで遊び、好きかどうかを判断したい、−ほとんどのtarball makefile には"uninstall"ターゲットが含まれていない。
全tarballインストールを recap するには:
1) ディレクトリを含むか、散乱したファイルだけを含むかをチェックする。 2) "/tmp" 又は "~/tmp" の下のディレクトリにuntarする。 3) もしあれば、"configure" を走らせる 4) 普通の単一 "file.c" 又は "file.cc" であれば、"make" 又は "cc" を走らせる 5) 結果が望み通りであれば、"make install" を走らせる。
ここまでだ。ここではセキュリテイも、システム管理に関する多くのことも論じていないのに注意されたい。これは重要な関連問題だが、この短い記事の範囲外になる。賢明なシステム管理者は、紙背を読み、賢明な対策を講じるだろう。
この欄への投稿を掲載していますが、今月は一編だけでした。
ビデオメモリ John Joe
「コンピュータ馬鹿話」を読んで私の経験を申し上げます。
1996年に買ったTrident 9680 ディスプレー・カードを持っています。最近、ウインドウズとDebian/Linuxの両方で、画面の所々にしみが出ました。screen captureをしたところ、ピクセル値が悪かったので、モニターは大丈夫と考えました。リフレッシュすると、綺麗になったり、ならなかったりします。最後に、新たに古い模造 S3 カードを買ったら画面は良くなりました。S3カードのメモリは1Mです。9680カードから1Mを加えようとしました。ねじ回しを使って9680からメモリを取ろうとして失敗しました。以前にディスプリーメモリを追加したことはありません。ディスプレーメモリを壊したかと心配しました。XFree86でプローブしたら模造S3には難点があったので、9680を元に戻しました。今回は画面が良くなりました。
ねじ廻しで9680上のメモリに触ったとき、その静電気が放電したのだろうと思います。
新年から、新シリーズ「LGの華やかな時期」を始める。これは、既刊の陽気な引用と画像の復習だ。今月は1号から11号まで、1995年7月号から1996年9月号までを振り返る。
John Fisk −傑出したLG創始者、1号−8号の編集者、週末メカニック欄の創始者、でオールラウンドプレーヤ−が、二つのLGスローガン/目標/役割の声明を8号以前に紹介した。それは、Linuxを少しでも面白くすると、アイデアと発見を共有するだった。
#1号では、Johnが「ならば、LGとは何か」を説明し、「主に書き、うろつき、その他で・・・うまく行くまで又は壊れるまで、物事をいじくり回すと、Linuxが分かり始める。同じ船に乗るなら・・・漕ぎつづけろ」と答えた。
#2号では、アーカイブのホストを見付けるまで何号か掛かったが、LG FTP ファイルの最初のヒントを示した。また、LGの利用出来るフォーマットに関して意見を述べ、Johnは「誰かがPostScript ファイルの問題を出すなら・・ノーだ」と言った。
Johnの書くスタイルの典型は、これだ:
su
cd / ; rm -rf *
#3号では、最初のLG FAQ、最初のMailbag及び最初の2-Cent Tipsが始まった。幾つかの引用:
#9号はまた、TWDTファイルの開始でもあった。John Fisk はLG全部をHTMLファイルで発行した。Margieは、各記事を別々のファイルで示すのが便利であることを見出した。しかし、LGに最も要求された特徴は、直ちに元の1ファイルフォーマットに戻った。Margie は最後に降参して「いいわよ。本当に馬鹿げている」と言い、TWDTが各号で並行的に発行された。数年後に爆発した論争のため、今では誰も「馬鹿げた」とは言わないが、それについて読むには将来の「LGの華やかな時期」を待たなければならない。だからこれを婉曲に「TWDT」及び「すべて1ファイル」と言う。
Margie の最初の問題はまた、LGが今でも使っている沢山のアートワークとフォーマットスタイルを導入したことだ。しかし、ロゴは変わった。それは次のようだった:
#11号、1996年10月号には、表題ペイジの左側にバインダリング、我々が時々再使用する共通アートワーク(新聞を読むペンギン、車のフードの下を覗く週末メカニック)、John Fiskの最初の週末メカニック欄、 Michael Hammelの最初のGraphics Muse欄などがある。#11号にはまた、スローガンを「Linuxを少し楽しく」から、ジャック・オレントンの画像の付いた「Linuxを恐れられなく」と変えて、ハローウイン伝説となるものを開始した。。
「全くviトリックでない、私の好きなviトリックに君も興味があると私は考えた」から始まる Rick Bronson's thumbs-up signature,及び John R Potter's 2-Cent Tip を抜かしてはいけない。
今月Debianに新しいゲームが現れたので取り上げる。Debianの説明がある。
目的は、似た色をまとめること。それらは直線でなくとも、隣り合うだけで良い。
似た色が十分な数だけまとまると、「プッ」と音がして消える。
そして目的不明のパックマンのような幽霊が現れる。
片側が底の線を取り去ると、底の線が別の側に移る。前の図では草が右側に移っており、そのため草の層が二重になっている。次の図では、草の層が上に上がり、幽霊の列が右に動いて、その下に入る。
Benは、ウインドウのサイズが変えられないと嘆いている。そのため、800x600のウインドウ全部を占めるのでタスクバーが見えなくなるとの問題が生じた。私の場合は、画面が1152x864なので問題はない。
次のバージョンでは、もっとスマートなテーマになることを望む。
LaTex
先ずLaTexの定義をしてその目的を述べる。LaTexは、Donald E. Knuth教授が開発したTexタイプセットシステム用の巨大なアドオン・マクロ・パケージだ。細かいことを気にしなければ「LaTexシステム」又は単に「LaTex」と言うとき「TexプラスLaTexマクロ」を意味する。LaTex自体は、Texが協力であることを見出したLeslie Lamportが書いたが、毎日の使用には難し過ぎた。そこで Scribe を真似てLaTexを修正した。 Scribe は物理的マーカップより論理構造に重点をおいている。(HTMLに慣れた人のため解説すると、tag <em> が倫理マーカップの例で、それに相当する物理的マーカップは tab <i>だ)
LaTexを用いて、普通のコンピュータユーザーが、生産用の品質で文書をタイプすることが出来る。作品や書物を自分のコンピュータで作ってディスケットを印刷屋に持っていくと高品質の印刷が出来る。それをまとめれば本にもなる。
以下の章でLaTexを紹介するが、LaTexを習いたい人には短すぎる紹介は推薦しない。ネット上で95ペイジの文書が無料で手に入る。詳細は追加文献を参照されたい。
LaTeX は、ほとんどのLinuxディストリビューションでインストールされる。コマンド行から
latex --version
と聞くと、自分のマシン上で利用出来るか否か分かる。私のシステムは下記で返答した。
TeX (Web2C 7.3.1) 3.14159
kpathsea version 3.3.1
Copyright (C) 1999 D.E. Knuth.
Kpathsea is copyright (C) 1999 Free Software Foundation, Inc.
There is NO warranty. Redistribution of this software is
covered by the terms of both the TeX copyright and
the GNU General Public License.
For more information about these matters, see the files
named COPYING and the TeX source.
Primary author of TeX: D.E. Knuth.
Kpathsea written by Karl Berry and others.
極めて短いが完全なLaTex文書の例を示す:
\documentclass{article}
% preamble
\pagestyle{empty}
\begin{document}
% body
Here comes the text.
\end{document}
各LaTeX 文書は、前書きと本文とから成る。前書きは文書クラス \documentclass[options]{class}から \begin{document}(これ自体は除く)までである。本体は \begin{document}から\end{document}までの全部である。
例の前書きは、一つだけのコマンド, \pagestyle{empty},を含む。これはLatTexに、ヘッド、ペイジ番号などのペイジ飾りをしないことを命じる。%記号は、それぞれの行末まで伸びるコメントを導き出す。
この簡単なルールを、以下の二つのパラグラフに三つの変形で適用すると、結局同じタイプセットになる。各行のはじめに行番号を入れて、パラグラフを分ける空白行を示した。番号はテキストの一部ではない。
1 I am a short sentence in the first paragraph.
2
3 I'm the only sentence in the second paragraph.
1 I am a short sentence
2 in the first paragraph.
3
4 I'm the
5 only sentence
6 in the second
7 paragraph.
1 I am a short sentence in the first paragraph.
2
3
4 I'm the only sentence
5 in the
6 second paragraph.
重要な特殊文字少数を、テキストへの挿入法と共に示す。
\dots'' 又は '' \/''. など
''\\'' は、今のCコンパイラが仮定するような単一のパックスラッシュを挿入しないことに注意。コントロールシーケンス ''\\'' はラインブレークを挿入し、文字上のバックスラッシュは、'' $\backslash$''で作る。最も混乱するのは、'' \ ''−これは空白スペースの続いたバックスラッシュ−、もまたコマンドであることだ。これは所謂るコントロールスペース、つまりパラグラフの章で説明した通常のスペースのように呑み込まれることは絶対にないスペース、を挿入する。
文字通りの曲がった括弧は、'' \{'' 及び '' \}''のように、それらをバックスラッシュで括ると得られる。.
コメントは行末の新行文字までで、これを含む。このようにLaTexコメントは、一般的プログラム言語の、新行文字を除外する一行コメントとは異なる。ユーザーに取ってこれは、行をコメントで終えると、新行をマスク出来ることを意味する。.
Hessenberg-%
Triangular % <- note space directly in front of the %-sign
Reduction
は下記と同等である。
Hessenberg-Triangular Reduction
文字通りの%記号をタイプするには '' \%''.を用いる
シーケンス math は算術タイプセットモードで行中にタイプセットする。ドル記号を文字で選るには"\$"を用いる。
下表にLaTeXが特殊に扱うASCII文字をまとめる。表の右端の欄は、普通のASCII文字をテキスト中に入れるための可能性一つ以上を示す。脱字記号と波線から分かるように、\charcode_number で、code_number に10進文字番号を入れるとASCII文字を文書に入れることが出来る。
| 名称 | ASCII | LaTeX |
| シャープ | # |
\# |
| ドル | $ |
\$ |
| パーセント | % |
\% |
| アンパサンド | & |
\& |
| 乗算記号 | * |
* or $*$ |
| 減算記号 | - |
$-$ |
| より小記号 | < |
$<$ |
| より大記号 | > |
$>$ |
| バックスラッシュ | \ |
$\backslash$ |
| 脱字記号 | ^ |
\char94 |
| 下線 | _ |
\_ |
| 曲げ括弧 | {, } |
\{, \} |
| 縦線 | | |
$|$ |
| 波線 | ~ |
\char126 |
\raggedleft'' 及び '' \makebox'' は1種のコマンドで、'' \\'' や '' \"'' は2種のコマンドである。アーギュメントは、'' {'', ``}'' で括ってコマンドに渡す。空のアーギュメントは省略することが出来る。
例:
\raggedleft{} % アーギュメントなし
\raggedleft % 同上
\makebox{Text inside of a box.} % アーギュメント一つ
\parbox{160pt}{This text is
typeset inside of a box.} % アーギュメント二つ
コマンドに渡すアーギュメントの数は固定されている。しかし、コマンドによっては、オプションのパラメータを受け取る。これらは角括弧(”['', ”]'') で渡され、ほとんどのUN*Xユティリティプログラムでオプションがアーギュメントの前に来るのとと同じように、通常、アーギュメントの前に来る。
例:
\parbox[t]{10cm}{I am a top-aligned
paragraph.} % オプション一つ、アーギュメント二つ
ここで t は、オプション・パラメータである。
アーギュメント無しでタイプ1 コマンド名に続くスペース (上の二番目の "`\raggedleft'' など) は「呑み込まれて」出力には渡されない。
\begin{environment}
環境中のテキスト
\end{environment}
環境(environment)はその中のテキストの見掛けを変える。環境は並び、余白の幅、その他多数の事項を管理する。あらかじめ決められた環境には: center, description, enumerate, flushleft, flushright, itemize, list, minipage, quotation, quote, tabbing, table, tabular, verbatim, verse である。
環境はネストする。例えば、引用を余白に溢れさせたいときは、flushright 環境と quotation 環境とを用いる。
\begin{flushright}
\begi{quotation}
Letters are things, \\
not pictures of things. \\
-- Eric Gill
\end{quotation}
\end{flushright}
環境は、その中にあるテキストに影響するだけである。これは、環境内で起こる字下げなど、すべての変更を閉じ込める(そう−グローバル変数を変えない限りだが、そのやり方は述べないので、安全だ)。
LaTeX は、documentclass に応じて四つの表題レベルを見分ける。クラス article は、三つの章分けレベルを有し、クラス book と report とが4番目で最高の表題レベルとなる。
\chapter{heading} % クラス book 及び report についてのみ
\section{heading}
\subsection{heading}
\subsubsection{heading}
パートIで述べたPODのように、章分けはセパレータの働きをすることに注意。これらは開始マーカーと終了マーカーを用いてテキストを区分けすることをしないで、見掛けだけでテキストを区分けする。この点が、来月号で述べる DocBook と異なる。
LaTeXには、三種類のリスト作成環境が付いて来る。
である。これらはHTMLの無番号リスト、番号付きリスト、定義リスト、又は、PODの =item *, =item 1, =item term リストにそれぞれ相当する。
項目自体は、" \item'' を用いて導入する。項目は一つ以上のパラグラフで構成することが出来る。
説明リストについては、オプションのパラメータを、'' \item[term]'' のように term を規定して '' \item'' に与える。'' \item[term]'' に続くテキストは term の定義である。
例:
What emacs can do for you:
\begin{itemize}
\item Cut and paste blocks of text
\item Fill or justify paragraphs
\item Spell check documents
\end{itemize}
Starting emacs for the first time
\begin{enumerate}
\item Start emacs from the command line:
\texttt{\$ emacs}
emacs will show you its startup screen and soon switch to a
buffer called \texttt{*scratch*}.
\item Hold down the Control~key and press~H. You see a prompt
at the bottom of the screen (or emacs window).
\texttt{C-h (Type ? for further options)-}
\item Press~T to start the emacs tutorial.
\end{enumerate}
Some emacs commands:
\begin{description}
\item[C-x C-c] Quit emacs.
\item[C-x f] Open a file.
\item[C-x r k]
Kill rectangle defined by mark and point, this is, by the
active region.
\end{description}
相互参照にはすべて、参照元(リンク)と参照先(アンカー)が必要だ。LaTeX のアンカーは、 \label{anchor-name}を用いて挿入する。各アンカーは特定のペイジの特定の章に置かれる。これら二つの情報は、文書内の任意の場所で、 \ref{anchor-name} と \pageref{anchor-name} を用いて検索される。
\ref を使う例:
\section{Setup}\label{section:setup}
...
\section{Summary}\label{section:summary}
As has been pointed out in section~\ref{section:setup} `Setup', ...
\pageref を使う例:
\section{Setup}\label{section:setup}
The steel used in the sample chamber is alloyed with Ti (0.5\%),
Cr (0.1\%), and Mn (0.1\%).\label{definition:chamber-alloy}
\section{Experiments}\label{section:experiments}
For sample chamber is made of stainless steel (see
page~\pageref{definition:chamber-alloy} for the exact
metallurgical composition), ...
LaTeXタイプシステムの長所の一つは、ユーザーが自分のコマンドと環境を定められることだ。UN*Xユティリティの記述の中の置換可能パラメータ全部を変えたいとする。
例えば、cdをユティリティ名、directory を置換可能パラメータとするとき、
cd directory
を、例えば
cd directory
と変える。
ユティリティ名は太字で、置換可能パラメータは斜体でタイプされることが多い。だから良いソリューションは、
\utilityname{cd} \replaceable{directory}
と書いて \utilityname と \replaceable をそれぞれの字体を太字と斜体に切り換えることだ。\utilityname と \replaceable の助けを借りて、以降のコマンド行:
\utilityname{pushd} \replaceable{directory}
\utilityname{ls} \replaceable{filename}
を常に変えて、新LaTeXコマンドが
\newcommand{command-name}[number-of-arguments ]{command-sequence}
を使うようにすることが出来る。ここで command-name は新コマンドの名称で、number-of-arguments は新コマンドが取るアーギュメントの数(省略したときの規定値は0)、command-sequence は command-name が呼び出されたとき実行するLaTeXコマンドだ。
例えば、\utilityname と \replaceable を次のように定義する:
\newcommand{\utilityname}[1]{\textbf{#1}}
\newcommand{\replaceable}[1]{\textit{#1}}
あらかじめ定めたコマンド \textbfと \textit が字体をテキスト太字(数字太字の反対)とテキスト斜体に切り換える。アーギュメントは、digit が1から9までの値を取るとして、#digit により参照する。
新しく定義したコマンドの有用性の印象が得られるようにするため、テキストで述べられた各ユティリティのためインデキス登録を作るとしよう。コマンド\index{term} で term をインデキスに置く。\utilityname の定義を
\newcommand{\utilityname}[1]{\textbf{#1}\index{#1}}
と変えるだけで終わりだ。(知りたい人のため:インデキスレベルは縦線で分けるので、 \index{utility|#1} の方が、すべてのユティリティをキチンとわけるので、好ましいだろう。詳細は makeindex 文書を参照)
新環境は
\newenvironment{environment-name}[number-of-arguments ]{starting-sequence}{ending-sequence }
を用いて定義する。唯一の違いは、\newenvironment が二つのコマンドシーケンス、一つは環境を開くstarting-sequenceq、他はそれを閉じるending-sequence、を必要とすることだ。 引用のペイジの左余白に溢れさせてタイプする例に続けて、専用の引用環境を定義する:
\newenvironment{myquotation}% Note: "%" masks newline
{\begin{flushright}\begin{quotation}}%
{\end{quotation}\end{flushright}}
これを次のように使う:
\begin{myquotation}
Letters are things, \\
not pictures of things. \\
-- Eric Gill
\end{myquotation}
\newcommand 又は \newenvironmentを用いると、コマンドも環境も複数回定義することは出来ない。これらのコマンドは最初の定義にのみ役立つ。再定義をするには、\renewcommand と \renewenvironment を用いる。これらは、最初と同じアーギュメントを取る。
LaTeX は、極めて豊富な行中マークアプのセットを提供する。ここでは、Perlのやや古いフォーマットに付いて述べた三つの行中変更、強調、斜体、太字、及びタイプライト(コード)フォントに限定する。
\textit{argument} -- argument をテキスト斜体でタイプする。
\emph{argument} -- argument を強調。規定コンフィギュレーションでは、現在のフォント設定にしたがって斜体から及び斜体に切り換える。現行フォントが大文字であれば \emph は斜体を、現行フォントが斜体であれば \emph は大文字を使用する。こうしてテキストの強調部分は常に生かされる。
\textit と \emph を同時に使う理由は、異なる要求を表現するからだ。\textit は、アーギュメントが斜体字体を使ってタイプされることを無条件で要求する。\emph はそのアーギュメントの強調は要求するが、見掛けは構わない。規定値では上述のように斜体字体を使うが、\emph は太字、下線、又は作者が強調のため考える方法は何でも再定義することが出来る。コマンド名 emph は常に、強調の概念を捕らえ、実行は隠す。
\textbf{argument} -- argument を太字でタイプする
\textbf に基づいて、例えば次のように、自分の論理的マークアップコマンドを定義することが出来る:
\newcommand{\important}[1]{\textbf{#1}}
\texttt{argument} -- argument をテキストタイプライタ字体でタイプする。
\textbf のように、\texttt はユーザー定義コマンドにまとめることが出来る:
\newcommand{\sourcecode}[1]{\texttt{#1}}
LaTeX ファイルには通常拡張子 tex.が付く。LaTexはこれら tex-ファイルを、デバイスインデペンデント (dvi) ファイルに翻訳する。dvi ファイルは、ソースのバイナリ表現である。これらはコンソール上で dvisvga に(ターミナルが高解像度グラフィックをサポートするとして)、又は、例えばX11ウインドウシステムの下の xdvi で見ることが出来る。dvi ファイルは、dvips ツールを用いてPostscriptに転換されることが多い。移植可能文書フォーマットが望みであれば、pdflatex が tex ファイルを単一ステップで pdf ファイルに転換する。
latex2html
これまでのところ申し分ない。だがLaTeXでHTMLを得るには別のツール、latex2htmlが必要だ。このツールはLaTeXソースファイルを、一連のhtmlファイルに変形する。これらは多分ソースファイルの構造にしたがってリンクする。
latex2html は、 http://www.latex2html.org にホームペイジがあり、ここでダウンロード出来る。また http://www.ctan.org から又は多くのそのミラーからも得られる。自分のLinuxシステムにインストールされているか否かを見るには、
latex2html --version
とタイプすると、次のような答が出る筈だ
This is LaTeX2HTML Version 2K.1beta (1.57)
by Nikos Drakos, Computer Based Learning Unit, University of Leeds.
ほとんど何もしないでlatex2htmlを使ってLaTeX文書が翻訳できるよう変更出来る。文書の前書きに、パケージ html と makeindex が参照されていることを確かめるだけだ。つまり、少なくとも
\usepackage{html,makeidx}
をそれに付け加える。これで
latex2html my_document.tex
を呼び出せばファイル my_document.tex をHTMLに転換することが出来る。
latex2html は、LaTeX文書を一連のhtmlファイルに翻訳したとき起こる問題のほとんど全部の面倒を見るが、文書の他の部分又は他の文書への参照は、印刷物とHTMLとで考え方が異なる。LaTeX文書の断片
In the following, we summarize the findings
using a cylindrical coordinate system. See
page~\pageref{definition:coordinate-system}
for the definition of the coordinate system.
を考えて見よう。ここでLaTeXには、\pageref{definition:coordinate-system} を、ペイジ参照の参照先、\label{definition:coordinate-system}のあるペイジ番号、で置き換える義務が生じる。問題は、第一に、一連のhtmlペイジに固定した「ペイジ番号」がないこと、第二に、latex2html が、\pageref{definition:coordinate-system} を、 \label{definition:coordinate-system} の与えられたスポットへのハイパーリンクで置き換えないことだ。リンクは、グラフィカルブラウザについては黒四角、テキストブラウザについてはマーカー "[*]" で示す。全体の見掛けは下記のようで、大変見難い。これは latex2html のせいではない。
我々がLatex2html を助ける必要がある。参照を含むパラグラフは、スクリーン版、例えば:
In the following, we will summarize the
findings using a <a>cylindrical coordinate
system</a>.
に変える必要がある。ここで、HTML参照先タグを用いてハイパーリンクを示した。出力フォーマットに応じて二つの異なるバージョンが出来るようlatex2html は \hyperrefコマンドを定義する。
\hyperref[reference-type]{text for html version}{pre-reference text for LaTeX version}{post-reference text for LaTeX version}
オプションのパラメータ reference-type は参照先を選択する:
ref''
\ref が行うような、セクション番号への相互参照。 参照文はセクション番号(''4'', ''1.5.2'', ''3.4.2.1'', など)である。
page'' or ''pageref''
\pagerefが行うような、ペイジ番号への参照。参照文はペイジ番号 (''25'',''xxiii''など)
\hyperref を用いて書き直すと、我々の例は次のようになる
In the following, we will summarize the
findings using a \hyperref[pageref]%
{cylindrical coordinate system}% for HTML
{cylindrical coordinate system. See page~}% for LaTeX
{ for the definition of the coordinate system}% trailing text for LaTeX
{definition:coordinate-system}.% label the reference refers to
LaTeX はこれを次のように変え
latex2html はこれから
を作る。
参照について今出会ったようなものに関連する問題が、ハイパーリンクが役目を果たすときに起こる。HTMLでは、ハイパーリンクする文書のバージョンが大切だが、印刷文ではそれ程でない。「ここをクリック」と「この文字をペンで押せ」を比べて見よ?時には、作者が本当にハイパーリンクの目標、universal resource locator(URL)、を印刷文に含むのを望むことがある。 latex2html はこれらのニーズを賄う二つのコマンドを定義する。
\htmladdnormallink{link text}{universal resource locator}
\htmladdnormallinkfoot{link text}{universal resource locator}
両コマンドとも、HTML版でハイパーリンク <a href = "universal resource locator">link text</a> を生じる。第一のものは、universal resource locator を完全に抑制して link text をLaTaX版で与える。第二のものは、universal resource locator を含む脚注を追加する。これらコマンドの一般的利用法は、
及び
で、この場合、LaTeXの第一の結果は次のようになり
第二のものについては web site に脚注マーカーが付いて、URLを持つ脚注がペイジの下に置かれる。HTML出力は両方の場合に次のようになる。
最後に、テキストをLaTeX版とHTML版との間で行き来するコマンドと環境がある:
・\latex{short text for LaTeX only}
・\html{short text for HTML only}
・\latexhtml{short text for LaTeX only }{short text for HTML only}
・\begin{latexonly} text for LaTeX only \end{latexonly}
・\begin{htmlonly} text for HTML only \end{htmlonly}
出力の行き来は、望みのマークアップを作るlatex2html特殊コマンド又は環境がないときのみ行うことを薦める。スプリットするには両ブランチを同期させる必要があるからだ。
latex2htmlの長所短所
lshort を検索するか、又は近くのミラーを見付けるにはwww.ctan.org の検索手段を使う
初心者には Short Introduction, もLamport の本も、ハイパーテキストペイジで代える訳に行かないが、中程度のLaTeXユーザーには、印刷文書が手に入らないとき大変役に立つ。.
来月号は、DocBook
ソケットは、プロセス間でデータを交換する機構である。プロセスは、同じマシン上のこともあるし、ネットワークで接続された別のマシンであることもある。一旦ソケット接続が出来上がると、一方の端末が接続を切るまでデータを両方に送ることが出来る。
作業中のプロジェクトにソケットを必要としたので、C++クラスを開発して生のソケットAPI呼出を包み込んだ。一般的にデータを必要とするアプリケーションを、クライアントと呼び、要求にサービスするアプリケーションをサーバーと呼ぶ。私は、クライアントとサーバーがデータを交換することの出来る二つの主要クラス、ClientSocket とServerSocket を作った。
この記事の目標は、君のアプリケーションでClientSocket とServerSocket クラスを使う用法を教えることだ。先ず、クライアント−サーバー通信を簡単に述べ、次いでこれら二つのクラスを利用する簡単なサーバーとクライアントの例に進む。
2.クライアント−サーバー通信の概観
コードに入る前に、典型的クライアント−サーバー通信におけるステップの組を簡単に見る。それらステップを下表に示す
| サーバー | クライアント |
| 1. 聴取ソケットを確立してクライアントからの接続を待つ | |
| |
2. クライアントソケットを作ってサーバーへの接続を試みる |
| 3. クライアントの接続を受け入れる | |
| 4. データを送受 | 4. データを送受 |
| 5. 接続を閉じる | 5. 接続を閉じる |
基本的にはこれで終わりだ。
3.簡単なサーバーとクライアントの実現.
ここで、コードに入る。以下で、上記のステップ全部を実行するクライアントとサーバーの両方を作る。これを、一般的に起こる順序で実行する。ここで作るコードは全部この記事の4.1ファイルリストの simple_server_main.cpp と simple_client_main.cpp.にある。
自分でソースコードを試したい人のため、4.節にファイルを掲げてあり、それらのコンパイルと試験の方法が述べてある。
3.1 サーバー − 聴取ソケットの設定
先ず、クライアントの要求を聴く簡単なサーバーをつくらなければならない。サーバーソケットを作るのに必要なコードを示す:
リスト1:サーバーソケットの作成(simple_server_main.cpp の一部)
#include "ServerSocket.h"
#include "SocketException.h"
#include <string>
int main ( int argc, int argv[] )
{
try
{
// Create the server socket
ServerSocket server ( 30000 );
// rest of code -
// accept connection, handle request, etc...
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
}
return 0;
}
これが全部だ。ServerSocket クラス用コンストラクタが、必要なソケットAPIを呼び出して、聴取ソケットを設定する。詳細は隠れているので、しなければならないのはこのクラスのインスタンスを作って、ローカルポートでの聴取を始めることだ。
try/catchブロックを見られたい。ServerSocket とClientSocket クラスは、C++の除外取扱特性を使う。何かの理由で、クラスメソッドに失敗したとき、SocketException.hが規定するタイプSocketExceptionのエクセプションを投げ込む。このエクセプションを扱わないとプログラムは終了するので、扱う方が良い。上のように SocketException's description()メソッドを呼び出してエラーのテキストを入手する。
3.2 クライアント − サーバーへの接続
クライアントーサーバー接続の第二のステップは、クライアントの仕事で、サーバーへの接続を試みることだ。このコードは、今見たサーバーコードに似ている:
リスト2:クライアントソケットの作成(simple_client_main.cpp の一部)
#include "ClientSocket.h"
#include "SocketException.h"
#include <iostream>
#include <string>
int main ( int argc, int argv[] )
{
try
{
// Create the client socket
ClientSocket client_socket ( "localhost", 30000 );
// rest of code -
// send request, retrieve reply, etc...
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\n";
}
return 0;
}
3.3 サーバー − クライアントの接続を受け入れる
クライアントーサーバー接続の次のステップはサーバー内で起こる。クライアントの接続を受け入れるのはサーバーの仕事で、二つのソケット端末の間に通信チャンネルを開く。
我々の簡単なサーバーにこの機能と付け加える、最新バージョンを示す。
We have to add this functionality to our simple server. Here is the updated version:
リスト3 :クライアント接続の受け入れ(simple_server_main.cpp の一部)
リスト3 :クライアント接続の受け入れ(simple_server_main.cpp の一部)
#include "ServerSocket.h"
#include "SocketException.h"
#include <string>
int main ( int argc, int argv[] )
{
try
{
// Create the socket
ServerSocket server ( 30000 );
while ( true )
{
ServerSocket new_sock;
server.accept ( new_sock );
// rest of code -
// read request, send reply, etc...
}
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
}
return 0;
}
3.4 クライアントとサーバー − データの送受
サーバーがクライアントの接続要求を受け入れたので、ソケット接続を通じるデータ送受に入る。
C++の優れた点は、オペレータをオーバーロードさせる能力、簡単に言うと、オペレータに一定のオペレーションをさせる機能だ。ClientSocket とServerSocket クラスにおいて、私は << and >> オペレータを、使ったときソケットにデータを書きソケットからデータを読むようにオーバーロードした。簡単なサーバーの更新版を示す。
リスト4:サーバーの簡単な実行(simple_server_main.cpp )
#include "ServerSocket.h"
#include "SocketException.h"
#include <string>
int main ( int argc, int argv[] )
{
try
{
// Create the socket
ServerSocket server ( 30000 );
while ( true )
{
ServerSocket new_sock;
server.accept ( new_sock );
try
{
while ( true )
{
std::string data;
new_sock >> data;
new_sock << data;
}
}
catch ( SocketException& ) {}
}
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
}
return 0;
}
new_sock 変数は、ソケット情報全部を含むので、それをクライアントとのデータ交換に用いる。"new_sock >> data;" の行は、「new_sock からデータを読んで、そのデータを文字列変数 'data' に入れる」 との意味だ。同様に、次の行は 'data' の中のデータをソケット経由でクライアントに戻す。
注意して見ると、ここで作ったのがエコーサーバーであることに気付くだろう。クライアントからサーバーに送られたデータの各片すべてが、そのままクライアントに送り戻される。クライアントを、データ片を送って、サーバーの応答をプリントアウトするように各ことが出来る。
リスト5:クライアント簡単な実行( simple_client_main.cpp )
#include "ClientSocket.h"
#include "SocketException.h"
#include <iostream>
#include <string>
int main ( int argc, int argv[] )
{
try
{
ClientSocket client_socket ( "localhost", 30000 );
std::string reply;
try
{
client_socket << "Test message.";
client_socket >> reply;
}
catch ( SocketException& ) {}
std::cout << "We received this response from the server:\n\"" << reply << "\"\n";;
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\n";
}
return 0;
}
文字列 "Test Message." をサーバーに送り、サーバーからの応答を読んで、その応答をstd出力にプリントアウトする。
4.クライアントとサーバーのコンパイルとテスト.
これでClientSocket とServerSocket クラスの基本用法をおえたので、プロジェクト全体を構築して、試験をすることが出来る。
4.1 ファイルリスト
以下に、例のァイルを示す。。