nDiki : 1999年01月下旬

1999年1月21日 (木)

orion firewall 設定実験

ipfwadm を使って firewall の実験を行う。 10Base-T のケーブルが無かったので他の研究室の吉田君に貸していだたく。 最初はよくわからなかったが、分ってくるとそれほど難しいものでもない。 基本的には中継せず、必要な部分だけ穴をあけていくことにする。 詳細はもう少しまとまってきてから。 とりあえず Squid いれて HTTP を通りやすくしなくては。

スポンサード リンク

holmes ネットワークカードを認識

これまた研究室の PC / Linux (ホスト名 holmes) のネットワークカードの設定することにする。 これにささっている NIC は PLANEX COMMUNICATIONS INC. の FNW-9700-T。

このカードについては PLANEX の Web サイトLinux 用ドライバのソースファイルが公開されている。これをインストール

  • f97_linx.zip をダウンロード
  • 展開しフロッピーディスクにコピー
  • holmes にフロッピーディスクからコピー
 #mcopy a:fet3043.c /temp
 #mcopy a:trans /temp
 #chmod 755 trans
 #./trans
  • ネットワークの設定
 #netconfig
  • /etc/rc.d/rc.inet1 の先頭にドライバモジュールをロードする設定を追加

insmod /usr/src/linux/modules/fet3043.o

これで OK かと思ったら、ブート時(LILO の前)に

 Verifying DMI Pool Data ........

と出たまま止まってしまった。何度かリセットした後、フロッピーディスクを差したままだということに気がつく...

フロッピーディスクを抜いてリブートしたところめでたく起動。 カードも正しく認識された。 10/100 自動切り替えスイッチングハブにつないだので linespeed=100Mbs となっている。

orion に ssh 2.0.11 をインストール

orion に ssh2 (ssh-2.0.11.tar.gz) をインストール

 $./configure
 $make
 $su
 #make install

sshd の起動はすでに /etc/rc.d/rc.inet2 に記述されている(Slackware 3.5)。

orion に ~/.ssh2/authorization, ~/.ssh2/id_dsa_1024_a.pub を転送。

orion ネットワークカードを認識

去年からずっとほっぽったままだった研究室の PC / Linux (ホスト名 orion) のネットワークの設定を久しぶりに行うことにする。本機はNICを2枚差しする予定だったのだが、どうしても片方のネットワークカードが認識できないでいた。

認識できんかった方のカードは PLANEX COMMUNICATIONS INC. の ENW-2401P-T。 Plug & Play が問題なのだろうと思っていたが解決できないでいた。 今日、時間があったので手をつけてみることにする。

昨年は isapnp などを利用したが駄目だった。 2枚差しだったので他にも原因があるのかと考えたりしたのと、なかなかうまくいかなかったので嫌になっていたので頭がまわっていなかったのかもしれない。

とりあえず、他方の NIC を抜いて 1枚だけにしてみるが、やはり駄目である。 2枚差しが問題ではないってこと。去年もこうやってチェックしようとおもっていたけど疲れたのでやめにして、そのままであった。

もう一度 NIC の説明書を読んだら、DOS/V 用のツールで Plug & Play 切れるのね。 DOS/V はいってなかったし、付属のフロッピーのなんて使わないだろうと、見逃していた。 とりえあず手元にあった Microsoft MS-DOS Version 6.2/V のフロッピーから起動しておまけディスクの setup/setup.exe を起動した。

 Operating Mode : Jumperless
 Medium Type:     Auto Detect
 Full-duplex: Disabled
 I/O Base: 340H
 Interrupt: 3
 Boot ROM: No Boot ROM

Operating Mode を Jumperless に変更。I/O Base を 300H から 340H に。これは前にいろいろいじったときに 340H で設定かいてたからそれにあわせた。

リブートしたところ、成功! isappp 用に NE2000 のドライバをモジュール化していたが、これをモジュールではないようにコンパイルしなおす。

もう一方のカード 3Com 3C509 はつながることが確認できているので

 append="ether=10,0x300,eth0 ether=3,0x340,eth1"

を /etc/lilo.conf に追加して再起動。 これでやっと両方のカードで通信できるようになった。

[ 1月21日全て ]

1999年1月22日 (金)

日記みました

