Linux Gazette 8月号

今月の Linux Gazette の内容


More 2 ¢ Tips

IP アドレスの 255、256 の違い

256 は正しい IP アドレスではない。8ビットの最大の数は255だ。

help の場所は ?

HTML よりもプレーンテキストがいいなら KDE のヘルプがいい。URL に "man: command" と入力する。

Linux と windows95 を同じマシンで動かす

同じマシンで Linux と Windows95 を動かすことは可能だが簡単ではない。

http://www.linuxdoc.org
又は
http://www.linuxdoc.org/LDP/Linux+Windows-GUIDE/index.html
を参照すること。
http://www.vmware.com
を使えばもっと簡単だ。

10Bese2 でネットワーク接続

10Base-2 イーサネットは最近は非常に珍しい。10Base-2 イーサネットはハブを使わずにシステムを接続できる。必要なものは 10Base2 ケーブル、BNC T コネクタ、BNC ターミネータなど。

デスクトップを GNOME から KDE に変える

/etc/sysconfig/desktop をテキストエディタを使って "KDE" に変える


Maximux (By Shane Collinge)

今月は Help Dex が締め切りに間に合いませんでした。そこで Help Dex の作者の別な作品、 Maximux を見てみましょう。


メールソフトウェア (By Jim Dennis)

Linux で動作するメールソフトはたくさんありほとんどが MTA(mail tarnsfer agents)、MSA(mail storage/access agents)、MUA(mail user agents) のサービスを提供している。もちろんその他のユティリティもいろいろある。Linux で使用されている主な MTA は sendmail、qmail、Postfix などで、メールの受信、リレーなどの機能がある。みかけは簡単なようだがルーティングやマスカレードポリシーなど非常に複雑だ。ルーティングではいろいろなディレクトリサービスを扱う必要もある。MTA はコントロールリスト、ルール、アドレスフォーマットなどを使ったスパムメール対策が施され、さらにウィルス、ワーム対策まで要求されるようになっている。標準のインストール、設定は簡単だがそのパワーを利用するのはかなり難しい。MTA を特別のルーティング、スパムメール対策、セキュリティなど、独自の要求に合わせようとするとさらに上級の設定オプションが必要になり、MTA とサブシステムとの複雑な関連も発生する。

MTA をインストール、設定したら MSA にも同じ作業が必要なのだが、現在ではサーバにメールを保管し POP、IMAP などで取りに行くのが一般的だ。プロトコルは多様なのだが POP3 か IMAP4 が使われることが多く、複数の MSA が同時に使用されることを考慮してロック機能も備えている。つまり複数のユーザが POP や IMAP を同時に使用でき、しかも pine、mutt、elm などのローカル MUA を同時に利用することが可能だ。cp、mv、ftp、rsync などの unix コマンドを使っての利用も可能だがメールボックスの修復時以外にはあまり薦められない。

POP は通常サーバ上のメールをクライアントシステムに取り込み同時にサーバから削除する。IMAP を使えばユーザはサーバ上にメールを保存して管理することができる。同時にクライアントシステムにもコピーできるが、バックアップ、復旧などはサーバで一括的に管理することができる。メール取得時にサーバ上のメールを削除することにすれば操作的には POP とあまり変わりはない。どちらも長時間連続動作させることができ、トラブルがあっても通常のテキストエディタやユティリティで修復することができる。

MUA にはいろいろなものが利用できる。Windows の Outlook や Unix の fetchmail など。その他 Linux には procmail、vacation、biff などカテゴリに分類できないツールもある。Procmail はローカルのメール配送エージェントだ。通常メールをフィルタし振り分け、転送などが行える。vacation は古いプログラムで、メール受信者の不在(休暇)を通知するのに使われた。biff はメールの到着通知をするプログラムだ。同じような機能を持ったものはたくさんある。


Copyright © 2000, Jim Dennis
Published in Issue 56 of Linux Gazette, August 2000

ping (By Pat Eyler)

ping は自己診断プログラムの一つで、ネットワーク上の2ホストの接続を確認する。ICMP Echo Request パケットをリモート IP アドレスに送り ICMP 応答を待つ。現在使われているpingの最初のバージョンを書いたのは Mike Muss 氏だ。その後多数の人により改良されてきた。名前の由来は諸説ある。Packet INternet Groper の頭文字を取ったもの、音波探知機に因んだもの、実際にパケットが届いた時に発した音などと言われている。

