ReStructuredTextで書いてみる日記

振り出しに戻る。 そのまま帰る。

七面鳥の冥福を祈りながら

2003/12/29

朝9時の集合が結局30分ぐらい遅れたが、まあ集まった。 iBookを持っていったので、友人の家でノートPCとデスクトップPCとiBookで 3人でプログラム書いたり、ドキュメント書いたり。

USBメモリはデータ交換に大活躍だった。 ただ、一度USBメモリが認識はされるのにExplorerから開けないという状態に なったので、「これだからM$は!」などとぼやきつつ再起動。 ちなみにWindowsXPであった。

友人が書いたソースをVimで開いたとき、各行の末尾に^Mが表示されていた。 何でVisual C++なんて持ってるんだろう彼は。

僕はソースコードをいっさい書かずにドキュメントばかり書いていた。 メインのエディタはgVim。OS Xのデフォルトのテキストエディタは、 EUC-jpのテキストを開こうとすると失敗する。

SKKを随分使ったが今一つ連文節変換の癖が抜けきらない。 動詞の送り仮名を打つときは良いんだけど、名詞+てにをはの時に混乱する。

SKKは普通に入力するとひらがなになるから、 子供に使わせたらおもしろいかも知れない。 送り仮名を意識しなきゃいけないから、送り仮名を覚えるんじゃないかな。 知らない言葉は漢字に変換しないから、書かれた文章を見れば どれだけ言葉を知っているか、どの漢字を習ったかを覚えているかが一目でわかる。 1年生用の辞書、2年生用の辞書、と用意しておいて学年が上がるごとに 辞書をマージしていけばいい。

まずローマ字を教えなきゃいけない。漢字書き取りはやっぱり必要。


USBメモリを買うときに、ガンダムのシリーズも売り場に有って、 ちょっと心引かれたんだけれども32MBなのとアッガイが無いのでやめておいた。

ガンダムグッズを作るメーカには一度言ってやりたいんだけど、 アッガイは結構人気高いんですよ。ドム入れるぐらいならアッガイ入れなさい。


Mac OSXとか Pantherとかで検索してみると、 本当にX11を入れて使っている人が多い。 まともに日本語が扱えるemacs環境が無いというのが理由であるらしい。

そもそもそういう人たちはUNIX使いで、 UNIXとして使うとなるとtex環境が必要で、emacs+yatexで書きたい。 だから、日本語がちゃんと使えるemacs環境が必要ということらしい。 X11を利用する価値が有るから使うというよりは、 X11が無いと困るから使っていると言う感じ。

そいつはどうも、問題の先送りとか暫定的な解決でしかないように思える。

2003/12/28

プログラム言語論の課題の担当分が3分の1も終わってない。 明日グループで集まるのにどうしよう。


データ搬送用にUSBメモリを買ってきた。 BUFFALOのRUF-C64M 32MBでも良いかと思ってたけど、+漱石で64MBが買える。 128MBだとやや高いかなぁと思って、結局64MBにした。

取り扱い説明書に拠ると、Mac OS Xで使う場合はフォーマットした方がいいらしい。 でも、そんなことしたらWindowsでは使えなくなりそう。 取り扱い説明書には、何故それをしなければいけないかは書いてあるのだが、 それをするとどういうことが起きるのかは全然書かれていない。 同梱のCD-ROM内のマニュアルに拠ると、 FATでフォーマットされた状態で出荷されているなどと書いてある。 でも普通に使えたので良いことにする。 古いバージョンのOS XはFATを読めなかったのかな?

Linuxでは/dev/sda1辺りにデバイスとして認識されるらしい。 mount -t vfat /dev/sda1 /mnt/usbmem などとやれば良かろう。 /etc/fstab に適当に書いておく。 オプションはFDDとおんなじ感じで良いんじゃないかしら。 USBの取り外し可能な外部記憶装置は全部 /dev/sda? になるのかな。


MacなのにX11を使うというのは敗北である様な気がする。

AquaSKK入れてみた。 ことえりはキーバインドが変更できないので。 でもAquaSKKもキーバインドは変更できない。 実はSKK使うのは初めて。いらん所で改行をしてしまう。

連文節変換の日本語入力ソフトでは、 最低限文節の区切り直しを^I,^Oで出来るように設定したい。 SKKにしてしまえば文節の区切り直しなど要らないという訳だ。

SKKに慣れてしまうと、何処でもSKKを使いたくなるらしくて、 SKKはいろんな環境に移植されてる。 個人的に恐れているのは、僕がSKKに慣れてしまって せっかく買ったWnn7 Personalが無駄になってしまうことだ。

ところで、濃いUNIX方面の人はHHKでSKKを使っていると言うイメージがある。 そして古いマシンを愛用して、貧弱な環境で頑張ってる。 KDEやGnomeは重いので使わない。 Mozillaも重い、emacsも重い、Vimも重い。 Webブラウザはw3m、メーラはMH、エディタはedだ。


HHKと言えば、持ち歩いて必要なマシンにつないで使うと言うのがコンセプトなんだけど、 こんな話を思い出した。

カウボーイは乗ってる馬がつぶれると、馬を捨てて鞍だけ担いで歩くのだそうだ。 馬は使い捨てだが、鞍は馬に乗るのに重要なインターフェイスなのだ。