とある方から以下のメールをいただいた。

 日記見ました。
 #一度言ってみたかった、このセリフ(笑)

その方も Web 上で日記を(数人に)公開している。 私も読者の一人。

Web 上の日記に関しては肯定でもなく、否定でもなく。 確かに、あまりおもしろくないことをつらつら書くだけの人とかもいる。 特に見知らぬ人の日記ページまでわざわざ読もうとは思わない。 といいつつなんか、みはじめてしまうと案外時間がたったり。

知人の場合は、その人のスタンスとか近況などがにわかって、たしかにおもしろい。 特にメールをいただいた方のものは、ごく身近な人で裏話がのぞけたり。 また、コンピュータ関係の話題で、それをもとにいろいろ話がすすんだり問題が解決したりするのでまんざらでもない。

私自身はこのページは、「知らない人には役立つかもしれない、知っている人には状況報告、自分には覚え書き」といったスタンスでしばらくいくと思う。「知らない人には役にたつかもしれない」'内容別インデックス'も用意してみたりしている。

一言。これは「日記」ではなく「日誌」です*1


[ コンピュータ日誌 ]

*1現在は旧コンピュータ日誌nDiki に統合されている。この記事はコンピュータ日誌時代のもの。

sniffit 0.3.7 beta をインストール

Linux に sniffit-0.3.7.beta.tar.gz をインストール。 前につかっていたコンピュータにはいれていたが、今のにはまだだったので手があいたのでいれておく。 sniffit はネットワークのパケットをダンプするツール。 接続されたネットワークを通過するパケットをみることができる。 もちろん暗号化されていないパスワードなども……。

正しい使い方?はネットワークの障害管理などに使うことであろう。 また誤って出すつもりのないパケットが流れていないかの確認などにもつかうことができる。 私は、SSH で正しくパケットが暗号化されているかの確認などに使っている。

私はメールを読むために POP サーバから fetchmail を使ってローカルに転送していた。 POP3 はパスワードが平文で流れるのでとても怖い。 そこで SSH の forwarding 機能を使って暗号化していた。 ……つもりだったのだが、実は設定を間違えていて SSH を経由していなくて通常の POP3 していただけだったことが、このツールで判明したことがある。あちゃ。

なんてことのチェックに利用できる(現在は APOP + SSH forwarding)。 もちろんパケット盗聴にもつかえることも事実。

逆にいえば誰に盗聴されているかわからないということ。 大学内では、誰がノートパソコンでネットワークに接続するかわからない。 また仮にネットワーク内の1台がクラックされてルート権限を奪われたら、そこでパケットの盗聴が行われる可能性がある(所属する学科でもその形跡があったことがある)。 特に管理権限のないコンピュータにそういうことがおこるとやっかいである(逆に管理権限のあるコンピュータはクラックされないように自分できちんとしなければならないね)。 ということで、できる限り自分の通信は、(特にパスワードなど)暗号化するようにしている。

インストール

 $./configure
 $make
 $su
 #cp sniffit /usr/local/bin
 #chmod 500 /usr/local/bin/sniffit
 #cp sniffit.5 /usr/local/man/man5
 #cp sniffit.8 /usr/local/man/man8
[ 1月22日全て ]

1999年1月23日 (土)

Satellite 2520、トラックボールタイプマウス動かず

先日 Satellite 2520 を買った友人から、トラブルの電話。 なんでも、トラックボールタイプのマウスが欲しくて購入したが、接続するとマウスポインタが暴走するとのこと。 電話口で、わかる範囲で設定を指示してみたがどれもだめ。 今度顔をだしたときにみてみることにする。

ちなみに、一緒にかった USB マウスはうまく動作しているとのこと。

Linuxrsyncバックアップ

ここしばらく自分のノート PC (Linux)のバックアップを怠っていたので、今日バックアップをとった。 いつもは

 #tar zxvf /MO/home-yyyymmdd.tar.gz -C / home
 #tar zxvf /MO/etc-yyyymmdd.tar.gz -C / etc

