Linux Gazette 2000年2月号

余寒お見舞い申し上げます。今年は暖冬のようですが2月に入ってからは例年の寒さが続いているようです。でも春は確実に近付いてきます。暖かくなると花粉の時期になります。今のうちからご用心を。

今月のLinux Gazetteの内容


今月のニュース

Linux Journal 2000年2月号発売中。今月の特集はデスクトップとしてのLinuxです。


More 2¢ Tips

■ 特別なキャラクタを持つファイルの削除

先月号の特別なキャラクタを持つファイルの削除はそのまま使用すると危険。削除する前に警告を表示させる。



       find / -name '*[^][a-zA-Z0-9#%~:,._+-]*' 


表示されないキャラクタがある場合には


  find / -name '*[^])}{([a-zA-Z0-9@#$&"'"'"'%~:,._+-]*' | cat -v    


特別なキャラクタを持つファイルを削除するには


       find . -maxdepth 1 -name .... -print0 | xargs -0 rm


ユティリティやスクリプトを盲目的に使用することには危険が伴うことを忘れずに。

■ 2¢ Tip

便利な 2 ¢ Tipに提案。オープンポートをチェックして報告するための Perl スクリプト。
   showports.pl

■ html ファイルの閲覧と編集

   ◆ エディタとブラウザ
     Lynx, Netscape 等と vi, pico, joe, emacs 等のエディタ

   ◆ mc
     html を表示できるミッドナイトコマンダと cooledit

   ◆ emacs
     emacs は html ファイルの編集と表示が可能

   ◆ Amaya
     変更を自動的に反映させコードのストラクチャをツリー形式で表示

   ◆ KDE ツール
      KDreamSite: http://www.raverx.seite.ms
      WebMaker: http://www.services.ru/linux/webmaker
      KWebDeb: http://mason.gmu.edu/~ebanker/kwebdev/index.html

   ◆ Galway
     GNOME の html エディタ http://erin.netpedia.net/

その他にも優れたツールが多数。 http://www.freshmeat.net や even www.linuxberg.org を参照。要はテンプレートやスクリプトをうまく利用すること。

■ Windows NT ドメイン

WINS で IP アドレスを解決するには NT マシンがドメインネームを持っている必要があり、WINS Addressing tab の "Enable DNS for Windows Resolution" をチェックする。

■ Linux マシンから NT マシンにアクセス

http://us1.samba.org/samba/docs/DIAGNOSIS.html や http://us1.samba.org/samba/docs/FAQ/ を参照。

■ laptop マシンで Linux

Linx Gazette のサーチエンジン、http://www.linuxgazette.com/wgindex.html をチェック。

■ SuSE 6.1 でディスクミラリング

まず Software-RAID mini HOWTO を読む。場所は http://www.linuxdoc.org/

■ パルス回線でトーンモデムを使う

モデムのダイアルストリングを編集する。電話番号の前の ATDT を ATDP にすればいい。

■ Red Hat Linux がカーネルパニックで起動しない

インストール時に作ったブートディスクで起動して lilo を再インストールする。

■ Linksys の Ether16 NIC がインストールできない

   ◆ NE2000 互換のカードなら動作するはず
   ◆ Ether ソフトウェアがリソース設定で IRQ と I/O のコンフクリトをチェックする。新しいハードウェアの搭載やオンボード機器があればチェックしよう。
   ◆ ドライバの組み込み:Red Hat を使っているなら Linux Config を使おう。
   ◆ ISA IRQ の変更はしなくてもいい。
   ◆ 起動時にエラーメッセージが出なければ ifconfig をチェックする。カードにアドレス、サブネットマスクなどを設定する必要があるかもしれない。別の ISA スロットにカードを変えてみてハードウェアの問題かソフトウェアの問題かを把握しよう。

■ Diamond SupraExpress 56i V PRO モデム

これは winmodem です。Linuxでの使用は諦めよう。