ping はマシンの IP 送受信を的確に示してくれる。ping が届けば ftp、http アクセスも可能だが、パケットフィルタリングツールは明示的に ICMP パケットを通さないものがある。大きな理由は ICMP でも攻撃の手段にされてしまうからだ。ICMP パケットを通すか通さないかを決定するのは難しい。ICMP は非常に便利なツールだが同時に "Ping of Death" のように攻撃の手段ともなる。ICMP を通すならその影響も十分に考慮しよう。

ping コマンドはその他にも便利な使い方ができる。特定のアドレス範囲に ping を送信する fping や Perl スクリプトで使用される Net::Ping モジュールなどがいい例だ。Net::Perl の使用例は次の通りだ。

Example 1. Using Net::Perl

#!/usr/bin/perl -w





use strict;


use Net::Ping;


	  


my $host = $ARGV[0];


	  


my $p = Net::Ping->new("icmp");


	  


if ($p->ping($host)) {


    print "$host is alive.\n";


} else {


    print "$host is not reachable.\n";


}


	

ping は通常引数をとらずに使用されることが多い。中断は Ctrlcだ。結果は次のようなものになる。
[pate@cherry pate]$ ping mango


PING mango (192.168.1.1) from 192.168.1.10 : 56(84) bytes of data.


64 bytes from mango (192.168.1.1): icmp_seq=0 ttl=255 time=0.5 ms


64 bytes from mango (192.168.1.1): icmp_seq=1 ttl=255 time=0.3 ms


64 bytes from mango (192.168.1.1): icmp_seq=2 ttl=255 time=0.3 ms


64 bytes from mango (192.168.1.1): icmp_seq=3 ttl=255 time=0.3 ms


64 bytes from mango (192.168.1.1): icmp_seq=4 ttl=255 time=0.3 ms


64 bytes from mango (192.168.1.1): icmp_seq=5 ttl=255 time=0.3 ms





--- mango ping statistics ---


6 packets transmitted, 6 packets received, 0% packet loss


round-trip min/avg/max = 0.3/0.3/0.5 ms


[pate@cherry pate]$ 


      
結果は三つのセクションからなる。"PING" で始まる行はコマンドの全体を表しており、次のセクションは応答の記録だ。最後のセクションで結果が要約されている。この場合はパケットのロスがなく応答時間も早い。でも一つのパケットで事態を判断するのは危険だ。ネットワークの混雑で相当数がロスする可能性があるので5-10のパケットを送出した方がいいだろう。

ping は通常引数なしで使用されることが多いが、便利なオプションも多い。オプションは次の通りだ。

Table 1. Ping Command Options

SwitchDescription
-c count

Stop sending and receiving packets after count packets.

-d

Set the SO_DEBUG on the socket used.

-f

Send the packets as fast as possible. (flood)

-i wait

Set an interval of wait seconds between packets.

-I 〈device〉

Sets the output interface.

-l preload

Sends preload packets as fast as possible, then drops back to normal mode.

-n

Don't look up hostnames, just give IP addresses. (numeric)

-p pattern

Specify up to 16 bytes of "pad data" to be sent with the packet.

-q

Output only summary lines. (quiet)

-r

Don't use routing tables to send the packet, just drop it out the local interface.

-R

Set the Record Route option.

-s packetsize

Set the number of data bytes sent to packetsize.

-T tsonly

Sends a ping with the timestamp option.

-T tsandaddr

Collects timestamps and addresses

-T tsprespec [host1 [host2 [host3 [host4]]]]

Collects timestamps and addresses from prespecified hops.

オプションの組み合わせるとより有効に使用できる。"-f" オプションを使えば時間を有効に使えるし、"-c 10"、"-q" と組み合わせると結果が早く出、アウトプットも簡略化される。

	[root@cherry /root]# ping -c 10 -fq mango


PING mango (192.168.1.1) from 192.168.1.10 : 56(84) bytes of data.





--- mango ping statistics ---


10 packets transmitted, 10 packets received, 0% packet loss


round-trip min/avg/max = 0.2/0.2/0.9 ms


[root@cherry /root]# 


	


      

"-f" と "-l" スイッチは root でないと使えないことに注意しよう。

ping -c10 -R と起動するとパケットの経路を表示できるがあまり薦められない。それよりも "traceroute" を使用したほうがいい。ping は非常に便利なツールです。大いに活用してください。