と tar を使ってバックアップとっていた(圧縮する前で100MB ちょい)。 バックアップ先は 640MB MO (/MO にマウント)。 毎回フルバックアップとなるのでそれなりに時間がかかるし、容量も結構になる。 また、変更されていないファイルも多く、これらを毎回アーカイブするのも悔しい。 そこでこれからは差分バックアップの方がいいな、と考えたわけだが名案がないので、とりあえずしばらく単純に rsyncミラーリングすることにした。

 #rsync -av --delete --exclude '*~' --exclude '.netscape/cache/' /home /MO
 #rsync -av --delete --exclude '*~' /etc  /MO
 #rsync -av --delete --exclude '*~' /var/spool /MO/var

rsync はリモートとの転送/同期を目的としたものだが、もちろんローカル間での同期にも使える。ただしこの方法だと本当にミラーリングなので、なにかあった時に古い世代のファイルがとりだせない。 やはりきちんとしたバックアップ方法を考えなくては。

しかし何が面倒かって、物理的な準備なんだよね。ノート PC の場合。 MO ドライブと SCSI PC カードひっぱりだしてきて、接続するのが面倒。 でついつい、おっくうになってしまう。 大学でネットワークに接続した時についでにリモートの MOバックアップするように習慣づけた方がいいかもしれぬ。

[ 1月23日全て ]

1999年1月24日 (日)

flex から XS へ、Segmentation fault

Perl から flex の出力した yylex() を呼び出す実験。 まずは簡単な字句解析仕様記述を書いて、flex を通す。 この出力に yylexc2xs と名前をつけたスクリプトを通して XS に変換する。 これは単純に先頭に XS のためのヘッダファイルのインクルードの行を追加し、最後に Perl から yylex を呼ぶためのモジュール定義とコードを追加するだけのもの。

これをコンパイルして Perl から呼び出してみる。 Segmentation fault。 実際には Perl から l2xs_yylex() というCの関数を呼んでそこから flex の出力する yylex() を呼んでいる。 l2xs_yylex() から yylex() を呼ばないようにすると正常終了するので、やはり yylex() か、そこから先でなにかがあるようだ。

入力の問題かと yyin の値を Perl から渡すようにしたり l2xs_yylex() でファイルをオープンしてそれを設定したりしてから yylex() を呼んでも結果は同じ。

flex の出力は shared library にできないのか? Perl + shared library ということでデバッガでどうすればいいのかもわからず。

とりあえず棚上げ。 CPAN から ParseLex-2.05.tar.gz と Parse-Yapp-0.21.tar.gz をとってくる。 Perl 内で済ませられればそれでいいかな。 というかこの2つの出来がよければ自作する必要性もなくなるのだが。

[ 1月24日全て ]

1999年1月25日 (月)

2000年以降クレジットカード到着

利用しているクレジットカード会社から、更新カードが送付されてきた。 有効期限は2001年。 カードの刻印は 01 となっていた。 結局その場しのぎの解決方法なのね。 もちろん、現存するすべてのシステム上の桁を増やすよりは低コストなんでしょう。 まぁ、2100年に同じシステムが動いてはいないだろうし(昔の人も2000年をそうとらえていたのだろうが)。

カードにはご丁寧に、海外で「有効期限切れ」といわれた時に言い返したい人用に、英仏語の提示文面をつづった紙が同封してあった。

専用レンタルサーバの管理者は女性

とある会社がネットサービス展開のために、とある会社に専用レンタルサーバを頼むことになった。 この打ち合わせに同席したのだが、やってきた担当は女性の方。 話によると、レンタルサーバのインストールもこの方がやってくれるそうだ。 OSSolaris 2.6(これ以上はここでは書けない)。

受け答えもそれなりにしっかりしていて、うーんびっくり。

[ 1月25日全て ]

1999年1月26日 (火)

計算機数学レポート採点で思う、「読みやすいレポート」

本日、仕事で情報科学科2年生の計算機数学という科目のレポートを採点した。 レポート採点者の立場として「読みやすいレポート」について考える。 今回のレポートは教科書の練習問題を解いて提出するというもの。

ちなみにこの見解は、私の見解であり、他の人は全く違うかもしれない。 また、私自身ここで言っている印象(だけ)で採点しているわけではない。 誤解なきように。

見た目

字がきれいなこと(丁寧なこと)。

やはりなんといっても字がきれいでないと駄目。 字の下手な人もできるだけ丁寧に書くべき。 汚い字のものは読む気がしないし、実際読めないものも多い。 また人のレポートを書き写す人のものは、急いで写すのか殴り書きのようなものが多い。 逆にいえば殴り書きのものは、まず書き写し(コピーレポート)ではと疑われるであろう。