でもNetHackの鞍は重いので持って歩かない。 その上、馬はHPがさほど高くないので良く死ぬ。


最近文章に脈絡がない様な気がします。 いちいちタイトルを考えるのもめんどくさいので、水平線で区切ってみたり。

2003/12/25

今日見たもの

うーん。どれも可愛かったなぁ。 最後のはオチですが、ネタではありませんよ。

しかし、今の世の中サンタ服を着た女の子って言うのがメディアに出過ぎていて、 そのうち、「サンタクロースは女なんだ。」と思う子供が出てくるのではないかと 心配です。 そうすると、白いひげをつけてサンタの格好をしているバイトのお兄さんは 子供に指をさされて「あのおじさんサンタさんのかっこうしてるー。へーん。」 とか言われることになります。

サンタの格好した犬はきわめて珍しいのでまだ大丈夫です。

そしてみんながサンタクロース

はやまさんが23日の日記を取り上げてくれています

僕は親孝行しようと結んでしまいましたが、そうですね、 いつかはサンタクロースになるんですね。

親に「いつまでサンタクロースを信じていたか」など訊かれたのですが、 小さい頃は「親がプレゼントを買ってきているんだ」とうすうす感じながら それでもサンタクロースがやってきてプレゼントをくれると言う考えを 捨てきれなかったような気がします。

大きくなって、今になってやっと出た結論が サンタクロースはいるんだよ という事でした。 目に見えるものが真実とは限らないし、あるいはそれは名前が、 呼び方が違うだけなのかも。 いろいろな見方で考えた方が、世界はきっとおもしろい。

子供たちに夢を与えるはずが、存在まで否定されてしまうサンタクロースが どうか報われますように。 そして、はやまさんにもやすらぎがおとずれますように。

2003/12/24

つまり、MACアドレスを登録しないと実家ではインターネットに接続できないと。

WindowsマシンでダウンロードしてLAN経由でiBookにつないでファイルを移す ことを試みたが、やり方がよくわからないということがわかった。

残る手段はCDに焼いてファイルを移すというのだがそれもあほくさい。

本当にやってしまうあたりもあほくさい。

テキストエディットのエンコーディングで「日本語(Mac OS)」てのがあるんだけど、 これは何?

とりあえずDrSchemeとJterminalだけ。

Terminal.appにことえりから日本語を入力すると、確定した瞬間に バックスラッシュほげほげといった文字列に変換されてしまった。 でも、その文字列をechoに喰わせてやると、入力したはずの日本語が表示された。 Terminal.appは日本語を表示できないんじゃなくて、 各コマンドが吐き出すエンコーディングに対応してないってこと?

2003/12/23

南瓜を喰って柚子湯に入りました。 特に書く事もないのですが、それはほとんどの時間を寝て過ごしてしまったからだと 言う研究報告が有ります。

あと、あんまり偉そうな事を書いていると、大変な事になりそうなので、 もうちょっと謙虚になろうと思います。

サンタクロースはいるんだよ

サンタクロースがiBook G4をくれました。1日早いけど。

サンタクロースが本当はいなくて、プレゼントはお父さんお母さんが、 あるいは保護者の方が天皇誕生日でお休みの今日におもちゃ屋さんに行って、 買ってきて夜中に枕元に置いておくんだと思っている少年少女の諸君。 君たちの考えはあまい!

実はプレゼントを買ってきて置いているのは、 サンタクロースの魂が乗り移ったお父さんお母さんあるいは保護者の方なのだよ!!

昔、人間がまだ少なかった頃はサンタさんは実際にそりに乗って 家々を回っていたんだが、文明の力によって人間が増えすぎたもんだから 今はこうやって君たちの回りの人間に協力してもらっているという訳さ。

だから、お父さんお母さんあるいは保護者の方々もサンタクロースの一部なんだよ。 サンタクロースへの感謝もふまえて、お父さんお母さんあるいは保護者の方々に 親孝行しなきゃいけませんよ。

プリインストールは素人向けらしい

X11 for Mac OS X は入ってなかった。 ヘルプによればインストールディスク2にパッケージが入っているとのことだが、 インストールディスク2の中身は全部インストールされており、 実際にX11のパッケージが入っていたのは、インストールディスク3の中であった。

xtermで日本語表示できないもんかね。

うーんネットに接続できない。

2003/12/22

yatDiary

tDiaryに対抗して、yatDiaryと言うものを思いついた。 夜刀が作ったというのとYet Anotherを掛けている訳だ。

入力はRestructuredTextを使うことにしよう。 しかしRestructuredTextはdocutilsがないとHTMLに変換できない。 docutilsを使うにはPythonがないといけない。 日本でPythonがCGIで使えるWebサーバがどれだけあるだろうか。 Rubyより少ないのは言わずもがな。 でもZopeが入ってるサーバならわりとあるかも。

htmlに近い形で書くtDiaryに比べると、柔軟性ではどう考えても負けるな。 他のファイル形式に変換できるという点も、Web日記としてはメリットにならない。

いっそRestructuredTextの「ソースのままで見易い」という点を最大限生かして、 ソースをそのまま出力するのはどうだろう。 これならPerlでも……っていうかシェルスクリプトで作れる。 Pythonとdocutilsが使えるならオプションとしてHTMLでも出力できますよ。

っていうかRestructuredTextである必要もないじゃん。

