本件に関する多数のリンクをまとめたウエブペイジは新しい Burn All .JPEGs! ウエブサイトだ。Forgentのウエブサイトにもこのニュースに関する各社の様子のlist がある。
Wiredは、駐ペルー米国大使がペルー国会議員Villanuevaの、政府コンピュータでオープンソース・ソフトウエアを使うべしとする法案に反対したと報じた reports。またビルゲーツもペルー大統領Alejandro Toleroに対し国立学校システムのため$550,000を個人的に寄付した。Villanueva法案の狙うのと同じ学校に金が行かないのは言うまでもない。 Villanuevaが言うには、マイクロソフトはペルーの小さい市場ではなく、むしろ他のラテンアメリカ諸国で起こるなだれ現象を心配している。アルゼンチン、メキシコ、ブラジルで同様の法案が審議中で、スペインのエストレマドラ地方も公立学校と役所の公式システムとしてLinuxを採用しているalready adoped Linux 。
パキスタンPakistan もまた、オープンソースゲームに参入している。GNU/Linuxを走らせる50,000個のペンチアムIIが、各100米ドル以下の価格で、パキスタン全国の学校に設置されている。「これらPC用の私有財産ソフトウエアは大した財産にはならない。コンピュータの費用の方が高い」
Ogg Vorbisプロジェクト、バージョン1.0のリリースreleased a version 1.0、おめでとう!LENからの from LWNリンクとして、1.0のリリースに関する沢山のニュースがOgg Vorbis Newsにある。この話は、レジスタやCENTも報告している(by The Register及びby CNET)。
Ogg Vorbis 及び Xiph.org はまた、オープンソース・フォーマットとRealNetworksの新Helix との間のリンクのため、ニュースになった。この発展はRealNetworksのソフトウエアの一部が「コミュニティとオープンソースライセンス」の下でリリースされるbeing releasedことを見込んでいる筈だ。続いてOgg VorbisコーデックがRealNetworks製品に組み込まれる筈だ。
Bruce Perens は、RealNetworks-Xiphリンクアップを囲む問題の突っ込んだ記事in-depth accountを書き、Realのコーデックが私有財産で、そのソフトウエアの一部使用のため(オープンソースでなく)コミュニティ・ライセンスであることなど、多くの取引形態を批判した。RealNetworksのRob Lanphierは、スラショット上でブルースに答え replied to Bruce、会社のオープンソース寄与に善意を示すことを求めた。Registerもまた、CENTと同様にas has CNET Realのオープンソース経験を報じたreported on 。 Helix Community websiteが、RealNetworks Helixプロジェクトの将来開発と、ソフトウエアをリリースするlicences のコピイを報じる筈である。
Debian ワールドの今月のビッグニュースは、Debian GNU/Linux 3.0 (Woody) がリリースされたことだ been released。これでDebian GNU/Linux は、暗号ソフトウエアを特徴とするKDEとGNOMEデスクトップ環境を始めとして全部で11個のプロセッサ・アーキテクチャをサポートし、FHS v2.2と互換性があり、LSB用に開発されたソフトウエアをサポートする。これはRegisterも報じている reported by The Register。Debian Weekly Newsが報じるように reported by Debian Weekly News, 新試験ディストリビューションは「Serge」と呼ばれるwill be called "sarge"。
Potato, 2.2r7の新版もまたリリースされたreleased。主な変更はセキュリティの更新と幾つかの修正である。
Debian Weekly Newsは、jpeg画像圧縮計画に対してなされている特許請求が、それに反してコピイされたlibjpeg62及びその他すべてが無料でないことを要求すると報じたDebian Weekly News reported 。
LinuxPlanet にGentoo Linux 1.2. に関する最近の見解 recent review がある.
Redflag Software Technologies Co., Ltd と Opera Software は戦略的発表をおこなった。両社は、中国市場に関し埋込ブラウザソリューションで協力する予定である。RedFlag は、中国埋込市場のため特別仕様Operaの合同開発と販売とともに、Opera再販業者として合同することを探求している。
Opera を含むことで、RedFlag は、OEMとハードウエア製造者に対し Red Flag の現有製品群に適合するため特注されたウエブ有効のソリューションを見積もることが出来る。
SuSE Linux は、システム機能性を拡張した SuSE Linux eMail Server 3.1 が入手出来ると発表した。指名、課題、リソースの管理を助けるSuSEのe-メールソリューションは、特に中小企業と同時に作業グループ及び行政を狙っている。
SuSE Linux はまた、TSANet(Technical Support Alliance Network)への参画を発表した。TSANetは、150以上のハードウエアとソフトウエアプロバイダをホストする世界的サポートプラットホームである。TSANet の範囲内で、各種の製造者が、自分のアプリケーションとの関連でその企業顧客が遭遇した問題に関するソリューションの作製にに協力している。
SuSEのサポートの詳細情報については http://support.suse.de/en/
Opera Software ASA は、SuSE が、Linuxウエブブラウザ用OperaをそのLinuxディストリビューションで頒布すると発表した。取引はOperaの初めての大手Linuxディストリビューション契約である。OperaはSuSE Linux 8.0で利用することが出来る。
The Random Factoryは、天文学、化学、生化学を含む広範なLinux用科学ソフトウエアを有している。選択されたRandom Factory製品を搭載したLinuxワークステーションも入手することが出来る。
VariCAD は、Windows 及びLinux 両OS用の新 VariCAD 8.2.0.2 アップデートをリリースした。この機械的3D/2D CAD パケージは、3Dモデリング、2D ドラフティング、機械部品のライブラリ、計算、BOM、その他多数のためのツールを提供する。価格は399ドル。Windows 98/NT/200/XP 及びLinux (RedHat、Mandrake、 SuSE)用の無料試験版は、 http://www.varicad.com/からダウンロードすることが 。
Linux Game Publishing が、Mindrover 1.07bのベータテスタを求めている。関心があれば、. betas websiteに登録のこと。当選者にはe-メールで通知する。
今日は。その後如何?LGを読み続けているね。そうあって欲しいな。この記事も色々代わるから。
今月のニュースだって?自分の家に移ったよ。大学を出たので Somersetにささやかな家を構えた。つまり、
新しい仕事についた。Waitroseと言うチェーン店のため8種類の贅沢なデザートを作る小さい工場で働いている。Waitroseは、John Lewis Partnership, plcの一部だ。高級食品を作っている。好奇心の強い人のため、作っているデザートを書いておこう:
6時始業なのが唯一の不満だが、午後2-4時には終わる。
生活が現実味を帯びて来た。そろそろ専門の題材Linux.....に移る時期だと思う。
しかし、Quotaはkernel自体から直接走らせられない(自己抑制でない)ので、面白い仕事は残っている。ソースファイル用にRPMをインストールしなければならない。
問題のRPMファイル(パケージ取扱いに関しこのシステムを使うディストリビューションをを使っている筈)は:
quota-1.70-263.rpm
及び And the tarball file is called:
all.tar.gz
と呼ばれるtarballファイルである。
両方とも次のFTPレポジトリから入手することが出来る:
ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/
RPMファイルをインストールするには:
次のコマンドを発する:
su - -c'rpm -i /path/to/quota-1.70-263.rpm'
ソースファイルをインストールするには:
1. su - 2. cd /path/to/tarball/ 3. tar xzvfm ./all.tar.gz 4. ./configure
5. make && make install 6. logout
これが、することの全部だ。これからが本当に面白い。
しかし実際の第一段階は、システム全体の変更をすることだ。このため、ユーザーrootとしてログインする。だが、単に "su" と入れるのでは、有効UIDを変えるだけで、エキスポート変数などについては何もしない。
先ず、"/etc/fstab" を変更して、ファイルシステムマウントポイントがquotaサポートを利用することを、kernelが知るようにする。典型的な "/etc/fstab" ファイルは次のようになる:
ここで、この章の最初に提起した元の問題に戻る。ユーザーを管理する方法は?これをユーザー毎のベースでおこなうのであれば、fstabファイルに usrquota を追加する。グループででおこなうのであれば、grpquota を追加する。二つの混合を使うのであれば、両方を追加する。
こうして、第4フィールドに次を追加することとなる:
/dev/hda3 / ext2 defaults,usrquota,grpquota 1 1
変更はfstabに見合っている。どのquotaを使うか確信がないときは、両方をfstabファイルに含めることを薦める。これはswapを必要とすることを意味し、既に設定済みだからである。ここでファイルをセーブする。
され、次ぎにしなければならないのは、fstabファイルで変更したパーティションのルート上に必要なファイルを作るのに、どちらの選択肢を選ぶか(つまり usrquota か grpquotaか)を確認することだ。これをおこなうには、次のコマンドを入れる(未だユーザーrootとして)
touch /top/of/partition/quota.user && chmod 600 /top/of/partition/quota.user touch /top/of/partition/quota.group && chmod 600 /top/of/partition/quota.group
最後に、システムがブートアップした時期を確かめなければならない。quotasはそれと同時に有効になるからだ。RPM/.DEBなどから Quota をインストールした人は、"quota" と言う名のスクリプト又は類似のものを "/etc/init.d/"の中に見出す筈だ。しかし、ソースからインストールすると見あたらないので、次のスクリプトを、すべてのファイルが "/etc/fstab" に取り付けた後、主init-scriptに加えなければならない。
(text version)
上でおこなっているのは、スクリプトの残りを処理する前に、ファイルが実行可能であることを確認するため点検することを意味する "-x"フラッグに関し、指定されたファイル上でテストを走らせている。これは点検して(もしあれば)どのquotaが定義されたかを理解し、それらを有効にする。
これを終わったら次を与える:
init 6
そしてコンピュータがリブートするのを待つ。
買い手への警告: kernelを再コンパイルしなければならないときは、新kernelイメージについて知らせるようリプートの前に、走らせるブートローダとしてLILOを使っていることを確認のこと:
lilo
これで、マシンはQuotaを使おうとすることをマシンが認識した筈だ。未だしていないのは、最も重要なことで、誰又はどのグループがquotaルールを使うかだ。
ユーザー一人が使う例を用いて、その人のquota限界を設定する方法を示す。ユーザーlgを呼び出さなければならない。
システム上に既にlg があるとして、しなければならないのは、使うフォーマットに応じて、適切なファイルをエディットすることだ。この例の目的のため、ユーザー毎のベースでおこなう(つまり、usrquota フォーマットを使う、何もかも説明しなければならないが、これは grpquota オプションを使うときも全く同じである)。
ここで使うコマンドは "edquota" と呼ばれる。しなければならないのは次ぎコマンドを発してquotaをユーザーlg 用に編集することだ。
edquota -u lg
これがおこなうのは、エディタを立ち上げ、あららしいquotaを開くことだ。環境変数EDITOR="/usr/bin/jed" 又は同等エディタを設定していないときは、このコマンドは働かない。この変数を背艇するには、次を "~/.bash_profile" に追加する。
EDITOR="/usr/bin/jed" export EDITOR
Vi, jed, joe, emacsなどに合わせてプログラムを変更する。次いで次のようにタイプして変更を有効にしファイルをソースにする:
source ~/.bash_profile
ユーザー lg のため次のようなものが見付かる筈だ:
Quotas for user lg:
/dev/hdb2: blocks in use 0, limits (soft = 0, hard = 0)
inodes in use: 356, limits (soft = 0, hard = 0)
ここで、"err...." が気になるだろうが、心配ない。見掛けより簡単だ
Blocksは、ユーザーがパーティション上で使うブロックの総数を示す(KBで数える)。
Inodesは、ユーザーがパーティション上に有するファイルの総数を示す。注記:この数は変えられない。
気掛かりなのは、各行の右端にある括弧の中のビットだ。これは、quota全体を設定するキイだ。二つのオプション、soft 用と hard用、があるのに気付くだろう。
Soft limits は、lg が持つことの出来るスペースの最大量(KB)を示す。これは、grace period と一緒に設定されたときユーザー lg に対し限界を超えたことを示す境界として働く。
grace 限界は、soft 限界が強制されるまでの時間である。これは秒、分、時、日、週、月から設定することが出来る。これは次のコマンドを発して設定する。
edquota -t
次が得られるのが分かるだろう:
block とfile に関する値は、合うと分かるものに変える。両者に14日(2週)を推薦するが、甘いかもしれない。
hard は、ユーザーが超えることの出来ないスペースの最大量を示す。これはgrace period を設定したときだけ働く。
これが、ここにあるもの全部だ。システム上のユーザー毎に同じquotaを割り当てるのは面倒だと思うだろう。lg についての例を追ったばかりなので、出来ることは、ユーザー lg をテンプレートとして使って、次のコマンドを発することだ:
awk -F: '$3 >= 500 {print $1}' /etc/passwd'
これがおこなうのは、499より大きいUIDから始まるユーザーすべて(つまり500以降)を篩にかけることだ。画面上のユーザーのこの組がOKなら、下に示すようにedquotaと関連させて、下にしめすように、上記を使うことが出来る。
edquota -p lg $(awk -F: '$3 > 499 {print $1}' /etc/passwd')
これは、lg について既に有効にしたquotaをテンプレートとして使って、それをawkスクリプトが書き出したユーザーの列に対し割り当てる。
これですべて終わりだ。quotaがユーザーを港に引き留めるのに優れたツールであることが分かった。私はこれを、ルートでないアカウントに用いる。ホームディレクトリでキレて、時々それを空にするのを止めるからだ。
簡単な紹介:DansGuardian 始めに戻る
・DansGuardian とは ?
Squid とSquidGuard を近似するLinuxワールドへの最近の小紹介文を読んだ人じは、一定のレゲーに合致する一定のウエブペイジを篩い分ける方法を示したのを覚えておられるだろうwill remember。Dansguardianがすることは、篩い分けの考えを取り上げ、内容に基づいてウエブペイジを篩い分けるよう拡張することである。しかしDansguardianはまた、mime型を篩い分けてファイル拡張子を阻止し、M$-Windowsマシンを使う不幸な罰を受けるユーザーを篩い分ける。.exe, .com, .dll, .zip などのファイルを阻止することが出来る。
・インストレーション
Dansguardianは、http://www.dansguardian.org/ から入手することが出来る。ほやほやのDebian GNU/Linuxユーザーならいつでも、alien パケージを使ってRPMファイルをDEBファイルに転換することが出来る。実際にファイルをインストールするには、instructionsを参照すること。
Dansguardianがnb++ libraryの使用を必要とするのは、注目すべきである。Dansguardianの主要サイト上には、ダウンロードサイトへのリンクがある。このライブラリは、ウェブペイジの内容を見るために使われるので、Dansguardianの操作に不可欠である。
インストールに当たっては、Dansguardian、主プログラムが "/usr/sbin/dansguardian" としてインストールされる。しなければならないのは、"/etc/init.d/rc.local" 又は "/etc/init.d/boot.local" のいずれかに (どのディストリビューションを使っているかによる), 次を追加して、
/usr/sbin/dansguardian
Dansguardian がinit上にロードされるようにすることだ。
・コンフィギュレーション
Dansguardianまで来ると、コンフィギュアすることはそんなに多くない。作業の全部は、全く正確な内容篩い分けのため構築しようとする各種レゲー表現である。
DansGuardianは、SquidGuardと関連して使って、既存のフィルタを置き換えないで済むことを指摘しなければならない。
だから、先ずおこなうのは、パケージがコンフィギュレーション・ファイルを置いた場所を調べることだ。"/etc/dansguadian"から出ており、今集中使用としているこのディレクトリに含まれるファイルであるのは驚くに当たらない。コンフィギュレーション・ファイル/etc/dansguardian/dansguardian.confを見ることから始める。
これがDansguardianの必要とする設定の全部だ。一般的に、変更しなければならない唯一のオプションを下記に示す。
ここで変更したのは、filterport、proxyport 及び accessdeniedaddress タグだけで、"/etc/squid.conf"で使用したコンフィギュレーションを反映している。これに習ってオプションを変更してファイルをセーブすると、これを無視することが出来る:
さて、同じディレクトリに移動すると、次のファイル名のファイルに気付く筈だ:
各ファイルを順に取り上げて、それぞれの役割を説明する。適切な場合には、ファイルの小部分を記載する。
bannedphraselist
このファイルは、明確な語句を含むので、ここでは内容を示さない。これは、HTMLペイジのどこかで見出されると阻止されるキーワードを保持するファイルであると言うだけで十分だろう。
お分かりのように、各単語は、次のように<>で囲まれる:
< sex >
これらの角括弧は、重要である。これらがないと単語が阻止されないからだ。
また、ファイル全部を通じて、角括弧のどちらかの側に空白を持つ単語があるのに気付かれるだろう。どちらかの側に空白が一つのものもある。これは、重要である。dansguardianに対し単語を阻止する方法を告げるからだ。
< sex >
は、単語sexが(そして単語sexのみが)、見付かったとき阻止すべきことを示す。それ以上ではない。
<sex>
は、センテンス又はフレーズの中で見付かった場所に関係なく単語sexを阻止すべきことを示す。つまり、hellosexyhowareyou?で見付かると阻止される。
< sex>
は、単語の左側にあるものは全部阻止される意味である。
<sex >
これは、上記の逆である。
ファイルを見て行くと、阻止される多数の各種単語が分かるだろう。既にその単語の一部を阻止したので、阻止されない例示の単語又はハイフォン付きフレーズに関する多数の注釈があるのに気付くだろう。例えば
<middlesex>
は、阻止する必要がない、フレーズ
<sex>
が既に sex を含む別の単語全部を阻止しているからだ。これは、後々、リストに追加するとき覚えておくべき、重要な事実である。
bannedextensionlist
ここでも、別のオプションを追加する。
exceptionsitelist
別の何かのファイルで規定されたルールにより元々阻止されていても、見るのが許されるサイトを記載する。次のようになる:
・Touchrec:ディレクトリ内ファイルへの繰り返しタッチ 始めに戻る
66号では、与えられたディレクトリへの繰り返しタッチの方法についてのスレッドが現れた。タッチのGNUバージョンは(未だ)オプションをサポートしないので、GNUを使う指針はほとんどなかった。
この考えには興味をそそられた。すべてのファイルやディレクトリに対する繰り返しタッチの特性が必要な状況になることが多かった。そのような例は、un-tarしたtarballに"m"フラッグを追加するのを忘れ、その結果ファイルに将来の修正日付を持った場合などである(66号参照)ディレクトリ全体を削除するのは、untarにageを要するので、苦痛である。そこで、次のシェルスクリプトを書くことにした
-----------------
BASH プログラムに対する全くの初心者は、LG52号にあるBen Okopnikの優れた講義を参照されたい。経験者は、私が古い "if..then..else..fi" 法の代わりに "[ ..... ] && {} ||" 構造を使っているのに気付かれるだろう。後者がexitステータスをもっと良く制御するので、私が好きだからだ。Perlもまたこの記法を必要とする。
スクリプト自体は極めて簡単だ。起こるのは基本的に、変数全部を初期化することだ。ここで、BASHはこれを必要としないが、そうすると進行具合を知るのが楽になる。
各種変数を設定する。そのほとんどは、只のスイッチ識別子で、コマンド行スイッチを発したか(及びどの)が分かるようなっている。別の変数bname を設定する。これは、help_user() ファンクションで使ったプログラム名を、PATHを省略して、返す。
定義した別の変数は、redir 変数である。これは、最初スクリプトを呼び出したttyを設定して、"-q" オプションを指定しなかったとき、画面上にメッセージが現れるようにする。ファイル/ディレクトリが見付かったときはいつでも、次のコマンドを発するので、これは賢明な方法だと思う。
echo "touching $lists/" >$redir
これは、前述のように呼び出したttyに設定する。(/dev/tty1)???。しかし、"-q" フラッグを規定すると、$redir が"/dev/null" に等しくなって、メッセージは現れない。
コマンド行スイッチに関しては、getopts コマンドをうまく使った。詳細は man 1 touchrec を参照されたい。
マニュアルが書けるほどこれに関わった。単に tar.gz ファイルをダウンロードして、untarし、"install.sh" を走らせるとよい。"man touchrec" を参照されたい。役立つ筈だ。
・GNU find:有効性を見直し 始めに戻る
一体何人の人が、"<ALT><SHIFT><?>" の順でキイを叩きダイアログボックスを埋め必要なファイルを見出すためmc(夜間コマンダ)を使っただろう。誰もがすることだ。このダイアログボックスの全部はコマンド find(1) に対する受付だ。この記事は、このコマンド行ダイアログボックスから離れるのを助ける。mcの検索機能に悪いことはないけれども、複雑な検索に完全には役立たない。GNU find は、極めて強力なツールだ。
特定ファイル一つを見出す
findの最も普通の使い方は、ファイルの在り場所を知ることだ。通常、バイナリファイルであれば、コマンドwhich とwhereを使って見出すが、etherh.cと言う名のファイルを探すにはどうするか?次のコマンドを発する:
cd / find / -name etherh.c -print 2>/dev/null
ここで混乱してはいけない。findコマンドの構文は次の通りだ:
find {/path/} [name_of_file/expression] [options...]
だから、コマンドがおこなうことは、"/" (パーティションのブートディレクトリ)で始まり、etherh.cと言う名のファイルを検索し、見付かるとstdout に -print する。(この場合 2>/dev/nullは、エラーの宛先を変えて忘れる−−ここで使ったのは、私がユーザー root にいないからだ。私は確かに"/"からファイルを見る許可をもっているが、"/"は気にしない)
上の -name フラッグは、ここに示した用途だけではない。これは、検索するファイル名に対しシェルメタキャラクタを渡すことができる。この点は次の章で述べる。
kernelソースをインストールしていれば、このファイルは次の場所で見付かる筈だ:
/usr/src/linux/drivers/acorn/net/etherh.c
シェルメタキャラクタを使ってファイル名を見出す
検索するファイルの正確な名称が分かっていれば物事が簡単になる。だが正確な名所を知らないときは、どうするか?
その場合は、ワイルドカードを使うか、詳細に言うとシェルメタキャラクタを使う。次のような文字がある:
*
?
[]
{} -- [ 後で分かる世にこれらにはそれぞれの用途があるけれども]
極めて簡単に、次のようなものを試してみる:
find /usr/bin -name 'xa*' -print
これが返すのは、
/usr/bin/xargs
だ。目の鋭い人は、作用を含めて見出したことに気付かれただろう。
作用を含むFind
Findに対し見出したファイル上のプログラムを走らせることを命じることも出来る。これは極めて有用な機能で、何度も使うことになるの驚くだろう。
例えば$HOMEに沢山のファイルがあり、その中で、例えば "#!/bin/bash"の規則的表現を探したいとしよう。次のようにすることが出来る:
find $HOME -name '*' -print -depth -exec egrep -n '#!/bin/bash' {} \;
最後の部分の構文は、奇妙に見えるだろうが、起こっているのはフラッグ
-exec
したがって、短く言うと、構文は:
find -path -name {pattern/regex} -exec {name_of_program} [options] {} \;
となる。この原理を特定の型を見出すため使えると思う任意のコマンドに対し応用することが出来る。
特定の型を見出す
ここでもまた、Findは特定のファイル型を見出すのを楽にして呉れる。ここでは、
ls, test, find
find / -name '*' -print -depth -type d
-- これはディレクトリだけをプリントし、
find / -name '*' -print -depth -type f
-- これはファイルだけを見出し、
find / -name '*' -print -depth -type l
-- はシンボリックリンクだけを見出す。
例えば、トップレベル・ディレクトリだけで検索し下に行きたくないときは:
-maxdepth {number}
スイッチを使うことが出来る。例えば、$(pwd) -- (カレント作業ディレクトリ) を検索したいだけのときは:
find / -name '*' -type d -maxdepth 1 -print
とする。これは私のコンピュータ(ノート型)では下記を返す:
/ /lost+found /boot /proc /var /tmp /etc /sbin /bin /lib /root /usr /cdrom /floppy /home /mnt /opt /dev /chess /pavement
数字は、検索中に下ってゆきたいサブディレクトリの数を示す。
だが、楽しみはこの小記事に止まらない。find は、必要ないと思われる程多くのオプションを持っている。私が使い切っていないに過ぎないのだが。h
絶対にコマンド
man find
をチェックすること。
John M. Fiskとのインタビュー
終わりの時間
次回まで、お元気で。
緒言
コンピュータに関して私は全く古風だった。GUIよりコマンド行で働かせるのを好む一人だった。私が習ったプログラミングがテキストの入出力だったのだから無理もない。AdaもPerl, Bash, Sed, Awk, C, などと同様、例外ではない。
数年経って、Linux Gazetteで論じられるプログラム言語はほとんど無かった。Ben OkopnikがPerl とBasについて二つの良い講義をおこない、他の人がSmalltalk, C++, Pythonなど別の言語の記述に貢献した。これから2−3ヶ月Adaでプログラムをする一連の記事を書く。
リストに記載されたものに限らない。
Adaコンパイラ
他の手書き言語(Perl, Bash, Python, tcsh, など)と異なり、AdaはCのように、インタープリートでなくコンパイルされる。これは、プログラムを走らせる人がそれを使うのにインタープリータを搭載する必要がないことを意味する。Adaプログラムは、Adaパケージを何もインストールしない独立型である。[プログラムをCのように他の言語と接続して使わない限り、この場合はライブラリを持っている筈だが、後でもっと追加する -- TA]
これは、GNATコンパイラにリンクのある次のウエブサイトで入手することが出来る。
一つ注意がある。GNATとコンパイル済みバイナリ版をダウンロードし、.DEB .RPM .TGZ などに転換する必要のあるときはパケージ alien を使用されることを薦める。理由は、コンパイラをブートストラップするには gcc (gnatccと言うことが多い)のAdaバージョンが必要だからだ。GNATを初めてインストールするのであれば、ソースコードからのコンパイルは出来ないだろう。
そうは言っても、前に進んでダウンロードしたパケージをインストールする。GNATのRPMバージョンには、単一RPM: "GNAT-3.13p-7.rpm" がある筈だ。これに、この言語でプログラムを始めるのに必要な一切が含まれている。
AdaのIDE
Adaでプログラムを始める前に、IDE's (Integrated Development Environment統合開発環境)を幾らか知っておくのが良いと思う。これらは、次のような機能をにより特定の言語によるプログラムを助けるプログラムである。
私が推薦する二つは:−
TIA (TIny Ada) −Adaで書かれGNAT使用を回って構築されたコンソールベースのIDE
GRASP −言語のうち、とりわけAdaをサポートする X11 IDE
EMACSファンのため、Glade と言う拡張がある。これは主GNATディストリビューションの一部としてインストールされている。これはGNATコンパイラ、構文強調、などををサポートするEMACS拡張である。詳細情報は、gnuada ウエブサイトで。
GNATを使いこなすには、IDEを使うのが必須ではない。私がコンソールにいるのであれば、代わりに jed を使い(これはAda構文強調をサポートしていないが)X11にいるのであれば Nedit する(これはAda構文強調をサポートしている)。
上に加えて次の特色もある:
その他多数....
| with text_io; use text_io; procedure hello_world is begin put("Hello World!"); end hello_world; |
易しいものだ。プログラムを走らせる前に、セーブする。だがそれには、正しい添字を付けなければならない。GNU/Linuxは規則として添字(ファイル拡張子)を何も必要としないが、AdaでプログラムをしGNATコンパイラを使うときは必須である。有効な拡張子は:
パケージ以外のものを書くときは(暫くはおこなわない)、ファイル名に"adb"拡張子を加えなければならない。これは、コンパイルするファイルがプログラムでパケージ仕様でないことを、コンパイラに知らせるためである。
そこでファイルを hello_world.adb としてセーブする。
これでプログラムのコンパイル/構築の準備が出来た。これをしないとAdaプログラムを走らせることが出来ない。
ファイルをセーブしたディレクトリに変えて、次のコマンドを発する:
gnatmake hello_world.adb
これがAdaコードを、コンパイルし-> リンクし-> 構築して、コンパイル済みプログラムにする。
ここで:
./hello_world
とタイプすると:
hello world!
の応答が画面に現れ、プログラムから出る。
コマンドを発したとき次の出力が出たのに気付かれただろう:
gnatgcc -c hello_world.adb gnatbind -x hello_world.ali gnatlink hello_world.ali
望みなら、上のコマンドの各々を順にタイプしてプログラムを(それぞれ)コンパイル、バインド及びリンクすることが出来る。幸い gnatmake が立派な自動化をしてくれる。ここでディレクトリを覗くと、GNATが主プログラムと一緒に別のファイルも作っているのが分かる。それらは:
.aliファイルは、主プログラムのためのデバッグとリンクに関する情報を含む GNATリンクファイルだ。
.o ファイルは、プログラム・デバッガ gdbと一緒に使うことの出来るオブジェクトファイルだ。
簡単に言うと、プログラムのデバッグを計画していない限り、これらのファイルは削除してよい:
with text_io; use text_io;
Adaのwith ステートメントは、指定したパケージ、この場合は text_io、の使用を必要とすることを示す。パケージが一つ以上必要なときは、各パケージ名をコンマ(,)で区切って、追加することが出来る。終わったら、Prelと同じく行末にセミコロン(;)を追加しなければならない。with ステートメントは、プログラムを働かせるためプログラムの始めに、常に存在すべき強制コマンドである。
パケージtext_io は、既述のようにI/Oファンクション/プロシージャを与える。これには、ユーザーが入力などを入れることの出来る画面に対するプリントメッセージも含まれる。これは、Adaで書く各プロブラムで実質的に使用されるパケージである。
use ステートメントは、with ステートメントをした後にのみ、必ず使用しなければならない。これは、他のパケージからプロシージャ及びファンクションに対し無資格の問い合わせが出来るようにする。このステートメントを使わないと、プロシージャ又はファンクションに対する各呼出には、その前にそれが所属するパケージ名にペリオド(.)を付けたものを置かなければならない。例えば下記は、use ステートメントを使わなかったときのhello_worldプログラムの様子である。
| with text_io; procedure hello_world is begin text_io.put("Hello World!"); end hello_world; |
use ステートメントを使わないと、タイプしなければならない情報の量が増えるのが分かるだろう。同じプロシージャ又はファンクションを有する一つ以上のパケージを使うときコンパイラは、渡されたパラメータに基づいて引用するパケージを告げることが出来る。
3行目:
procedure hello_world is
は、hello_world と言う名の新しいプロシージャを書くことを宣言する。ステートメント語is は、それに続けて、プロシージャの説明部分を開始することを告げる。
次のキイワード
begin
は、プロシージャの実行可能部分−つまり、すべてのステートメントが現れて実行される場所−を開始することを告げる。この場合は:
put("Hello World!")
で、プロシージャ put をパケージ text_io から呼び出して、メッセージ Hello World! を画面上にプリントする。
最後の行:
end hello_world;
は指定されたプロシージャを終わるだけだ。
簡単に言うと、Adaプログラムの基本構造は次のようになる:
| with text_io; use text_io; procedure program_name is [ ここは宣言部分 ] begin [ ここは実行可能部分 ] end program_name; |
text_io の中にはまた、以下などのコマンドもある:
put put_line get get_line new_line
その他多数...
put は、これまで見たことをおこなう
put_line はput と同じことをおこなうが、新しい行を開始する
new_line は自分に発するコマンドで、新しい行を開始する。これを使うときは、次ぎのように、最後にセミコロンを置く:
new_line;
事実、セミコロン(;)の付いたステートメントは、Adaせ作る各コマンドに用いられる。
来月は、次の項目を見る:
1. 自分の名を画面上にプリントする。
2. put とnew_lineだけを使って、自分の住所を画面上にプリントする。
3. 今回は put_lineを用いて演習2を繰り返す。
私宛に送って下されば、この記事の次回分に掲載します。
この記事全部についてと同様、疑問、提案、お叱り、お褒め(苦情はお断り)は、通信されたい!!
with text_io, ada.integer_text_io;
use text_io, ada.integer_text_io;
procedure happy_programming is
loop_number : integer :=0;
begin
while loop_number /= 10 loop
loop_number := loop_number + 1;
put("Happy Programming in Ada");
new_line;
end loop;
end happy_programming;
Office Linux の要件は、
Office Linux は、無料ソフトウエアのみで構成することが出来るが、これは要件ではない。
Office Linux は、セクレタリや他の事務員に、コンソール用アプリケーションは沢山来ない筈だと強調する。エディタは一人か二人で十分だ。
| Pro KDE | Contra KDE |
・使用が容易 ・GNU/Linux コミュニティで有名で、良くサポートされている ・M$ Windows ™のような感じに構成することが出来る; ・ファイルマネージャとパネルのあるデスクトップ環境 ・エンドユーザが容易にこ構成することが出来る ・完全に国際化されて来る |
・立ち上げに膨大な時間を要する ・RAM 及びハードディスク双方に膨大なメモリ範囲 |
個人的にはKDE は好きでないが、Office Linux.用には推薦する。
オフィス生産性
これは重要な分野で、Office Linux はその名の通りこの分野に集中しなければならない。Star Office やOpenOffice のような、信頼性があって広く受け入れられた事務用一式を揃えなければならない。
予定ユーザが古いファイルを移植して再使用できるよう、M$ Office ™との互換性が必要である。この互換性は、外部ツールではなく事務用の一式を通じて達成されなければならない。GUIを備えるだけでなく、使い易くしなければならない。最悪の筋書きはコマンド行ツールのためGUIシェルを呼び出すことだ。
Office Linux 用にはKOffice を推薦しない。M$ Office ™ に似た一式よりも予定ユーザーの抵抗が大きいそうだからだ。f
ディストリビューションは、信頼性のあるPDF リーダーとコンバータを備えなければならない。Office Linux 用にインストールすることの出来る PDFプリンタは、多分良い考えだ。するとユーザは PDFを多くのアプリケーションからプリントすることが出来る。
ぷりんと・サブシステムは、SAMBA プリンタや標準Unix プリンタを含むあらゆる種類の既存ネットワークプリンタと通信することが出来なければならない。このサブシステムは、インストールと使用が容易でなければならない。BSDプリントシステムに似せてUnix慣習と互換性がなければならない。CUPSが良いソリューションなので、Office Linux にこれを使うことを推薦する。
インターネット
セキュリテイに細工した規定値コンフィギュレーションを含まなければならない。
このヘルプ・システムは次を備えていなければならない。
ヘルプシステムはHTMLで構成することを薦める
そして、C++, vi, mutt, Windowmaker、Mandrake を使っている。論争しましょう。
「Perlモジュールの探検」へようこそ!!
Perlモジュールは、Perl成功の最強力なものの一つと考えられている。これらは、再使用可能なコードを沢山含んでおり、勿論無料である。これは掘出物を見付ける試みである。CGI、DBI などについての講義や書物は沢山ある。余り有名でないモジュールについては、ユーザは、曖昧で時には不完全な文書だけで放置されている。
この一連の記事で、余り有名でないが有用なモジュールを説明する積もりだ。昨年中、沢山のPerlモジュールに出会ってプログラムした。私の経験から沢山の有用な例を用いてこのモジュールを説明する。一度に一つのモジュールを取り上げて各種用途を探検する。
先ず読むべきもの
さて、先ずPerlを知らなければならない。Perlの基本を徹底的に調査する。Perlについては沢山の文章、記事、書物がある。初心者には Learning Perl が推薦されることが多い。経験を積んだらProgramming Perl.に取り組むことが出来る。
平均的Perlプログラマで余り多くのモジュールを使っていなければ、ここが最適の場所だ。モジュールは、コードを再使用して、効率的で小型のアプリケーションを書く沢山の方法を提供する。各記事は、簡単な例から複雑な例に段階を追って進み、然るべき場合には実世界のアプリケーションで終わる。
モジュールの紹介
モジュールはコードを移植して利用するため効率の良い機構を与える。次の行が、モジュールを移植して、アクセスすることの出来るファンクションにする。
use module;
use GD;
モジュールの発見とインストール
プログラムの詳細に入る前に、モジュールの発見とインストールに関する指針を示す。各種のモジュールを使うが、そのほとんどは規定値ではインストールされていない。ある種のモジュールはインストールされていないこともあるライブラリを必要とする。然るべき場合にはいつでも必要な事項を述べる。モジュールのダウンロードとインストールに必要な一般的事項を示す。
モジュールをインストールする簡単な方法は、CPANを使うことである。会話モードで次のようにCPANを走らせる。
perl -MCPAN -e shell
これで、モジュールのダウンロード、解凍、インストールなど色々の課題をおこなうことが出来る。例えば、GDをインストールするには、次を使う。
install GD
私のように、configure, make, make install methodに慣れた人なら、次のステップでモジュールをインストールする。
tar zxvf GD-1.40.tar.gz
perl Makefile.PL
(又は)
perl Makefile.PL PREFIX=/my/perl/directory
(/my/perl/directoryにインストールしたいとき)
make
make test (オプション)
make install
準備完了…
好きなモジュールをインストールしたので、準備は完了した。この記事では、GDモジュールを探検する。これは GD libraryへのインターフェイスを与える。ウエブインターフェイス用にCGIモジュールもまた使用する。この記事を理解するのにCGIについて多くを知る必要はない。必要なときは説明を加える。
GDを用いるグラフィック
簡単で効果的な例から始めよう。
ファイルのテキスト版はここにある here.
#!/usr/local/bin/perl -w # 上の行を自分の実際のperl バイナリへのパスに変更binary
これは、GD man page に示された例に少し変更を加えたものである。この手順は、境界が青色の赤い楕円形を持つ小さい四角を作る。プログラムを分析しよう。.
GD ライブラリを使って先ずおこなうことは、それを使って作業を扱うイメージを作ることだ。次の行
$im = new GD::Image($width, $height)
が、規定の幅と高さを持つイメージを作る。既存イメージからイメージを作ることも出来る。既存イメージを扱うのは役に立つ。その例は、この記事の後の部分で示す。
次ぎに、色を割り当てなければならない。予想されるように、色を初期化するにはRGB強度を指定しなければならない。沢山の色を使うので、使用のため、一団の色を初期化する小さいファンクションを書こう。
ファイルのテキスト版はここにあるhere.
# これをinit_colors.pl としてセーブする
# 他のスクリプトがこのファンクションを呼び出す
sub InitColors {
my($im) = $_[0];
# 色を割り当てる
$white = $im->colorAllocate(255,255,255);
$black = $im->colorAllocate(0,0,0);
$red = $im->colorAllocate(255,0,0);
$blue = $im->colorAllocate(0,0,255);
$green = $im->colorAllocate(0, 255, 0);
$brown = $im->colorAllocate(255, 0x99, 0);
$violet = $im->colorAllocate(255, 0, 255);
$yellow = $im->colorAllocate(255, 255, 0);
}
素晴らしいrgb組合せのため何度もこの page を引用する。
次の数行は、簡単なので自明であろう。ファイル作成に関する最後の行には、特別の説明が必要だ。ファイルにイメージを書こうとしているので、次を用いてファイルハンドルを置く必要がある
binmode MYFILEHANDLE;
これは、実際にはほとんどのUNIX様システムでno-op(操作不能)である。
次いで、通常のプリントコマンドを用いてファイルに書き込む。GDはイメージを各種のフォーマットでプリントすることが出来る。例えば、pngでなくjpegでプリントしたいとき必要なのは、次のようにすることだけである。
print MYFILEHANDLE $im->jpeg;
簡単な描画
GDは、描画原始技法を幾つか提供し、これを組み合わせて複雑なグラフィックスを作ることが出来る。以下のスクリプトを調べると、これら簡単な原始技法を、大急ぎで掴むことができる。
ファイルのテキスト版はここにあるhere.
#!/usr/local/bin/perl
# 上の行を自分のPerlバイナリへのパスに変更
use GD;
do "init_colors.pl";
# 新しいイメージを作る
$im = new GD::Image(640,400);
# 何か色を割り当てる
&InitColors($im);
# 背景を透明でインターレースにする
$im->transparent($white);
$im->interlaced('true');
$x1 = 10;
$y1 = 10;
$x2 = 200;
$y2 = 200;
# 境界を描く
$im->rectangle(0, 0, 639, 399, $black);
# 直線
$im->line($x1,$y1,$x2,$y2,$red);
# 点線
$im->dashedLine($x1 + 100, $y1, $x2, $y2, $blue);
# 長方形を描く
$im->rectangle($x1 + 200, $y1, $x2 + 200, $y2, $green);
# 塗りつぶし長方形
$im->filledRectangle($x1 + 400, $y1, $x2 + 400, $y2, $brown);
# 円
$im->arc($x1 + 100, $y1 + 200 + 100, 50, 50, 0, 360, $violet);
# 多角形
# 多角形を作る
$poly = new GD::Polygon;
$poly->addPt($x1 + 200, $y1 + 200);
$poly->addPt($x1 + 250, $y1 + 230);
$poly->addPt($x1 + 300, $y1 + 310);
$poly->addPt($x1 + 400, $y1 + 300);
# それを描く
$im->polygon($poly, $yellow);
# 書込用ファイルを開く
open(PICTURE, ">picture.png") or die("Cannot open file for writing");
# バイナリ・ストリームで書くことを確認
binmode PICTURE;
# イメージをPNG に転換してファイルPICTUREにプリント
print PICTURE $im->png;
close PICTURE;
出力はこのようになる this。
上のスクリプトは自明だ。多角形は少し説明を要する。多角形を描くためには、先ず多角形を作ってから描く。多角形には、勿論、最低三つの頂点がなければならない。
テキストを書く
そこで、テキストに付いて。テキストは、GDが提供する簡単なフォントの幾つかで、又は自分のシステムで利用出来るTrue Type フォントを使って書くことが出来る。テキストを書くのに利用することの出来る簡単なファンクション二つを示す。
# テキストを書く
$im->string($font, $x, $y, $string, $color);
# 90度回転したテキストを書く
$im->stringUp($font, $x, $y, $string, $color);
ファイルのテキスト版はここにあるhere。
#!/usr/local/bin/perl
# 上の行を自分のPerlバイナリへのパスに変更
use GD;
do "init_colors.pl";
# 新しいイメージを作る
$im = new GD::Image(200, 80);
# 何か色を割り当てる
&InitColors($im);
# 背景を透明でインターレースにする
$im->transparent($white);
$im->interlaced('true');
# イメージを囲む教会を作る
$im->rectangle(0, 0, 199, 79, $black);
$x1 = 2;
$y1 = 2;
# 小フォントでテキストを書く
$im->string(gdSmallFont, $x1, $y1, "Small font", $blue);
$im->string(gdMediumBoldFont, $x1, $y1 + 20, "Medium Bold Font", $green);
$im->string(gdLargeFont, $x1, $y1 + 40, "Large font", $red);
$im->string(gdGiantFont, $x1, $y1 + 60, "Giant font", $black);
# 書込用ファイルを開く
open(PICTURE, ">picture.png") or die("Cannot open file for writing");
# バイナリ・ストリームで書くことを確認
binmode PICTURE;
#イメージをPNG に転換してファイルPICTUREにプリント
print PICTURE $im->png;
close PICTURE;
この出力画は次のようになる。
ご覧の通り、これらのフォントは極めて限られており余り魅力的でない。次の章でCDとともにTrue Type Fonts を使う方法を示す。
True Type Fonts
自分のシステムで利用することの出来るTrue Type Fontsを使って素晴らしいテキストを書くことが出来る。TTFフォントを描くにはファンクション stringFT を用いる。
# $fontname は、TrueType fontに対する絶対又は相対パスである。
stringFT($fgcolor,$fgcolor,$fontname,$ptsize,$angle,$x,$y,$string);
利用法を示すサンプルを示す
ファイルのテキスト版はここにあるhere。
#!/usr/local/bin/perl
# 上の行を自分のPerlバイナリへのパスに変更
use GD;
do "init_colors.pl";
# 新しいイメージを作る
$im = new GD::Image(270, 80);
# 何か色を割り当てる
&InitColors($im);
# 背景を透明でインターレースにする
$im->transparent($white);
$im->interlaced('true');
$im->rectangle(0, 0, 269, 79, $black);
$x1 = 10;
$y1 = 20;
# TTF フォントでテキストを描く
$font = "/usr/X11R6/lib/X11/fonts/TTF/luxisri.ttf";
$im->stringFT($red, $font, 15, 0, $x1, $y1, "A TTF font");
$anotherfont = "/usr/share/fonts/default/TrueType/starbats.ttf";
$im->stringFT($blue, $font, 20, 0, $x1, $y1 + 40, "Another one here !!!");
# 書込用ファイルを開く
open(PICTURE, ">picture.png") or die("Cannot open file for writing");
# バイナリ・ストリームで書くことを確認
binmode PICTURE;
# イメージをPNG に転換してファイルPICTUREにプリント
print PICTURE $im->png;
close PICTURE;
出力は次のようになる.
オンラインに行こう
GDの基本的用法が判ったところで、ウエブグラフィックスに目を向けよう。そこで、CGIを通じてイメージを出力する方法だ。次の行を、ファイルへのプリントの代わりに、スクリプトに付け加える。
# イメージ内容のバッファリングを働かなくする
select(STDOUT);
$| = 1;
undef $/;
print "Content-type: image/jpeg\n\n";
print $im->jpeg(100);
今のところ、これがCGIについて知る必要のあることの全部だ。CGIを既にご存じなら、コードを強化して複雑なウエブ相互作用を扱うことが出来る。小さなプログラムを書いて、イメージを読み込ませた上そのサイズを変えて表示させよう。これはサムネイルを示すのに役立つ。
ファイルのテキスト版はここにある here. #!/usr/local/bin/perl -wT # 上の行を自分のPerlバイナリへのパスに変更 use CGI ':standard'; use GD; # 新しいイメージを作る $image_file = "images/surfing.jpg"; $im = GD::Image->newFromJpeg($image_file); ($width, $height) = $im->getBounds(); $newwidth = $width / 3; $newheight = $height / 3; $outim = new GD::Image($newwidth, $newheight); # 背景を透明でインターレースにする $outim->copyResized($im, 0, 0, 0, 0, $newwidth, $