そういう意味では、女性の方が字がきれいな人が多いので得をしているかもしれない (別に区別しているわけではない)。

一部だけワープロ(パソコン)は逆に貧相。

途中で挫折したのか、はたまた意図的か。 一部だけワープロなものは、逆に手書きの部分が、余計に貧相に感じる。 図などが手書きなのは仕方ないなと思うが(授業レポートにそこまでこらなくても)。 ワープロを使うなら是非全部。

高いレポート用紙の方がいいかも。

安いレポート用紙はぺらぺらで、中身まで安っぽくみえそうだ。 ちょっと高いのを買えば紙をしっかりしていて厚くて良い。 まぁ、大学のロゴ入りのレポート用紙の人が多いのでまぁそれはそれでいいだろう。

採点しやすさ

解答の順番が正しいこと。

採点する側もやはり、思考の流れがある。 解答の順番が問題順(または授業での順番等)に沿っていないと疲れる。 また、他人のレポートを複数の人でよってたかって写す場合に、順番が乱れることがあることも知られている(実際私もそうだった)。 提出までの時間があまりないと、とにかく手にはいったものをどんどん書き写すためこうなる。 もし順番に書けないなら、用紙をわけて書いてあとで並べ替えて閉じた方がいいかもしれない。

人のを写さない。

写すとはっきりいってばれる。 丸写しは採点者には助かるのだが。 なにせ同じ点をつければいいのだから。 が、写しの場合、写した人、写された人ともに減点、または採点の対象とならない事も多いのでやっぱりやめた方が。 どうせ写すならばれないように。

綴じ方の指示があれば従う。

複数枚のレポートの綴じ方、体裁が指示されているのなら必ず従う。 右綴じの中に一つだけ左綴じがあったりすると、作業の流れが狂い非常にまずい。 当然みる方もやな気分になる。

問題番号をわかりやすく。

問題を解いて提出する場合は問題番号をはっきり目立つように。 全問解くことを期待していない場合、解答数が採点に影響する。 解答数を数えるのに、問題番号がみにくいと、数え漏れされることもあるだろう。

解答の前に問題が写してあればなおよい。

テキストの問題の解答を採点する時、採点者は最初に問題とレポートの双方をみなければならい。これが面倒だ。 もちろんある程度採点が進めば問題も頭にはいるが。 問題が書いてあるレポートが採点の最初に出てくるととても助かる。 印象もアップだ。 ただし、問題がそばにあるので、じっくり答を吟味しやすいのも確かだ。 答が間違えているなら、採点者がそれをみつけやすくなるので、逆効果かもしれない。

問題だけ、レポートの最初に列挙にされてあってもどうかと思う。 もちろん実験レポートのたぐいなどは最初に問題が記述されるとおもうが、問題数の多い解答提出レポートではまず無意味だろう。

減点されないように

字の汚い人にうつさせない。字のきれいな人に写させない。

先にも述べたとおり他人にレポートを写させてあげると自分も点がとれないことがある。 覚悟すること。 どっちがオリジナルかまでいちいち判断するほど採点者は暇ではない。 特に、字の汚い人に写させてあげると危険だ。 字の汚い人のレポートはまず写しではないかと疑われやすいからだ。 となると自分のレポートもコピーだと判断されやすくなる。 また字のきれいな人のレポートも他よりじっくりみられる可能性が高いから危険だ。

論外

  • 科目名間違えるな。
  • 食べこぼすな。
  • くしゃくしゃにするな。
  • やぶれているな。
  • 鉛筆はやめろ。

それでもコピーしなくては

それでも人間、人のを写して提出したときもあるだろう。 忙しかった? なるほど。 わからなかった? なるほど。 提出しとかないと不安? なるほど。 私もたくさん写して提出した身だ。 肯定はしないが、うまくやれ。

  • 同じ人から全部写すな。
    • 採点者にはばればれだ。
  • 順番をかえろ。
    • 印象は悪くなるが、問題順がオリジナルと同じだと写したことがばれやすい。
  • 目立つ部分は書き換えろ。
    • 図などは採点者の目によくつく。同じ図があるとコピーの疑いを持つ。
  • オリジナルの解答をまぜろ。
    • みたことのない解答があると、他の解答が似ている/同じでもたまたま似た風になったのかと思う余地がでる。すこしは解け。
  • 写し間違えるな。
    • 情けない。
  • 間違えているやつのを写すな。
    • もっと情けない。もっとも、分かっていれば写さないだろうが。
  • 写したやつを写すな。
    • 誤りがすでに伝播している。
  • やっぱうつすな。
    • 自分のためだ。