とりあえず、この日記をもうちょっと外部からアクセスしやすいようにしたい。 でもファイルが月ごとにまとまっててそのまま書けるというこの状態は壊したくないなぁ。

ところで、ブログブログってちょっと前まで騒いでたけど、 そんなにすごいものなんですかね?

track backとか言うのも大まかに理解したつもりなんですが、 要するに作者にメール書いて記事についてコメントしたってのを知らせたり、 ページの主がReferer眺めて自分のページへのコメントを探したりしてたのを 自動化するわけですよね。 そもそもそういうことをやるってのがあんまり興味がなかったりするので、 全然価値が見えてこないのです。

そもそもこの日記なんて、見てる人が知人友人を含めても数えるほどしか居ないので、 全然必要性とかの実感がわかない。 今こんな立場にいるからそんなことが言えるのであって、 実際Refererが見られるなら見てしまうかも知れないけれど。

人間結局は自分に入ってくる情報を元に何かを出力するんだけれども、 入ってくる情報の量が増えたからと言って、 正しい出力ができると言うわけでもないんじゃないかしら。 実際情報の取捨選択とか真偽判断なんかの内部処理が多くなるだけ無駄だったり するんじゃないですか。

具体的に言うと、自分が普段巡回してるサイトを見てればいいじゃん。 誰かが自分の書いた記事についてコメントしてるっていうのがわかっても、 実際ふたを開けてみたら、「すごいですね。」とか「(・∀・)イイ!!」 とだけ書かれていたりするんじゃないですか。 あ、いや、一行コメントが悪いとか、 日記の中身が他人のサイトの紹介だけなのはあれだとかいってる訳じゃないですよ。

まあ 僕は 関わりのある人とコミュニケーションしてれば良いと思うし、 興味深いコメントをしているまだ知らない人がいても、 そのうち気が付くんじゃないかと思うのです。

知りたい情報は自分で調べりゃ良いし、 知りたくもない情報は入ってこなくていい。 言いたいことを言わせておこう。書きたいことを書こう。 そもそも日記に日記で反応すると言うことの良さって、 わざわざ元の記事の作者にメールや掲示板で読ませなくてもいいことを、 書けるってとこじゃないのかな。 そこら辺のやる気のなさと言うか消極的な感じが好きだったんだけれども。

前から気になっている言葉遣い

JavaScript:document.body.innerHTML=document.body.innerHTML.split('っていうか').join('と言うよりも寧ろ');focus();

2003/12/21

3点リーダ

「……」って、日本語ではよく使うと思うんですが、意外とPCでは入力しづらいですね。 MS-IMEでは「・・・」を変換するとでるらしい。 Atokでは……どうやるんだ?単語登録でもしない限りは 「。」とか「・」とかを変換するようです。 我がLinuxマシンにインストールされているWnn7はデフォルトの設定で「z.」で 「…」が入力できます。

Wnn7のこの入力方法は非常に優れています。 何故かというとこれはローマ字の段階ですでに「…」がえられているのです。 MS-IMEやAtokでは、漢字変換を行わないといけません。

ローマ字入力の日本語入力ソフトの動きを大まかに分けると、 『ローマ字からひらがなを出力する部分』と 『ひらがなから漢字へ変換する部分』からなっていると言えるでしょう。 ここで言う「ローマ字」、「ひらがな」、「漢字」は一般的な意味とは多少異なります。 「ひらがな」は漢字に変換する前の文字列でその中には括弧や句読点が含まれますし、 「漢字」はひらがなに該当する文字を辞書から探して変換した文字列なので、 ひらがなやカタカナやアルファベットも含まれます。

Wnn7では「z.」という「ローマ字」を「…」という「ひらがな」に変換しています。 ところがMS-IMEやAtokでは「・・・」や「。」といった「ひらがな」を「漢字」に変換しています。 一般的な連文節変換の日本語入力ソフトでは 「ローマ字」→「ひらがな」という変換は、入力されたらその場ですぐ変換されます。 「ひらがな」→「漢字」という変換は、スペースを押したり文節の区切りをなおしたり、 ユーザの操作が複雑になります。 特に「。」や「・」などはそのまま使う事も多いので、それらを入力信号とするのは あまり良い考えではありません。

さて、ではWindowsでも同じように「z.」という「ローマ字」を 「…」という「ひらがな」に変換できないものかと考えます。 実家の環境で試してみました。

まずAtok15ですが、Atokでは「ひらがな」の集合に[、。「」・]などは含まれますが、 「…」は「ひらがな」に含まれないようです。 「ローマ字」として、「z.」を選ぶことはできますが、 その「ローマ字」に対応する「ひらがな」として「…」を選ぶと、 「ひらがなでない文字列が含まれています」とメッセージがでて、 そのような設定ができませんでした。

次にMS-IMEですが、今度は「ローマ字」の集合に[,.;:]などの記号が含まれていません。 すなわち、「z.」というローマ字を設定しようと言う段階で無理な事がわかります。 さらに、「ひらがな」の集合にしても句読点や括弧などの記号は含まれず、 純粋にひらがなのみからなる集合がMS-IMEの「ひらがな」であるようです。

このような違いはどこからくるのでしょう。 詳しく調べていないのでわかりませんが、Wnn7はもしかすると 「ローマ字」の空間と「ひらがな」の空間と「漢字」の空間が 全く同じなのかもしれません。 UNIXですべてのファイルがただのビット列である様に、 Wnn7では入力も出力も同じ文字集合のものなのかもしれません。