ウェブでデータベース接続 (By Marius Andreiana)

ウェブサイトを有する企業はコンテンツ維持のためにある種のデータベースを利用していることが多い。そこで今回はウェブサイトでの使用を前提としたオープンソースのソフトウェアを紹介しよう。プラットフォームは Red Hat を使用しているがほとんどのディストリビューションにも当てはまる。

Linux についてはもう説明する必要はないだろう。

Apache

インターネットで最も利用されているウェブサーバ。ボランティアにより開発されている。機能的にも速度的にも他のUNIXベースのサーバにひけを取らない。ほとんどのディストリビューションにバンドルされているのでブラウザでアドレスを http://localhost/ と指定すればいい。

PostgreSQL

高機能のリレーショナルデータベースマネージメントシステム。ほとんど SQL がそのまま利用できる。インストールする時は Red Hat のRPM から postgres で始まるものを全部インストールすればいい。できればデータベースファイルをデフォルトの /var/lib/pgsql/ ではなく /home/postgresdb(又は /usr/local/など) にしたい。そうするとシステムの再インストールの時に便利だ。

postgres ユーザはデータベースの管理者だ。ルートでログインして postgres のパスワードを設定、ディレクトリを作成して所有者を PostgreSQL の管理者に変更する。

# passwd postgres

# mkdir /home/postgresdb
# chown postgres.postgres /home/postgresdb

データベースファイルを置く場所を環境変数 PGDATA で設定する。設定したら /etc/profile ファイルの最後に付け加えよう。

PGDATA=/home/postgresdb
PGLIB=/usr/lib/pgsql

export PGDATA PGLIB

データベースを利用するには postmaster が起動されていなければならない。常に起動させておくためには setup から System services を選び、postgresql に "*" が付いていることを確認する。
最後に /etc/rc.d/init.d/postgresql のデータベースディレクトリを /var/lib/pgsql から /home/postgresdb に変更する。

これで起動する準備ができた。早速起動しよう。

# /etc/rc.d/init.d/postgresql start

最初の起動時に基本的なデータベースが作成され、postmaser がデフォルトで起動される。

インストールのテストをしてみよう。ルートで pguser を作成したら postgres でユーザ pguser を作成する。質問にはデータベースの作成ができないように答えること。終了したら pguser でログインしてテーブルを作成しレコードをいくつか作ってみよう。

# adduser pguser
# passwd pguser

$ createuser pguser

pguser=> create table friends ( name varchar(30), email varchar(90) );
pguser=> insert into friends values ( 'John', 'john@johnny.com' );
pguser=> insert into friends values ( 'Mary', 'mary@linuxmail.com' );
pguser=> select * from friends;

PgAccess を使ってグラフィカルに操作することもできるが初めはコマンドラインを使用することをお薦めする。

PHP3

PHP はサーバサイドのスクリプト言語で、強力なデータベース操作が可能だ。PostgreSQL, MySQL, Oracle, Sybase, Informix などに対応しておりデータベースを使ったサイトを簡単に構築できる。Php, php-manual, php-pgsql をインストールしたら /etc/httpd/conf/httpd.conf と /etc/httpd/conf/srm.conf ファイルの次の行のコメントを外す。

LoadModule php3_module modules/libphp3.so
AddModule mod_php3.c

AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps

test.php3 を使って簡単なテストをしてみよう。内容は1行だ。

<?php phpinfo() ?>

http://localhost/test.php3 でアクセスしてみるとサーバに関する情報が表示されるはずだ。

ここまでできたら実際に試してみよう。

<?php

//変数を定義

$PG_HOST= "localhost";
$PG_PORT=5432;
$PG_DATABASE= "pguser";
$PG_USER= "pguser";

$PG_PASS= "";