検討を祈る。

自宅のNTT回線、タイムプラス開始

年末に頼んでおいたタイムプラスのサービス開始が今日。 別になにがかわるってわけではないが。

私は夜は寝るのでテレホーダイを利用するつもりはない。 タイムプラスがはじまって1年ぐらいになる。 当初から申し込もうと思っていたがずっとのびのびになっていた。 果たしてどれほど電話代が安くなるのか。

ちなみに今晩はなぜか BUSY でつながらなかった。 いつもはつながるのに……。

orion に Tripwire ASR 1.3 をインストール

Tripwire Security Systems, Inc. より Tripwire ASR 1.3 (tripwire-1.30-1.tar.gz) を入手し orion にインストール。 なお ASR は Academic Source Release の略。

tripwire はシステム中の実行可能ファイル、設定ファイルなど指定したファイルの変更があったかどうかを検証するツール。 システムがクラックされた場合、裏口を開ける機能をつけくわえた実行可能ファイルなどがインストールされたり、すでにあるものを置き換えたりされる可能性がある。 tripwire は事前に作成したファイルの情報のデータベースと、現在のファイルの情報を比較することによってこのような変更を検出することができる。

なおここでは、以下の環境、条件でインストール、設定を行った。

まずはパッケージ展開。適当な作業ディレクトリ上で。

 $tar zxvf tripwire-1.30-1.tar.gz
 $cd tripwire-1.30-1

次に Makefile の編集。 以下の2つの変数を値を書き換える。

 DESTDIR = /MO/tripwire/bin
 DATADIR = /MO/tripwire/var

次に OS 毎の設定ファイル。Ported をみると, conf-linux.h を使うようにかいてあるが、みあたらないので conf-sunos-4.1.h で代用する。

$emacs ./configs/conf-sunos-4.1.h

以下の通り変更する。

 #define DIRENT
 を
 #undef DIRENT
 に

最後に include/config.h を編集する。

 $emacs include/config.h

ここでは、os 別のインクルードファイルを読み込むようにするのと、各種ファイルへのパスを設定。

 #include "../configs/conf-svr4.h"
 を
 #include "../configs/conf-sunos-4.1.h"
 に。また以下の変数の値を変更。
 #define CONFIG_PATH "/MO/tripwire/etc"
 #define DATABASE_PATH "/MO/tripwire/var"

そして make。

 $make
 $make test

次に MO を準備する。 マウントする前にシングルユーザモードにし、インストール、ならびにデータベース作業中に他の誰かが悪行をできないようにしておく。

 $su
 #mkesfs /dev/sdb
 #mkdir /MO
 #init S
 #mount -t ext2 /dev/sdb /MO

そしてインストール

 #make install
 #mkdir /MO/tripwire/etc
 #cp configs/tw.conf.linux /MO/tripwire/etc/tw.config
 #emacs /MO/tripwire/etc/tw.config

とりあえず tw.config には自分でコンパイルしたカーネルファイルの指定を追加しておく。

そしてここから実際に使用。 まずは、現在のファイルの情報に関するデータベースを作成する。 終了すると、tripwire を実行したディレクトリに databases/tw.db_orion が作成される(orion の部分はホスト名がはいる)。 これを /MO/tripwire/var に移動しておく。

 #cd /MO/tripwire/bin
 #tripwire -v -initialize
 #mv databases/tw.db_orion /MO/tripwire/var

以上が終了したら、一旦 MO ディスクを抜き、書き込み禁止にしておく。 そしてマルチユーザーモードに戻す。 リブートしてしまう。

 #cd /
 #umount /MO
 #sync; sync; shutdown -r now

とりあえず検証してみる。Read-only でマウントし /MO/tripwire/bin/tripwire を実行する。

 #mount -t ext2 -r /dev/sdb /MO
 #/MO/tripwire/bin/tripwire

