思えば、私が人生の中で一番最初に文章の力を思い知らされたのは、小学生の低学年のときだった。今ではなんでその文章に出会ったのかはわからない。学校がよく出している何かの文集みたいなものだったか、誰が書いたのか定かでもないそれに、確かに当時の私は感動した。例え観客が一人もいなくても、私はそこでバットを振り続けていたい。単なる比喩だ。その人は野球部でもなんでもなかった。拍手などいらない。私は、そんなもののために生きてるんじゃない。今考えてみれば、当時その文章を書いた人も随分背伸びをして書いたんだろうな、とは思う。けれど、彼女の手は震えても、身体が震えるほどになっていたとしても、その目は真っ直ぐに前を向いていた。学校向けの文章だ。小学生高学年ならもうどんな風にそれを書けばいいか知っていてもいい。だけど、そんなのは関係ない。その文章はそこで彼女によって書かれなければいけなかった。そんな気迫を感じる文章だった。
何でもいいと思うんだ。でも、何であれ、本物は「する」ではなくて、「しなければならなかった」という環境で生まれる。その文章を書くのではない、その文章は、書かれなければならない。ソフトウェアを書くのではない、そのソフトウェアが書かれなければならないと自分が思えれば、それはきっと本物になれる可能性がある。それ以外は、全てガラクタに過ぎない。本物を生み出し続けられない私たち一般人にとっては、そのチャンスを逃さないようにすることが重要だ。
切羽詰ってる人は何を楽しみに生きているんだろう。彼ら/彼女らがそうしたいから、あるいはそうしなければならないと思ってる(私はそうだった。別にそれはいいことでも悪いことでもない)からそうしているのであって、可哀想とか損な生き方してるよなあ、とかは思わない。だけど、そこに全く幸せがないなら、それはとても悲しいことだ。彼ら/彼女らにもどこか自分で理解できてる幸せがあることを願わずにはいられない。人に理解されることも、人と仲良くすることも、人が幸せになるための絶対条件ではない。人間はそんなに画一的なものじゃない。1日24時間、一度も自分が幸せだと感じられないならば、そんな人生は哀れだ。
ともあれ、負荷問題をどうにかしないとなあ。幾ら安定化を精力的にしても、リアルタイムで進むゲームでは503が1回出るだけで全部吹っ飛ぶ。根本的な問題をいつも先に解決しなきゃ意味がないよ。
にきにきにきにき
を見て昔ラジオの宣伝で聞いた「にきゴルフ」の名前を思い出した。
じくじくと細かい作業を続けてる。でも、毎日やってるわけでもない。趣味はやりたくない時はやっちゃだめだ。やりたくない時にやらなきゃいけない時は音楽の力を借りろ。そろそろ次のテストプレイまで押してきたので、今日は両耳からブルーハーツの声で「りんだりんだー」が木霊している。リンダリンダ、何年だと思う? 何と1987年、今からちょうど20年前だぜ? ヘイボブ、俺らも年を取るわけさ。それでも彼らは私の中で終わらない歌を歌ってる。
色褪せないものを持とう。たった1年の間にだって何か嫌なことはあるもんさ。嫌なことじゃなくても、何か気分がのらないとか、やらなきゃならないけどやりたくないこととか、どうしても認められないこととか。そんなくそったれな状況で、何とか生きていくための伴侶を持とう。たったワンフレーズ、たったワンセンテンスで今日という日がどんなに変わることだろう。
世の中には3つの方法がある。良いやり方、まずいやり方、そして軍隊方式だ。
というフレーズがあった。村上春樹のエッセーの中でウッディ・アレンが言うには、
世の中にはhorribleなものとmiserableなものしかない(だから私たちは私たちがhorribleであることに感謝しなければならない)
ということらしい。最近思っていることを前2つをふまえて言うと、
全ての物事は「美しいもの」「そうではないもの」「イカレてるもの」に分けられる。
ということになる。
最近、自分の価値判断はこれら3つで考えられていることに気付いた。美しいものはその名前の通り、美しいものだ。美しい手段だ。全ての人に賞賛され、まるっきり正解で、非の打ち所がない。そこに100人がいたら99人は素晴らしいというもの。そうではないものはこれまたそうではないものだ。それは不完全で、どう見ても美しくなく、見た人が目を背け、創造物であれば作った本人も素晴らしいものではないとわかっている。手段であれば、「だってそう言うけどさ……」と思わず言い訳を口にせずにはいられないものだ。
私たちの日々というのは選択の連続だ。その中でこれらの「美しい」と「そうではない」の価値基準は、物事をシンプルに考える上で役に立つ。岐路に立たされた時、他の事は何も考えず自分が「美しい」と思う方法を取ろう。この場合、まあそこにいる100人に認められなくても良い。杖をついた高齢者が乗り物に乗ってきた。空席はない。自分は座っている。どうすべきか? 美しい方を選べば良い。たた単純に。席を譲らないことが美しいと言う人はいない。もちろん、その後に何が起こるかはわからない。私自身の経験だが、「いえ結構です。立っている方がいいので」と断られることだってある。実を言えば、そんな時はかなり気まずい。けれども、選択の時はそんなことは考えず、ただ愚直に「美しい」と思えるほうを選べば良い。時間は有限だ。選択の根拠はシンプルな方が良い。「まあ、そういうけどさ……」。OK、世界はそんな単純ではないかもしれない。例えばくだらない仕事をぴーぴーやってれば美しい手段が取れないこと、美しいものを創れないことだってあるだろう。けれども、手の届く範囲でも美しくあろうとすること、それは決して無駄にはならない。美しくないものをさらに美しくなくすることに時間を費やすよりも、少しでも美しくあろう。
そして最後のひとつ、「イカレてるもの」だが、これはちょっと説明が必要かもしれない。しかしそれを記すにはこの余白は小さすぎる。
ところで、さっきあげた「Unixという考え方」は、私にとって色褪せないもののひとつだ。そりゃ日進月歩のコンピュータの世界の本だから、今ではちょっと首を傾げざるをえない部分があるのは確かだと思う。しかしそんな部分を持ちつつも、この本(と本書に載っているUnix哲学)はいまだに私の心を打ち続けている。素晴らしい書籍だ。そして訳も素晴らしい。私がこうして「だ・である」調で書いている文章の文体は、この訳書の文体をみじん切りにして村上春樹の文体をぶつ切りにしたものを混ぜた上でよく熱したフライパンで炒めただけだ。
pythonとrubyをいったりきたり。pythonで:
を忘れることが多いなあ。
それはともかく、pythonにはrubyの__send__
みたいなのはないんかな。
[alpha@lament]-[11:13 AM]-[~]
::: cat send.rb && echo '-----------------------' && cat getattr.py
class Hello
def do_hello(name)
puts "Hello, #{name}!!"
end
end
method_name = 'hello'
argv = 'Ruby'
hello = Hello.new()
hello.__send__('do_' + method_name, argv)
-----------------------
class Hello(object):
def do_hello(self, name):
print 'Hello, %s!!' % name
method_name = 'hello'
argv = 'Python'
hello = Hello()
method = hello.__getattribute__('do_' + method_name)
method(argv)
[alpha@lament]-[11:13 AM]-[~]
::: ruby send.rb && python getattr.py
Hello, Ruby!!
Hello, Python!!
# list.py
# encoding: utf-8
import sys
import os
import re
files = dict()
for line in sys.stdin:
dirname, filename = os.path.split(line.strip())
if files.has_key(dirname):
files[dirname][0] += 1
else:
files[dirname] = [0, 0]
for key in sorted(files.keys()):
reg = re.compile('^%s' % key, re.IGNORECASE)
for inkey in files.keys():
if reg.match(inkey):
files[key][1] += files[inkey][0]
for dirname in sorted(files.keys()):
print ', '.join([
dirname,
str(files[dirname][0]),
str(files[dirname][1])
])
こういうふうになった。wids.list
はfind ./
で取ってきた。ふつーはパイプで流して問題ない。harukaで1076、 dbsdlog.jpで1432。何か余計なファイルが沢山あるのかと思ってたけど、そうでもないらしい。うーん、重複してるディレクトリ消して整理するくらいでいいか。www.dragonflybsd.org/はtgzにまとめて抹消しよう。
[alpha@colinux]-[07:26 PM]-[~/public_html/m]
::: cat wids.list | python list.py
., 31, 3350
./Report, 2, 2
./antenna, 11, 35
./antenna/conf, 2, 2
./antenna/html, 1, 1
./antenna/lib, 12, 12
./antenna/tmp, 9, 9
./archive, 19, 179
./archive/Ci, 52, 70
./archive/Ci/snapshot, 18, 18
./archive/bluestole, 4, 4
./archive/kagemai-patch, 5, 5
./archive/mplusfonts, 20, 71
./archive/mplusfonts-ttf, 2, 2
./archive/mplusfonts/distfiles, 41, 41
./archive/mplusfonts/old, 8, 8
./archive/pub, 1, 1
./archive/rtds, 7, 7
./archive/test, 2, 2
./balk, 18, 18
./bbs, 10, 10
./bbs/past, 0, 0
./count, 1, 1
./dbsdlog.jp, 7, 1432
./dbsdlog.jp/flavour, 12, 12
./dbsdlog.jp/log, 11, 461
./dbsdlog.jp/log/FYI, 62, 62
./dbsdlog.jp/log/base, 103, 103
./dbsdlog.jp/log/dfports, 33, 33
./dbsdlog.jp/log/docs, 22, 22
./dbsdlog.jp/log/forums, 62, 62
./dbsdlog.jp/log/kernel, 114, 114
./dbsdlog.jp/log/people, 18, 18
./dbsdlog.jp/log/personal, 27, 27
./dbsdlog.jp/log/pkgsrc, 6, 6
./dbsdlog.jp/log/stable, 3, 3
./dbsdlog.jp/plugin, 9, 952
./dbsdlog.jp/plugin/comment, 22, 22
./dbsdlog.jp/plugin/referer, 460, 460
./dbsdlog.jp/plugin/trackback, 461, 461
./haruka, 126, 1076
./haruka/filter, 2, 2
./haruka/html, 6, 6
./haruka/img, 31, 31
./haruka/lib, 4, 8
./haruka/lib/rtds, 4, 4
./haruka/log, 889, 889
./haruka/plug-in, 7, 11
./haruka/plug-in/files, 4, 4
./haruka/styles, 3, 3
./images, 134, 134
./img, 52, 54
./img/.xvpics, 2, 2
./lab, 30, 80
./lab/cidoc, 21, 47
./lab/cidoc/CVS, 3, 5
./lab/cidoc/CVS/CVS, 2, 2
./lab/cidoc/include, 13, 15
./lab/cidoc/include/CVS, 2, 2
./lab/cidoc/pixmap, 4, 6
./lab/cidoc/pixmap/CVS, 2, 2
./lab/rtds, 0, 0
./lab/styles, 3, 3
./lib, 35, 85
./lib/oldtext, 47, 47
./lib/styles, 3, 3
./mix.styles, 7, 7
./pub, 0, 0
./styles, 12, 12
./tmp, 7, 7
./www.dragonflybsd.org, 2, 187
./www.dragonflybsd.org/ja, 9, 185
./www.dragonflybsd.org/ja/CVS, 3, 3
./www.dragonflybsd.org/ja/docs, 7, 130
./www.dragonflybsd.org/ja/docs/BAFUG1_SLIDES, 52, 55
./www.dragonflybsd.org/ja/docs/BAFUG1_SLIDES/CVS, 3, 3
./www.dragonflybsd.org/ja/docs/CVS, 3, 3
./www.dragonflybsd.org/ja/docs/nanosleep, 9, 12
./www.dragonflybsd.org/ja/docs/nanosleep/CVS, 3, 3
./www.dragonflybsd.org/ja/docs/pdfs, 1, 4
./www.dragonflybsd.org/ja/docs/pdfs/CVS, 3, 3
./www.dragonflybsd.org/ja/docs/ucb2003, 46, 49
./www.dragonflybsd.org/ja/docs/ucb2003/CVS, 3, 3
./www.dragonflybsd.org/ja/goals, 8, 11
./www.dragonflybsd.org/ja/goals/CVS, 3, 3
./www.dragonflybsd.org/ja/main, 14, 21
./www.dragonflybsd.org/ja/main/CVS, 3, 3
./www.dragonflybsd.org/ja/main/misc, 1, 4
./www.dragonflybsd.org/ja/main/misc/CVS, 3, 3
./www.dragonflybsd.org/ja/status, 4, 11
./www.dragonflybsd.org/ja/status/CVS, 3, 3
./www.dragonflybsd.org/ja/status/misc, 1, 4
./www.dragonflybsd.org/ja/status/misc/CVS, 3, 3
年末に向けてあらゆるものがスローダウン中。でも、少しずつは色々やってます。Fire and Motion, Fire and Motion。
新しいソフトウェアの仮名がLittleWitch
、lw
で考えてたんだけど、なんだこりゃ。ありふれた名前だったから何かには引っかかると思ったけど、勘弁してくれ。
ところで、今度借りたサーバ(まだ何も入れてない)のload avgが、
[alpha@xxxxxxx]-[01:10 AM]-[~]
::: uptime
1:10AM up 38 days, 13:30, 1 user, load averages: 11.69, 13.95, 14.61
なんですけど。しかも一時的なものじゃない。少なくとも昨日の今日の13:00からべったりと10以上キープ。これは何の冗談だ。
世の中には2種類の人間がいる。目覚まし時計をセットしなければ起きられない人間と、そうではない人間だ。つまり、全ての人間は、
Signal.trap(:BELL) { wakeup() }
SLEEP_TIME = 8 # hours
sleep(SLEEP_TIME)
と、
def count_wakeup_time(argv)
...
end
sleep_time = Time.now() - count_wakeup_time(tomorrow_schedule)
sleep(sleep_time)
で表すことができる。オチはない。
先日のサーバだが、「どうなってるのー」と聞いてみたら「ユーザがバグらせてたみたい。いちお終了させて警告も出しといたけど、10程度じゃ問題ないよ。20超えたらまずいけどね」との返信あり。棚ぼた的にいいこと聞いた。
これを続けていくと、一番最下層にいるのはIntelとかAMDとか?