このような性質はSmalltalkやLispが抱える性質に通じるようなきがします。 などとまとめっぽい事を言っておわり。

追記

Wnn7はPC-UNIX向けの製品で、サーバ-クライアント方式でつくられており、 認証サーバと漢字変換サーバは別のUNIXマシンが必要ですが、 Windows向けのクライアントも存在します。

日本語入力の効率についてはAtokに劣りませんし、 MS-IMEには十分勝っていると思います。どれもデフォルト設定での話ですが。

何よりも柔軟性があります。 この柔軟性は武器にして良いと思います。

例えば認証サーバとかな漢字変換サーバをCygwinで動かすとか、 MacOSXなんかはPC-UNIXと同様に使うことができるはずです。 それぞれのOS環境にあったクライアントと設定インターフェイスを用意すれば、 もっと売れる商品ではないでしょうか。

Wnn7オムロンソフトウェア により開発、販売されています。

実家の環境

Litestepを使っていて、どうも気になっていたことが一つだけ有った。 PCを立ち上げて1回目にログインすると、Litestepでなくてexplorerの環境になってしまう。 一旦ログオフしてログインし直すとLitestepの環境になる。 めんどくさいなぁと思いつつそのまま使っていたんだけど、原因がわかった。

まずLitestepを自分以外の家族がつかわないからと ホームディレクトリの下にインストールしたのがいけなかった。 さらにはホームディレクトリがDocument and Settingsなんてスペース混じりの 名前のディレクトリの下にあるのもいけない。

ホームディレクトリがそんなところにあるといろいろ面倒なので、 ログイン時にホームディレクトリを仮想ドライブにsubstしているのだ。 そして、Litestep起動には仮想ドライブからのパスを設定していた。 何故ならパスに空白が含まれているとLitestepのモジュールがうまく読み込まれないから。 ホームディレクトリがsubstされるのと、Litestep起動されるタイミングがわるくて、 Litestepが起動せず、代わりにexplorerが起動していたらしい。 ログオフ時に仮想ドライブをはずす様にはしていなかったので 2回目からはLitestepの環境が使えるということだったみたい。

結局/usr/share/Litestepに移して、起動パスも書き換えた。 とりあえずディレクトリ名やファイル名にスペースを含めるのは勘弁してください。 そのうちNUL文字とかを含めてパスを詐称する人が出てきますよきっと。

だいたい"Program Files"とか"Documents and Settings"とかいうフォルダ名は、 どういう理由があってそういう名前にしてるんだ? 人間に読みやすいようにしようって言うわけ? そんなもんexplorerからみたときにそう表示するようにしとけばすむじゃんか。 マイドキュメントとかデスクトップとかでそんなんやってるじゃないの。 人間に読みやすくて機械に読みにくいフォルダ名をデフォルトにしておくことに なんの意味があるんじゃムキー!

TweakUIとか使えば特殊なフォルダの名前とか位置とか変えられるんだっけ。 それをやったらやったでフォルダ名決め打ちなソフトが大呆けをかましてくれそうな気がするが。

2003/12/19

卒業研究のジャンルが確定した……かも

輪講の先生は、僕が希望している研究室の助手である。 その先生は、前期にインタプリタをつくる課題の担当でもあった。

今日、その先生に「君の書いたプログラムは異様にきれいだ」と言われた。 コードを端からパッと見て、何を意図しているのかが読み取りやすいらしい。 インデントやスペースの置き方なんかは、Pythonできれいに書く癖がついているかも。 関数なんかも無意識のうちに最適な単位でまとめているのかも。

前につくったインタプリタがLispもどきだったのと、 輪講で出された課題をSchemeで解いたりしていたので、 先生は僕をLisperだと認識していたらしい。 去年はPythonをやってたこととか、今Smalltalkの本を読んでることなど言って ひとしきり盛り上がったりしたような気もする。

さらに先生はMLについて触れた。 MLもいつかは勉強したいもんだと思っていたのであるが。

授業が終わったあとに、野暮用で先生の部屋を訪れた。 先生のPC環境を見て、また少し話す。 先生もDebian を使っていた。

用が済んで帰ろうと言うとき、呼び止められた。 「これ読む?」 渡された本はStandardMLの本であった。 喜んでこれを借り受ける。

帰り道、電車の中でその本をめくる。 まえがきにこうある。

MLは、定理証明システムの記述言語(メタ言語、Meta Language)を起源とする プログラミング言語の総称である。

はて、「定理証明」というのは何処かで聞いたような。 そういえば、あの先生の専門は定理の自動証明ではなかったっけ? なるほど、あの先生がMLをやるのも納得が行く。

……まてよ。あの研究室では、教授一人助手一人で二人とも卒研の指導をするんだが、 どっちが誰の担当になるかは学生を見て決める様なことを言ってたっけ。 しかも、あの先生は今年入ってきたばかりなので、今はまだ研究室内に 卒研生はおろか、自分と専門を同じくする人間すらいない。

つまり、先生はこう言っているのではないか。

「私とともに来るが良い。ゴフーシュハー。」

セキュアなシェルスクリプト

シェルスクリプトは最強。ただし…… 「暗黒面を受け入れるのだ。ゴフーシュハー。」