//データベースをオープン
$dbconn=pg_connect(  "dbname=$PG_DATABASE host=$PG_HOST port=$PG_PORT user=$PG_USER password=$PG_PASS" );
if ( ! $dbconn ) {
    echo  "Error connecting to the database !<br> " ;
    printf( "%s", pg_errormessage( $dbconn ) );
    exit();
}

//データベースハンドルは $dbconn
//レコードを挿入するsqlコマンド
$sqlcom= "insert into friends values ('Marius', 'marius@marius.com')";

$dbres = pg_exec($dbconn, $sqlcom );
if ( ! $dbres ) {
    echo  "Error : " + pg_errormessage( $dbconn );
    exit();
}

//レコードを追加したことをメールで報告
mail( "marius@marius.com" "Lucky winner !"
"You've just won a row in our database. Congratulations !" "From : boss@db.com");
//メールを打つのは容易い


//データベースの内容を取得

$sqlcom= "select * from friends";

$dbres = pg_exec($dbconn, $sqlcom );
if ( ! $dbres ) {
    echo  "Error : " + pg_errormessage( $dbconn );
    exit();
}

//取得したレコードを表示
$row=0;
$rowmax=pg_NumRows($dbres);

while ($row<$rowmax)
{
    $do = pg_Fetch_Object($dbres, $row);
    
    $s= "<p>$do->name | $do->email\n";
    printf( "%s", $s);
    
    $row++;
}

//データベースを閉じる
pg_close( $dbconn );

//これだけ。だいたいの感じは分かってもらえたでしょうか。
//御覧の通り決して難しくはありません。
?>

次のサイトを参考にして下さい。


HelpDex(By Shane Collinge)

Linux Gazette に漫画の登場です。「HelpDex」は "help desk" のことのようです。

HelpDex1.jpg
HelpDex6.jpg
HelpDex8.jpg
HelpDex10.jpg
agbdab.jpg

Copyright © 2000, Shane Collinge
Published in Issue 50 of Linux Gazette, February 2000


Linux Certification プログラム(By Ray Ferrari)

2000年1月11日にボランティアの努力が実り最初のサーティフィケーションテストが作成された。 Linux Professional Institute はT1A テストを公表。これは Linux管理者の レベル1 の資格を認定するものだ。技術テストには世界中のボランティアが多数参加した。

T1 Aに興味のある人は VUE; http://www.vue.com/linux/ に登録する必要がある。テストはほぼ1-2時間だ。又T2 シリーズのボランティアも同時に募集している。


Pico から Nano へ(By Sven Guckes)

Eメール、ニュースで利用されている "Pine" は "pico" という小さなエディタを利用している。コマンドの数は少なくほとんどが画面下部に表示されている。

   


   UW PICO(tm) 3.5                New Buffer





[...]





^G Get Help  ^O WriteOut  ^R Read File ^Y Prev Pg   ^K Cut Text  ^C Cur Pos


^X Exit      ^J Justify   ^W Where is  ^V Next Pg   ^U UnCut Text^T To Spell


Pine は幅広く利用されているが Pine も Pico もオープンソースではない。更に Pico を利用するには Pine をダウンロードしなければならない。そういうわけで "Pico クローン" の "Nano" を開発しようというオープンソースのプロジェクトがある。GNUのライセンスの下で Pico のような軽くて使いやすいエディタを提供しようというものだ。

nano の外見はこういう感じだ。

   




   nano 0.8.1                     New Buffer





.





^O Write Out ^_ Goto Line ^R Read File ^Y Prev Page ^K Cut Text  ^C Cur Pos


^X Exit      ^\ Replace   ^W Where Is  ^V Next Page ^U Uncut Txt ^T To Spell


外見は Pico に良く似ているが著作権の縛りがない。また若干のコマンドが追加されている。ヘルプはまだ実装されていないがコマンドラインのヘルプが存在する。

