LG 印刷中に Sklyarov/DMCA 事件に関する出来事いくつかが明らかになった。
Electronic Frontier Foundation (電子フロンティア基金)(EFF) は、米国自由貿易(FTAA)協定に米国デジタルミレニアム著作権法から反対の条項を持ち込もうとする産業界の試みに対する反対意見を述べている。(南北米州を含む自由貿易地帯を作るFTAAは未だ未完の条約である)「FTAA機構は、FTAA条約がDCMAより大きい制限を出版社に与えている場合を除き、DMCAのような抜け道防止条項の通過を国家に任せる条約文を考慮している」この問題に関心があれば、EFFにご意見を寄せられたい。
LGは月刊なので、DCMA反対運動の経過を適切にお知らせ出来ない。Linux Weekly News 、EFF home page, 及び nodmca.org や freesklyarov.org.など、他の活動家サイトを参照されたい。LWN's August 30 editorial は、デミトリが「強盗、強姦、誘拐」より重い懲役刑を宣告されるかも知れぬと皮肉っている。「米国はある種のソフトウエアが書かれないことを望んでいるとの印象を受ける。これは、汎用コンピュータが 'trusted computing platform' で置き換えられ、'seal data within domains'(データを領域内に密封)しないソフトウエアが「回避手段」として取引される将来を想像していない。正確には何の罪で、LinuxはDMCAの下で非合法になるのだろうか?書いた場所では合法なコードのせいで、プログラマが25年の刑を受ける世界では、この考えを偏執狂過ぎるとは見られないだろう」
年老いた LWN 編集者 がカナダでDCMA類似の条項を著作権法に入れることを試みている。
ところで、Slashdotは、米国ラジオ局が「広告、特許料及びDMCAについての懸念から」ウエブキャスティングのスイッチを切ったと NPR 記事 で報告している。Slashdotは続いて「人々は、制限付きの音楽で余り有益でないものは高い金を払ってオンラインで買おうとは思わない」と CNN 記事 で言っている。加えて「これは音楽産業に対する天啓だ」とも言う。
G3/G4コンピュータのメーカーTotal Impactと、PowerPC Linux 技術開発者のTerra Soft Solutionsは、Total Impactの briQ をTerra Softの Yellow Dog 及び Black Lab Linux OSと緊密に統合し販売するため提携すると発表した。Total Impact は現在、Yellow Dog Linux 2.0パケージをbriQの各ユニット販売に結合し、要求に応じBlack Lab Linuxを搭載して強化している。Terra Softは、briQをスタンドアローンYellow Dog Linux 計算ノード又はBlack Lab Linux を用いて4及び8ノードに搭載し構成して提供している。
Keyspan は、USB PDAアダプタと高速USBシリアルアダプタの新版を発表した。Linux 2.4 用の「オフザシェルフ」サポートに加え、KeyspanのシリアルUSBアダプタはまた、Windows 98、Windows Me、Windows 2000、の他Mac OS 8.6 以上をサポートする。Mac OS X 用ベータドライバも入手出来るavailable.
SAIR Linux and GNU Certification's のニュースレター9号がオンラインonline.で見られる。
IBM は、e-ビジネス用IBM "Start Now" ソリューションを発表した。中小企業が迅速に強力な、価格効率の良い、e-ビジネスソリューションを実現するのを助けるファミリである。8個のStart Nowソリューションが、e-ビジネスを初期インターネットアクセスからe-メールを経由して、検索及び情報、ウエブサイト管理、単純及び複合e-コマース、ビジネス監視、統合活動、ビジネスチャンスまでの要求を満足する。IBM Start Now ソリューションに関する詳しい情報はhttp://www.ibm.com/software/smb.
IBM は又、Linux用無料評価キットの供給を発表した。このキットは、開発者がLinux市場向けアプリケーションを作るのに役立つ。Linuxベースのアプリケーションが年40%も伸びているので、この評価キットは、各種産業用の新アプリケーションを駆り立てるであろう。詳しくは、 www.ibm.com/linux/software and www.ibm.com/linux/.
書物"Advanced Linux 3D Graphics Programming"が発行された。最初の"Linux 3D Graphics Programming"の続編である。この2巻目では、Linuxと基本的3Dグラフィックに習熟したプログラマに、3D理論のまとまった概観とゲームのような大型会話型アプリケーション・プログラミングの文脈内で練習を提供する。織物と光のマッピング、Blender,におけるモルフターゲットの作成、IKアニメーションの3Dエンジンへの移植と作成、BSPツリー、ポータル、レベル編集、粒子システム、衝突検出、デジタル音響、コンテント作成システム、などの話題を満載している。内容目録はonline で、購入は purchase online.で。
UnixBoulevard.com は、Unixベースのサーバー又はネットワークを使用、管理する個人及び企業用のウェブ位置選択として設計された無料のサイトである。このサイトは、製品と技術支援と同時にUNIX社会ようフォーラムを提供してメンバーに会話して貰う。
Linux NetworX は、Evolocity クラスタをGX Technologyの地震画像アプリケーションで働くよう最適化し、波動方程式及びキルヒホッフプレスタック深度移動とプレスタック時間移動などの処理を実行する。42ノードの Evolocity システムには、1.2 GHz AMD Athlon MP プロセッサ84個が含まれており、1.5GBのメモリを含むノードと、冗長用に10/100イーサネットネットワークが付いている。GX Technology はまた、inux NetworX ClusterWorX 管理ソフトウエアツールも利用し、システム安定性を保証する現行サービス協定に署名した。
メキシコ派 (Red Escolar)のLinuxプロジェクトが失敗した fails。主として"winmodem"問題によると思われる。もっと積極的に、Linuxはコロラド派領域内で役割を見出すと思われるfinding a role 。ニュースは Slashdot.。
CanadaComputes.com は現在利用出来るLinuxブラウザの纏め round up を持っている。Linux Journal ウエブ記事:
Suite101.com は新Linux サイトを加えて Windows ユーザーにLinuxに代えても同じであることを説明している。
The Register は、規定値インストレーションの幾つかのRed Hat 6.2 システムが、侵入者を同定するためわざとオンラインに残すセキュリティ調査プロジェクト project 中に72時間壊れた、と報告した reported 。
利用性と美観の観点からWindows XPベータをLinux Mandrake 8.0とを比較した評価Evaluation では、Windowsは前より良くなっている。Microsoft はLinuxの仕掛けを真似ている。
ユーザーに優しいサイトに関するRPM調査ペイジ Search page 。
Slashdot は、初心者用に最良のLinuxディストリビューションのある最新Slashdotトークバックthread を有する。
The State
of Corporate IT: A case for Linux.
「多くのアカウントによれば、企業が直面するオーナーシップ増加の最大コストはライセンス関連であった。NTが主流になるにつれ、ライセンス条項が特殊なものとなって効果になった。
この物語は、Unix/Novell
からNT
に転換した雇用企業7000社を追跡した。「管理の容易さとオーナーシップの安さ」のためだったが、月日とともに管理をライセンスコストが急上昇した。元のUnixとNovellプラットホームは、ファイル、プリント及びメイルs−ばーを単一サーバーに渡した。−NTはサービス毎に1台のマシンに加えそれぞれの専用バックアップを必要とするが−
Red
Hatは、サイト訪問に単一のペンティアム級システムを持ち込み、その技術者が早くからおこなった聞き込みのお陰で、そのボックスをネットワークに組み込み、最も多忙の一セグメントに対するファイル及びプリントサーバーリクエストすべてを関し4時間以内に取り上げることが出来た。このシステムは次の10営業日の間、停止時間無しで働いた−NTマシンではそう簡単には出来ないことだ。Red
Hatは有力な協力者あることを証明した。インフラストラクチャ全体の交換を推進しようとするのでなく、補完として働かせた。−数ヶ月後、市場が未だ軟化していて、ボトムラインが株主に取り次第に重要になって来たとき、チームは選択が正しかったと感じた」
ロサンゼルスタイムス Los Angeles Times には、Windowsが到る処で世界的な破滅を生じる未来の世界に関する科学小説 science fiction story が載っている。Slashdot. 提供
TimeGate Studios, Inc. と Loki Software は、Linuxプラットホーム上の不滅の王者Kohanが、http://www.lokigames.com/products/demos.php3 で自由にダウンロード出来ることを誇らしく発表した。詳しくは game site. を訪ねられたい。予約注文は Loki webstore.から可能。
No Starch Press とLoki Software は、Linux用ゲーム開発のための完全で信頼出来るガイドの立ち上げを発表した。PROGRAMMING LINUX GAMES: LEARN TO WRITE THE GAMES LINUX PEOPLE PLAY(2001年8月, 1-886411-49-2, $39.95, 432 頁ペーパーパック、 http://www.nostarch.com/?plg)は、単純直接媒体層(SDL)に焦点を当て、重要なLinux開発ツール及びゲームAPIを通じて、読者を指導する。 Loki Softwarのゲーム主任が書いたこの本はLinuxゲーム開発者の究極資料となるであろう。書店、Loki Software (http://www.lokigames.com/orders)、又はNo Starch Press (1-800-420-7240, http://www.nostarch.com/).から入手出来る。
eVision は、Linux用JavaベースSDK、eVeビジュアルサーチのバージョン2.1公表ベータのリリースを誇らしく発表した。このツールキットにより、Linux開発者は、キイボードとテキストではなく画像とビジュアルを同じように使うサーチアプリケーションを開発することが出来る。ユーザーがサンプル質問画像又は部分画像を選ぶと、サーチエンジンが、色、肌合い、形、3D陰影の点で対象物と視覚的に似ている他の画像を見出して格付けする。この技術は、画像コンテント、ビデオコンテント、オーディオコンテント及びデジタルパターンの何れにも適用出来る。http://www.evisionglobal.com/developers/sdk/で、SDKの無料500画像限定版ダウンロードのサインアップが出来る。
Appligent, Inc. は今、無料ユティリティを提供している。APStripFilesは、付着又は埋込ファイルをPDFドキュメントから除去sるうコマンド行アプリケーションである。システムに悪意のあるPDFファイルが付着するのを防止することが出来る。
AIX、HP-UX、Sun Solaris 、Red Hat Linux用のAPStripFilesは、無料で下記からダウンロードすることが出来る。http://www.appligent.com/newpages/freeSoftware_Unix.html
ご機嫌いかがですか?僕はA級試験を終えた処です。先月ウイークエンドメカニックを書かなかったのはその為です。
A級試験(大学入試です)を終えたので、悲しいけど学校を休みました。そこでLinuxに割ける時間が増えたと言う訳です。
インターネットは急速に発展し、ほとんどすべてのISPで自分のウエブペイジを公開できる。これはコンピュータ(ホスト)とApacheなどウエブサーバー・プログラムを用い手おこなう。他にもあるがApacheが最も広く使われており、安定している。
「だが、これをローカルマシンで使えないか?」と思うだろう。Apacheを走らせるのは、大量のHTML文書があるとき、優れた情報記憶手段となる。LDPのハウツーとLinux Gazetteの記憶にApacheを使った!!
RPMファイルフォーマットを使うディストリビューションを使っているなら、次のようにタイプして、Apacheがインストールされているかどうかを調べる。
rpm -qa | grep -i apache
うまく行くと、次のような行があらわれる:
apache-1.3.12-95
これはApache ウェブサーバーが搭載されていることを示す。システムにApacheが搭載されていなければ、搭載する必要がある。多くのディストリビューションはApacheが付いてくるので、ディストリビューションCDに入っている。入っていないか、君のディストリビューションがRPMフォーマットをサポートしていないなら、http://www.apache.org/で入手出来るtarred/gzipped format (*.tar.gz)にあるソースファイルをダウンロードしなければならない。ダウンロードしたら次の方法で搭載する。
1.ルートとしてログインする:
2.ファイルを Gunzip/untar する:
tar xzvf /path/to/tarfile/apache*.tar.gz
3.新たに作った Apache ディレクトリにcdする:
cd Apache*
4."configure" スクリプトを走らせる:
./configure
5.これに数分かかる。成功したら、"Makefile" と言うファイルがディレクトリの中にmakefileされている筈だ。なければ、コンパイラプログラム(C, C++, g++など)、又はヘッダファイルがないか、Kernelソースファイルを搭載していないかだ。makeユティリティが搭載されていない可能性もある。これらを搭載すること。
コンフィギュアが終了したら、次のようにタイプしてファイルを "make" する:
make
このステップには時間が掛かる。マシンが古いと特に掛かる。
makeにエラーがないとすると、最後におこなうのはコンパイルしたファイルの搭載で、次のようにタイプする:
make install
これでApacheが搭載された筈だ。Apacheの搭載/コンパイル中エラーに遭遇したら、付属文書を調べること。"make"処理の間、情報が画面にエコーされる筈だ。Apacheコンパイル中に繰り返しエラーが出るときは、次のコマンドを入れる。
make -k all
このコマンドは、途中でエラーに遭遇しても、強制的に継続させる。だが、これは最後の解決策だ。Apache文書を読めばほとんどのコンパイル問題は解決する筈だ。
搭載を終えたらスタートだ。"httpd"デモンを使う。Apacheは規定値ではrun-revel中に自動的に走るので、マシンをリブートしていないときは、ユーザー "root" に続けて次をタイプする:
httpd
画面に何もエコーしないで、プロンプトが返る筈だ。"httpd"デモンが走っているのを確認宇するには、古い "ps" を使う:
ps aux | grep -i httpd
上のコマンドは、全プロセスを(ttyに付属しないものも含めて)リストアップした上で、そのリストをgrepコマンドにフィルタ(パイプ "|")する。これは"apache"の表現に一致する。スイッチiは、ケースセンシティビティを無視する。
数多くの行が出る筈だが、その内一つは次のようになっている:
wwwrun 1377 0.0 2.0 4132 1340 ? S 11:09 0:00 httpd
これは、Apacheが走っていることを示す。そのコマンドの結果が単に"root blah blah grep -i httpd" であるときは、httbdをもう一度はしらせなければならない。同じメッセージが続くようなら、 init 6に切り換える。
"httpd"デモンが働くことを確認したので、実際に使える。ウエブブラウザ(Netscapeなど)を開いて、次のURLを入れる:
http://localhost
この種のウエブペイジが出る筈だ。これは通常Linuxディストリビューション毎に異なる。SuSeボックスでは、上部中央にSuSeマスコットのあるSuSeデータベースが出る。
見えているのはサイト"localhost"にあるメインペイジだ。このペイジは次のディレクトリに記憶されている:
/usr/local/httpd/htdocs
このディレクトリは特別名 DocumentRoot.を持つ。実際のパスはシステムにより異なるが、名前は不変だ。このディレクトリの中に幾つかのファイル、特に *.html ファイルがある。 "http://localhost/"に行ったときロードされるファイルはindex.htmlファイルだ。やったことは、"htdocs" の中に"oldhtdocs"と言うサブディレクトリを作り、すべてのファイルをその中にコピイした。こうして新しく出発する。必要ならオリジナルも持っている。
ノンルート・ユーザーは DocumentRootフォルダーの読取書込が出来ないことにお気付きだろう。この問題を避けるには、次のコマンドが"/path/to/htdocs"を正しいパスで置き換える:
chmod +rw /path/to/htdocs
ファイルが"http://localhost/" のためうまく置かれたが、apacheをコンフィギュアする方法は?一寸待って欲しい。探しているファイルはhttpd.conf で、普通 "/etc/httpd" 又は"/usr/local/apache"ディレクトリにある。SuSE とMandrakeシステムでは、後者が規定値の場所である。以下の章では各種カストマイズを実行するのに"httpd.conf" を用いる。
ほとんどの人が、チルド記号(~)の後に名前と(/)が続くURLに行ったことがあると思うが、意味は分かっているだろうか?URL内のチルド記号(~)は、コンピュータシステム上のユーザーが、メインドメインとは別に、所有する「サブドメイン」を示す。そこで私は学校に、有効な次のURLを持つウエブサーバーを有する。
http://linuxservertom.purbeck.dorset.local/~thomas_adam/
ここでやっているのは、ユーザー"thomas_adam"のユーザーアカウント下の特別フォルダに記憶されたファイルを復元することである。この能力は、ネットワーク上のユーザーに、自分のウエブペイジを収容するスペースを与える。その方法は?簡単だ・・・
自分のスペースを許されたすべてのユーザーは、グループnogroup (又はDebianの下の www-dataなど)に入らなければならない。これは、ファイル"/etc/group" (as root)をエディットし、"nogroup"用の行をおいておこなう。次いで行の最後に、コンマで区切ってユーザーの名を付け加える。
ユーザーのホームディレクトリには、public_html と言う名のディレクトリを作らなければならない。つまり(ユーザールートとしてタイプする):
cd /home/auser/ && mkdir public_html
ここで "auser" はシステム上で有効なユーザー名である。次ぎにパーミッションを設定する。これは次のようにタイプする:i
chmod 755 /home/auser/public_html
最後におこなうのは、新たに作ったフォルダのグループをnogroupに設定することだ。これは次のようにタイプしておこなう。
chown auser.nogroup /home/auser/public_html
ここで "auser" は、適当にに付けた有効なユーザー名である。すべてのユーザーに同じ処理をする。新ユーザーの追加に "useradd"を使う考えもある。 "public_html" ディレクトリがパーミッションと共に自動的に作られる:
[実際は、public_htmlディレクトリとすべてのファイルが世界中で読めることを確かめていれば、ユーザーとグループの中身全部におこなう必要はない:
chmod -R a+r /home/auser/public_html
次ぎにやることは、自分のやることをApacheが理解しているか確かめることである。"httpd.conf" ファイルを開いて、眺めて見る。
最初から、キイワードUserDirを検索する。次のようなものが見付かる筈だ:
<IfModule mod_userdir.c>
UserDir public_html
</IfModule>
上の行のどれかの前にハッシュ(#)記号が付いていたら、それを削除する。上の行はApacheに、各ユーザー用のhtmlにはディレクトリ"public_html"を使うことを告げる。
下記のディレクトリは、付加すべき制限をApacheに告げる行だ。下記の行の場合は、読取専用となっている。これらのcomment outするには、uncommentする。
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
残ったのは、ウェブペイジの書込だ。有用な唯一の方法は、前の私の例を見ることだ:
http://linuxservertom.purbeck.dorset.local/thomas_adam/
私はロードする".html"ファイルを規定していない。既にApacheに規定値ファイルを告げているからだ。このようなファイルは DirectoryIndexと呼ばれ、ロードする規定値ファイルを定義することが出来る。次を"httpd.conf" ファイルに入れる。
<IfModule mod_dir.c>
DirectoryIndex index.html index.shtml lwm.html home.html
</IfModule>
これがApacheに告げているのは、上例のように、後の拡張ファイル(*.htm*)無しでURLが規定されたとき、フラッグ"DirectoryIndex"の後に規定する規定値ファイルを探すこと、だ。こうして、"public_html"ファイルの中に、"index.html"と言うファイルがあれば、これが規定値でロードされる。Apacheが上のファイルのどれも見出さないときは、(ロードするファイルを示さない限り)代わりにディレクトリリストが表示される。
ここで、説明しておきたいのは、ホスト名を"/etc/hosts"に規定したときは、その名を"http://localhost"の代わりに代入出来ることである。これは便利で、ここで使用している。さらに、"httpd.conf"の中で、次のフラッグを見出して localhost を君のホスト名の最初の部分で置き換えることを薦める:
ServerName grangedairy
こうして、私のホスト名は grangedairy.laptopなので、単にgrangedairyと入力する。これをする理由はAliasの章を読むと明らかになる。
最後にしなければならないのは、"httpd.conf"の変更だ。停止して再スタートしなければならない。これは、次をタイプしておこなう(ルートとして):
killall httpd httpd
この章では、Aliasesの短いトピックを述べる。"httpd.conf" ファイルを用いると、キイボードAliasを検索したいとき、aliasのリストを見ることが出来る。次のようなリストが出る筈だ。
Alias /howto /usr/share/doc/howto/en/html/ Alias /mini /usr/share/doc/howto/en/html/mini/ Alias /lg /usr/share/doc/lg/ Alias /hilfe /usr/share/doc/susehilf/ Alias /doc /usr/share/doc/ Alias /cgi-bin-sdb /usr/local/httpd/cgi-bin/ Alias /sdb /usr/share/doc/sdb/ Alias /manual /usr/share/doc/packages/apache/manual/ Alias /htdig /opt/www/htdocs/htdig/ Alias /opt/kde/share/doc/HTML /opt/kde/share/doc/HTML/ Alias /opt/gnome/share/gnome/help/ /opt/gnome/share/gnome/help/ Alias /errors/ /usr/local/httpd/errors/ Alias /icons/ /usr/local/httpd/icons/ Alias /admin /usr/local/httpd/admin/ Alias /lwm /usr/share/doc/lg/lwm/
ご覧の通り、上が示すのは、URLが例えば "/howto" で終わると、Apacheはそのウエブペイジを "/usr/share/doc/howto/en/html"ディレクトリから獲得する。繰り返すが、ロードされる規定値ウエブペイジは、前に見たように DirectoryIndexから獲得される:
http://grangedairy/howto
前に、"httpd.conf"の中でServerName フラッグを規定した方が良いと言った。これは、上のaliasのうち一つをURLにタイプしたら、URLの余分のスラッシュを置く必要がないようにするためおこなった。元々、上記のaliasには次のように、余分のスラッシュがalias名に付いている:
Alias /howto/ /usr/share/doc/howto/en/html/ Alias /mini/ /usr/share/doc/howto/en/html/mini/
これを付け加えるのが面倒になので、Apacheに代わってやること命じた。 ServerName フラッグを設定すると、次のようにタイプすれば、Apacheは私のマシン名を理解する:
http://grangedairy/howto
Apache講義の最後は、ロードの前にユーザー認証を必要とする "secure directory"(安全ディレクトリ)の設定と作成だ。Aliases例のリストの中に "/admin" 用のものがあったのにお気付きだろう。これが安全ディレクトリだ。
安全ディレクトリは、今回だけディレクトリ自体及びそれを見る方法に付いて少しApacheに告げなければならない他は、通常のaliasに付いてするのと同じ方法で設定することが出来る。安全ディレクトリmysecuredir を "/usr/local/httpd/mysecuredir/" に作りたいときは、次のようにする:
1.aliasリストに "/mysecuredir" を付け加える
alias /mysecuredir /usr/local/httpd/mysecuredir
2. alias リストで規定したフォルダーの位置を次のように変更する:
cd /usr/local/httpd
3.次のようにタイプしてディレクトリ"mysecuredir"を作成する:
mkdir mysecuredir && cd mysecuredir
これがディレクトリを作って、これに変更した
4.ここで作業が始まる。使うファイルが二つある。.htaccess とhtpasswdだ。.htaccessを先ず設定しなければならない。これは "mysecuredir" の使い方に関する情報を記憶する。
コンソールで、nano (pico の双子)、jed、emacs, などのエディタを用いて、.htaccess ファイルを作成し、次の情報を、Apacheは敏感なのでこの通りに、入力する。
AuthType Basic AuthName "Restricted Directory" AuthUserFile /usr/local/httpd/admin/htpasswd require valid-user
( ,htaccess はペリオドから始まるので、通常のディレクトリリストには示されない。見るには "ls -a" を用いる)
上のコマンドは安全ディレクトリ作成に最も普通のものである。下記の表にコマンドの簡単な説明とカストマイズの仕方を示す。
| オプションタグ | 意味 |
| 認証型 | これは認証型を設定。通常basicを常に使用する |
| 認証名 |
これは接続しようとするディレクトリのログインホックス名を設定。(下記の screenshot を参照) |
| 認証ユーザー ファイル |
これは認証の点検用に使われるファイル。つまり、ユーザー名とパスワードを記憶する(勿論暗号化) htpasswd ファイルの全パスを使用しなければならない。 |
| 有効ユーザーに要求 |
これは htpasswd ファイル中に有効登録を有する者のみアクセス出来ることを告げる。 |
注記:安全性を増すためには、htpasswd ファイルをURLからアクセス出来ない場所−ウエブディレクトリの外でaliasディレクトリの外−に置く。.htaccessファイルは、それの守るURLアクセス可能ディレクトリになければならないが、htpasswdファイルは何処にあっても良い。お望みなら同一htpasswdファイルをhtaccessファイル数個で共有することも出来る。
さて、ディレクトリの扱い方を apache に教えたので、password ファイルを作らなければならない:
5.passwordファイルを作るには、次のコマンドをタイプする(".htaccess" ファイルと同じディレクトリに):
htpasswd -c htpasswd username
ここでは"username"を自分の名前で置き換える。ユーザーをファイルに追加し続けるには、"-c" フラッグを抜かした同じコマンドを発行する。
6.お馴染みの /etc/httpd/httpd.conf をエディットして、aliasリストの最後に次を加えよう。
<Directory /usr/local/httpd/*>
AllowOverride AuthConfig
</Directory>
これを少し変更するが、apache が ".ht*" のいずれかに合ったときは、セキュリティを適用するのにのそれを使うことを確認する。これを外すには、上記に付いて、AllowOverride AuthConfig をAllowOverride Noneに変更する。
ここでストップしてhttpd デモンを再スタートする。
試す準備が整った。ファイルをセーブして、ウエブブラウザに行き、次をタイプする:
http://servername/mysecuredir
"servername" を必ず自分のhostname、又は "localhost" に変えること。うまく行くと、下のスクリーンショットと同じダイアログボックスが出る筈だ。
正しいデータを入力すると、ここから出る。しかし、何の資格証明もなく"mysecure" に接続することが出来る。これが起こると、"/etc/httpd/httpd.conf" ファイルで次を点検しなければならない。
これは、apacheが".ht*"ファイルの使用を認識するようコンフィギュアされていないためである。AccessFileNameタグを設定してApacheにこれをundoさせなければならない:
AccessFileName .htaccess
これでこの章は終わりだ。perlとcgiに付いて述べるべきだが、他に良い記事があるのでそれを参照されたい。
UPX (Ultimate Packer for eXecutables)
は圧縮プログラムである。このプログラムがおこなうことは、時効充足で、実行又はメモリパフォーマンスを示さないバイナリ実行ファイルを圧縮することである。この型のプログラムは、固定ディスクスペースが心配なあるラップトップでの使用に最も適している。私はラップトップを使用しており、固定ディスクに3.2GBしかないので、"/usr/bin"に記憶されたファイルを圧縮すると、ディレクトリの容量が半分になることを見出した。
バイナリファイルを圧縮するだけなので、"/etc"などに記憶されたファイルを圧縮使用とするのは良くない。次のディレクトリを圧縮するのは構わない。
/usr/bin /usr/X11R6/bin /usr/local/bin
一つの警告は、"/bin" と"/usr/sbin" の両方にに記憶されたファイルは絶対に圧縮しないことである。コンピュータを再ブートしたとき、Init が走らないことに気付いた。"Tom's root/boot" が出てきて、これらのファイルを圧縮すると、何かの理由で、Init プログラムに問題が生じることを発見した。
このプログラムを使うには、パケージを http://wildsau.idv.uni-linz.ac.at/mfx/upx.html. からダウンロードする。ソースパケージをダウンロードするか前コンパイル実行可能ファイルをダウンロードするかの選択肢がある。
私は前コンパイル実行可能ファイルをダウンロードし、アンパックして、 main upxプログラムを"/usr/bin"にコピイした。これでファイル圧縮が出来る。
ファイルを圧縮するには、次のようにタイプする:
upx /path/to/program/progname
これで規定したプログラムが圧縮される。ディレクトリ内の全ファイルを圧縮するには、次のようにタイプする:
upx /path/to/programs/*
これで UPX がすべてのファイルに働き、 Linux/386 フォーマットでないファイルは直ちに無視する。
作動したUPXのスクリーンショットを下に示す。
ファイルの圧縮を解くには、次のように"-d" フラッグを使う:
upx -d /path/to/prog/*
コマンド行オプションの共通リストは:
Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file.. コマンド: -1 迅速圧縮 -9 良好圧縮 --best 最良圧縮 (大きいファイルでは極めて遅くなる) -d 圧縮解除 -l 圧縮ファイルリスト -t 圧縮ファイル試験 -V バージョン番号表示 -h ヘルプを示す -L ソフトウエアライセンスを示す オプション: -q 静かに -v 言葉を多く -oFILE 出力を`FILE'に書込 -f 疑わしいファイルを強制圧縮 --no-color, --mono, --color, --no-progress 見掛けの変更 バックアップオプション: -k, --backup バックアップファイルを保存 --no-backup バックアップファイル無し[規定値] オーバーレイオプション: --overlay=copy ファイル付属の余剰データ全部をコピイ[規定値] --overlay=strip ファイル付属の余剰データ全部を削除[危険] --overlay=skip オーバーレイのあるファイルは圧縮しない
全体として、圧縮ファイルの性能は合格で、機能性の喪失は認められなかった。圧縮した後、ロードに時間が掛かった唯一のプログラムは、netscape だったが、それ程困らなかった。(netscape は沢山のメモリを使うので、ロードするのに何時でも長く待たされる).
Linux Gazette 67号(6月号)で、Mike Orr氏が、メッセージを吹き出しで表示する「お喋り牛」cowsay/cowthinkを解説された。全部Perlで書かれており表示はASCIIだった。これに興味があったので、ASCIIプログラムを探したところ、SuSeディストリビューションCDの産物にプログラムbbを見付けた。
bb は、ANSI C を使用しSVGAコンパチブルの、完全なASCIIデモだ。bbはaa_libパケージ(ASCIIアートライブラリ)を利用するので、メインパケージの他にこれを搭載しなければならない。デモは色々な模擬画面を発生する。
bbは ftp://ftp.bonn.linux.de/pub/misc/bb-1.2.tar.gz.から入手出来る。
bbはホームペイジを持っていたが、残念乍らなくなった。だが、bbはプロジェクトaa(ASCIIアートライブラリ)に基づいており、これはt http://aa-project.sourceforge.net/にホームペイジを持っている。aa ペイジは、 aview (ASCII アートビューワ), aatv (テキストコンソールでTVを見るため), ttyquake (Quakeのテキスト版), Dumb (Doom のクローン), apron (mpeg1 プレーヤ)その他のプログラムを述べる。ttyquake はgraphical Quake のインストールを必要とするので、オリジナルの Quake ゲームファイルを使用する。ある批評家は ttyquake について「この世界で人々は飢えて死ぬ・・・何人かはそれまで時間がかかる」と書いている。
bb は、コンソールから走らせるのが最良だが、下図のように X-terminal ウインドウ内で走らせることも出来る。
bb 用の有効なコマンド行オプションは:
Usage: bb [aaoptions] [number]
オプション:
-loop 無限ループでデモを演じる
AAlib オプション:
-driver ドライバ選択
利用出来るドライバ:linux curses X11 stdout stderr
-kbddriver キイボードドライバ選択
利用出来るドライバ:curses X11 stdin
-mousedriver マウスドライバ選択
利用出来るドライバ:X11 gpm cursesdos
サイズ・オプション:
-width 幅設定
-height 高さ設定
-minwidth 最小幅設定
-minheight 最小高さ設定
-maxwidth 最大幅設定
-maxheight 最大高さ設定
-recwidth 推奨幅設定
-recheight 推奨高さ設定
属性:
-dim dim (半輝度)属性の利用を可能にする
-bold bold (倍輝度) 属性の利用を可能にする
-reverse reverse (反転)属性の利用を可能にする
-normal normal (正常)属性の利用を可能にする
-boldfont boldfont (太字)属性の利用を可能にする
-no<attr> disable (つまり太字でない)
フォント表現オプション:
-extended 256 文字全部を使用
-eight 8ビットasciiを使用
-font <font> フォント選択(このオプションは、aalibが実行フォントを
決められぬハードウエア上だけに効果を持つ
利用出来るフォント:vga8 vga9 mda14 vga14 X8x13
X8x16 X8x13bold vgagl8 line
表現オプション:
-inverse 反転表現を可能にする
-noinverse 反転表現を不能にする
-bright <val> 高さ設定(0-255)
-contrast <val> コントラスト設定(0-255)
-gamma %lt;val> ガンマ補正値設定(0-1)
ディザリング・ オプション:
-nodither ディザリングを不能にする
-floyd_steinberg floyd steinberg ディザリング
-error_distribution error distribution ディザリング
-random <val> 無作為ディザリング値設定(0-inf)
モニター・パラメータ
-dimmul <val> dim カラー(5.3)に関する係数を掛ける
-boldmul <val> dim カラー(2.7)に関する係数を掛ける
規定値パラメータは私のモニターに合うよう定めた(15" goldstar)
コントラストは最大に輝度は黒色背景を作るよう設定した
この値はモニター(及びコントロールの設定)に依る
規定値設定はPCモニターにはOKの筈だが、理想的モニターは
dimmul=1.71 boldmul=1.43の必要がある。例えば、SGI の使うモニターは
この値に近い。古い14" vga モニターは高い値が必要。
来月は、マニュアルの効果的書き方その他を書きます。アイデアが枯渇するので、記事に関するご意見を歓迎します。
この記事に現れたスクリーンショットは、M4 プロセッサAnotherLevelで走る"GNU Image Manipulation Program"を使って作ったものと、 FVWM2 ウインドウマネージャのものです。
最後に、もう学校にいないので私の"n6tadam@users.purbeck. dorset.sch.uk" はもう無効です。下記の新アドレスにいます。
ご意見を下さい
ご意見、アイデアなどがあれば、下記のe-メイルアドレスをクリックして送って下さい。
mailto:thomas_adam16@yahoo.com
要約
この記事は古いSTをターミナルとしてLinuxボックスに接続するのに役立つだろう。
はじめに
この記事で述べることはAtari ST以外のボックスにも通用する。Amiga 又はSinclair QLもターミナルとして使うことが出来る。
Atari STは10年前に初めて買ったマシンなので愛着がある。未だに働いているので、ゲーム以上の用途に使おうと思った。
そこで、Linuxターミナルとして使うことにしたが、2台目のターミナルを作る気はない。単なる経験だ。
このソリューションはSTにファイルとプログラムを送ることが出来、最後には限定されたインターネットアクセスをすることが出来る。ターミナルエミュレータが良ければ、lynxとw3mをウエブサーフに、muttをメール読取に、tin又はslmをニュース読取に使うことが出来る。 Nettris のようなコンソール用2人ゲームを楽しむことも出来る。
ターミナルとは?
ターミナルとはキイボード付きのディスプレイで、所謂エスケープシーケンスでコードされた特殊属性が多分付いた入力テキストを表示する能力と、キイストロークを遠隔端に送る能力だけを備えている。
一般的にハードウエアターミナルは馬鹿で、これ以上のことは出来ない。
昔のコンピュータでは、ターミナルを用いて多数ユーザーをメインフレームに接続した。
こんな旧型ターミナルがあれば、ここに述べるのと同じ方法で接続することが出来る。
ターミナルの機能−受信、送信、表示−は、ソフトウエアを用いて容易におこなうことが出来る。これがここで述べる方法だ。STを昔のターミナルのように働かせるため特殊ターミナルソフトウエアを使用する。
必要なハードウエア
この計画には次のハードウエアが必要だ:
上記のように、Atari STマシンは、RS232ソケットと80列ディスプレイのある任意のコンピュータで置き換えることが出来る。
ソフトウエアのダウンロード又はアップロードは出来ないが、同じ方法で実際のターミナルを使うことが出来る。
Kernelには問題はない。外付きシリアルモデモを使ってネットに接続出来るのであれば、すべてはボックスの外で働く。
多くの場合、Kernelはコンパイルされているか又はKernelモジュールとして供給されたシリアルサポートを有する。もしなければ、新Kernelをコンパイルしなければならない。ここではその詳細は述べない。幾つかのハウツーがある。
ログインプロンプトをシリアルライン上に置く
このステップは、シリアルラインを通じてSTにログインプロンプトを示すのに必要だ。
先ず適切なgettyが必要だ。このプログラムはプロンプトの表示とライン上のユーザー名プロンプト入力に使われる。プログラム /bin/login を呼び出してシステムにユーザーをログインする。
gettyプロセスは全部initプロセスから生じる。initはファイル/etc/inittabから、どのgettyプロセスを生むかを知る。
ほとんどのディストリビューションはgetty又はmgetty又は両方を供給するので、これはagettyの使用に焦点を当てる。
さてbecome rootしたので 好みのエディタを使って/etc/inittab を開く。
次のステップは、ファイルにラインを追加して新gettyプロセスを生むことだ。これは次のようになる。
S0:12345:respawn:/sbin/agetty -w -h -L 19200 ttyS0 ansi
変かな? 大丈夫、中身の意味を説明する。
1の行のパーツが最左端であるとする(S0)。番号順に説明する。
ここでファイルをセーブしてエディタから出る。シェルで init q とタイプしてinittabファイルを読むよう告げる。
agettyとそのコマンド行アーギュメント
先ず、agettyにフルパスを示す。場所が不明なら、シェルでlocate bin/agetty を試す。
厚着に、以下のコマンド行アーギュメントの一つ以上を得る(例は前章を参照)
-w はagetty に、行上のCR (ASCII 13) を待ってからプロンプトを示せと告げる
-h はagetty に、行上のハードウエア・フロー・コントロール(aka RTS/CTS)を使えと告げる。
-L はagettyに、これはローカルラインであることを告げる。この時はキャリヤをモニターしない。
## これは使用するボーレートだ。19200、9600、2400 が良い値である。ST は19200以上を扱えない。
ttyS? これは使用するシリアルデバイスだ。COM1にはttyS0 、COM2には ttyS1, 以下同様につかう。モデモポートを使わないこと。シリアルポートが一つしかないときは、モデモとターミナルを切り換える。この倍委はmgettyを使う方が良い。入信と出信を同時に一線で扱うことが出来るからだ。(モデモ利用を目的とするが)。
ansi は使用するターミナル型だ。ターミナル・ソフトウエアの能力によりvt100 又はatari を試すことが出来る
疑わしいときは、シェルの man agetty を走らせるとヘルプになる。
ST 設定
先ず最初にnullモデモケーブルを用いて両マシンを接続する。STには隣に電話記号のあるソケットが着いている。これがシリアルポートだ。
DB25 からDB9、又はその逆のアダプタケーブルが必要になるだろう。STのはブロードポートであるのに、ほとんどのPCのは小さいからだ。nullモデモは、コンピュータショップで見付かる。PCのシリアルポートに合うものと、nullモデモをSTに繋ぐアダプタを買う。
ここでターミナルプログラムをSTにロードする。agettyと8N1とに同一ボーレートを与えて設定すること。Returnを数回押す。ST画面上にLinuxのログインプロンプトが出るので、ログインしてシェルとプログラムに向いたラインを使用出来る筈だ。
カースベースのプログラムを使って、ターミナルソフトウエアの能力を点検することが出来る。良いターミナルソフトウエアを使うと、lynx、w3m、mutt、viが使える筈だ。Midnight Commanderを正しくカラーで表示できるターミナルソフトウエアもある。
推奨 ST ソフトウエア
STと一緒に供給されるVT52エミュレータは、簡単な課題とテスト用に使える。これには世間並みのANSIターミナルとファイル転送オプションとがない。
STに1MB以上のRAMが装備してあれば、Rufus 又はConnectを試すとよい。
ST Termは、half-Meg STでうまく働く。VT52エミュレータとANSIエンハンサの組合せは、メモリ問題のため良い選択だ。
ANSITERM は、低解像度でカラーと80桁表示を含むANSIフルサポートを保証する。しかし、良いモニタを使わないと目を傷める。
TAZ
は、中程度モノクロ解像度で働く。これは、中解像度でペイジフリッピング及びパレット切り換え技術付き16色を特徴とする。しかし、このモードは60Hzの能力を必要とする。
インターフェイスはminicom又はtelixに似ており、それで十分だ。
私はこのプログラムを推奨する。ターミナルエミュレーションが大変良くて、見事な特性を持っているからだ。試していないがhalfmeg
STで働く筈。
必ず80 桁で使用すること、これ以下ではほとんどのプログラムが働かない
持っていれば、モノクロモニタが断然良い。 カラーは出ないが、TAZ では問題にならない筈だ。
ftp://wuarchive.wustl.edu/systems/atari/umich.eduに、ダウンロードで入手出来る STプログラムが幾つかある。
ファイル転送
この特性が、nullモデモを通じてSTを接続して、古いSTファイルをセーブしたりネットからダウンロードしたソフトウエアを使用したりする主な理由だ。
ZModem プロトコルを使用しなければならない、理由は:
ST側に必ずZModem送受信器を持つこと。
ファイルをLinuxボックスからSTに送るには、シェルプロンプトで、単に:
sz filename
別の方法は、もっと簡単に、シェルプロンプトで:
rz Zmodem
引っ掛かったら Ctrl-C を数回押す。失敗したら、linuxボックス上で rz/sz 処理を殺す。
まとめ
正しいハードウエアがあれば、物事は直線的で設定は容易い。カラクリはST側用に適切なターミナルソフトウエアを見付けることだ。
ターミナルとしての他のシステム
ターミナルとしては Atari ST に限らない。勿論、Commodore Amiga やSinclair QL も同じように使える。使用するシステムは次のパターンに合えばよい:
これでSTと同じことが出来る。.
古いマシンに興味を持たれ、イーサネット廉価版を知るのに少しお役に立てば幸い。
巨大なファイルをリンクからダウンロードしようとして、ウエブブラウザを数時間も数日間も開き放しにしたことはないか?単一ウエブペイジに40個もファイルがあって全部必要なとき、ウンザリしながら一々クリックしていないか?終わる前にブラウザが止まったらどうする?GNU/Linuxは、ブラウザに関係なく、バックグラウンドでダウンロードする手軽なツールを装備するに到った。これにより、ログアウト、中断ダウンロードの再開、ネット繁忙時期を避けたスケジュールさえ出来るようになった。
会話型が邪魔になる時
ウエブブラウザはウエブを会話的にする設計となっている−クリックすれば数秒で結果が出る。だが、最速の接続でもダウンロードに数秒以上を要するファイルがある。実例は、自分のGNU/Linux CD-ROMディストリビューションに夢中になっている人達の間のISO画像だ。ウエブブラウザの中には、メモリが漏れたり最も重要な時期に潰れたりして、長時間の使用に耐えないものがある。幾つかのブラウザをファイルマネージャに融合させても、多くは、幾つかのファイルを転送して一つに纏めるのを容易にするマルチセレクションとラバーバンド操作をサポートしない。ファイル全部が到着するまで待たなければならない。最後に、ダウンロードを始めるリンクをクリックするため、オフィスにいなければならなず、帯域幅を共有する同僚の顰蹙を買う。
巨大ファイルのダウンロードには、別のツールのセットが似合っている。この記事では、各種GNU/Linux ユテリティ、即ち lynx, wget, at, crontab, など、を組み合わせて各種の転送状況を解決する方法を論じる。少量の簡単なスクリプトも採用するので、bash シェルに関する知識が少しあると役立つ。
wgetユティリティ
ほとんどの主要ディストリビューションには wget ダウンロードツールが含まれている。
bash$ wget http://place.your.url/here
これは、FTP、日付スタンプを扱い、ウエブサイトツリー全体−注意しないとウェブサイト全体及びそれがリンクするサイトは何であろうと、繰り返しミラーすることが出来る:
bash$ wget -m http://target.web.site/subdirectory
ロードが高くなる可能性があるのでこのツールは、サーバーにおくことが出来る。これは、ミラーするとき "robots.txt" プロトコルにしたがう。追うリンクの型とダウンロードするファイル型を制限して何をミラーするか制御するには幾つかのコマンドがある。
例:GIF画像を飛ばして関係リンクのみを追うには:
bash$ wget -m -L --reject=gif http://target.web.site/subdirectory
wget はまた、不完全ファイルを与えられたとき残りのデータを追加して、中断ダウンロードを復元する(" c"オプション)。この操作はサーバーがサポートする必要がある:
bash$ wget -c http://the.url.of/incomplete/file
復元とミラーは組み合わせることが出来るので、別々のダウンロード区分にわたるファイルの巨大な集積をミラーすることが出来る。これを自動化する方法は後述。
ダウンロード中断を度々経験するなら、URLを数回試みるよう wget に命じることが出来る:
bash$ wget -t 5 http://place.your.url/here
ここでは5回で諦めている。絶対に諦めないなら "-t inf" を用いる。
プロキシ・ファイアウォールはどうなるか? http_proxy 環境変数又は .wgetrc コンフィギュレーションファイルを用いて、ダウンロードを経由するプロキシを指定する。プロキシした接続の中断接続に伴う問題は、復元に失敗することがあることだ。プロキシしたダウンロードが中断したら、プロキシサーバーは、ファイルの不完全コピイのみをキャッシュする。ファイルの残りを獲得するため "wget -c" を使うと、プロキシはそのキャッシュを点検して、既にファイル全部を入手したと誤って報告する。ダウンロード要求に特殊ヘッダを追加して、そのキャッシュを迂回してプロキシをなだめることが出来る:
bash$ wget -c --header="Pragma: no-cache" http://place.your.url/here
"--header" オプションは、ヘッダの数がマナーを任意に加えて、それによりウエブサーバーとプロキシの行動を変更することが来る。ソースが外部のリンクを経由してファイルを提供することを拒み、内容は、同じサイトの他のペイジを経由してアクセスしたときのみブラウザに引き渡されるサイトもある。"Referer:"ヘッダを付けてこれを回避することが出来る。
bash$ wget --header="Referer: http://coming.from.this/page" http://surfing.to.this/page
反社会的サイトの中には、内容を特定ブランドのブラウザのみに提供する。 "User-Agent:" ヘッダを用いてこれを回避する。
bash$ wget --header="User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)" http://msie.only.url/here
(上記チップを警告することは、コンテンツのライセンス機構を回避すると見なされることがあり、これらの行動を非合法と見なす反社会的システムが存在する。自国の法律を点検のこと。マイレージが変わるかも知れない)
ダウンロードの時刻
巨大ファイルのダウンロードを、会社のコンピュータで、共有回線を通じておこなうのであれば、繁忙時をさけてファイル転送を開始しなければならない。誰もいない事務所に残る必要はないし、夕食後リモートログインをおこなう必要もない。ジョブスケジューラを使う:
ここでは、午後11:00にダウンロードを開始する。atd スケジュールデモンがこの仕事の背後で働いていつのを確認すること。
所要日数
1個又は数個のファイルでダウンロードするデータが多く、帯域幅がキャリヤピジョンプロトコルとほぼ同じときは、翌朝出社したとき未だダウンロードが完了していないことがある。この時はジョブを打ち切って、回線を他の人に渡すのがよい。それには"wget -c" を使う。これを必要なだけ繰り返す。 crontab を使ってこれを自動化するとよい。次のような内容の"crontab.txt",と言う無地のテキストファイルを作る:
0 23 * * 1-5 wget -c -N http://place.your.url/here 0 6 * * 1-5 killall wget
これが、どのjobをどんな定期的間隔で繰り返すかを規定する crontab ファイルだ。初めの5列は、コマンド実行時期を示し、各行の残りの部分は実行内容を示す。初めの2列は、午後11時0分に wgetを開始し、午前6時0分に wgetを停止することを示す。3列と4列の * は、これら処理が毎月毎日起こることを示す。5列は、各操作を何曜日におこなうかを示す。"1-5"は、月曜から金曜までだ。
そこで毎週日午後11時にダウンロードが始まり、毎週日午前6時に進行中の wget があれば終了する。この crontab スケジュールを起動するには次のコマンドを入れる:
bash$ crontab crontab.txt
wget の "-N" オプションは、目標ファイルのタイムスタンプを点検して、一致したら、それは全ファイルが転送されたことをしめすので、ダウンロードを中止する。見るだけで放って置けば "crontab -r" がこのスケジュールを削除する。私は共有ダイアルアップ接続を用い、この方法で多数のISO画像をダウンロードした。
動的に作られるウエブペイジ
日に数回など頻繁に変更されるので、要求に応じて作成されるウェブペイジがある。このターゲットは、技術的にはファイルでないので、ファイル長さがなくダウンロードの復元は意味をなさない− "-c" オプションが働かない。例: Linux Weekend NewsのPHP-作成ペイジ:
bash$ wget http://lwn.net/bigpage.php3
#!/bin/bash #create it if absent touch bigpage.php3 #check if we got the whole thing while ! grep -qi '</html>' bigpage.php3 do rm -f bigpage.php3 #download LWN in one big page wget http://lwn.net/bigpage.php3 done
上記の bash スクリプトは、ファイルの終わりを示すストリング "</html>" が見付かるまで文書のダウンロードを続ける。
SSL とクッキー
"https://" で始まるURLは、ソース・ソケット・レイヤを経由してリモート・ファイルにアクセスしなければならない。この状況に適した簡単な curlと呼ばれる別のダウンロードユティリティがある。
要求コンテントを提供する前にブラウザにクッキーを強制送付するウエブがある。ウエブブラウザのクッキーファイルから得られる正しい情報には "Cookie:" ヘッダを追加しなければならない。 lynx と Mozilla クッキーファイル・フォーマットについては:
このサイトにこのブラウザを用いて既に登録していると仮定すると、
bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk '{printf("%s=%s;",$6,$7)}' )
が、http://www.nytimes.com/から内容をダウンロードするため必要なクッキーを構築する。w3mは、少し違うクッキーファイルフォーマットを使用する:
bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk '{printf("%s=%s;",$2,$3)}' )
ダウンロードは次のようにおこなうことが出来る:
bash$ wget --header="Cookie: $cookie" http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html
または curl ツールを用いて:
bash$ curl -v -b $cookie -o supercomp.html http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html
URLリストの作成
ここまでは単一ファイルのダウンロードまたはウェブサイト全ディレクトリのミラーをおこなった。ウエブペイジにURLの示されている多数のファイルのダウンロードに興味はあるが、サイト全部をミラーする気はないことがある。トップ100の音楽ファイルを順に表示するサイトのトップ20だけをダウンロードしたいときなどである。ファイルエクステンションだけに作用する "--accept" と "--reject" オプションは、ここでは役に立たない。代わりに "lynx -dump" を使用する。
bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep 'gz$' |tail -10 |awk '{print $2}' > urllist.txt
Linuxからの出力は次いで、各種GNUテキスト処理ユティリティを用いてフィルタすることが出来る。上の例では、"gz"で終わるURLを抽出し、これらの内終わりの10個をファイルに記憶する。可愛いいbashスクリプトコマンドがこのファイルにリストされたURLを自動的にダウンロードする。
これで Linux Gazette.の最新10号をダウンロード出来た。
帯域幅内を泳ぎ回る
帯域幅内でダウンロードする選ばれた人の一人で、ファイルダウンロードが、ウエブサーバー側の隘路だけによって遅くなっているとき、このカラクリがファイル転送処理を「狙い打ち」するのに役立つ。これは curlの使用と、目標ファイルと同じコピイがあるミラーウエブサイト幾つかを必要とする。例えば、次の三つの位置から Mandrake 8.0 ISOをダウンロードしたいとする:
url1=http://ftp.eecs.umich.edu/pub/linux/mandrake/iso/Mandrake80-inst.iso url2=http://ftp.rpmfind.net/linux/Mandrake/iso/Mandrake80-inst.iso url3=http://ftp.wayne.edu/linux/mandrake/iso/Mandrake80-inst.iso
ファイルの長さは 677281792 なので、curlの "--range" オプションを用いて、三つの同時ダウンロードを開始する。
bash$ curl -r 0-199999999 -o mdk-iso.part1 $url1 & bash$ curl -r 200000000-399999999 -o mdk-iso.part2 $url2 & bash$ curl -r 400000000- -o mdk-iso.part3 $url3 &
これは、ISO画像の異なる部分を異なるサーバーからそれぞれ転送する三つのバックグラウンド・ダウンロード処理を生じる。"-r" オプションは目標ファイルから抽出するバイトのサブレンジを規定する。完了すると、三つの部分全部を単に cat してまとめる − cat mdk-iso.part? > mdk-80.iso. (CD-R が焼ける前にmd5 hash の点検を薦める)。 "--verbose" オプションを使いながら、各 curl をそのウインドウに打ち上げると各転送の進行を追跡することが出来る。
世界中で数百万のLinuxユーザーがコンピュータの電源を入れて、OSがブートし最後に "login" プロンプトが出るまで数秒(時には数分)待っている。
コンピュータがブートストラップしているとき、画面に沢山のメッセージが出るのに気付いておられるだろう。これは後でコマンド: cat /var/log/dmesg | more を入力すると見られる。そこで問題は、メッセージの意味は何かだ。答は簡単だ:Linux教科書を見ると「これはKernel ブートメッセージを示す」など、と書いてある。じゃ、Kernel ブートメッセージとは何だ?
Linuxの内部作用を理解するには、「Linux Kernel アーキテクチャ」の正しい理解が必要で、それには努力が要る。ほとんどのLinuxユーザーにはその興味も時間もないだろう。
この記事は「Linux Kernel アーキテクチャ」の説明ではない。それには厚い本が必要だ。コンピュータシステムの最も基本的な概念−Linuxを走らせるコンピュータのブートストラップを詳細に説明する。言い換えると、電源投入から、画面にログインプロンプトが現れるまでの過程を(CLIモードを使っているとして)説明する。
注記:
1.ブートストラップとは?
ブートストラップとは、昔、(疲れて横になっているとき)ブーツを引き寄せて起立することを意味した。OSでは、処理のうち、それを実行するプロセッサのメインメモリにOSを持ち込む過程を指す。Linux Kernelの内部データ構造も始動され、変数値も設定されて、プロセスが作られる(これが後に重要なプロセスを生む)。コンピュータのブートストラップは長くて複雑な仕事だ。電源を入れたとき、ハードウエアは予期出来ない状態にあるし、RAMは働いていなくて勝手な状態にあるからだ。覚えておかなければならないのは、「ブートストラップ」は、コンピュータアーキテクチャに大きく左右されることだ。
注記:
2.BIOS とは? その作用は?
コンピュータの電源を入れただけでは使えない。RAMが起動していないし、OSがないからだ。ブートストラップを始めるには、特別のハードウエア回路がCPUのRESETピンの論理値を上げる。次いで、幾つかのCPUレジスタが固定値に設定される。レジスタには、cs (プログラム命令を含むセグメントを指すセグメント・レジスタ−コード・レジスタ) とeip (CPUがプロセッサ検出例外を発生したとき、言い換えるとCPUが命令実行中の異常を検出したときCPUが生じる例外で、これらは、CPUコントロールユニットが例外を発したときKernelモードスタックにセーブされたeipレジスタの値に依って、 "faults", "traps"、"aborts"の三つに分けられる.)が含まれる。次いで、物理アドレス 0xfffffff0に見出されるコードが実行される。このアドレスは、通常ROM(読取専用)とよばれる読取専用の特殊メモリにハードウエアがマップする。BIOS (Basic Input/Output System)は、ROMに記憶されたプログラムのセットだ。これは、コンピュータシステムを構成するハードウエアがデバイスを扱う各種オペレーティングシステムが使う間欠駆動、低レベルプロシージャから構成される。Microsoft DOS はこのようなOSの一つである。
ここで生まれる疑問は、Linuxはコンピュータシステムに付属するハードウエアの起動にBIOSを使うのか?そうではなく他の何かなのか?である。イエスなら、では何か?となるが、答は簡単でない。答は慎重に理解されなければならないからである。80386モデルに始まって、インテルマイクロプロセッサは、(論理アドレスから --> 線型アドレス--> 物理アドレスまで) アドレス翻訳を、 "Real mode" と"Protected mode"と言う、二つの違った方法で実行する。Real modeは、主として古いモデルとの互換性維持のため存在する。事実、BIOSプロシージャはReal modeで実行される。だが、Linux KernelはProtected modeでReal modeではない。したがって、一旦起動すると、LinuxはBIOSを全く使わないで、それ自体のデバイスドライバを、コンピュータ上の各ハードウエアデバイスに使用する。
ここで生まれる疑問は、Linuxが"Protected mode"を使うのは何時で、BIOSが同じモードを使えないのは何故か?である。BIOSは、作動にReal mode アドレスを使い、コンピュータの電源を入れたとき利用出来るのはReal mode アドレスだけなので、Real mode を用いる。Real mode アドレスはsegセグメントでoffオフセットなので、対応する物理アドレスは seg*(2*8)+offで与えられる(注記:セグメントデスクリプタは長さが8バイトなので、GDTまたはLDT内部の相対アドレスは、セグメントセクターの最有意13バイトに8を掛けると得られる)
では、Linuxはブートストラップの全過程でBIOSを使わないとの意味だろうか?答はノーだ。Linuxは、Kernel画像をディスクまたは他の外付デバイスから回収しなければならないとき、ブートストラップ段階でBIOSを強制的に使わされる。
この章をまとめるのは、ブートストラップ時にBIOSがおこなう主作用に似て来る。これらは次の通りだ:
3.ブートローダーとは? その作用は?
BIOSは、オペレーティングシステムKernelの画像をRAMにロードするのが主な(唯一の仕事である特殊プログラムを呼び出す(実行ではない)。このプログラムをブートローダーと呼ぶ。先に進む前に、システムをブートする各種方法を見てみよう。
ここで、システムをブートするこれら二つの方法を詳細に調べよう。
4.Linux をフロッピイ・ディスクからブートする
Linux Kernel は一枚の 1.44-MB フロッピイ・ディスクに入る(実際は、"stripped-off"型と言うRed Hat Linuxがあり、これは、Red Hat Linuxシステムを動かすのに、ほぼ2MBの物理的RAMと1.44MBのハードディスクスペースを必要とする)。だが、Linux Kernelを一枚のフロッピイに収容する唯一の方法は、"Linux Kernel Image"を圧縮することだ。ここで覚えるべき重点は、解凍はブート時にローダーがおこなうが、圧縮はコンパイル時におこなうことだ。
Linuxをフロッピイディスクからブートするときのブートローダーは極めて簡単だ。これは、アセンブリ言語ファイル/usr/src/linux-2.4.2/arch/i386/boot/bootsect.S. にコードされている。Linux Kernel ソースをコンパイルして新Kernel画像を得るとき、このアセンブリ言語ファイルから生じた実行可能コードがKernel画像ファイルの始めに置かれる。これがLinux Kernelを含むフロッピイディスクの作成を容易にする。
ディスクの第一セクタから始まるKernel画像をコピイすれば、フロッピイが出来上がる。BIOSがフロッピイディスクの第一セクタをロードすると、ブートローダーもコピイされる。ブートローダーは(物理アドレス0x00007c00に飛ぶことにより)BIOSに呼び出されて、次の作用をする。
5.Linux をハード・ディスクからブートする
Linux Kernelはほとんどハードディスクからロードされる。これには2段階ブートローダーが必要だ。Intelシステムで最も普通に使われるブートローダーの名は、LILOだ。他のアーキテクチャ用には別のLinuxブートローダーがある。LILOは、活動ディスクパーティションのMBR又はブートセクタのいずれかに搭載することができる(注記:Red Hat Linux 搭載中にユーザーがLILOをMBRに書くかまたはブートセクタに置くかの選択をしなければならないステップがある)。
LILOは二つの部分に分ける。MBRに入れるには大き過ぎるからだ。MBR又はディスクパーティションのブートセクタには、小さいブートローダーが含まれ、これをBIOSがアドレス 0x00007c00 から始まるRAMに書き込む。この小プログラムは自分で、アドレス0x0009a000に移動し、Real Modeスタックを設定して、最後にLILOブートローダーの残り部分をロードする(注記:Real Modeスタックは 0x0009b000 から0x0009a200までに及ぶ)。
LILO の第二部分は、利用出来るOSすべてをディスクから読み取ってリストを示し、ユーザーがその何れかを選べるようにする。ユーザーがロードするKernelを選択した後(私のシステムでは8個のカスタムKernelから1個のLinux kernel を選ぶ)ブートローダーは、相当するパーティションのブートセクタをコピイして実行するか又は、Kernel画像を直接RAMにコピイする。
Linux Kernel画像をコピイしなければならないので、Linuxブートローダーは、実質的に、Kernel画像に組み込まれたブートローダーと同じ作用をする。(物理アドレス0x00007c00 に飛んで)BIOSが呼び出したブートローダーは、次の作用を実行する:
6.setup()ファンクション。その作用
やっと、「ブートストラップ」過程に欠かせない、本質的アセンプリ言語ファンクションの幾つかを詳しく眺める時機が来た。ここではsetup()ファンクションを調べる。
setup() ファンクションはファイル /usr/src/linux-2.4.2/arch/i386/boot/setup.S. にある。setup()アセンブリ言語ファンクションのコードは、Kernelの統合ブートローダーの直後、つまりKernel画像ファイルのオフセット0x200、にリンカーが置く。これにより、ブートローダーはこのコードを容易に見出して、物理アドレス0x00090200から始まるRAMに置くことが出来る。
setup()ファンクションの作用は、名前から分かるように、何かを設定することだ。
Kernelが正しく働かせるには、コンピュータのハードウエアデバイス全部を検出し、順序正しく初期化しなければならない。setup()ファンクションの作用はハードウエアデバイス全部を初期化して、Kernelが働く環境を作ることにある。
だが一寸待て、少し前に、BIOSがこれら全部をおこなうと言わなかったか?その通りだ。BIOSがほとんど全部のハードウエアを既に初期化したけれども、Linux Kernelはそれに頼らないで、自分の方法でそれらを初期化する。しかし、何故そうするのか?の答は容易であると同時に説明は極めて難しい。Linux Kernelは移植性と強健性を強くするよう設計された。このため、Linux Kernelは、利用出来るUnix及びUnix類似Kernelのうち最良のものとなり、色々な点で特徴のあるものとなった。Linux Kernelが何故どのようにこの特徴を実現したかを正しく理解するには、この話題の範囲を超えLinux Kernel アーキテクチャの本質的特性を、極めて詳細に述べる必要がある。
setup( ) コードは、主として次の仕事を実行する:
この後、「ブートストラップ」過程が少し複雑になるので、少し難しくなる。ここからは気持ちを引き締めて理解に務められることを望む。
7.setup_32()ファンクション−第一ファンクション。その作用
込み入った点を真っ直ぐに進もう。startup_32()と言う二つのファンクションがある。setup_32()ファンクションは、二つともアセンブリ言語ファンクションで、「ブートストラップ」過程で必要だが、全く異なるファンクションなのだ。ここで説明するものは、/usr/src/linux-2.4.2/arch/i386/boot/compressed/head.S ファイルにコードされている。setup()コードを実行した後、このファンクションは、Kernel画像がRAMの "high" にロードされたか "low" にロードされたかにより、物理アドレス0x00100000 又は物理アドレス0x00001000に移されている。
このファンクションを実行すると、次の作用をおこなう:
This function when executes, performs the following operations:
ここで、4番目の作用を終えた後、コード実行は、別のstartup_32( )ファンクションが引き継ぐ。つまり、第二のものがブートストラップ処理を引き継ぐ。
8.setup_32()ファンクション−第二ファンクション。その作用
解凍Linux kernel 画像は別のstartup_32()ファンクションで始まる。このファンクションは、 /usr/src/linux-2.4.2/arch/i386/kernel/head.S ファイルにある。
二つの同名のファンクションを用いても、両ファンクションともその初期物理アドレスにジャンプして実行され、独自の実行環境で実行されるので、何ら問題はない!!
第二startup_32( ) fファンクションを機能的に見てみよう。このファンクションを実行すると、これは本質的に第一Linuxプロセス(プロセス0)のための実行環境を設定する。このファンクションは次の作用をおこなう:
9.start_kernel( ) ファンクション。その作用
start_kernel( ) ファンクションがLinux Kernel の "initialization" を完成する。このファンクションを実行するとKernelの重要成分全部が初期化される。これは全「ブートストラップ」処理の最終ステップとなる。
このファンクションを実行すると、次のことがおこる:
start_kernel( ) 開始直後に "Linux version 2.4.2 …" メッセージが表示される。他の多くのメッセージもまた表示される。一番最後に、お馴染みのログインプロンプトがコンソールに現れる。これはユーザーに、 Linux Kernel が立ち上がって働いており、世界を支配しようと張り切っていることを告げる!
10.まとめ
Linuxシステムの全「ブートストラップ」過程についての長く苦しい旅を終わる。お気付きのように、使用した他のコンポーネントについては全く説明しなかった。それらには、IDT, GDT, eip レジスタ, cs レジスタなどが含まれる。数ペイジの記事にこれら全部を含むのは不可能だった。それでも、この記事からLinuxシステムのブートで起こる色々なことを理解されたことを望む。paging_init( ) やmem_init( )のような関連ファンクションの説明はこの話題の範囲を超えた。
この記事は、GTK+ツールキットを用いるLinuxにおけるGNOMEプログラミングを述べる。読者は、Linux基礎、GNOME環境の使い方を知っており、C及びC++プログラム経験があると推定している。
テキストと一緒に用意したコード見本は、次の構成のコンピュータで点検した:コンパック・プレサリオ 4010 シリーズコンピュータ、固定ディスク容量15.5 GB、RAM 96 MB 、400 MHz インテル・セルロン・プロセッサ、Red Hat Linux 7.1 ディストリビューション・リリース、アンダーラインkernel: 2.4.2-2
1.GNOMEとは? 緒言
2.GNOMEアーキテクチャ
3.GTK+ − 紹介
4.基本プログラム
5.信号とコールバック
6.コンテナ
7.ボタン
8.Entry wedget
9.リストボックスとコンボボックス
10.メニューとツールバー
11.ダイアログボックス
13.まとめと次の学習のためのLink
1.GNOMEとは? 緒言 記事の目次へ
GNOMEプログラミングの世界に入る前に、GNOMEの説明をする。GNOMEは、"GNU's Not Unix Network Object Model Environment"(GNUの非Unixネットワークモデル環境)の略だ。複雑そうだが、GNOMEは、Linuxユーザーに使い易くて強力で完全なデスクトッププログラミング環境を提供するとの単純な目的を持ったソフトウエア・プロジェクトだ。GNOMEは現在、LinuxのRed Hat 及びDebianの最新ディストリビューション・リリースと共に搭載される規定値デスクトップシステムになっている。
詳しい情報は http://www.gnome.org/ にあるGNOMEプロジェクトホームペイジを見られたい。GNOMEに関する沢山の情報があるし、殆どのLinuxと互換性のあるGNOMEのバイナリとソースコードのダウンロードも出来る。
「Linuxプログラマ」と「Linux管理者」の二つの観点からGNOMEを見てみる。基本的な質問は、GNOMEと言うとき、同じものを考え、同じものを渡して呉れるか?だ。この質問に答えるのは難しい。難しくしたのは、過去現在のLinuxシステム管理者とプログラマだ。平均的Linuxシステム管理者にとって、GNOMEは環境は、管理業務を極めて簡単にする豊富なツールを提供する。プログラマは、もっと良いプログラムを設計して提供する責任を持っている。だから、お互いの仕事に関する限り、完全には調和しない。
GNOMEの機能性を覗くと、GNOMEは実際には、Xウインドウシステム(又はX)とウインドウマネージャ・ソフトウエアの中間に位置するプログラム層なのだ。だから、前に言ったように、linux GUIプログラマには、Linuxベースのプログラムを設計し易い多数の機能性を提供する。だが最も重要なのは、GNOMEがすべてのLinux/Unix開発者に欠かせない理由が、完全なGUIの付いたオープンソース・アプリケーションを構築するのため特別に設計された統合フレームワークをこれら開発者/プログラマに提供することにあることだ。
GNOME プロジェクトは、1997年8月に発足した。創始者には、Peter Mattis, Spencer Kimball, Richard Stallman, Red Hat, Inc. のErik Troan とMark Ewing が含まれる。
2.GNOMEアーキテクチャ 記事の目次へ
GNOMEの極めて強力だが融通性に飛んだアーキテクチャは、GNOMEが恐るべき機能性を提供することだ。GNOMEの基本ツールキットは、GTK+(GIMPツールキット)と呼ばれる。これは元々 GIMP(GNU 画像取扱プログラム)で使うため書かれた。GTK+の正しい理解は、GNOMEプログラミングの理解に特に肝要だ。GTK+ は、主としてアプリケーション作成のため使用されるGNOMEと独立なオブジェクト指向、クロス−プラットホーム、言語中立の、ツールキットだ。すると次の質問が生じる。GTK+をGNOME用に選んだ理由は何か?答は簡単だ。C, C++, PERL, Python, ADA などを含む多くのプログラム言語をサポートするからだ。だが、GNOMEもGTK+も、Cを使って書かれているのを覚えて置くと役に立つ。そこで、ここではCだけを扱う。
読者が持つ次の疑問は、何故これを「ツールキット」と呼ぶかだろう。GTK+, Qt (KDE 環境はQtに基づく) のようなツールキットは、widgetのコレクションだ。
Widgets は、ボタン、メニュー、ダイアログボックスその他のGUIオブジェクト、又はオブジェクト関連一般ファンクションだ。これは、マイクロソフト・プラットホームのアクチブ・テンプレート・ライブラリ (ATL 3.0)と比較することが出来る。これらは、コンポーネントオブジェクトモデル(COM)開発者に、COMオブジェクト及びコンポーネント(ActiveX EXE 及びActiveX DLL)を作るため既製フレームワークを提供する。
3.GTK+ − 紹介 記事の目次へ
ここでGTK+の特徴の幾つかを詳しく調べよう:
1.GTK+が使うライブラリのセット: GLIB(GIMPライブラリ)とGDK (GIMPダウンロード・キット).
2.GLIB はデータ型を決定し、エラー取扱とメモリルーチンを扱うファンクションを提供する。
3.GDKは、元々のグラフィックスAPIとGTK+との間に存在するプラットホーム依存層である。
4.これで全部ではない。GNOMEは、GNOME特有のwidgetとライブラリを付加して、GTK+ に追加の機能性を追加する。
5.こうしてGNOMEは、全特徴を備えた、オブジェクト指向の広範なwidgetセット起動アーキテクチャとなる。
6.GTK+の機能性の他に、GNOMEアーキテクチャの中に、ORBitと呼ばれるCORBAシステムのカスタム実行が付け加わって, ソフトウエアオブジェクトが容易に効果的に連絡することが出来るようになった。
7.GLIB は、それ自体の基本的データ型を定義する。それらの殆どは、標準Cデータ型と同等である。
|
|
|
8.GTK+ の正しい理解に必要なのは「Widget階層」の概念だ。GTK+におけるwidgetは階層に従属しているので、widgetのセットに共通のファンクションは一度実行する必要があるだけだ。
例えば、gtk_widget_showファンクションは、ダブったコードを除去するので、スマートで早いプログラム開発が出来る。新widgetは既存の高位widgetから、このwidgetに独特の特徴だけをプログラマが書くよう導出される。例として、このwidget階層を見てみよう:
GtkObject --> GtkWidget --> GtkContainer --> GtkBin --> GtkWindow --> GnomeApp
このように、注意深く見ると、GnomeApp widgetは高位GtkWindowから導出されており、それは高位 GtkBin から導出されるなどなどとなっているのが分かるだろう。C++プログラ言語の本質的特徴を考えると、これは「インヘリタンス」(継承)の概念を想起させる。その通りで、導出機能性をGTK+に組み込むのは「widget階層」のこの特徴だ。
wedget作成ファンクションを一寸見てみよう。これらのファンクションが正しく作用させるためには、GNOMEとGTK+ライブラリ全部が正しく搭載されていることを確認しなければならない。別に気を付けなければならない重要なことは、コード完成前にライブラリのパスを正しく設定することだ。
先ずwedget作成関数 gnome_app_new()を考察する。このファンクションは、示すように包括的widgetであるGtkWidget ポインタを返す。これは次のように示される:
GtkWidget *ghosh;
ghosh = gnome_app_new(………);
これもまた、gnome_app_set_menus()などのGnomeAppに特有のファンクションを呼び出したいときは、macroを使ってGtkWidget型からGnomeApp型へのキャストを実行しなければならないことを意味する。GnomeApp はGtkWidget から導出されるので、これだけが可能である(上の階層を参照)
4.基本プログラム 記事の目次へ
Linuxプログラム習得に最良の方法は、Kernelの内部作用を理解することと、自分でプログラムを組むことである。理解を深めるため小さいプログラムを調べる。
システムをLinuxでブートし、CLI(コマンド行インターフェイス)モードにいるときは、コマンド"switchdesk gnome"を使ったgnomeに切り換え、"startx"コマンドを出してXウインドウシステムGUIモードにブートする。GNOME環境に入ったら、GNOMEターミナルを開き、viを用いてmyapp.cと言う名のファイルを作り、次をタイプする:
/* A sample GNOME program
Created By: Subhasish
Ghosh
Date: 8th August, 2001
*/
#include <gnome.h>
int main(int argc, char *argv[ ])
{
GtkWidget *ghosh;
gnome_init("sample", "0.1",
argc, argv);
ghosh = gnome_app_new("sample", "My
Window");
gtk_widget_show(ghosh);
gtk_main();
return 0;
}
ここでプログラムmyapp.cを完成するには、次をタイプする(back-tickに注意):
# gcc myapp.c -o myapp `gnome-config --cflags --libs gnomeui`
GNOMEは、コンパイルに必要な正しいフラッグをコンパイラに渡すgnome-configと言う名のシェルスクリプトとともに来ることに注意。コンパイルしたら次のコマンドを用いてプログラムを走らせる:
# ./myapp &
としてenterを押す。
画面上にからのウインドウが現れる。これは移動、サイズ変更、閉鎖をすることが出来る。ここで、コードを詳しく見てみよう。トップに、プログラム、作者、作成日付を示す注釈行がある。不可欠ではないが、プログラム毎にこれは付けるのは良い習慣だ。次は、ヘッダーファイル gnome.hで、必要な GNOME とGTK+ライブラリファンクション及び定義全部の面倒を見る。次ぎに来るのが"ghosh"で、これは GtkWidget ポインタだ。これは、新しいウインドウオブジェクトを指す。次いでファンクションgnome_initを呼び出す。これはライブラリを初期化し、セッション管理を正すのに用いられる。このgnome_initファンクションに渡されるIDは"sample"、バージョン番号は"0.1"、次いでメインのコマンド行アーギュメントだ。これらはGNOMEの内部作用のため必要だ。次ぎに来るファンクションgnome_app_new()は、実行するとウインドウを作成する。これは、サンプルコードに"sample" と"My Window"と示したように、二つの引数を取る。"sample"はアプリケーション名で、"My Window" はウインドウタイトルだ。だが、このファンクションの名はgnome_app_new()であるけれども、これは新しいアプリケーションの種類などは作成しないことに注意。これは、トップレベルのウインドウを作るだけだ。次ぎに呼び出すファンクションは、gtk_widget_show()で、ウインドウを見られるようにする。次が、極めて重要なファンクションgtk_main() だ。これはイベントやボタン押しなどのGNOMEファンクションが実行されたことを、GNOMEへの機能性を扱って、確認する。
これが、最初のGNOMEプログラムの内部作用だ。
5.信号とコールバック 記事の目次へ
ここでGNOMEプログラミング環境:信号とコールバックを詳しく調べる。マウスを動かす、widgetに出入する、ボタンを押す、トグルボタンを切り換える、などの度に信号がアプリケーションに送られる。この信号はcallbackファンクションに渡すことが出来る。そこで、常にではないが時に、アプリケーションは一定の動作をするためこれらイベントをつなぐ必要がある。GNOME/GTK+では、信号をハンドラ・ファンクションにつなぐためgtk_signal_connect と言うファンクションを呼び出す。
gtk_signal_connectファンクションには次の四つのパラメータがある:
1.GtkObject *object −コールバックが関連する
2.const gchar *name − 扱う信号
3.GtkSignalFunc func − 信号を送るとき呼び出すファンクション
4.gpointer data − 信号取扱ファンクションに与える任意のデータ
各種widgetが各種信号を編集することに注意しなければならない。ボタンからの信号は次の通り:
1.clicked − ボタンをクリックした(押した及び離した)
2.pressed −マウスでボタンを押した
3.released − ボタンを離した
4.enter − マウスをボタン領域上で動かした
5.leave −マウスをボタン領域外に動かした
後で展開するアプリケーションにおいて、信号とコールバックが重要な役割を演ずるのを見る。
6.コンテナ 記事の目次へ
次ぎに、GNOMEプログラミングの別の重要成分:コンテナを調べる。GTK+は、沢山のコンテナを用いる。GTKは実際は "container-based"と呼ばれるツールキットだからだ。これは、widgetを収容する親コンテナを有することを意味する。ウインドウズは単一widgetコンテナである。そこで、覚えておかなければならない重要なことは、GTK+が複数のwidgetを入れる見えない「包装箱」を使ってウインドウレイアウトを作ることだ。「包装箱」には垂直と水平の二つの型があり、それそれgtk_hbox_new とgtk_vbox_newのファンクションを使って作る。後で作るアプリケーションでこれらのファンクションの働きを見る。今は、これら二つのファンクションのパラメータを見る。次のパラメータがある:
1.homogeneous :型 −> gboolean :ボックス内のすべてのwidgets が、ボックス内の最大widgetと同じ領域を占めるようにする
2.spacing:型 −> gint : 隣接widgetの間隔を決定
3.expand:型 −> gboolean:包装箱が残りのスペースを満たすよう拡大できるようにする
4.fill:型 −> gboolean:特定のwidgetが残りのスペースを満たすよう拡大できるようにする
5.padding:型 −> gint:widgetを囲むフレームの幅を決定
7.ボタン 記事の目次へ
次ぎに、GNOMEプログラミングの別の重要成分:ボタンを調べる。GTK+には4種のボタンがある:
1.単純プッシュボタン −> クリック作用をおこなう
2.トグルボタン −> 特定の状態がある:上げる/下げる
3.チェックボックス −> 特定の状態がある:オン/オフ
4.ラジオボタン −> オプションの組から唯一つを選択する
ラジオボタンの作り方はチェックボックスと似ていおり、余計にしなければならないのはラジオボタンに属する組の決定だけだ。ラジオボタンは、トグルボタンから導き出されるチェックボックスから導き出される。だから、状態を読み取って変更しまた同じ古いイベントをりようする同じファンクションの組を持っていることとなる。特定のファンクションに関する情報に付いては: http://www.gtk.org/で入手できる GTK+ Reference Documentation を参照のこと。
8.Entry Widget 記事の目次へ
"Entry widgets"と言う単一行テキストwidgetを作るため、gtk_entry_new()と言うファンクションを使う。Entry widget は主として少量の情報入力に使う。ボタンが押されて信号が出たとき、「ログインウインドウ」を作ってパスワードフィールドを出力するプログラムを見よう。次をタイプして、プログラムを上述のように実行する。
/* Creating a Login GNOME-style using GTK+ Toolkit:
Created By: Subhasish
Ghosh
Date: Wednesday, August 8, 2001
*/
#include <gnome.h>
static void enter_pressed(GtkWidget *button, gpointer data)
{
GtkWidget
*text_entry = data;
char *string =
gtk_entry_get_text(GTK_ENTRY(text_entry));
g_print(string);
}
int main(int argc, char *argv[])
{
GtkWidget *app;
GtkWidget
*text_entry;
GtkWidget *label;
GtkWidget *hbox; gchar *text;
gnome_init("example", "0.1", argc, argv);
app = gnome_app_new("example",
"entry widget");
gtk_container_border_width(GTK_CONTAINER(app), 5);
hbox = gtk_hbox_new(FALSE, 0);
/* we now create a Label: */
label = gtk_label_new("Password:
");
gtk_misc_set_alignment(GTK_MISC(label), 0,
1.0);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
text_entry =
gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(text_entry),
FALSE);
gtk_box_pack_start(GTK_BOX(hbox), text_entry, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(app), "delete_event",
GTK_SIGNAL_FUNC(gtk_main_quit),
NULL);
gtk_signal_connect(GTK_OBJECT(text_entry), "activate",
GTK_SIGNAL_FUNC(enter_pressed), text_entry);
gnome_app_set_contents(GNOME_APP(app),
hbox);
gtk_widget_show_all(app);
gtk_main( );
return 0;
}
このプログラムを実行すると、画面にログインウインドウが出る筈だ。任意のテキスト(パスワードと仮定)をタイプして、enterを押すと何が起こるか分かる。
9.リストボックスとコンボボックス 記事の目次へ
リストボックスとコンボボックスは、マイクロソフトプラットホームと同じ役割を演じる。リストボックスwidgetは、ユーザーが選ぶことが出来るようwidgetに接続された一つ以上の文字列を保有する。コンボボックスは、ユーザーがオプションを選択出来るプルダウンメニューの付いたentry widgetだ。
10.メニューとツールバー 記事の目次へ
ここまでに述べたwidgetは、通常でない機能性は発揮しない単一widgetだ。ここでは、機能性に富むもっと複雑なwidgetをあたえる特殊GNOMEプログラミングライブラリを調べる。
今までの普通のコードで、十分な仕事が出来るが、特殊GNOMEプログラミングライブラリにはそれなりの存在理由がある。
単純で変化のないGTK+コードでは、コードの繰り返しが多く、プログラムが膨大になることがある。そこで、そんなことがないように、沢山の追加機能性を含みプログラム作成労力少なくする特殊GNOMEプログラミングライブラリを使用する。
「メニュー」と「ツールバー」を見る。GNOMEは、GnomeApp widgetsのため、ウィンドウに入れたり出したり出来るメニューとツールバーを作らせる。先ずアレーに必要情報を満たし、gnome_app_create_menus 又はgnome_app_create_toolbar を呼び出す。
メニューとツールバーにはそれぞれアレーで定義されたプロパティがある。プロパティには、タイプ、文字列、コールバックポインタなどが含まれる。殆どの場合メニュー登録は簡単で、GNOMEが用意するマクロの一つを使うだけで自分用の構造を作ることが出来る。そこで、最も使用されるトップレベルのマクロを見よう。
注記:マクロは、次の GnomeUIInfo構造のいずれか又は全部を含むアレーを渡したとき、トップレベルメニューを作るものだ。
| メニュー | マクロ |
| ファイル | GNOMEUIINFO_MENU_FILE_TREE(ツリー) |
| エディット | GNOMEUIINFO_MENU_EDIT_TREE(ツリー) |
| ビュー | GNOMEUIINFO_MENU_VIEW_TREE(ツリー) |
| 設定 | GNOMEUIINFO_MENU_SETTINGS_TREE(ツリー) |
| ウインドウ | GNOMEUIINFO_MENU_WINDOWS_TREE(ツリー) |
| ヘルプ | GNOMEUIINFO_MENU_HELP_TREE(ツリー) |
| ゲーム | GNOMEUIINFO_MENU_GAME_TREE(ツリー) |
トップレベルメニューの中には、共通メニュー項目を作るため30個以上のマクロがある。マクロは小さい画像(pixmaps)とアクセラレータ奇異を各メニュー項目に結合する。項目が選択されデータポインタをそのファンクションに渡すとき callbackファンクションを呼び出さなければならない。
これら共通メニュー項目とそれぞれのマクロを見てみよう。
File -->>
New -->
GNOMEUIINFO_MENU_NEW_ITEM (label, hint, cb, data)
Open -->
GNOMEUIINFO_MENU_OPEN_ITEM (cb, data)
Save --> GNOMEUIINFO_MENU_SAVE_ITEM
(cb, data)
Print --> GNOMEUIINFO_MENU_PRINT_ITEM (cb, data)
Exit -->
GNOMEUIINFO_MENU_EXIT_ITEM (cb, data)
Edit -->>
Cut -->
GNOMEUIINFO_MENU_CUT_ITEM (cb, data)
Copy --> GNOMEUIINFO_MENU_COPY_ITEM
(cb, data)
Paste --> GNOMEUIINFO_MENU_PASTE_ITEM (cb, data)
Settings -->>
Preferences -->
GNOMEUIINFO_MENU_PREFERENCES_ITEM (cb, data)
Help -->>
About -->
GNOMEUIINFO_MENU_ABOUT_ITEM (cb, data)
メニューバーと同く、ツールバーはGNOMEUIINFO_ITEM_STOCK (label, tooltip, callback, stock_id) マクロをつかるアレーを必要とする。ここで、"stock_id"は、その項目に使うため予め定めたアイコンのidである。
この例を見ると、アレーとマクロの実際の働きが分かるだろう。
#include <gnome.h>
static void callback (GtkWidget *button, gpointer data)
{
g_print("Item
Selected");
}
GnomeUIInfo file_menu[ ] = {
GNOMEUIINFO_ITEM_NONE ("A menu item", "This
is the Status bar info", callback),
GNOMEUIINFO_MENU_EXIT_ITEM
(gtk_main_quit, NULL),
GNOMEUIINFO_END
};
GnomeUIInfo menubar[ ] = {
GNOMEUIINFO_MENU_FILE_TREE
(file_menu),
GNOMEUIINFO_END
};
GnomeUIInfo toolbar[ ] = {
GNOMEUIINFO_ITEM_STOCK ("Print", "This is
another tooltip", callback, GNOME_STOCK_PIXMAP_PRINT),
GNOMEUIINFO_
ITEM_STOCK ("Exit", "Exit the application", gtk_main_quit,
GNOME_STOCK_PIXMAP_EXIT),
GNOMEUIINFO_END
};
int main (int argc, char *argv[ ])
{
GtkWidget *app;
gnome_init ("example", "0.1", argc, argv);
app = gnome_app_new ("example",
"A Sample Toolbar and Menu");
gnome_app_create_menus (GNOME_APP (app),
menubar);
gnome_app_create_toolbar (GNOME_APP (app), toolbar);
gtk_widget_show_all (app);
gtk_main();
return 0;
}
このプログラムは、埋込メニューとツールバーのある小さいウインドウを作る。これを画面上で、クリック、ドック、アンドック、ドラッグすることが出来る。
11.ダイアログボックス 記事の目次へ
GNOME環境内でテキスト情報をユーザーに表示するwidge、ダイアログボックス、をここで調べる。ダイアログボックスと作