確かにシェルスクリプトでファイルを操作するのは勇気が要りますね。 書きなぐったあとではじめて実行するときは、 とりあえずファイルがらみの行頭にechoをぶち込みます。

あとは、なるべくファイルに触らないというアプローチもありかなと。 標準入力から読み込んで、標準出力に吐き出すという伝統的なやり方。 条件にあったファイル群に何かの操作をするなら、 条件にあったファイルをリストアップするまでで止めておく。 あるいはその操作を実行するシェルスクリプトを吐き出すと言う手も。 出力をそのままshにパイプできる。

確かに書いた人間は内容を理解していても、 他人が読んですぐ理解できたり、そもそもソースを読むかどうかも疑わしい。 何も考えずにコマンド叩いたときに、どうなるか考えないと怖いですねぇ。 怖い怖い。怖い怖い。

ぐらいは最低限やりましょうかね。

2003/12/16

こんなにもずれていた

昨日忘年会で久しぶりにあった友人に、 「この前君の日記見たけど、書いてあることが全然わからなかった。」 と言われた。

思えば最近は計算機の言語とかツールとかの話ばっかりだ。 それぁ知らない人から見れば、実はたいしたことが書かれていないこのページも、 クリンゴン語で書かれているように見えるかも知れない。 日本語で書いている様に思っていると、実は言語空間が違う世界に自分がいて、 あっちの人にはこっちの言う言葉がさっぱり通じなかったりするんだ。

ほら、ソシュール言語学で言う……なんだっけ。 いや。ソシュールは良く知らないんだった。 つまりそういうことだ、友よ。 ああ、僕は、計算機と会話するための言語を習得するのと引き替えに、 人間と会話するための言語を売り飛ばしてしまったのだ。

文系の人にもわかるように、小説の話題でも振ってみると、 今ロード・ダンセイニの「魔法使いの弟子」を読んでいるんだけど、 文系の人でもこんなマイナーな本は滅多に読んでいないだろうと思うので、 割愛することにする。

2003/12/15

オブジェクト思考

オブジェクト指向のオブジェクトについて考えようというのです。

Smalltalkの本を読んでおります。 全部がオブジェクトってのはこういうことなんだ、と感動しております。

ついでに、本日のプログラム言語論の授業もオブジェクト指向についてでした。 うちの学科では授業で習うのはCのみなので、 ほとんどの人はオブジェクト指向に触れていないはず。 で、今日の授業内容はと言うと、 C++とかJavaとかの入門書の初めの節に書いてあるような、 クラスとインスタンスとか継承とかカプセル化とか多相とかの 概念の説明で、あまり役には立ちませんでした。

オブジェクト指向って現在のプログラミング業界(なにそれ)で、 一番メジャーな方向性であるにも関わらず、 誤解されているケースも多いイメージがあるんですが、どうなんでしょう。 概念を羅列するだけでは誤解を生むことの方が多いような気がしますが。

例えば、クラスとインスタンスの説明で、 「クラスオブジェクトとインスタンスオブジェクトがあって、 クラスはオブジェクトの型で、インスタンスはオブジェクトそのものです。」 のような説明があったわけですが、 クラスはオブジェクトなのかとか、クラスがオブジェクトだったら、 クラスのオブジェクトそのものはインスタンスなんじゃないのかとか、 全然わからない。

そうだ。クラスってのはオブジェクトなのか? インスタンスはオブジェクトなんだろう。 もし、オブジェクト指向では実際に存在するオブジェクトはインスタンスしかないなら。 オブジェクト指向じゃなくてインスタンス指向と呼んだ方がいいじゃないか。 疑りぶかいあなたのためのオブジェクト指向再入門 をみると、案外間違ってはいないのではないかしら。

それとも、クラスが実はスーパークラスというクラスのインスタンスだったりするんだろうか。 そんな頭山的な定義は如何ですか。 クラスを生成するメソッドを持つクラスのインスタンスがあって、 それにクラスの定義を送れば新しいクラスができたりするのでは? と言うことは、クラスを動的に生成できるのか?

と、思っただけで全然調べてません。

2003/12/14

三界を統べるもの

渋谷行って映画見て、新宿行って買い物につきあって、 池袋行って国際化石鉱物ショーを拝見。

一緒に行ったやーもと君は、デジカメやら、その付属品やら、火鉢の灰やら沢山購入。 僕は映画「歌追い人」のパンフと、孔雀石を二かけら。

晩飯はやーもと君が買い物に付き合ってくれた例じゃと言うて、傲りになりました。 この場を借りてもう一度ごちそうさまでしたと言っておこう。

sed again

標準入力の各行の間に"gain"だけからなる行を挟みます。 と言う話はさておき、 アキレスの亀を追いかける日々 からたどって ハノイの塔を解くsedスクリプト やってみました。

標準入力からx+を読み込んで、盤の移動操作を出力するんですね。 しっかし、ソース見てもどうなってるやら。 ラベルとジャンプを駆使してると言うことは、 構造化プログラミング以前のgoto文だらけのプログラムと同様である訳で。 しかし、暇なときにじっくり眺めてみると、 sedの新たな使い道に目覚めるような気もします。

はやまさんとこ への反応 もまとめてしまおう。 シェルスクリプト最強 は同感です。 システム全体をライブラリとして計り知れないパワーをもちながら、 普段から使っている言語であるというところがすごい。 しかも構造化できてるしなぁ。