$ nano -h Usage: nano [GNU long option] [option] +LINE <file> Option Long option Meaning -V --version Print version information and exit -c --const Constantly show cursor position -h --help Show this message -i --autoindent Automatically indent new lines -s [prog] --speller=[prog] Enable alternate speller -t --tempfile Auto save on exit, don't prompt -v --view View (read only) mode -w --nowrap Don't wrap long lines -x --nohelp Don't show help window -z --suspend Enable suspend +LINE Start at line number LINE そのうち


        set editor="nano -citxz"


のようなコマンドが増えるだろう。

Nano をインストールするにはソースをダウンロードしてコンパイル、インストールしなければならない。



   wget http://faculty.plattsburgh.edu/astyanax/nano/dist/nano-0.8.1.tar.gz




   gtar xvvzf nano-0.8.1.tar.gz




   cd nano-0.8.1


   ./configure


   make




guckes@linux> ls -l nano


-rwx--x--x   1 guckes   users      120357 Jan 31 21:31 nano


guckes@linux> strip nano


guckes@linux> ls -l nano


-rwx--x--x   1 guckes   users       38232 Jan 31 21:34 nano


現在 nano のメーリングリストはないので ニュースグループ、comp.editors を利用して欲しい。nano の開発者は現在国際化に取り組んでいる。


今月のLinuxサイト、Unix Guru Universe (By Sean Lam)

今月紹介するサイトは Unix Guru Universe サイトだ。これは Unix のサイトだが、Unix と Linux では共通点が多い。Solaris、HP-UX、OpenBSD、Linux共通で利用できる情報が掲載されている。Linux関連のセクションとしては管理者ガイド、ファイアウォール、プロキシサーバHOWTO、DNS HOWTO などがある。その他にも関連FTPサイト、ユーザグループなどへのリンクがある。が、本来はシステム管理者のためのサイトとして開発されている。サーチエンジンは "Find It Fast", "Find It Now" からリンクされている。Linuxをインストールして起動したならその後の管理に是非活用して欲しい。


大きなオブジェクトとPerl DBI (By Mark Nielsen)

Perl と共に DBI と DBD::Pg がインストールされている必要がある。次のサイトを参考にして欲しい。

  1. man DBI
  2. man DBD::Pg
  3. ftp://ftp.perl.com/CPAN/modules/by-category/07_Database_Interfaces/
  4. "large", "dbi" 検索
  5. http://www.postgresql.org/doxlist.html -- "Large Objects" に関する説明
  6. psql を使った例

フリーの本や文学を配布しているとデータベースに大きなオブジェクトを置く必要が出てくる。今回は Perl と PostgreSQL を使って大きなオブジェクトを利用するためのデータベースを構築する。

ラージオブジェクトとはデータベースのテーブルに通常は納まらない物(テキストやバイナリ)だ。使用する環境は RedHat Linux, Postgresql-6.5.4, Perl 5 (with DBI, DBD::Pg, Pg), Apache_1.3.9 。

Perl DBI は汎用的なデータベースインタフェースで個々のデータベースにアクセスするには Perl DBD ドライバを使用する。PostgreSQL にアクセスするには Perl DBI と Perl DBD:Pg を使う。例えば "peaple" というテーブルから PostgreSQL で最初と最後のレコードの名前を表示するにはこういう感じになる。



#!/usr/bin/perl





use DBI;


use vars qw($dbh);


    ### アクセスするデータベースは zing  


$dbh ||= DBI->connect("dbi:Pg:dbname=zing");





my $Command = "select first_name,last_name from people 


          sort by last_name,first_name";





my $sth = $dbh->prepare($Command);


my $Result = $sth->execute;





while (my @row_ary  = $sth->fetchrow_array)


  {print "<br> $row_ary[0] $row_ary[1]\n";}


ラージオブジェクトにアクセスすると2度のリードが発生する。ファイルのコピーと実際のリードと。Apache の下で mod_perl 経由で Perl が動いているときにファイルをメモリに読み込んでしまうと大量のメモリが消費されることになり、現実的ではないのでテンポラリファイルを使用するようになっている。PostgreSQL のドキュメントの例を使って PostgreSQL のラージオブジェクトのインポート、エクスポートの方法を見てみよう。例では psql を使っている。