Copyright © 2000, Pat Eyler and New Riders Publishing
Published in Issue 56 of Linux Gazette, August 2000

nmap (By Josh Flechtner)

Author: Fyodor

Required: flex, bison

Homepage: http://www.insecure.org/nmap
Current stable release: 2.53

License: GPL

Platform ports: Linux, FreeBSD, NetBSD, OpenBSD, Solaris, IRIX, BSDI, SunOS, HP-UX, AIX, Digital UNIX, Cray UNICOS and Windows NT.

nmap の機能は3つだ。ping を送出してホストが起動しているかどうかチェックする。ポートスキャンをしてホストのサービスと OS を確認する。ユーザがネットワークをスキャンすることも可能だし、スキャンをカスタマイズするここともできる。通常は ping で十分だ。それを越えると悪意を持ったポートスキャンと誤解されるかもしれないので注意しよう。

ディストリビューションによってはすでに nmap がインストールされている場合もある。なければ最新版を取得してインストールしよう。ソースからコンパイル、インストールしてもいいし、ディストリビューション用のパッケージを取得してインストールしてもいい。nmap を実行するにはまずスキャンするホストのアドレスが必要だ。

        nmap 192.168.0.1

実行例は次のようになる。

        Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap)
        Interesting ports on Eve (192.168.0.2):
        (The 1511 ports scanned but not shown below are in state:closed)
        Port                State            Service
        21/tcp             open             ftp
        23/tcp             open             telnet
        25/tcp             open             smtp
        79/tcp            open             finger
        80/tcp             open             http
        98/tcp             open             linuxconf
        111/tcp           open             sunrpc
        113/tcp            open            auth
        513/tcp            open            login
        514/tcp            open            shell
        515/tcp            open            printer
        6000/tcp          open            X11

        Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

nmap を実行すると上記のように使用可能ポートをリストアップしてくれる。このコマンドは一般ユーザ権限で実行することができる。

LAN ではなくダイアルアップでインターネットに接続してる場合も同じように使うことができる。ifconfig か /var/log/messages ファイルから IP アドレスを調べてコマンドを打ち込めばいい。例えば IP アドレスが 206.212.15.23 だとして、隣人のマシンをチェックしてみよう。

    nmap -sT 206.212.15.22

次のような出力例になるだろう。

    Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap)
    Interesting ports on find2-cs-4.dial.ISP.net (206.212.15.22):
    (1522 ports scanned but not shown below are in state: closed)
    Port                State            Service
    139/tcp          open             netbios-ssn

    Nmap run completed -- 1 IP address (1 host up) scanned in 20 seconds

-sS: スキャンが相手に気づかれにくい。ルート権限が必要

-sf -sX -sN: リモートホストがフィルタリングソフトや通信記録を取っている場合に使用する。ただしこのオプションは Windows マシンには効果がない。ルート権限が必要

-sU: リモートホストの TCP ではなく UDP リスニングをスキャンする。使用例は次の通りだ。

    nmap -sU 192.168.0.2

    Starting  nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap)
    Interesting ports on Eve (192.168.0.2):
    (The 1445 ports scanned but not shown below are in state: closed)
    Port                State                Service
    111/udp          open                 sunrpc
    517/udp          open                 talk
    518/udp          open                 ntalk

    Nmap run completed -- 1 IP address (1 host up) scanned in 4 seconds

-O: リモートホストの OS を確認する。OS の確認方法に関しては "Remote OS detection via TCP/IP fingerprinting" を参照して欲しい。使用例、出力例は次のようになる。

    nmap -O 192.168.0.2

    Starting nmap V. 2.53 by fyodor@insecure.org (www.insecure.org/nmap)
    Interesting ports on Eve (192.168.0.2):
    (The 1511 ports scanned but not shown below are in state:closed)
    Port                State            Service
    21/tcp             open             ftp
    23/tcp             open             telnet
    25/tcp             open             smtp
    79/tcp            open             finger
    80/tcp             open             http
    98/tcp             open             linuxconf
    111/tcp           open             sunrpc
    113/tcp            open            auth
    513/tcp            open            login
    514/tcp            open            shell
    515/tcp            open            printer
    6000/tcp          open            X11

    TCP Sequence prediction: Class=random positive increments
                                                 Difficulty=1772042 (Good luck!)
    Remote operating system guess: Linux 2.1.122 - 2.2.14

    Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

nmap は IP アドレスの範囲を指定してスキャンすることもできる。例えばこのように。

        nmap -sT -O 206.212.15.0-50