一応何も変更は検出されないはず。 と思ったら、いくつか追加されたファイルと変更されたファイルが検出。 モジュールの依存関係ファイルやら何やら。 これらのファイルはおいおい設定でチェックしないようにしなければ。

今後は cron 等で定期的にチェックするようにする設定を行う必要がある。 今日はもう遅いのでやめ。

なお本来は、tripwire のインストール場所、ファイルの位置などはできるだけわかりにくいようにする必要がある。 公開などしてはいけない(ここであくまでも例で、具体的な位置は異なっている)。

  • UNIX Magazine 96/7 pp.93-101
  • LINUX JAPAN Vol.5

Perl 用字句解析生成モジュール Parse::Lex (ParseLex-2.05.tar.gz) をインストール

先日とってきておいた Perl 用字句解析生成モジュール Parse::Lex (ParseLex-2.05.tar.gz) をインストール

 $tar zxvf ParseLex-2.05.tar.gz
 $cd ParseLex-2.05
 $more README
 $perl Makefile.PL
 $make
 $make test
 $su
 #make install

ベータ版とはなっているが、十分使えそうだ。 使えるものは使おう。 とはいっても、目的は自前の生成系が欲しいということなので(全然使えるものを使っていない?)、これを1段目の生成系とすることにしよう。

Parse::Lex は仕様記述をメソッドのパラメータへ渡すタイプのものである。 仕様記述ファイルから読み込むものではないので、(f)lex ライクなものでもとりあえず作ってみるか(これも既にどこかにあったりして……)。

[ 1月26日全て ]

1999年1月27日 (水)

orion に Squid 2.1 PATH2(squid-2.1.PATCH2-src.tar.gz) をインストール

デフォルトと違う部分は、squid.conf を /etc の下におくことと、cache を /var/squid の下におくこと。

 $tar zxvf squid-2.1.PATCH2-src.tar.gz
 $cd squid-2.1.PATCH2
 $./configure --prefix=/usr/local/squid
 $make all
 $su
 #make install
 #mv /usr/local/squid/etc/squid.conf /etc/squid.conf
 #ln -s /etc/squid.conf /usr/local/squid/etc/squid.conf
 #mkdir -p /var/squid/logs
 #chown -R nobody:nogroup /var/squid
 #emacs /etc/squid.conf
 #su nobody
 $/usr/local/squid/bin/squid -z
 $exit
 #/usr/local/squid/bin/RunCache

RunCache はデフォルトのままだと /usr/local/squid/squid.out というファイルを作ろうとするので nobody では起動できない。

squid.conf の変更点は

  • cache_dir のディレクトリを /var/squid/cache に。
  • cache_access_log を /var/squid/logs/access.log に。
  • cache_log を /var/squid/logs/cache.log に。
  • cache_store_log を /var/squid/logs/store.log に。
  • pid_filename を /var/squid/logs/squid.pid に。
  • acl konlablocal src 192.168.1.0/255.255.255.0 を追加。
  • http_access allow konlablocal を追加。
  • cache_peer_access allow konlablocal を追加。

あとはブート時の設定 /etc/rc.d/rc.inet2 に

 if [ -x /usr/local/squid/bin/RunCache ]; then
     /usr/local/squid/bin/RunCache &
     echo -n " squid"
 fi

を追加。

[ 1月27日全て ]

1999年1月28日 (木)

夜8:00過ぎ、東京の下り通勤電車内でハッカーの卵発見

夜8:00過ぎ、東京の下り通勤電車に乗っていると、目の前にコンピュータを購入したらしい男を発見。 眼鏡をかけ背広にコートの、30代ぐらいの風貌。 足の間には、プチプチ梱包材に包みビニールテープをかけプラスチックの取っ手をつけた、デスクトップ機。 手には、紙の手提げ袋からはみだしたキーボードキーボードはきれいなようなので新品らしい。

ここまでなら普通なのだが、実は怪しい男。 手にはハッカージャパン Vol.1。 この本が、良い本か悪い本かは知らない。 変なのは、この本をニヤニヤしながら、安っぽい赤ボールペンで線を引いているところ。 ところどころのページは折って印までつけている。 歯の噛みあわせが悪いのか不気味に口を半開きにし、さらにピチャピチャ音をさせている。

