今日は首をかしげること 35回。
いいわけ。
getopt.getopt
について再考。
新山は多いときで 1日に数個のスクリプトを書くのだけど、
getopt-template.py
なるファイルを用意しておいてつねにそれを
使うようにしている。これはこれまでにけっこう変遷してきたが、
いまは以下のようなパターンになっている。
#!/usr/bin/env python import sys stderr = sys.stderr def main(args, output=None, debug=0): return if __name__ == '__main__': import getopt def usage(): print 'usage: %s [-d] [-o output] [file ...]' % sys.argv[0] sys.exit(2) try: (opts, args) = getopt.getopt(sys.argv[1:], 'do:') except getopt.GetoptError: usage() (debug, output) = (0, None) for (k, v) in opts: if k == '-d': debug += 1 elif k == '-o': output = v main(args, output=output, debug=debug)
まず最初の if __name__ == '__main__':
の中で
コマンドラインを処理する。オプションの使い方がなってないときは exit(2) を返す。
(エラーの種類によってプロセスの終了状態を変えるのは djb の影響、
ちなみに彼はメモリ割り当てで異常終了したときはなぜか必ず 111 を使う。)
コマンドラインでのオプションは、関数main
に対するオプション引数と同じにする。
それから重要なのは、かならずデバッグ機能をコードにつけるということである。
これは、最初は単に「debug モードか否か」で True/False のみにしていたのだが、
最近ではデバッグレベルを可変にすることのほうが多くなった。
こうすると -d -d -d
のようにオプションをいくつもつければ
デバッグレベルを上げることができる (この方式は OpenSSH からパクった)。
もちろん、これは以下のように使うのだけどね:
if debug:
print >>stderr, '...'
sys.stderr
を stderr
にエイリアスするのも
デフォルトになった。これも、もともとはどっかのコードを見て参考にしたものだと思う。
結局のところ、あるプログラミングスタイルの確立というのは
文体の確立とかなり似ている。あっちこっちのコードから「あっ、これ、いいな」と思った
部分をパクってきて、それを寄せあつめたもの…といえば聞こえは悪いけど、
そういう影響の集合を「個性」とでも呼んでいるわけだ、わしらは。
そして文章屋がとにかく多くの文章を読んできているのと同じように、
プログラムもまた「教養がものをいう」もんだと思うわけよ。
これは一度覚えてしまえば終わり、というものでなくて、スタイルの調整がつねに必要だ。
よくプログラミングが「教養の一種として」教えられることがあるが、 「教養の一種としてプログラムを書く」のは、「教養の一種として小説を書く」のと同じくらいヘンテコだ。 そもそもプログラミング自体が巨大な教養のカタマリだということをわかっていない人々が まともにプログラミングなんか教えられるワケがないだろう。
それにしても今日はあったかいなあ。これまた…
しかし、このまえの高速化のおかげで 全部 Python にもかかわらずスピードはそれなりに速い。 これまでに取ってきた 20万記事ほどのクラスタを作成したが、1日で終わった。 あれから、GETA とかはもしかして似たような高速化やってんのかな? と思って ソースを見てみたが、ふつうに全部の要素を計算してた。にもかかわらず 単発の速度だけを見ると GETA のほうがはるかに速い。 でも、全部オンメモリでやってるから要素が増えてくると爆発するんだけど。 こっちは「連続運転」と「クラスタGC (一定時間変化しないクラスタは死んだとみなして除去する)」のサポートがキモだからな。 Google News とかも似たようなことをやってると思うのだが (連中の場合は 1日で数万記事を扱うわけだし)、 もしかすると彼らはマシンがあるので全部バカ正直にやってもデキちゃうのかもしんない。 おそろしいことよ。
で、新山の場合、ここまではまだ初期の初期のステップにすぎない。 ここからまだ長い長い処理過程があるのだ…。もういや
明日からは Lisp 地獄になる予定。 おっと、明日は週末だった。図書館いくぞ!
今日なにげなく見かけたこのニュース: 米グーグル、政府によるネット検索情報開示要求を拒否
このニュース自体は昨日の slashdot ですでにやってたが、この日経の記事には 「『利用者のプライバシーを侵害する』として要求を拒否。」とある。
ここでツウちゃんねる風の演出をさせていただくと…
> 利用者のプライバシーを侵害
> 利用者のプライバシーを侵害
> 利用者のプライバシーを侵害
だって。 お前ら、ユーザの検索キーワードをスクリーンセーバにして表示させてたくせに、 よく言うよ。Google って、こういう話になるとホントにしょーもない会社だな。 正直いって、新山は現在の Google のサービス的にはほとんど不満はない。 情報検索をやっている人の中には、「Google なんかダメだ」という人がけっこう多いのだけど、 下手に賢くなってくれるよりは、永久に今のままでいてくれればそれでいい (どのみちこれ以上劇的に改善することもないだろう)。 しかしこういう話をみるにつけ、やっぱ大きくなった会社はアホってくるのか、と思う。
DDI. (どうでもいい)
たべぐし
うふっちょ
ls
(留守)。
q4rc
(急用rc - 緊急避難手順のこと)。
dd bs=8
(どうしても-できない、8時のバス)。
mk3k8
(桃栗3年火器8年)。
そのご 8st. の Eva's で菜食な食事をして帰ってくる。 スズキと児島から年賀状が届いていた。児島が結婚したというのは このまえ日本に帰ったときに聞いたが、あんな甲斐性ないヤツが結婚して大丈夫なのか。 小林によると最初の 3ヵ月で年休を使い果たしたというが (しかも休んだのではなく全部遅刻が原因らしい)、 まあいいや、どうでも。つうか、おまえ、 例のメーリングリストが送信されてるアドレス見てねえだろ。 ばーかばーか。いや、とにかくご結婚おめでとう。
そういえば、 こないだ日本に行ったときに撮った写真。 「エサをあげないことが愛情です」か。 それはたしかにそうかもしれんが、どことなく思考が短絡的で笑える。
どうでもいいが、日本ではすべてのデジカメは携帯電話にリプレースされていた。
しかしこれほど方言がこまかく区別できるというのはすごいことだ。 たとえば長野だと、北信と東信でそんなに目立つほどの特徴差はあるだろうか? まあ、もともと長野はどこも東京弁とあまり変わらないのでアレかもしれないが。 それでも中国では方言を保護しようとする風潮があるのは日本よりエラいな。 (ほかの部分ではあまりエラくない国だけど)
それにしても、FreeBSD の ports では ぱいがめ はなぜか py-game って名前なのな。
しかしさ、AirPortカードがはずれてるのぐらい簡単に個人で直せないというのが気に入らん。 むかしの PowerBook G3 はキーボード上のツメをずらせば自分でパカっと開けることができたじゃない? G4 はそうなっていない (ほかのサイズは知らんけど、とりゃーえず 12inchは)。くそ。 デスクトップでも、いまじゃボードの追加とか HDD の追加とかはドライバなしでもできるもんね。
/bin
+ libc
」であって、
あとはすべてつけたしにすぎない。でも、この 3つは絶対に必要だ。
このうちどれが欠けても Unix とは呼べない。
だから「Unix を学ぶ」ということは (カーネルはべつとして)
/bin のコマンド体系と libc の関数を両方学ぶということであり、
結局のところそれはシステム管理とプログラミングの両方ということだ。
そもそも、この 2つが厳密に切り離せるという仮定がおかしいのかもしれない。
てくるで (ところで、) ある方からメールをいただきましたが 朝刊に漫画が 2つあるのは、夕刊のない地域に夕刊の分の漫画まで一緒に載せているからだそうです。
すると東京の毎日新聞朝刊は漫画ひとつなのか。
すると東京で毎日新聞を朝刊のみ購読している人は、まっぴら君を知らなかったのか。
不公平な世の中だ。
コノヨウニやたらと改行をくり返すとなにやら詩的な文章に見えるの謎。
こういった情報を NE tagging のさいに使えないもんだろうか?
宮崎勤の死刑判決のニュースを見て思うこと。 新山はとくに死刑反対ってわけでもないが (そこまで“人権”について考えてない)、 死刑は純粋におそろしい。 怖いのは自分が死刑になることではなくて、 『死刑』という刑が日本で公式に認められているところだ。 なぜかというと、ほかのどんなひどい刑でも 「犯人が更正する可能性が 0.00...1% ぐらいはある」 と思っているわけだよね。ところが、死刑の場合はちがう。これは 「犯人が更正する可能性は 厳密に 0% である」 と言い切っている。これはだれかが個人的にそういう判断をしたのではなくて、 国が公式にそう断定していることに注意。 国がここまで何かを完璧にあきらめるところがこわい。 これは一種の特異点である。なにか実数値が厳密にゼロであるというのは、 それだけで人を不安にさせる。にもかかわらず、 実際には死刑がほんとうに「極刑」かというとそうでもないと思うのだ。 死刑は「更正の可能性を極小にする」という意味では「極刑」だが、 「刑のつらさ」や、「遺族による怨恨晴らし度」という点では かならずしも「極大」ではない、と思う。人によっては懲役のほうがつらいだろうし、 「死刑にしてくれ」とかいってた例の児童殺害のおっさんの場合は むしろ逆にありがたいのかもしれないし。なにかあるとすぐに 「犯人には極刑を!」といいだす遺族の方々もワンパターンすぎる。 第一、ひと様の前でいう公式見解としてはそりゃ子供っぽすぎるだろ。 むしろ、「決して犯人を殺さないでくれ」と哀願するほうが恨みが切実に表現されていて よりインパクトが強い。オレが遺族ならそうするね。 そして願わくは世の中に死なぞよりもはるかに大きな恐怖と困難があるということを 語りて平地人を戦慄せしめよ。
どうでもいいが、遠野物語でこの「戦慄」を狙った柳田国男がやろうとしていたことは 文学的なテロだったんではないかという気がする。 でも、遠野物語と世界観が似ているけど、ムーミンはテロじゃないよ。 あれはカバだ。 断定。
-Wall -Werror
を使っていることがわかった。
まあ、これに慣れた人々にとってみりゃ、たしかに Linux のカーネルが
Warning を出しっぱなしにしてるのは非常に気持ち悪いでしょうよ。
どうでもいいけど、これまでの Traiss で翻訳した部分を抜きだしてみたら 1MBytes 近くになった。
どうでもいいけど、自分がこれまでこの日記に書いてきた HTML をぜんぶ合計したら 7MBytes 近くになった。 まだまだ、だな。
完成は付加すべき何ものもなくなったときではなく、 除去すべき何ものもなくなったときに達せられるように思われる。-- サン=テグジュペリ 「人間の土地」 堀口大學訳
いやあ、それにしても「南方郵便機」では 「カップ・ジュビー」って書いてた地名を、こっちでは 「キャップ・ジュビー」って書いてるよ。同じ訳者なのに、堀口大學。気が変わったのかな。 まあどうでもいいんだけどさ。
if 0: なんか elif 0: なんか elif 1: なんか (← これが実行される)
遅ればせましたが、おはようございます。
遅ればせましたが、あけましておめでとうございます。
google://遅ればせましたが/ (200)
ところできのう PowerBook をあずけて来た。Soho の Genius Bar(ka) は もとからダメな Apple の Geniusバカの中でも最悪の対応らしいので、 そこへいくのはイヤだったのだけど、大学の computer center でも 修理を扱ってくれることが判明。2週間以上かかるっていうけど、 こっちのほうがまだいいだろう。ということで、あずけて来る。 さよなら。
まあいい。(まあよろ)
このあいだ、上野に泊まったので国立博物館へはじめて行ってみたのだが、 そこの法隆寺宝物館が「なんか MoMA みたいだな」と思ったら、 同じ Yoshio Taniguchi によるものだった。どうりで。
どうでもいいけど (どうでもよろ)、美術館や博物館には どこへ行っても新山の好きな「でっかいエレベーター」ガアル。 ナゼカ新山ハソノヨウナ物品ガ好キダ。アレ? ナンデかたかなカ?
さらにどうでもいいけど、FreeBSD を使い出してから 自分で作った Flash が自分で見れないということが判明した。 (Linuxバイナリを使えだと? 邪道な。) これはなんとかせねばなるまい。
iter(dict)
を dict.iterkeys()
にしたこと。
こりゃあ、どう考えたって
dict.iteritems()
のほうが自然だろ!
おかげで、以下のようなバグに頻繁にぶちあたる。くそったれ。
(まあ、オレの不注意なんだけど)
>>> for (k,v) in dic:
>>> print k,v
...
TypeError: unpack non-sequence
どうでもいいが、Google がやったことのひとつでエライと思うのは 「API を公開する」ということである。これのためにたぶん GPLv3 ができたんだね…。
と
なったり
する
のです
ところで (てくるで)、今日は Dan のトークがあったのだが、 最初の 1時間ぐらいはそれなりに聞けていたのだけど後半になったら もう集中力切れてバテバテ。それに
そして本日も非常アッタ (かい)。
てくるで、特別せみなあのお知らせ:
SPECIAL SEMINAR ANNOUNCEMENT
Tuesday, January 17th, 2006 at 11am
719 Broadway, Room 1221
Rob Cook
Vice President of Technology, Pixar Animation Studios
ホストはとーぜんのようにぺるりん先生だ。
tabesug
ほんとは、きのうはもっと日記を書くつもりだったのが、 夕方ごろからもう時差ボーのせいでフラリンコン=フラリンコンになり、 帰ってきて飯をくったらお茶を淹れている間にネムってしまった。 その後何度か目が覚めたのだが、結局 (ケッキョキ) 5時までズブズブと寝入る。 時差ボケの感覚というのは要するに徹夜したあとの日の感覚に似ている。 眠いというよりも、なんか脳味噌が全体的にひりひりと痛むかんじだ。 目もショボショボする。とうぜん動いているものは見えなくなり、 アクビはやたら出るのだが眠気はそんなにないのだ。そして起きたあとはいつも 頭痛がする。ヘンだよ、これは。
なのに、オレはもうすでにハラがへっているぜ?
どうなってんだ、これは。
降 っ て い ま す
(なんて理由だ! でも今朝は 7時半ごろから仕事してたんだから 4時頃に帰ってもいいだろうよ。 いままで誰にも隠していたが、オレは実は合理的な人間なんだぞ! 合理的ということは、つまり、 非合理ではないということである。来た! 来た! ぅわ〜〜〜〜〜)
きょうはクラスタリングを改善する方法を考えた。 たいていの場合、クラスタリングには項目数 n に応じて O(n^2) の時間がかかり、 これを短縮する研究はたくさん行われているのだが (といって調べてないけども、たぶんね)、 基本的にどの部分でいちばん時間がかかるかといったら、最初っからほとんどの項目は互いに まるっきり違っていて、どうあってもクラスタされないのである。 それらに対していちいち類似度を計算するのを省ければこれは速くなる。 つまり各項目からなんらかの特徴ベクトルをとりだして、これが合致するようなもののみを 互いに比較すればいい。で、今回のように文章を bag-of-words で比較する場合にはこういった素性を 取り出すのは簡単で (もとが離散的なので)、idf にテキトーに手を加えたら ほとんど一意のクラスタが判別できるようになった。これでおそらく数十倍のオーダーで 高速化する…ハズである。 で、これができると何がうれしいかというと、 クラスタリングを今まで単一のプロセスとしてメモリ上だけでやっていたのが、 ディスクを使った「漸進的」なクラスタリングができるようになることだ。 「仕掛け品」のクラスタをとりあえずいっぺん全部ディスクに保存しておいて、 毎日毎日、新たに得られたネタを通していくと結晶を成長させることができるのである。 今までは比較回数が多すぎて遅かった。これは抽象的には persistent なマッピング (=DBM) が 3つあればできる。といっても実際のアルゴリ済むはけっこう複雑だけど。 あとは実装するだけだ…。
というのはじつは大嘘でしてね。
世の中の人人すべてが毎日をこのように飲み込んでいるわけではない。 実際には、二次的な要素があって、それらは冷蔵庫あるいは冷凍庫に保存できないことを知っている。 といってもほとんどの人は、まあ、冷蔵庫に保存されているわけなんだけれど、 たまに「明らかに解凍された人生」をおくっている人がいる。 快盗とは関係がない。そういう人を見分ける方法は、鼻の頭を見ることである。 そいつが解凍されていた場合、そいつの鼻の頭はつねに北を向いている。 そうでない奴の場合は、そうではない。だが、解凍された人間に対して 冷凍庫の中の感想などを聞いては絶対ダメだ。なぜって、彼らはすでに 生きた (生れた) 人間ではないのだから!
何を言っているかわからないって?
ゲームを読みなさい。といって、この場合のゲームとは、 ゲで始まってムで終わるたぐいのゲームではありませんよ! もっとも、ゲで始まらずに /and/or/ ムでも終わらないゲームそのもの (すのもの) でもありません。 よくわからない場合は始めに戻りましょう。
記憶ほど罪なものはないが、無記憶ほど腹の立つこともない。これまた。