上記コマンドは 206.212.15.0 から 206.212.15.50 の範囲のホストをスキャンする。結果をファイルに落としたい場合には次のようにする。

    nmap -sT -O -oN sample.txt 206.212.15.0-50

    nmap -sT -O -oM sample.txt 206.212.15.0-50

上の例は人間が読むことのできる結果を、下の例はマシンが解析できる結果をファイルに落としてくれる。以前に250のホストをスキャンしたときに250台全部のマシンが Linux だったので驚いた記憶がある。

-I: TCP の ident スキャンオプションをオンにする。スキャンした結果にユーザネームが表示される。

-iR: ランダムにホストをスキャンする。

-p: スキャンするポートの範囲を指定する。

-v: プロセスを画面に表示する。

-h: nmap のヘルプを表示する。

nmap の使用例をいくつか示そう。

    nmap -v -v -sS -O 209.212.53.50-100

途中経過を表示しながら 209.212.53.50 - 100 のホストを密かにスキャンする。表示される情報量は非常に多い。ログを取ろう。

    nmap -sS -p 23,80 -oN ftphttpscan.txt 209.212.53.50-100

アドレスが 209.212.53.50 - 100 のホストの ftp と http ポートを密かにスキャンし、結果をログに残す。

最後に nmap の GUI インタフェースを紹介しよう。

    NmapFE  - NmapFE は GTK を使っている。サイトは http://codebox.net/nmapfe.html

    Kmap  - Kmap は QT/KDE を使っている。サイトは http://www.edotorg.org/kde/kmap/

    KNmap - KNmap も KDE を使っている。サイトは http://pages.infinit.net/rewind/


Copyright © 2000, Josh Flechtner
Published in Issue 56 of Linux Gazette, August 2000

Linux の将来 (By Nicolay Alfredo GIRALDO Leiva)

スペイン語 からの翻訳は Rory Krause氏による。

Bill Gates と Paul Allen はメインフレームの使用料金を時間単位で支払うのはおかしいと考えた。その結果がパーソナルコンピュータであり、現在のマイクロソフトだ。同様に Richard Stallman は個人が使用するソフトウェアにかなりの金額を支払うのは公平ではないと考えた。そして GNU プロジェクトが発足した。Linus Torvalds がサーバへアクセスするために作ったソフトウェアは OS、もしくは OS のカーネルだった。それはユーザの協力を得て改良されている。Richard Stallman はソフトウェアを書き彼のライセンスを付加している。ソフトウェアで重要なものはライセンスではない。それを使用する人とライブラリだ。

Bill Gates、Paul Allen、Richard Stallman の考えをまとめるとパーソナルコンピュータのフリーの Linux ディストリビューションになる。Linux はゆっくりとしかし確実にパーソナルコンピュータの分野へ進出している。Linux を試して満足する人は非常に少ない。多くの人が Windows へ戻っていく。重要なのは GUI だ。テキストコンソールや2文字のコマンドに縁のない人は2億人以上いる。

この点に関する我々の努力はダブっている。デスクトップ環境では KDE と GNOME とが現在開発中だ。どちらも目指すところは同じだ。GUI 環境が充実すればユーザも使いやすくなりソフトの開発も容易になる。だが、やっていることは同じで2倍の労力を必要とする。

KDE は複雑で非常に多機能だが Windows からの転向者にはあまり違和感のないデスクトップ環境を与えてくれる。でも現実的な面からではなく QT ライブラリのライセンスに関して問題がある。GNOME も非常に優れたツールなのだが問題がないこともない。GPL よりも BSD ライセンスを好む人たちにはライセンス形態が不満だ。ウィンドウマネージャは自由に入れ替えができるので好みのものを選択すればいいということなのだろうがウィンドウマネージャが何なのかを知らない人のほうが多い。

アプリケーションは必要なライブラリを使用するがグラフィカル環境のライブラリ数は非常に多い。C や C++ のプログラマが Linux アプリケーションを書こうとすると標準がないこと、スタンダードのライブラリがないことに気がつくだろう。Red Hat のデフォルトのウィンドウマネージャということで GNOME を選ぶ人もいるだろう。KDE と GNOME プロジェクトが統合されれば素晴らしいことだろうがそれには Linus のような指導者が必要だろう。