良くみると手にもっていた書泉のビニール袋の中に、ハッカージャパンの続刊らしきものも。 やはり、彼はハッカーをめざしているのだろうか。 それとも既にハッカー? まぁハッカーではなくてクラッカーの方をめざしている可能性が高いであろう。

残念ながら、コンピュータ本体がなんであったのかは、わからなかった。 もしかしたら 98(NEC) の中古だったりして。 いや、実はコンピュータに詳しくてショップブランドを選んだのか、自作用のケースだけだったのか。

それにしても普通、ハッカーならそんな書籍、真剣に読まないのでは。 いや、無論その本が悪いとはいわないが。 まぁ一歩譲ってハッカーが目を通したとしても、まさかニヤニヤしながら赤線を引き引き読むことはないだろう。 それってハッカーとしてスマートではなさすぎる。 ハッカーにいいイメージを持ち過ぎ? 情報もディープではないだろうし。

まぁやっぱりクラッカーを目指しているのであろう。 と勝手に推測して楽しませたもらった男は、途中の普通列車乗り換え駅で降りた。 ホームのベンチで、真剣にまだ本を読んでいた……。

彼が、ハッカーと呼ばれることがないことと、お店の人に騙されて購入したのではないことを祈りつつ……ここのネタにさせてもらった。

……このページ本人に読まれたらクラックされるかな(苦笑)。

ISPの支払いカードの変更、楽々

1999年1月25日 「2000年以降クレジットカード到着」 で到着したカードがいままでのカードと違う種類のカード。 なのでカード番号が変更になった。自動引き落とししているものは全部変更手続きをしなければならない。

とりあえず、ISP の支払いを変更。 契約時もオンラインサインアップだっただけあって、変更も Web 上で済ませることができた。 楽チン楽チン。 一応 SSL を使っていて、ちょっとは安心か。

SSL といえば、実は仕事で請け負っている Web コンテンツの作成先のサーバ、SSL 対応にしてくれないかなぁ。 そしたら、CGI 関連のログとか情報の参照とか Web 経由にしてもちょっとは安心なんだけど。

追記

1999年2月8日に実際に SSL の実験をしてみた。

[ 1月28日全て ]

1999年1月31日 (日)

flex文法定義を読む(定義節/parse.y)

字句解析系生成プログラム作成のために、flex-2.5.4a.tar.gzの文法定義を読んでみる。 まずここでは、定義節(definitions section)を読むことにする。

トークンの定義は scan.l で、構文の定義は parse.y でなされている。 まずは parse.y から見ていこう。 以下の引用部はすべて parse.y である。 行頭には行番号を付加してある。 また説明に不要な部分は省略してある。

以下はでのトークン名の宣言である。

     3	%token CHAR NUMBER SECTEND SCDECL XSCDECL NAME PREVCCL EOF_OP
     4	%token OPTION_OP OPT_OUTFILE OPT_PREFIX OPT_YYCLASS
     5
     6	%token CCE_ALNUM CCE_ALPHA CCE_BLANK CCE_CNTRL CCE_DIGIT CCE_GRAPH
     7	%token CCE_LOWER CCE_PRINT CCE_PUNCT CCE_SPACE CCE_UPPER CCE_XDIGIT

また以下は定義節に関係するルールの部分である。

   112	goal		:  initlex sect1 sect1end sect2 initforrule
   139			;
   141	initlex		:
   147			;
   149	sect1		:  sect1 startconddecl namelist1
   150			|  sect1 options
   151			|
   152			|  error
   154			;
   156	sect1end	:  SECTEND
   162			;
   164	startconddecl	:  SCDECL
   167			|  XSCDECL
   169			;
   171	namelist1	:  namelist1 NAME
   174			|  NAME
   177			|  error
   179			;
   181	options		:  OPTION_OP optionlist
   182			;
   183
   184	optionlist	:  optionlist option
   185			|
   186			;
   188	option		:  OPT_OUTFILE '=' NAME
   193			|  OPT_PREFIX '=' NAME
   195			|  OPT_YYCLASS '=' NAME
   197			;

goal (112行目)は開始記号である。 ここで字句解析仕様記述全体の構造を定義している。 ここでは sect1end までを見ることにする。

   141	initlex		:
   147			;