まあ、実際には他の言語 (大きな意味で各種コマンド、アプリケーションの使い方を含む) を覚えないと、その真価は発揮できないわけですが。 でも、それは他の言語で関数の動作がわかってないと何も書けないのと同じかな。

便利な言語については、やはり最終的には自分で布教活動をするという結論。 確かに勇気と、そのツールに関する深い洞察が必要ですね。

しかし、そのようにツールの使い方をみんなで勉強して、 臨機応変にいろんなツールが使えるようになるというのは 企業にとってもそこで働く側にとっても良い環境であると思います。 そんな訳で企業選びの判断材料の一つにしようかと。

2003/12/13

html版に前と同じナビゲーションを追加してみるテスト。 またsedでフィルタを書いていた。

2003/12/12

何故彼はawkを使わなかったか

前につくったシェルスクリプトを見返してみると、 数値計算をするときにexprを使ってる。どうなんだそれは。

個人的なイメージですが、 awkに関してパターンマッチ言語としての見方が強かったようです。 特にテーブル状のデータを処理する様なイメージが……。

そんな訳で、アルゴリズムを記述するのにも向いているとか言われても 何だかピンと来なかった。 アルゴリズムのはなし とか見てはじめて 「ああなるほど。こう書いて良いのか。」と思ったり。

使いたい便利な言語があっても 知っている人が同僚にいない と言うことがあるんですね。 会社である言語を使う為には、その言語を知っている人が 常に供給されていなければいけないのか。 マイナーな言語を自分が使えても、会社では使えない罠。

そういえば、企業の情報を見ていると何処も彼処も (Java or C++) and XML and RDB とかばっかり。 現時点でJavaもC++もXMLもあまり興味がないと言う人(私)は一体どうしたらいいでしょう。 PythonやSchemeやシェルスクリプトが使えても職には就けないのかしら。

ついでに言うと今日学校の図書館から借りてきたのは、 Smalltalkの本と、Mindの本でした。 一つの単純な原理からつくられた言語に魅力を感じます。 それはさておき、言語を書式の美しさとか設計のきれいさとかでしか評価してないから、 なんでみんなJavaやC++を使うのかヨクワカンナイや。まあいいか。

多分、今解決しなきゃいけない問題について、 簡単な書き方で解ける別の新しい言語を覚えるよりも、 現在知っている言語で解いた方が、少し難解な書き方になっても 支払う労力は少ないと感じるからではないのかなどと想像しつつ Nethackをやって寝ることにする。

2003/12/11

就職活動に使う証明写真の撮影のために、リクルートスーツを着ていった。

思えば今までスーツなど着たのは、葬式の時と芝居の時だけであった。 しばらく考えた末、私は一つの結論に達した。 つまり、就職活動というのも葬式か芝居のいずれかであるのである。

2003/12/09

sed | sed | sed

発見されたのを発見しました 。 自分で使うゆーちりちーなどはシェルスクリプトで書くことが多いので、 必然的にsed覚えましたが、こういう人間は珍しいのかしら。 でもawkはあんまり使ったことないなぁ。

カーニハンが書いた本だったかな、ファイルの先頭数行を見るときは sed 10q とやる とか書かれていて目から鱗が落ちた記憶が。headは要らないんだそうな。 sed使いには常識なのかな。

sed使えると言っても初歩的なことばっかりで、 パタンスペースとホールドスペースをあっちやったりこっちやったりし始めると パズルのようになって良くわかりません。 複雑なフィルタをつくるにはもっと修行が必要です。

Web日記についていくつか

個人的な意見とか改良案。 日記の生成スクリプトやスタイルシートの改良時に参考にしていただければ幸。

段落アンカー

もうなれたので、間違ってクリックして画面があまり変わらなくて 不思議な気持になることもないのですが、 やっぱりあまりスマートなやり方ではないように思う。

と言っても、Web日記同士で記事に突っ込みを入れ合うときのユーザビリティを 考えると、現状でhtml上に明記する形で段落を参照するためのアンカーを 多くのブラウザで取得できるのは他にないかも。

一方で、UAを視覚的なブラウザだけに限定しないという html4以降のw3cの考え方としては、 段落アンカーは明らかにUAを特定してつくられているのでよろしくない。

多分1番理想的な形は、html文書側ではp要素にid属性をつけるだけでよくて、 視覚的なブラウザはコンテキストメニューからそのidつきのURLを clipboardなどに取得できるという感じではなかろうか。

そもそも、1個づつアンカーをつけて参照してもらわなきゃいけないような 文書の一部というのは、段落よりもリストの方がふさわしいような気もします。 さもなくば見出しをつくって、見出しを参照させる方がいいような。

小さな脚注参照

脚注というものがそもそもハイパーテキストの考え方に近いので、 ハイパーテキストでそれを実現するというのは間違ってません。 (実際、幻のhtml3.0ではfootnote要素があった) が、参照の仕方があんまりハイパーテキスト的でないことが多い様な気がします。 よくあるのが以下のような感じのソース。"hogehoge"と言う文字列について、 脚注で説明を加えているときに、

<p> ...... hogehoge<sup><a href="#footnote1">*</a></sup> ......</p>

書籍や雑誌で見るように、小さな星印などで脚注参照を示しているのですが、 ユーザビリティから見ても、あまり便利なようには思えません。