その他にも Linux には問題がある。Linux はコンピュータの世界でもハードウェアメーカーにもかなり認識されるようになってきたがドライバの作成はまだオープンソースコミュニティに任されている。本来はハードウェアメーカーが書くべきもので、オープンソースとして公開してもいい。でなければバイナリでのリリースだけでも非常に有用だ。"winmodems" として良く知られているソフトウェアモデムを例に取ろう。Lucent は Lucent チップ搭載のモデムの Red Hat 6.1 用のバイナリをリリースした。これはユーザが望んだためではなくディストリビュータが望んだためだ。これは時間やサポートなどの大きな節約になる。つまり Linux ディストリビュータが要求すれば実現することも多いということだ。

Linux ディストリビュータとして欠けているものはリーダーシップだろう。個々のディストリビュータがプログラマを雇うよりもできるだけ多くのプログラマにコンタクトすべきだ。何人かを雇用するよりもプログラマの数は多ければ多いほどいい。さらに Linux は非常に強力な OS だが多くをオープンソースに頼りすぎている。オープンソースだからといって必ずしも高品質を維持できるとは限らない。

Linux が成功するにはキラーアプリケーションが必要で、それはオフィススイートだという人がいる。マイクロソフトも考え方は同じだろう。オフィスの次期バージョンには音声認識機能が加わるようだ。オフィスの次期バージョンもかなり売れるだろうが音声認識機能がまともに動作するようになるには2度か3度のバージョンアップ後になるだろう。

一つのアプリケーションが奇跡を起こすことはほとんどない。優劣を決めるのは多数のアプリケーションやゲームだ。Windows も最初はゲームプラットフォームとしては劣悪だった。Windows 95 でもゲームのサポートはひどかった。やっと対応できるようになったのは1996年にダイレクトXライブラリがリリースされてからだ。それ以後業界の動きが変わってきた。DOS ゲームのメリットはハードウェアを直接制御できたことだ。Windows9x のメリットはハードウェアの種類にかかわらず互換性を気にすることなくダイレクトXライブラリでプログラムを書くことができることだ。でも Linux ではハードウェアの制御もハードウェアをコントロールするための標準のライブラリも存在しない。ビデオライブラリはあるが音声には対応していない。

筆者が現在 Windows 95 を使っているのはゲームのためだ。Linux でも OpenGL のアクセラレーションや XFree 4.0 での進んだ対応などがあるが、競争には終わりがない。Windows 2000 は Linux のいい所をさかんに取り入れているし、今後もそうだろう。Linux が競争に負けないようにするには優れたアイディアが必要だ。Bill Gates や Richard Stallman のような。さらに Linus のような指導者も必要だ。この記事を読んで何人かでも立ち上がってくれることを祈っている。


Copyright © 2000, Nicolay Alfredo GIRALDO Leiva
Published in Issue 56 of Linux Gazette, August 2000

Tuxedo Tails (By Eric Kasten)

Tuxedo Tails は新しい一こま漫画です。Eric Kasten 氏が Linux Gazette のために書いてくれました。Kasten 氏はほとんどの場合 Linux マシンを使っています。例外は所得税申告ソフトと Photoshop か Illustrator です。絵を描くのはペンとインクを使い、スキャナでパソコンに取りこみ、色をつけます。GUI で処理する場合には Gimp を、スクリプトで処理する場合には ImageMagick を使っています。

inetrevolt.png penguinstrike.png

Kasten 氏は Sun Puppy という続き漫画も描いています。http://www.sunpuppy.com で見ることができます。


Copyright © 2000, Eric Kasten
Published in Issue 56 of Linux Gazette, August 2000

今月のサイト (By Sean Lamb)