CREATE TABLE image (


    name            text,


    raster          oid


);





INSERT INTO image (name, raster)


    VALUES ('beautiful image', lo_import('/etc/motd'));





SELECT lo_export(image.raster, "/tmp/motd") from image


    WHERE name = 'beautiful image';


これを Perl スクリプトを使って書くとこんな具合だ。



#!/usr/bin/perl





use vars qw($dbh);


$dbh ||= DBI->connect("dbi:Pg:dbname=zing");





my $Command = "INSERT INTO image (name, raster)


            VALUES ('beautiful image', lo_import('/etc/motd'));";





my $sth = $dbh->prepare($Command);


$sth->execute();








$Command = "SELECT lo_export(image.raster, '/tmp/motd') from image


             WHERE name = 'beautiful image'";


$sth = $dbh->prepare($Command);


$sth->execute();


ZING は実際に使用している Perl スクリプトを www.genericbooks.com で公開している。

データベースサーバのデータの入出力にウェブサーバを使う場合、データベースサーバとウェブサーバのアカウントが違う場合には(例えば "www" と "pgsql")一時ファイルの読み込みに問題が発生するかもしれない。そのためにはウェブサーバとデータベースサーバのアカウントを同じにする、同じグループにする、cron を使ってウェブサーバの pid でファイルを保存しなおすなどの方法を講じる必要があるがセキュリティの問題が発生する可能性もある。ZING ではファイルのエクスポートにウェブサーバの子プロセスの pid を使っている。


Linux ディストリビューションのインストール CD の作成 (By Mark Nielsen, Krassimir Petrov)

参考サイト

  1. CD-Writing HOWTO by Winfried Trper
  2. Lilo mini-Howto
  3. Xcdroast

この記事は Linux のディストリビューションからインストール用の CD-ROM を作る方法について述べる。本来は SCSI の CD-ROM を使ったほうが簡単なのだろうが IDE CD-ROM ユーザの方が多いだろう。CD-ROM ライターには2通りある。CD-ROM の書込と CD-RW の書込だ。CD-RW の書込ソフトは CD-ROM の書込にも使える。次に IDE CD-ROMライターを使うにはコンピュータに IDE CD-ROM が SCSI の CDーROM だと思わせなければならない。そのためにはカーネルに "ide-scsi" をモジュールとして作成し、CD-ROM ライターにアタッチする。方法は Linux 起動時のコマンド引数として渡すか lilo を編集する。Linux が起動したらコマンドプロンプトから "insmod ide-scsi" と入力してモジュールを組み込む。

Linux で CD-ROM を作成するには2種類のソフトがある。cdredord と Xcdroast だ。今回使用するのは cdrecord だ。cdrecord と "ide-scse" が正しくインストールされていれば次のような応答がある。
正しくインストールされていない場合



# cdrecord -scanbus


cdrecord: No such file or directory. Cannot open SCSI driver.


正しくインストールされている場合


# cdrecord -scanbus


Using libscg version 'schily-0.1'


scsibus0:


         0,0,0    0) 'ATAPI  " 'CD-R/RW CRW6206A'  '1.2A' Removable CD-ROM


         0,1,0    1) *


         0,2,0    2) *


         0,3,0    3) *


         .............


         0,7,0    7) *


ここまでできたら好みのディストリビューションをダウンロードしよう。ダウンロードするときは CD のイメージをダウンロードする。ISO イメージだ。ダウンロードしたら CD-R に書き込むだけだ。CD イメージを /tmp にダウンロードしたとすると書き込むには



cd /tmp


cdrecord -v speed=2 dev=0,0,0 6.1-i386.iso