大きく二つの問題があって、一つはアンカーの文字列自体が小さくなってしまい、 一番多いと思われる視覚的なブラウザの場合にクリックしづらいこと。 もう一つは、そのアンカーがそれ以前の文章のどの部分についての説明を 参照しているのかわかりづらいことです。

以下のようなソースにすると二つの問題を同時に解決することができます。

<p> ...... <a href="#footnote1" class="fnref">hogehoge</a> ......</p>

class属性で普通のアンカーと区別しておけば、スタイルシートで好きなように 脚注への参照であることを表現できますし、 スタイルシートが使えないUIでも混乱しません。

css例:

A.fnref:before{
  content: "*"counter(fnref);
  counter-increment: fnref ;
  vertical-align: super;
  font-size: smaller;
  line-height: normal;
}
h1 h2 h3 h4 h5 h6{
  counter-reset(fnref);
}

期待通りに動くかどうか確認していません。 IEはカウンタ回りは全部駄目だったような気もします。

最近の気になる言葉遣い

$ grep "気[がも]します" nikki/diary.rst | wc -l
    9

2003/12/05

反応

too blue to dieか。逆のこと書いてた。氏脳。 あしたはTOEICだ。こんな調子で大丈夫かしら。

Plan9はたしかその映画が名前の由来になっていると、 2chのPlan9スレで読んだ様な気がします。 ベル研のサイトにも書かれているとも書かれていたような気もします。 Plan9 FAQ にて 発見

OperaShowはCSSの真骨頂と言う感じですね。 プレゼン用のスタイルシートを用意しておけば、 今のドキュメントを直ちにプレゼンのスライドにできる(のかな?)。

2003/12/04

lessでプレゼン

lessプレゼンのすすめ ですって。WYSIWYGですって。

何となくlessプレゼン作成支援ツールをつくってみました。

deco.sed:

#!/bin/sed -f
/^\.b/{s/^.b[         ]*//
s/[^  ]/&^H&/g
s/^H\\$//
}

/^\.u/{s/^.u[         ]*//
s/[^  ]/_^H&/g
s/^H\\$//
}
/^\.t/{s/^.t//

s/[^  ]/&^H&/g
s/^/          /
a\

a\

}

"^H"はバックスペースに置き換えてください。

join.sed:

#!/bin/sed -f
:join
/\\$/{s/\\$//
N
s/\n//
/\\$/b join
}

各ページを別のファイルに保存することになるので、作成支援ツールとしては、 あと他に1枚のソースに改ページコマンドを入れておいて、 番号をつけて各ファイルに出力する機能が必要な気がします。 そのうちawkでつくりそうな気もします。

卒業研究

今日は来年度の為の研究室説明会でした。 2年後に教授が引退するので院に行きたい人はは来るなという研究室や、 酒とたばこに弱い人はやめといた方がいいという研究室や、 テニスや登山やスキーなどが予定されている研究室などいろいろ。

研究内容と先生の名前を見比べていて気が付いたんだけど、 ある分野の専門家がいるのに、その先生がその分野の授業を担当していないケースが 多いような気がした。

どこに入ろうかなぁ。入った研究室によって卒業研究の範囲が決まってしまうので、 好きな先生でも研究内容が合わなきゃしょうがない。 研究内容に興味があっても、ヘヴィスモーカーの先生の近くで暮すのはつらい。

やはり、前からここにしようかと思っていたところに入ろうか。 幅広く勉強できそうだし。

HTCPCPのサーバとクライアントを実装したら卒業研究にならないかな。

2003/12/03

プログラム言語論のつづきのつづき

一昨日がプログラム言語論の発表で、実際に開発する処理系の設計について だったんだけれども。

僕のグループでは、構文解析でできた構文木をS式にして出力することにしている。 ところが先生がこうつっこむ。 「S式で木構造を表現できるんですかね?」

いや、できるでしょ。 親ノードに対して子が3つつながっていた場合、こんな風に書くことにする。

(親父 長男 次男 末っ子)

長男に子供がいるなら

(親父 (長男 孫1 孫2) 次男 末っ子)

木構造からS式への変換規則は口頭で説明しただけなので、 今一つ理解してもらえなかったみたい。 「S式は、実際にはもっと細かい制約がありますよね?」 などと言っていたので、おそらく先生は 『Lispのコンスセルは二つの枝しかないから2分木しか表現できない』 と思っていたのかしら。

僕が最初に読んだLispの入門書では、1章でリストとS式の説明をしていて、 2進木で一般的な木構造を模倣できるってのが書いてあった。 僕は良い本に巡り合ったと思う。 初めからS式によるソースコードを出して説明していくような本を読んでいたら、 こうはならなかったろうな。

ちなみにその本では、5章ぐらいまでS式によるソースコードは出てこない。 使われる関数の説明がずっとM式でかかれて、 本の半分まで読み終わるとやっとM式からS式への対応づけが始まる。

多分先生はLispがそんなに好きじゃないんだ。 きっとS式がはじめに出てくる本を読んだに違いない。 ついでに言うと、先生はSchemeについてもあまり知らないみたいだった。 Schemeの処理系でフリーなものがあるのかなんて訊かれた。 おお、星の数ほど(鯖)有ると言うのに!

プレゼンテーション

他のグループのプレゼンを見ていると、プレゼンテーション工学みたいなものが 研究されてその授業が開講されるべきではないかと思った。