毎月 Linux に関連するサイトを紹介しています。今月紹介するのは SourceXchange (http://www.sourcexchange.com/) です。SourceXchange は Collab.net ネットワークのメンバだ。SourceXchange としての活動はまだあまり目立たないが目的はオープンソース開発者を適切なプロジェクトにまとめることだ。最近の開発ボードを見てみればプロジェクトを探している開発者が大勢いるのが分かる。このサイトでは時間を無駄にせずに RFP (Request For Proposal) セクションで関心のあるプロジェクトを見つけることができるだろう。この記事を書いているときにも画像操作ユティリティ、PHP のメッセージボード開発などがあった。RFP には求められる技術、支払い金額などが明示されている。気に入ったものが見つかればプロジェクトにサービスを提供したい旨のコメント残せばいい。

参加はしたいがコードを書くのはどうも、という人には Peer Reviewer というポジションがある。これはプロジェクトを完成させるために開発者などを支援するポジションだ。参加者が決定すれば作業が開始する。求められる技術、提供できる技術、開発者、レビューアー情報、プロジェクト、メーリングリストなどの情報も SourceXchange が提供している。開発者はフリーで適当なツールやホスティングを利用することができる。

プロジェクトが終了すれば開発者はレビューと同時に補償も受ける。RFP とプロジェクト情報は登録せずに閲覧することができる。詳細な情報が必要な場合は登録しなければならない。企業によるオープンソース開発に興味があるならプロジェクトの一つに登録してみることだ。


Copyright © 2000, Sean Lamb
Published in Issue 56 of Linux Gazette, August 2000

マイクロパブリッシング その2 (By Mark Nielsen)

最初にこのトピックを紹介したのは Rick Holbert だが、彼の記事に基づいて本を作った経験を基にいくつかの提案をしたい。元記事では デュプレックスプリンタ、ペーパーフォルダ、低価格のブックプレスなどを使用したが、今回はすべてフリーソフトウェアを使用する。両面印刷のアドオンはやたらと高いができればレーザープリンタを選ぼう。Deskjet でも代用できるが速度が遅く2度印刷しなければならない。印刷品質もレーザープリンタに比べると落ちる。

ペーパフォルダも買おう。筆者が購入したのは Model 1501 (CV-7) AutoFolder だ。手で抑えるのも一つの方法だがお勧めできない。ブックプレスもあったほうがいい。最後にゴムのりが必要だ。

印刷するにはまずポストスクリプトもしくは pdf ドキュメントをポストスクリプトレベル II ドキュメントに変換する。経験から pdf に変換し、次に Acrobat を使って pdf ドキュメントをポストスクリプトに変換すると後で "psbook" や "mpage" を使うときに楽になる。"psnup -2" の代わりに "mpage -2" を使うこともできる。

  1. ドキュメントがポストスクリプトなら pdf に変換する。
    ps2pdf DOCUMENT.ps
  2. DOCUMENT.pdf を Linux 版の Acrobat リーダーで開く
  3. ポストスクリプトレベル II を選んでドキュメントを印刷するが、プリンタへの印刷ではなくファイル、DOCUMENT.ps への上書き印刷とする。オリジナルのファイルは別途保管すること。
実際に印刷しよう。
  1. psbook -s4 DOCUMENT.ps > Temp.ps
  2. mpage -2 Temp.ps > NEW.ps
  3. ps2pdf NEW.ps
ステップ2は次のようにしてもいい。
psbook -s4 DOCUMENT.ps | mpage -2 > NEW.ps
ps2pdf NEW.ps

両面印刷ができなければ次のようにする。
  1. mpage -O -b Letter -o DOCUMENT.ps > front.ps
  2. mpage -E -b Letter -o DOCUMENT.ps > back.ps
  3. ps2pdf front.ps
  4. ps2pdf back.ps

本を作るにはオリジナルの記事Micro Publishingに従えばいい。もし複数の部数が必要な場合には印刷をしておこう。後でコピーが必要になったときは複写機を使おう。ポストスクリプト原稿の印刷は非常に時間がかかる。

本を作る方法がいくつかあるが、今回の方法はポストスクリプト対応の両面印刷機能を持ったレーザープリンタを使った。これは少数の部数の本を作るにはいい方法だが、たくさんの部数を作成するには荷が重い。これ以外にも安く仕上げる方法はいくつかあるが、セットアップが済んでいればいつでも使え、部数が少ないときには変更があってもすぐに反映させることができる、自分の本を作るのは非常にクールだなどのメリットがある。それに個人的には自分のことは自分でしたい。いずれ良質の糊、クールなブックカバー、pdf のサイズ縮小などをアップデートしたいと思っている。


Copyright © 2000, Mark Nielsen
Published in Issue 56 of Linux Gazette, August 2000

Python でオブジェクト指向プログラム (By Michael Orr)

An Introduction to Object-Oriented Programming in C++ の Python 版と Java 版の話がある。今回は Python 版のオブジェクト指向プログラムだ。もし Python の基本を知りたければTutorialhttp://www.python.org/doc/ がいい。C++ と同じように家のテーマから始めよう。



#! /usr/bin/python


"""house.py -- A house program.


This is a documentation string surrounded by triple quotes.


"""





class House:


	pass





my_house = House()


my_house.number = 40


my_house.rooms = 8


my_house.garden = 1





print "My house is number", my_house.number


print "It has", my_house.rooms, "rooms"


if my_house.garden:


	garden_text = "has"


else:


	garden_text = "does not have"


print "It", garden_text, "a garden"


実行結果は次の通り。



My house is number 40


It has 8 rooms


It has a garden


上記コードはクラスを宣言してからインスタンス(特定の家)を作成し、変数 my_house に代入している。"pass" はクラスブロックが空の場合に使用する。最初は何の属性も設定していないので my_house.number を呼ぶと AttributeError になる。次の3行で属性を設定し作成している。これは最初に属性を有する Java と Python の大きな違いだ。Python では後から属性の追加、削除ができる。

__init__ メソッドがあると作成時にインスタンスを初期化できる。



#! /usr/bin/python


"""house2.py -- Another house.


"""





class House:


	def __init__(self, number, rooms, garden):


		self.number = number


		self.rooms = rooms


		self.garden = garden





my_house = House(20, 1, 0)





print "My house is number", my_house.number


print "It has", my_house.rooms, "rooms"


if my_house.garden:


	garden_text = "has"


else:


	garden_text = "does not have"


print "It", garden_text, "a garden"


の実行結果は次のようになる。


My house is number 20


It has 1 rooms


It does not have a garden


上記の例では __init__ メソッドが作成時に自動的に呼ばれる。Python の特徴として __init__ メソッドを何度でも呼び出すことができる。my_house.__init__(55, 14, 1) はオブジェクトを再初期化する。__init__ の最初の引数は self になっているが、これはインスタンス自身のことだ。self がないとメソッドがインスタンスの属性や他のメソッドにアクセスできなくなる。

C++ にも self と同じような機能を持つポインタがあるが、ローカル変数 house が存在しなければ this->house と入力する必要はない。C++ は Python や Perl と同じような機能を実装しているのだがプログラマには隠されている。Python の self は実際には "me" でも "this" でもかまわないのだがコードの可読性から self に統一したほうがいいだろう。

C++ のメンバ関数は Python ではメソッドと言われる事が多い。C++ で紹介された square.c プログラムは Python では次のようになる。



#! /usr/bin/python


"""square.py -- Make some noise about a square.


"""





class Square:


	def __init__(self, length, width):


		self.length = length


		self.width = width





	def area(self):


		return self.length * self.width





my_square = Square(5, 2)


print my_square.area()


実行結果は 10 を表示する。

クラスの外でのメンバ関数の定義は Python では許されていない。

Python の属性やメソッドはすべて public だ。private 属性を真似ることは可能だが推奨するものではない。__init__ メソッドは同時にコンストラクタでもある。

C++ の配列の例をそのまま Python に置きかえるのは難しいが、次のようになる。



#! /usr/bin/python


"""person.py -- A person example.


"""


class Person:


	def __init__(self, age, house_number):


		self.age = age


		self.house_number = house_number





alex = []


for i in range(5):


	obj = Person(i, i)


	alex.append(obj)





print "Alex[3] age is", alex[3].age


print





for alexsub in alex:


	print "Age is", alexsub.age


	print "House number is", alexsub.house_number


実行結果は次の通りだ。


Alex[3] age is 3





Age is 0


House number is 0


Age is 1


House number is 1


Age is 2


House number is 2


Age is 3


House number is 3


Age is 4


House number is 4                                                          


Python では C++ の Person alex[5] というようなコードは書けない。その代わりにリストで "for loop" を使っている。


Copyright © 2000, Michael Orr
Published in Issue 56 of Linux Gazette, August 2000

HTML エディタ Quanta (By Martin Skjoldenrand)

CoffeeCup、Bluefish に続き今回は Quanta HTML エディタを紹介する。プログラムはhttp://quanta.sourceforge.net からダウンロードできる。Quanta はツールの起動にボタンではなくタブ形式のパレットを使用しているが、あまりセンスがいいとは言えないし CSS や PHP にも対応していない。でも左側に表示されるディレクトリツリーは便利だ。ツリーの中のファイルをダブルクリックすればファイルをオープンすることができる。しかしドラッグアンドドロップには対応していない。

実際に利用して気がついたのはラインが自動折り返しの設定になっていないことだ。もちろんオプションメニューから設定することはできるが標準ではない。その他では標準のフォントの設定が Courier でサイズが12ポイントになっていることだ。sans-serif と serif フォントの方がいいだろう。サイズは14ポイントに設定すれば見やすくなる。それにワードラップはタグが終了するまで機能しない。

KDE 1.1.2 上で動作する Quanta

細かいところでは拡張 ASCII コードの処理に難がある。ä や ö がうまく表示されない。便利な面ではコンテキスト別にヘルプを表示してくれる。タグをハイライト表示にしてマウスのライトボタンを押せばコンテキストヘルプとコンテキストメニュー、タグの属性などが表示される。今後は終了タグやタグの属性の選択も簡単にできるようにして欲しいものだ。

Quanta にはプレビュー画面がある。リアルタイムに変化するわけではないが過去のスナップショットを見ることができる。ファイルを読みこんでアクティブにするとプレビュー画面も変更されるが、読みこんである別のファイルをアクティブにしてもプレビューは変更されない。プレビュー画面に表示させるにはファイルを再読み込みしなければならない。

左側のフレームをもう少し説明しよう。標準では完全なディレクトリツリーが表示される。必要なファイルを探すには非常に便利だ。ドキュメントの構造を表示する Struct タブの P、IMG などのタグをクリックするとドキュメントの場所へ移動してくれる。HTML ドキュメント用のタブもある。HTML 4 ドキュメントを書くのに必要な情報が表示される。

Quanta の開発は進んでいるが拡張 ASCII コードを使っている英語以外のユーザにはまだバグがある。ファイル処理やドキュメント構造、HTML ドキュメントは非常に優れているし、拡張 ASCII コードは使っていない。


Copyright © 2000, Martin Skjøldenrand
Published in Issue 56 of Linux Gazette, August 2000

Bastille Linux プロジェクト (By Dave Wreski)

LinuxSecurity.com からの転載 ( original article)

Jay Beale はBastille プロジェクト のリーダーだ。LinuxSecurity.com のインタビューに応じている。

Bastille Linux はセキュリティを強化した Linux だ。いくつかの設問により必要な機能を削除せずにセキュリティを強化する。Bastille Linux の開発は2年前の Jon Lasser の UMBC Linux にまで遡る。学生や教職員用のセキュアな Linux の提供が最初だが、SANS のコンファランスで同じ考えの人々によりグループが結成された。しかしディストリビューションの作成は思ったよりも大変で結局 Red Hat 6.0 をベースにセキュリティを強化することにした。それには筆者の Perl スクリプトが使われ、同時にモジュールの募集もした。その時点で非常に有能なスタッフが参加してくれた。

ベンダのディストリビューションもセキュリティを強化してリリースされるべきだがユーザが多く、汎用的なものがリリースされている。つまり ftp をオンにし、SSI/CGI を使用可能にし、シングルユーザモードではパスワードを入力する必要がない。システムのセキュリティをフルに確保すると制限される機能が出てくる。これはトレードオフだ。

Sun がリリースするセキュリティホールは年に6件程度だがこれには WU-ftpd や BIND 8 などの追加プログラムは含まれていない。どの OS にもセキュリティホールが存在するということは忘れてはいけない。人間である以上当然のことだ。Bastille Linux は平均的なユーザには丁度いい。質問を繰り返すことによりセキュリティを確保する。質問には削除する機能の説明もついている。Bastille の機能は非常に優れているし、再度起動させることもできる。アンドゥーも可能だ。近いうちに新しい機能を発表できると思う。

Linux に特有のセキュリティホールがあるわけではない。UNIX 系 OS に共通のものが多いし、全体的にはほとんどの OS にあてはまるが、スーパーユーザの権限でプログラムを起動することは危険だ。なるべく root を使用するプログラムは少なくしよう。コンピュータを使用する人が増え、コンピュータが使いやすくなるにつれセキュリティホールも増大する。世界レベルでインターネットにアクセスできることは非常にいいことだがそれを悪用する人がいることも忘れてはならない。

Bastille Linux はユーザに機能の制限を選択させており、その際には判断の基準も提示している。例えば telnet を使えないようにするかどうかは最終的にユーザの判断によるがその際に、「telnetd は通常のテキストを使用しているので hunt などのプログラムを使えば簡単にあなたのアカウントを詐称することが可能です」などの背景を提示するようにしています。ユーザに質問をすると同時にユーザを教育して最終判断をさせる、というのが Bastille Linux の方法です。


Copyright © 2000, Dave Wreski
Published in Issue 56 of Linux Gazette, August 2000