と入力する。cdrecord がコマンド、-v はカーネルのメッセージを表示する。speed=2 は書き込み速度、dev=0,0,0 は "cdrecord -scanbus" で表示された3個の数字だ。6.1-i386.iso が書き込む CD イメージ。

非常に簡単だが将来はブート可能の CD-ROM 作成なども紹介したい。


ホームディレクトリを共有する(By JC Pollman, Bill Mote)

パソコンや OS が増えると同じだけホームディレクトリが増える。そんな環境でホームディレクトリを共有する方法を述べよう。基本的な条件はホームディレクトリを共有するためにサーバにホームディレクトリがあり、samba、nfsクライアント/nfsサーバがインストールされていることだ。Windows とドライブを共有するためには smb プロトコルを使用し、Linux でディレクトリを共有するには tcp/ip で nfs を使用する。セキュリティの観点からサーバはファイアウォールの内部に置き tcp wrapper の使用を薦めます。設定例とともにその方法が述べられているが、別の機会に改めて紹介しよう。


ネットワーク環境でのソースファイル管理 (By James M. Rogers)

複数の人間でソースファイルを管理するにはそれぞれが使用中のファイルを上書きしないように注意しなければならない。ディレクトリが少なければ Revision Control System (RCS) で充分だが開発環境が複数のコンピュータに及んだりネットワークを利用するようになると Concurent Version System (CVS) が必要になる。今月は Secure Shell (ssh) を利用した方法について説明する。来月はそれを使ってリポジトリのインポート、アップデート、リポジトリの登録などについて述べる。

  1. それぞれのボックスにsshをセットアップする。その方法は ここだ。
  2. それぞれのボックスでsshdを起動する。これがリポジトリの面倒をみる
  3. リポジトリがあるボックスでプログラマグループのユーザアカウントを作成する
  4. リポジトリアカウントを含むsshディレクトリをそれぞれのアカウントに作成する
  5. それぞれのホームディレクトリで "chmod 700 .ssh" を実行する
  6. ユーザは ssh-keygen を使って public、private のキーを作成する
  7. プロジェクトのメンバの "~/.ssh/authorized_keys" を集めて リポジトリアカウントの "~/.ssh/authorized_keys" に置く
  8. リポジトリアカウントで "chmod 700 ~/.ssh/authorized_keys" を実行する
  9. "ssh repository@repository_host" を実行してテストをする。repository はグループディレクトリ、repository_host はリポジトリがあるホスト名
  10. リポジトリのホームディレクトリに "~/cvsroot" ディレクトリを作成する
  11. 環境変数を設定する

    export CVS_RSH=ssh
    export CVSROOT=repository@repository_home:/home/repository/cvsroot
     

  12. 別のウィンドウからログインして環境変数が正確に設定されていることを確かめる
  13. リポジトリを使用できるユーザ名で "cvs init" を実行してエラーメッセージが出ないことを確かめる
  14. もしエラーが出たら最初からやり直す
  15. この機会を利用して SSH と CVS を使ってみよう

SSH を使えば安全なネットワークを組むことができる。今後機会があればその設定なども紹介しよう。


ウェブアプリケーションの開発 Part 3 (By Andersen Silva)

このシリーズの最後としてとても便利な例を紹介しよう。mySQL を使ったオンラインのブックマーク作成だ。php3 のコードを書く前に mySQL のテーブルを作成しなければならない。mySQL のデータベースを操作するにはいくつか方法がある。

自分の気に入ったものを使用して欲しい。

今回の使用例の設定は次の通りだ。

    データベースホスト: myserver
    ユーザネーム: myusername
   パスワード: mypassword
   データベース名:  mydatabase
   テーブル名: bookmark
    bookmark テーブルの項目名:  id, url, description