スライドに細かい文字で大量の情報が羅列され、 発表者がスライドの内容をそのまんま読み上げるような、 そんなプレゼンテーションはだめなのだということぐらい、 誰かが何処かで教え伝える必要があるんじゃないだろうか。

スライドなんてただの飾りです。

2003/12/02

徹夜でレポートを書いていたんですが、レポートの本文に費やした時間よりも プリンタの設定に費やした時間の方が多かった気がします。

Debianのプリンタの話

OpenOffice.orgのファイルは日本語で印刷できていたので、 すっかり安心していたんですが、 他のアプリケーションが出力したpsファイルは日本語が豆腐になったり 文字化けしたりしていました。

debianでCUPSとgimpprintを使おう と言うページの通りに設定してみただけでは まだだめだったのですが、その後パッケージcupsysを最新版にアップグレードしたら だいじょうぶでした。

Knoppixから入れたからか、たまにパッケージのインストール具合いが違う。 元からインストールされているパッケージは、 一通りアップグレードした方が良いのかもしれない。

件のサイトに行き着くまでに昨年辺りの情報を元にlprとかlprngとかを入れてしまった。 無駄でした。

2003/12/01

12月になりましたが、最近リクナビを見てません。 リクナビから来るメールも放置。 具体的な行動に出るのがまだちょっと怖い。

欝だ氏脳は英語で言うとtoo blue to dieになるのかな

はやまさんとこ からたどって、 The Homeless' home の掲示板を見てみたり。 こないだ師匠に「あんたも生まじめな性格だから鬱病になったりしないか心配だ」 などと言われたので、ちょっと気にしていたり。 師匠の他の生徒でプログラマで鬱病のひとがいるらしいのです。

うーん。プログラマって鬱病になりやすい職業なのかも。 生活が不安定そうだし、神経使う作業も多そうだし、 一方で生まじめな性格って言うのはプログラミングという行為には メリットがありそうだ。 と言うことは鬱病になりやすい人が集まる鬱病になりやすい環境なのではないか。 これは恐ろしいことだ。

そもそも、プログラマがサラリーマンとして企業に雇われる という形態が間違っているのではないかと暴言を吐いてみることにしよう。 プログラミングてのは職人芸みたいなものであるので、 徒弟制度を採用すべきだ。 プログラマはスーツを着て会社に出社するんじゃなくて、 ねじり鉢巻に作務衣を着て工房に行くべきだ。

優秀なプログラマの下には、入門希望の輩があつまってくる。 入門希望の輩が頭を下げると、 優秀なプログラマは不機嫌そうな顔でキセルをふかしながらこう言うんだ。 「俺は弟子はとらねえ。」 1回目で断られても、あきらめずに2回3回と繰り返しやってくるものにだけ、 やっと入門が許されるのである。 「しょうがねえ。しばらくは様子を見てやるが。 ものにならねえようなら追い出すからな。」

やっと入門を許されても、すぐにプログラミングをやらされるわけでもなく、 やれ、茶を入れろだの、キーボードを磨けだの、 プログラミングとは関係のない雑務をたっぷり1年間やらされるのである。 志の弱い人はこの時点でやめてしまうのであるが、 志の強い人はプログラマになるためだと思って しっかりこれらの仕事をこなすのであった。

1年を雑務に費やした後、弟子はひょんなことから師匠のマシンに触れる機会を得る。 いつもなら雑用を押し付けるばかりの師匠が、1枚の紙を渡してこういうのだ。 「おい、俺はこれから用事でちょっと出かけるが、 返ってくるまでにこのディレクトリ以下の要らないファイルを消しておけ。 要らないファイルの条件はここに書いといた。」 紙には非常にややこしい条件が書いてあって、 弟子はどうにかしてその問題を解決しようとするのである。 間違って必要なファイルを消してしまったり、消すべきファイルが残っていると 師匠が返ってきたときにどやされるのであるが、 実際には師匠は弟子がシステムを操作したログを事細かに記録しており、 その操作手順をあとでこっそりチェックしているので、 操作した手順やアプローチの仕方の方が重要なのである。 また、この時に師匠が使っているツールや 師匠の作ったスクリプトを覗くことができるので、 技術を盗むにはいい機会でもある。

このようなテストを何度か繰り返すうち、 優れた素質を見抜かれた弟子は師匠の仕事の手伝いに加えられるようになり、 最初は小さなモジュールしか担当させてもらえないが、 やがて担当する仕事は大きくなり、重要な部分も担当することになる。 そうして、入門を志した日から数十年、ようやくのれんを(以下略)。

といったストーリーはさておき。 このシステムの利点は、

師匠は、素行の悪い弟子を破門することができるし、 人使いの荒く、弟子を奴隷のように扱き使うような師匠の下には弟子は集まらない。 プログラマとして優秀であり、かつ人徳もあるような師匠の下にこそ 弟子は集まり、工房は大きくなり、大規模な仕事もできるようになるのである。

と、妄想を膨らましてるだけで現実問題としての就職活動や、 就職後の生活や精神状態におびえている私は、戦う前から負けている気がします。

次の行動

  1. 入り口に戻る
  2. 昔のを読む
  3. 直帰
  4. この文章を添削する。
    1. 掲示板で白日の元にさらけ出す。
    2. メールでこっそり