2004/12/31

と思ったら、都内はもう雨になってるよ。KNのCR-Vが都内まで出てこられれば、というところか。
よりによって雪かあ。最悪は中止か。
厚木、遠すぎ。静岡から東京へ帰ってくるのに、静岡→厚木は50分なのに、厚木→東京は2時間もかかる。ここ数年、12月30日は友人Kの故祖父の家で薪拾いついでに静岡おでんをご馳走になる慣わしになりつつあるんだけど、あの家の小父さん達は強力すぎる。K的には押されまくりでつらいんだろうが、端からはちょっとうらやましいぞ。やはり、強力な血縁はあらゆる意味でもっともリスクが少ない資産かもしれない。

2004/12/29

うけてたちます。

hisashim: [Programming][Fun] コンピュータで解く簡単な問題::
http://www.livejournal.com/users/hisashim/85886.html

任意の自然数nについて、偶数なら2で割り、奇数なら3をかけて1を足して得られる数列に関し、(1)n = 7 のときに1に収束するまでのステップ数を求めよ。(2)n∈[2, 100]のなかでもっとも1までの収束に時間がかかるのは何ステップか求めよ。という問題。
元ネタはhttp://www.t-base.ne.jp/~tj/d/?date=20041214#p03らしい。

#! /usr/local/bin/python

def numeric(n):
count = 0
while n > 1:
if n & 1:
count = count + 2
n = (3 * n + 1) >> 1
else:
count = count + 1
n = n >> 1
return count

print "7 needs", numeric(7), "steps"

i = 0
basej = 0

for j in range(2, 101):
if i < numeric(j):
i = numeric(j)
basej = j
print "most steps in [2,100] is", i, "at n =", basej

実行結果

7 needs 16 steps
most steps in [2,100] is 118 at n = 97


ポイントは、奇数を3倍して1を足すと必ず偶数になることですかね(つまり、偶数の場合は偶奇判定が必須だけど、奇数の場合は次の偶奇判定を省略できる)。

2004/12/28

とにかく素数が早く求めたい(素数ばっかり)。昨日のスクリプトをしれっと実行しても、100001までの素数を求めるのに1時間以上かかる(AMD Duron 700MHz)。で、3倍4倍当たり前を自負している psyco ってどうなのよ、ということで、冒頭に以下の2行を追加。

import psyco
psyco.full()

そして実行。

$ time python2.3 prime.py 100001
100001 th prime is 1299721

real 14m14.473s
user 12m54.770s
sys 0m0.620s

ほんとに4倍だ。うれしいなあ。
大好き素数について同僚のM氏のソリューション。

% X=100; curl --silent http://www.utm.edu/research/primes/lists/small/10000.txt | grep -v "[^0-9 ]" | tr -s " " "\n" | grep -v "^$" | head -n $X | tail -n 1

10001番目の素数が知りたいんですよ!

でも、上記のページが掲載されているテネシー大学Martin校のサイトはおもしろそう。

The Prime Pages (prime number research, records and resources)
http://www.utm.edu/research/primes/

ギネスに掲載されている最大の素数といった下世話な話題から、リーマン予想の簡単なサマリーまで、ぱっとみでは実に分かりやすそうな解説がまとめられている。

2004/12/27

年明けの嵐が怖いので、大好き素数を求めて気を落ち着けるしか。

#!/usr/local/bin/python

def get_prime_list(num):
known_prime = [2]
current_integer = 3
while len(known_prime) < num:
for indy in known_prime:
if current_integer % indy == 0:
current_integer = current_integer + 2
break
else:
known_prime.append(current_integer)
current_integer = current_integer + 2
return known_prime

import sys
integer = int(sys.argv[1])
print integer,"th prime is",get_prime_list(integer)[integer-1]

current_integer = current_integer + 2 の部分がちょっと気が利いているような気がしていたんだけど、実行速度は +1 でもほとんどかわらないんじゃん。

2004/12/25

大掃除。埃の量で得る達成感。ベランダとか広くなった気が。あと、大掃除のおかげで、軽く10年以上のキャリアになるACタップ(いちおうBelden)のコード皮膜が劣化してぼろぼろになっていたことを発見した。残念だけど、一歩間違えたら火事になってもおかしくないので、破棄。
それから、大掃除をきっかけに、Musical Fidelity の Tempest にも引退してもらうことにした。まったく不備はないんだけど、もうしばらく使わないだろうから。日本に入っている数は少ないんだろうなあ。あの値段で、あの大きさで、あれだけ艶っぽく鳴るインテグレーテッドアンプは他に知らない。その代わり、ボリュームとかの部品は国産だったら信じられないような安いのを使ってる。回路の構成上、S/Nも悪い。それでも自分は、全体が60点の製品よりも、平均すると40点だけど、ある部分(しかも、自分がその製品にとって本質だと思う部分)では95点を目指している製品のほうが好き。そういう意味で、この Tempest は、とてもお気に入りの工業製品の一つでした。余談だけど、実はパラビッチーニが設計にかかわっているという噂もあったりする(いまだに真偽はわからない)。そのつもりでJazzの女性ボーカルを聴いたりすると、トランジスタがあったまるにつれて、EAR 864を非力にしたような印象になってこないこともない。このトランジスタが、やけくそに熱い。物理的に。ハセガワのゼロ戦を上に置いていたら、尾翼が熔けたことがある。あと、むちゃくちゃ高い。8個のうち2個がいかれて修理に出したら、1個10000円も取られた。まあ、いろいろ思い出はあるので、すぐに捨てたり売ったりするつもりもない。しばらく休んでいてください。
ところで、絶対に気のせいなんだけど、スピーカーケーブルを拭くと音が良くなる。でも絶対に気のせいなのだ。ケーブルをはずす際に接点の錆が落ちるとか、そういうことはあるかもしれないけど、本気で音がよくなると主張するのは絶対にいやだ。

2004/12/24

なんだかんだいっても、ワインとか買うには絶好の日なわけですよ。RECIOTO DI SOAVE(Le Sponde Classico 2000年)。超完熟状態のGarganega種を、収穫からさらに3ヵ月間寝かせて、それから醸造するとのこと。グラスに注ぐと黄色く、信じられないくらい甘い。ローマ法王ってば、いつもこんなにうまいワイン飲んでるのね。

というわけで、マイファーストPythonは、配列の要素の全組み合わせ(combination)を得るものでした。

#! /usr/bin/python
#
# get combinations set from array.
#
# Keiichirou SHIKANO

def get_combinations(array, n):
if len(array) < n:
print "get_combinations() error: too large combinations for the array"
return -1

kappa = 1
bb = array[ : ]
lena = [[1]]

for i in range(0, len(array) + 1):
lena[0].append(1)

while kappa < n:
aa = []
lena.append([])
for ichiro in range(0, len(array)):
cc = []
del bb[0 : lena[kappa - 1][ichiro]]
lena[kappa].append(len(bb))
for joe in range(0, len(bb)):
if kappa < 2:
cc = [array[ichiro]] + [bb[joe]]
else:
cc = [array[ichiro]] + bb[joe]
aa.append(cc)
bb = aa[ : ]
kappa = kappa + 1
return bb

# test data
b = ["foobar", [0, 1, 2], 3, 0, ["cat", 7]]
s1 = 4

print get_combinations(b, s1)


実行結果

[['foobar', [0, 1, 2], 3, 0], ['foobar', [0, 1, 2], 3, ['cat', 7]], ['foobar', [
0, 1, 2], 0, ['cat', 7]], ['foobar', 3, 0, ['cat', 7]], [[0, 1, 2], 3, 0, ['cat'
, 7]]]


自分で忘れないように簡単にメモしておくと、こいつは、まず2つの要素の組み合わせ((n 2)個)を構成する(n:配列の大きさ)。その組み合わせに対して、もう1つの要素を組み合わせたパターン(((n 2) 2)個)を求める。これの繰り返し。構成的に組み合わせの要素を求めるなら、枝も少ないし、けっこういいアルゴリズムな気がする(どうせすぐに認識の甘さを思い知るので、今はこう思わせておいてください)。
その代わり、メモリはやたらに喰う。あと、どんなに演算が早くても、全部で100個の要素から9個取り出す組み合わせを一覧しようとして結果を標準出力したりした日にゃあ、(100 9) = 1,902,231,808,400パターンになりますから! 黙っちゃうよ(計算あってる?)。

2004/12/23

はまった。

>>> for i in range(0,10):
... print i
...
0
1
2
3
4
5
6
7
8
9

2004/12/21

身内を見るか客を見るか、ということなのだよワトソン。
これはもしかしてデスマーチという状態なのではないか。つまり、前工程の不備から、物理的に不可能なスケジュールでの納品を目指して進んでいる状態。発注側も、受注側も。
理由は分かりきっている。スケジュールというやつは、生産側の都合ではなく、あくまでも経営側の都合で決まるからだ。ただし、これは、「生産側である自分が経営側についてどうこう言っている」ような問題ではない。そうやって生産側と経営側の対立をあおっても仕方ないし、するつもりもない。じゃあ何をあおっているのか。まあ、ご多分に漏れず、そんなのすぐにはわかんないわけさ。
少なくとも言えるのは、

  • 経営側が策定する年度計画は生産側の「作るつもり」に基づいている

  • 年度計画は銀行などの融資や株価にも影響する

そんなわけで、

  • 経営側は、一度決めた年度計画は短期的(一般には四半期)なスパンでは崩せない

  • これは、体力がない自転車操業な企業ほど顕著

  • その一方で、生産側の「作るつもり」はたいていコケる

  • これは、体力がない自転車操業な業界(ソフトウェアとか出版とか広告とか)ほど顕著

(ようするに悪循環じゃん)
よもや、あおっていたのは銀行/金融と生産業との対立か?
ここまで勢いで書いたけど、ここで言っている「生産業」には、拡大再生産を続ければすむような「工場型のもの」は含まれていない。クライアントしだいだろうけど、物理的に生産にかかる時間を割り出しやすい(そのノウハウがある)産業はデスマーチが顕在化しにくいような気がする。っていうか、物理的に無理だと開き直れるのか。

2004/12/20

結論は相手に言わせろ(どうでもいいけど、気を抜くと一言日記になってくる)。

ここ数日思うのは、自分ががんばってもがんばれてもだめで、相手をがんばらせることができるかどうかが重要なんじゃないだろうか。でも何に? 「重要なんじゃないだろうか」などといって状況を分析している風を装うのは朝日の社説記者の仕事じゃろがい。おそらく、仕事(業務)が上手く遂行できるかどうかにとって重要で、仕事が上手く遂行できるのはサラリーマンの健全な精神にとって重要で、健全な精神がないと(スコラ哲学では)生きていないのと同じ。つまり、自分が生きるか死ぬかというレベルで「相手にがんばらせる」ことは重要ということか。でも、この期に及んで健全な精神はもう無理です。
今の仕事は一人でできる部分とそうでない部分があって、自分にとってはそうでない部分ほどうまくいかない。そしてきっと、研究や芸術なら自分ががんばれれば何とかなる。うそです。そんな素朴な精神論は太平洋戦争までのものです。しかし、そういう幻想は確実にあって、人はモラトリアム延長にあこがれるわけだ(自分と人一般を摩り替えない>自分)。
要約すると、自分自身でがんばるよりは他人にがんばらせてポルシェを買えと。でなければヴィッツで我慢しろと。
鬼は疲れるな。

2004/12/19

押せるってことは、押さないようにできるってことだから。

2004/12/18

鴬谷の弥生亭で辛子味噌ラーメンを食べていると、カウンターの奥に座っていたおばちゃんが、「こないだはうちの人が散々絡んでごめんね、ゆるしてね」みたいな調子でマスターに絡み続けていた。土曜日は餃子200円でとても素敵。
MDR-F1、仕事中ずっとかけてたけど、まったく疲れないぞ。画期的だ。
となると、次はヘッドフォンアンプか。E182CCとか5670とか7119とか。石にするという手もある。
視聴中。

こいつを作ってからというもの、小音量でも音やせしないもんだから、すっかりヘッドフォンで音楽を聴くという習慣がなくなってしまった。そりゃあスピーカーの音のほうがあらゆる面で良質だ。それでもヘッドフォンは、集中力とセロトニン分泌量の面でスピーカーを上回る。ただし中耳の犠牲はもれなく付いてくるから、密閉型の安いものは使わないほうがいい。電源の問題さえクリアできれば、きっとNCもいいんだろう(USBのNCヘッドフォンとかあるといいね。あるのかな?)。

今日は会社中が工事中。

音楽がないと生きていけません。本日の仕事のお供にヨドバシカメラ上野店でヘッドフォン(SONY MDR-F1)を購入してきた。このメーカーには功罪あるけれど、ある種の製品に関しては他社が追随できないモノを作ることは認めなければならない。この製品に関しては約5年前(もうそんなになるのね……)から目を付けていたから、なおさらしょうがない(なにが?)。
それにしてもヘッドフォンのハコはあけにくいなあ。
風呂に入らずうす汚い恰好をしていると惨めで、身体を洗うと気分がすっきりするのは、どうしてですか、デカルトさん。

2004/12/17

昨日のつづき。
説明責任を果たさない客商売は、ことごとくだめだと信じている。「一皿は3人前です」とか「全部やるからいじらないでください」と説明するのは、「ガンだけど初期だから1週間入院して手術をすれば治癒する可能性が90%あります」と同しく重要じゃない? 「老舗で味はいいんだから黙って食え」というのは「○○先生の回診です」と同値じゃない? オレがルール、サービス受けたかったらオレプロトコルにしたがって金払え、というのは、たまらなくどこかの旧電電公社と同じにおいがする。
これじゃあ商品にならないんだよ。こっちはスケジュールや会社のために仕事してるわけでも、保身で仕事してるわけでもないんだ。客が金を払ってくれることの意味をわかってるのかと。

2004/12/16

老舗の鍋料理店って、みんなあんな感じなのかなあ。以前入った銀座の河豚屋もそうだったけど、すべて仕切られる。個々の客よりも店の味を大切にしたいと、そういうことかい(どこかの出版社と……)。好きなように食わせてくれ。絶対値でいえばうまかったけど、そもそもグルタミン酸やイノシン酸にグアニル酸をあわせるのはわかってないってことですから。それと、若いと思って適当にあしらうな。いっとくけどとなりで飲んだくれてるオヤジたちよりも味はわかる。以上。
それでも、気のあう人達と飲み食いするのは楽しいよね。結局、時間を買うということなんだろう。

関係ないけど、少し覚悟を決めようかと思った(勤務先のことではありませんから、ちなみに。書いておかないと忘れちゃって覚悟が鈍るから)。

2004/12/14

ところで、先週末からこの週末にかけて、たて続けにDVDを見る機会に恵まれた。Uさんありがとうございます。

まずは、The Whoの"The kids are alright"と、The Band(というより、スコセッシ)の"Last Waltz"。かっこよすぎ。ほかにいえることなし。
それから、ロッキーホラーショー。カジノロワイヤルといい、イギリス人は頭おかしいのとちがうか?とたまに思う。
Flickrにアカウントを作ってみた。http://www.flickr.com/photos/k16
アップロードした写真は、上記のページ上ではFlashに埋め込まれるようだ。しかし、権利をパブリックにしておけば、ざくざく個人のブログロにも直接リンクできる(別な領域に画像の生データも保存されてるっぽい。もちろん、あかのたにんのもOK)。こんな感じ。
tube amp
広告もないし、どういうビジネスモデルなんだろ。


2004/12/13

保守本流を豪語するT氏と議論をしていて、僕も政治/思想的なスタンスを明確にすべきなのかもしれないと思った。しかし、思えば高校生の頃から政治思想は努力して隠蔽するようにしてきたわけで、宗教嫌い、右も左も嫌い、小中学校の教員嫌い、NTTと事務役人嫌い、アサヒスーパードライ嫌い、という傾向だけをまとめるとどうなるのか? リベラル中道ちょっぴり左派というところか。そんなわけで、リベラル中道左派っぽく、一人称の文章に「僕」を使ってみた。気持悪い。いずれにしろ、スタンスを明確にしないと自分が済み心地良い生き方ができない年代なんだろう。そもそもなんで主義主張を封じてきたんだったっけ? 群れたくないからか。
群といえば、代数は肌にあわなかったなあ。小学校のドリルも嫌いだった。自分は、嫌いなものでカテゴライズするほうがわかりやすい。つまり、ネガチブ。

2004/12/12

4年くらい愛用してきたSanyoのデジカメ(DSC-SX560)が、ここ一ヵ月突然おかしくなった。電源をいれても起動しなかったり、起動してもすぐに落ちたりする。買い替えも考えたけど、代わるものがないので、とりあえず分解して原因を調べてみることにした。結局、なんのことはない起動スイッチ付近の断線だったので、半田を付け直すだけで事足りた。しかし、最後の最後にネジ山を1つ潰すという失態。DVDを見ながらドライバーまわしてたのがまずかったね。

2004/12/11

鴬谷で、安全太郎の代わりに交通整理にひとやくかっているサンタ氏とそのしもべ。

最近こういうバルーンがひそかにはやっているのか? そんなことないよねえ。車が主な移動手段の友人KN曰く、本物の安全太郎が赤と白のコスチュームだったのは見たことがあるとのこと。カーネルは毎年着替えてるよなあ。ドナルドは?
所用で東京駅までいったので、気になっていたステーションホテル内のカメリアというバーに寄ってみた。ほの暗いカウンターに座ると、曇った厚いガラス1枚向こう側で山の手線がホームに入って行く。つまり、BGMは新橋のガード下と同じなんだけどね。なにか軽いカクテルをお願いしたところ、エグゼリーナというオリジナルのものを振ってくれた。HYPNOTIC(スペルあってる?)というフランスの新しいウォッカ系のリキュールがベースで、うす青い。きっとこの色がうまいんだろう。グラスに注ぐバーテンダー氏の震える手。

今日の発見。トプカは土曜日は居酒屋にならない。パステルのなめらかプリンは本当になめらかだった。

2004/12/10

御徒町で弟にあった。やつは何をしていたんだ?
epsを拡大縮小したい。そんなの組版ソフト側で処理すればいいじゃんと思うけど、でもちょっと必要だったのさ。こんなんconvertでできればいいのに(もしかして自分が知らないだけで、実はできるのかも)。それでTeXにやらせてみた。

#! /bin/sh
# ./rseps.sh -per 0.5 foobar.eps

PERCENTILE=""
FNAME=""

while [ $# -gt 0 ]; do
case "$1" in
-per) PERCENTILE="$PERCENTILE $2"; shift;;
*) FNAME=$1;;
esac
shift
done

IMAGETEX=${FNAME%eps}tex

echo '\documentclass{article}' >> $IMAGETEX
echo '\usepackage{graphicx}' >> $IMAGETEX
echo '\begin{document}' >> $IMAGETEX
echo '\thispagestyle{empty}' >> $IMAGETEX
echo '%\parindent0cm' >> $IMAGETEX
echo "\resizebox{!}{!}{\includegraphics*[][scale=$PERCENTILE]{../$FNAME}}" >> $IMAGETEX
echo '\end{document}' >> $IMAGETEX

mkdir imagetex
mv $IMAGETEX imagetex/$IMAGETEX
cd imagetex

platex $IMAGETEX > /dev/null 2> /dev/null
dvips -q -E -Z* ${IMAGETEX%tex}dvi -o ${IMAGETEX%tex}eps
/bin/rm -f ${IMAGETEX%tex}log ${IMAGETEX%tex}dvi ${IMAGETEX%tex}aux

しかし、実は実行結果に大きな問題がある。たとえば、dvipsでEPSで吐き出したページを縮小したいというとき(これが本来の使い道だったんだけど)、縮小されたepsにはもとのepsのページ左下が参照点として残ってしまう。お気楽だね。

2004/12/09

今日うまかったワイン。トスカーナのサンタ・クリスティーナ。ミディアム・ボディの赤。

2004/12/08

結婚は生活だけど、結婚「式」ってやつは手続きなんですよ。
そういえば昔から手続きが嫌いだった。書類も嫌い。たとえば印鑑を押すシチュエーションになると、自分がひどく蔑まれている気持ちになる。学生のころに通信技術全般が嫌いだったのも、手続き嫌いの顕現かもしれない。旧電電公社は今でも嫌いだ(もちろんマイクロ波のアンテナはべつ)。亀井派の江頭が「政治というのは手続きなんだよ」と賜っていたのを思い出した。早く、どこか自分からは見えない世界に行ってください。できるだけ早く。

よく考えたら、「手続き」って、コミュニケーションが「衰退(行政・書類・政治)」または「凝縮(通信プロトコル)」した状態に二分されるのか? 後者への展開だから通信プロトコルはおもしろいのかもしれない。

ところで、インターチェンジ1つ分くらいは先に行きたいなあ、と一瞬思ったけど、普通は先に行けば行くほど渋滞だね。

2004/12/07

この時間に帰ってきて何をすればいいというんだ。と、あっさりショコラいちごを頬張りながら思う。

2004/12/06

ゆかちゃんは偉いな。結婚式が「できる」人はみんな偉い。自分が主役になるのは、とても覚悟がいることだと思う。

2004/12/04

久しぶりに小説を読んだ。「フィニイ128のひみつ」。面白い。あとちょっとで理解できそうだけど途端に世界観がゆらぐような微妙な現実感を、小説というメディアでしかできない方法で体験させてくれた。矛盾や疑問がないとか整合性があるとかいったハードSFに期待される特徴は、はっきりいってない。そもそも人間が知覚できるレベルでは、現実の整合性なんて近似しかできない微妙な類のものなわけで、そういう世界をごりごり見せられてもへき易するだけだ。かといって設定が脆弱なわけでも伏線を取り散らかしているわけでもなく、読者自身が「語られていない何か」を議論したくなる程度に節度を維持している(「語られていない何か」は、あらゆるとんがった作品にとって重要な要素だ)。
それで、きっとみんなも好印象だろうと信じていくつかのWebサイトのレビューを覗いてみたのだが、自分と正反対の評価が目立つ。そうか、みんなこういうSFはきらいなのか。っていうか、「ひみつ」をわかりやすく説明してくれないといやですか。そうですか。「語られていない何か」は嫌いですか。
語られていない何かってやつは、体験した人間を語らずにはいさせないものだから、自分も思い付くところだけメモしておこう。
・14くらいまで、主人公が男だと勘違いしていた。読み終えてみると、最初は確かに男だったのかもしれない(7C「そんな娘は最初からいなかったんだ」。あるいは、冒頭の「ゆうじ」)。
・エリア51やマジェスティック12に含まれる数字は意味がある、16進で該当する節にキーになる話が含まれているっぽい。
・主人公そのものが「ひみつ」である可能性(主人公の斑点 =作中小説のタイトル。また、主人公が金のネックレスをしたSPに見覚えがあったのは、本書全体に対して主人公はメタ位置にいるから。作中におけるW&Wと現実の関係が、主人公と本書の関係に比較できそう)。
・幼稚園へ続く道へと踏み出さなかった理由はわからない。

2004/12/03

いつも忘れるshのパターンマッチ。ローカルのメモを貼り付け。覚える必要もない、か。

・${変数#パターン}
最初の部分とパターンがマッチしたら、最も短く一致する部分を取り除いた残りの部分を返す。
・${変数##パターン}
最初の部分とパターンがマッチしたら、最も長く一致する部分を取り除いた残りの部分を返す。
・${変数%パターン}
最後の部分とパターンがマッチしたら、最も短く一致する部分を取り除いた残りの部分を返す。
・${変数%%パターン}
最後の部分とパターンがマッチしたら、最も長く一致する部分を取り除いた残りの部分を返す。
例:

$ for i in `seq 117 123`; do echo $i, ${i#1}, ${i##1}, ${i%1}, ${i%%1}; done

117, 17, 17, 117, 117
118, 18, 18, 118, 118
119, 19, 19, 119, 119
120, 20, 20, 120, 120
121, 21, 21, 12, 12
122, 22, 22, 122, 122
123, 23, 23, 123, 123

2004/12/02

急に思い出したんだけど、神保町櫓のホワイトカレーにはミルク系の材料はつかわれていない。あれはナッツの色だ。カルダモンが主張しているのにうまい(美味い/上手い)カレーは、これ以外に食べたことがない。
やめるのは簡単。惰性で続けるのも簡単。しかし、どちらの態度も、決断は難しい。

2004/12/01

境界条件を甘く見てはいけない。

帰り道、安全太郎がサンタクロースになってた。バルーンのやつ。トナカイもいたよ。