データベースが運用できるようになったらコーディングの例を示そう。



    <HTML>


    <head>


    <title>Anderson's bookmark</title>


    </head>


    <body bgcolor=white>


    <form ACTION="sendbook.php3" METHOD="Post">


          <center><p>Enter The Bookmark Title:</font>





          <input TYPE="text" SIZE="40" NAME="description"> </p>





          <center><p>Enter The Bookmark URL:</font>





          <input TYPE="text" SIZE="40" NAME="URL"> </p></center>





          <p><input TYPE="Submit" VALUE="Check"><br>


     </form>


    <a href="book.php3">View Bookmarks</a>


    </body>


    </html>


次の例は mySQL データベースをオープンしHTML フォームからデータをデータベースに送る。



         <?php


           //もし項目が空白の場合はデータを送信せずにエラーメッセージを返す


           if(!($description=="") || !($URL==""))


           {


 


              //データベースサーバに接続する


              mysql_connect(myserver, myusername, mypassword);


 


              //データベースに接続


              mysql_select_db('mydatabase');


 


              //ブックマークテーブルに挿入するコマンド


             


              mysql_query("insert into bookmark(description, URL) values ('$description', '$URL')");


 


              //データベースの接続を終了


              mysql_close();


 


              //データが挿入されたらブラウザで表示


              echo "Thanks for adding the bookmark<br>";


              echo "<a href=book.php3>View BookMraks</a><br>";


              echo "<a href=sendbook.html>Add Another One</a><br>";


            }else{


              echo "You need to go to the form: <a href=sendbook.html>Sendbook</a>";


            }


         ?>


次のスクリプト、book.php3 は データを検索して表示する。



    <?     echo "<HTML>";


           echo "<HEAD><TITLE>Afsilva's Bookmark</title></head>";


           echo "<body bgcolor=white>";


           echo "<IMG SRC=bookmark.jpg><br><br>";




                //データベースサーバに接続


                mysql_connect(myserver, myusername, mypasword);


                //データベースに接続


                mysql_select_db("mydatabase");


                //データベースのすべての項目を検索


                $result = mysql_query("SELECT * FROM bookmark");




                //mysql_num_rows() は該当するブックマークの数を返す


                $rows = mysql_num_rows($result);


                echo "Number of bookmarks:";


                //レコード数を表示


                echo $rows;


                echo "<br><br>";


                $i=0;


                echo "<a href=sendbook.html>Insert More BookMarks</a>\n<br><br>";


                echo "<table border=1>";




                //配列を使ってケリーにアクセス


                //配列のインデックスはデータベースの項目名


                while ($row = mysql_fetch_array($result))


                {


                      echo "<tr><td>\n";


                      // " ." 演算子は文字列を結合


                      echo "<a href=".$row["URL"].">".$row["description"]."</a>\n";


                      echo "</td></tr>";


                }


                echo"</table>";


                mysql_close();


                echo"<a href=../index.html target=_top>";


                echo "</HTML>";


      ?>


この3つのスクリプトでブックマークを運用することができるがここで止まらずに自分のブックマークアプリケーションをより良いものにして下さい。これはゲストブックやカウンタなどにも応用できます。筆者への後意見や質問は遠慮なく afsilva@liberty.edu, までどうぞ。


人工知能とLinux(By Anderson Silva)

人工知能に関しては意見が別れることが多いがこの記事はそのコンピュータに関連する側面に視点を限ってきた。つまり空を飛びたければ鳥の研究をするのではなく飛行機に乗ってしまえばいい。

人工知能構築のためのツールとして選んだのは Prolog だ。 SWI Prolog ( www.hio.hen.nl/faq/SWI-Prolog.html) を使う。Prologは非常に柔軟で強力だ。その上論理的である。Prolog のプログラムは事実と一連のルールからなる。事実はナレッジベースというファイルに保存される。ルールはプログラムだ。

実際に簡単な図とそのリストを示してPrologの説明をしており、グラフサーチのプログラムを走らせることもできる。

人工知能の構築にはその他のアルゴリズムも利用されている。誰でもが応用できるような例を紹介しているが、エキスパートシステム、ロボット、ファジーなどその応用範囲は広い。