initlex (141行目)は仕様記述の先頭の部分で還元される。 ここで初期化処理が行われる。

   156	sect1end	:  SECTEND
   162			;

sect1end (156行目)トークン SECTEND を導出する。

 SECTEND は scan.l119行目の

^"%%".* のパターンで定義されるものである。 つまり、行頭の %% で 定義節が終了することを示す。

   149	sect1		:  sect1 startconddecl namelist1
   150			|  sect1 options
   151			|
   152			|  error
   154			;

定義節の中身は sect1によって導出される。 定義節は、開始条件の宣言(startconddecl namelist1 または オプション指令options の任意個の繰り返しを導出する。

   164	startconddecl	:  SCDECL
   167			|  XSCDECL
   169			;

startconddecl はトークン SCDECL または XSCDECL である。 SCDECL は scan.l108行目の ^"%s"{NAME}? で定義され、XSCDECLは109行目の ^"%x"{NAME}? である。 よって行頭から始まる %s または %x (名前として使える文字列が続いてもよい)によって始まる行が開始条件の宣言ということになる。

   171	namelist1	:  namelist1 NAME
   174			|  NAME
   177			|  error
   179			;

SCDECL または XSCDECL の次には namelist1 が次に導出される。 namelist、トークン NAME の1回以上の繰り返しである。

   181	options		:  OPTION_OP optionlist
   182			;

一方 sect1 は options も導出する。 options は、トークンOPTION_OP の後に optionlistが続くとなっている。 OPTION_OP は scan.l131行目にある ^"%option" にマッチした時返されるトークンである。 つまりオプション指令は行頭から始まる %option によって始まることを示している。

   184	optionlist	:  optionlist option
   185			|
   186			;

そして optionlist(181行目) は option の 0回以上の繰り返しである。

   188	option		:  OPT_OUTFILE '=' NAME
   193			|  OPT_PREFIX '=' NAME
   195			|  OPT_YYCLASS '=' NAME
   197			;

その option は トークンOPT_OUTFILE, OPT_PREFIX, OPT_YYCLASS のどれかの後に '=' が続き、そしてその後に NAME がくるといいうものである。OPT_OUTFILE, OPT_PREFIX, OPT_YYCLASS はそれぞれ文字列 outfile, prefix, yyclass が対応する。

これだけでは定義節のすべての文法を網羅していない。実は他の多くの部分は、字句解析で処理してしまっている。次回はscan.l についてもうすこし詳しく見てみよう。

本日誌ページ用 m4 マクロを作成

本日誌を始めて、13日目。やっと本日誌ページ用 m4 マクロを作成した。

私の Web ページ (http://www.j.dendai.ac.jp/~naney/以下) はm4 を利用して作成している。 m4 はマクロプロセッサである。 主に何に利用しているかというと、ヘッダやフッタなどの定型的な部分の生成などである。 ヘッダやフッタなどをマクロ化し、各ページでパラメータを指定して展開させることで、それぞれにあったものを生成する。 利点としては、例えばヘッダの形式を変えたい場合にマクロを書き換えることで、全ページを変更することができることなどがある。 SSI による include では各ページ固有の情報などのパラメータ部分がうまく扱えない。 ちなみに m4 ページの処理は、AutoconfAutomake を利用して、./configure; make; make install; で一発で済むようにしている。

前置きがながくなった。もちろんこのページのヘッダやフッタなどもマクロ展開で行っていたのだが、ナビゲーションの [Prev Day]、 [Next Day] などは毎日手でリンクを張っていた(実際には前日のものをコピーして書き換え)。 これは面倒だし、間違えもおきやすいので、この部分を処理するマクロを本日作成した。 まだあまりチェックしていないので、もしかしたらうまくリンクがつながらないかもしれない。

次はキーワードインデックス部分と、記事別ナビゲーション(似ている内容の記事ごとの、Prev、Next のリンク) の生成を自動化したいが、これは m4 だけではかなり辛いか(できるとは思うが)。

[ 1月31日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィの SNS の企画開発を行うグループでマネージャー・プロダクトオーナーをしています。CS 向上・ユーザーサポート・健全化などにも取り組んでいます。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.04823s / load averages: 0.77, 0.67, 0.62
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker