« 2007年04月 | メイン | 2007年06月 »

2007年05月31日

ダーツとか日記

今月に入ってからたまたまダーツを2回やった。 昨日はクリケットというゲームをやった。 ダーツを使うゲームも色々あるのですよ。

「ダーツ投げても的に当たらない~」という状況ではゲームにならないけど、 「よし20のトリプルを狙おう」とか考えるくらいだとととても面白い。 簡単に言うと2人で対戦するゲームで、 たとえば20に僕が3回当てると20が僕の陣地になり、 相手が20に3回当てるまでの間、僕は20に当てると点数が入るようになる。 相手も自分も20に3回以上当てたら、そこはもう得点の入らないマスになる。

ダーツルール10 ~CRICKET(クリケット)~ ダーツだーっ!


= 部屋が片付いてやっと自炊できるようになったけども自炊していません。 お茶は沸かした。 あと今レンジを使っています。ビーフジャーキーをオーブンであぶっています。 脂がさしているのが気にくわないので加熱して落としてしまおうと。 レオパレスのレンジにはオーブン機能がなかったからねー。
= Thinkpadの左ボタンがスカスカするので開けてみたら、 中のゴムのキャップが壊れていた。 滅多に使わない中ボタンと取り替えたら 今まで以上にしっかりした押しごたえ。 買ったときはこうだったのかも。
= ECカレントでWordTankV90を買った。 ヨドバシカメラと3000円くらい差があったので それだったら銀行に振り込みに行くくらいの手間はかけようと。
= ヨドバシカメラで携帯用の魚眼レンズを買った。 ちいさくて粘着質で簡単に貼り付く。 さすがに携帯のレンズ用なのでだいぶ狭くなってしまうけど。
= なんか日記の更新が週に1回くらいになっている件。 毎週木曜日にはブログのことを思い出してみようと思った。 毎週木曜に更新しますって言うとすぐに公約違反になるので言わない。

西尾泰和のブログ @ Cybozu Labs: Javaでリストとかfor文とか。 僕がJavaの解説を書くとJavaをDISっているような雰囲気になってしまうのが悩みどころ。 ちなみにJython本もJavaをDISりまくりですよ。 Fooクラスのメンバクラスのインスタンスを作りたければ「new Foo().new Bar()」って。 new演算子は失敗。せめて「Foo.newInstance().Bar.newInstance()」ならどれだけマシか。 ちなみにPythonなら「Foo().Bar()」


= 知らない女の人からミクシィでマイミク申請が来たよー。 大阪と西船橋というつながりだけだよー。 もちろんスルーで。
= フェローになりたい! って書くと自動的にはてなキーワードにリンクされるそうです。 あれ、されないぞ?
= あー。 ブログー。 「こんなの見つけた」系のリンク紹介を ラボの掲示板にやっているのを、 まぁ、1週間分くらい切り取って持って出てきて 土日に家でブログに書いたらいいのかな。 この記事を貼り付けようとして、冒頭がダーツの話なのを見て「いつ書いたんだよ!」っと。

2007年05月24日

レゴブロック日記

Erlangで何を作ったら面白いかなぁと考えていたのだけど、 ライフゲームとかどうだろう。 一つのセルが一つのプロセス。

ErlangをインストールするときにXML-RPCライブラリも一緒に入れたのだけど、 PythonからRPCするんだったらPy-Interfaceを使うのがいいようだ。


= 今日は錦糸町に棚を作るための材料とブロックスデュオを買いに行ったのだけど、 両方なかった。

レゴブロックを買ってしまった。面白い。 青いコンテナだけ買うと変な形のブロックが多くてダメだ取ろうと思って、 普通の形のブロックばっかりのセットをもう一つ買った。 結果からいうと失敗だった。変な形のブロックが面白い。 回る。

僕が子供の頃にこんなのあったっけ…。

回る部品がもっと欲しい。


= どうでもいいつっこみなのでここで。

「所持していいものなら作ってもいいだろ」 って朴訥すぎる。 例えば、お酒は持っててもOKだし、身分証なしでも簡単に買えるけど、 自分で作ると違法でしょう。 ちなみにちょっと調べてみたところ、 酒類の密造は5年以下の懲役又は50万円以下の罰金(酒税法)、 刑法で同じ懲役の罪を探してみたら業務上過失致死傷罪が懲役・禁固5年以下または罰金100万円。

もう一つ。 「AとBは必ずしも一致しない」という意味で 「AとBは直交する」と言われると猛烈な違和感を感じる。 直交は無相関とイコールであって、 単に「AなしのBが存在しうる」だけでは直交すると言うには不十分。 「AありのB」も「AなしのB」も同程度の数存在するとか、 プログラミングで言うならAありでBを作るのもAなしで作るのも労力に大差ないような状態でないと…。 と思うのだけど、まぁ言葉の定義が人によって異なることなんてよくあることなので、 別に「こっちが正しい!」とか言うつもりはなく、 単に違和感を感じたからそう書いただけ。


= Onion開発日記(2007-05-16)。 腹筋腹筋!

腹筋とは関係ないけど、誰の日記を見て腹筋をはじめたのかを可視化すると面白いかと思った。腹筋しながら。


= 自分のダイエットもそうだけど、カバンのダイエットも必要だな。 少なくともデジカメの充電器を毎日持ち歩く必要はないはずだし。 マシンも最近は安定しているのでねじ回しを持ち歩かなくてもいいはず。
= Thinkpadのハードディスク、やっぱり大きいものに変えておくべきだったか。 もういっぱい。何か捨てないと。 写真を外付けHDDに移したり。
= 声の入っている曲だと考えるのの邪魔になるので、 クラシックのMIDIを探していたら、 懐かしい曲がいっぱい公開されているページを発見。 選曲がとても懐かしい。 音楽の教科書に載っている楽譜を片っ端から打ち込んでいるんじゃないかとw

こきりこ節とか。


= 「いつも忙しい人、なぜか余裕のある人」 読了。 造語しすぎ。「KDDはダメ」って言うから何かと思ったら 「カン、度胸、出たとこ勝負」だって。 「3好」って何かと思ったら「好意、好感、好印象」だって。

それはさておき、レバレッジメモ。 毎日トイレでビジネスジョークの翻訳をしているらしい。 10分で1個訳して、年間で300個だって。 で本も出すし、講演にも使うんだって。 なるほど。

目標は明確に。長期的な目標も持たなければいけない。 お城の全体像を把握した上で煉瓦を積むのと、 目の前だけを見て煉瓦を積むのではモチベーションがだいぶ違う。 目の前だけ見ていてはいがむし。

目標の明確化。SMART:Specific(具体的)、Measurable(測定可能)、Achievable(達成可能)、Realistic(現実的)、Time-related(期限付き)

思っていたよりも、もっともっと明確にしないといけない。 30歳ぐらいにパパになりたいなぁ、ではダメで、 どんな人を妻にしたいのか、どんな家庭を築きたいのか、そういうのまで明確にする。 で、紙に書く。

種を蒔かなければ秋に刈り取ることはできない。 あらかじめ行動することが必要。 同じことが聖書に書いてあったなぁと思ったけど、それは 「少しだけ蒔く者は、少しだけ刈り取り、豊かに蒔く者は、豊かに刈り取る(第二コリント9:6)」 だった。 あらかじめ、というより、量のことだなぁ。


= XML-RPCとリフレクションでググってみて発見。 西尾泰和のブログ: XML-RPC→リフレクション
当初、Jythonでやろうと思っていたことが、Javaだけでもリフレクションを使えばできると気がついたのでJavaだけでやる方針に変更しました。

(中略)

あー、追加した頂点にいろんなパラメータをセットするために、その頂点のメソッドを呼び出すところでつまずきました。そうか、Javaは名前だけでメソッドをゲットできないんですな。シグネチャが違えば同じ名前で複数のメソッドを作れるから。Pythonとはそこがちょっと違う。

(中略)

Jythonを使っていればもっと楽ちんだったのですが…まぁ、そんなに大変でもないからいいや。でもとりあえずXML-RPCで好きな色の丸い頂点を追加することはできるようになりました。

そしてこの判断が誤りだったとわかるのは1年後のことだった…。 リフレクションでもできるけど、リフレクションではメソッドの作成まではできない。 似たような内容のメソッドをまとめて生成するなんてことができない。

>>> class Foo(object):
	def __init__(self):
		params = dict(name = "Taro", age = 25)
		for key in params:
			self.__dict__["get" + key] = (
				lambda key: lambda: params[key])(key)

			
>>> f = Foo()
>>> f.getname()
'Taro'
>>> f.getage()
25
あ、ちなみにこのコードは適当なので、 汎用的に使えるともJythonで使えるとも言わないので注意。
= Firefoxのメモリ食いを小食にする (うむらうす)。 !。
= 木曜日だ。金曜日にブログを更新しようとすると、 ミーティングで何か面白いことが起きた場合に飛んでしまうので、 今日書いて帰ろう。
= 仕事中に作ったけども、仕事ブログに整理して書くほどのネタじゃないのでこっちに書いてみる。 下のようなコードをいちいち書くのが面倒なので…
def isPyFloat(o):
        return isinstance(o, PyFloat)

def isDouble(o):
        return isinstance(o, Double)

def isPyInteger(o):
        return isinstance(o, PyInteger)

def isInteger(o):
        return isinstance(o, Integer) 
こうしてみた↓
class IS:
        def __getattr__(self, name):
                globals()["is" + name] = \
                lambda o: isinstance(o, eval(name))
Is = IS()

Is.Integer
Is.PyDictionary 
でも1ヶ月後に訳がわからなくなっていそうな気がするので 下のようにわりとまっとうな形に書き換えた。
def make_IsFunc(*classes):
        for c in classes:
                globals()["is" + c.getSimpleName()] = \
                lambda o, c=c: isinstance(o, c)
        
make_IsFunc(
        PyInteger, Integer,
        PyDictionary, Map, Hashtable, HashMap
        PyList, List, Vector, ArrayList,
        PyTuple,
        PyFloat, Double,
)

= υは"Oops!"と発音するらしい by Knuth
= c:\cygwin\binにtimeがなかったので「あー、timeが入ってないやー」と思ったのだけど cygwinのシェルからtimeってやったらちゃんと時間が出る timeは実行可能ファイルじゃなくてシェルのコマンドなのかな?

man timeしたらbash builtinだと言われた。

$ time python c:/cur/misc/erlang/tarai.py

real    0m2.547s
user    0m2.499s
sys     0m0.077s
sysとuserを足すとrealを超えるけど…誤差の範囲内??
$ time runghc c:/cur/misc/erlang/tarai.hs
13
8593750000000

real    0m8.891s
user    0m0.031s
sys     0m0.000s
おっと、sysとuserを足しても全然足りないけど、残りはどこへ行ったんだ??
= 日曜日にそうじを手伝ってもらった人になんかおしゃれな感じにされた。

P1070783
P1070783 posted by (C)にしお

いままで色々買った役に立たないものたちが、一堂に会してなんか醸し出している。


= 日曜日はレゴブロックを買った。 青いバケツを買ったのだけど、 僕が小さい時ってこんな部品あったっけ、というような形の部品がたくさん。

レゴブロック1レゴブロック2。 回るよ!回るの!


=
= ベッドの下に棚をつけた。 折りたたみベッドなので普通に下にものを置くと足に蹴られてしまうため、 どうしようかなーと思っていたのだけど、スライドする側に棚をつけてしまえばOK。
= しまった。ラボブログにちょっと技術的なことを書こうかと思ったのに、 もうすぐ10時だ。
= クリックブリックって言うレゴブロックの専門店に行ってみたのだけど、 600円くらいのクリエイター3in1ってのがかなりよかった。 少ないブロックの個数でサルとかヘリコプターとかいろいろな形になるために、 「普通の形」のブロックがほとんどない。180度を8分割した任意の位置で固定できるヒンジが4つに 無段階のヒンジがたくさん。

レゴブロックの通販で回転する部品ばっかりたくさん買ってしまった。

2007年05月19日

「すごい会議」日記

「すごい会議」読了。 書いてから発表することで、人の意見に惑わされずに自分で考えるようになる。 ブレインストーミングも、思いついたことを口から放つだけでは 「声の大きい人」「思いついたことがすぐに言葉になる人」のアイデアにバイアスする。 全員に均等に発言機会を与えるためには 「全員に発言させる」じゃなくて「全員に書かせる」でなければいけない。

あと「くだらないアイデアをあと2つ追加してください」はなかなか面白いアイデア。


= 出社時にすでに肩がこって頭が痛いのって…。

NDSでのディクテーション、電車の中じゃ音が全然聞こえないから アクティブ消音付きのヘッドホンを買おうかとか思っていたけども、 耳を手で強くふさげば聞き取れることがわかったので買わない。 ローテクな解決だ。


= 最近昼ご飯はお弁当+サラダなんだけど、 今日買ってきたサラダはオクラと山芋となめこのサラダ。ぬるぬるだー。
= おびなたのはてな日記 - 剰余を使わずにFizzBuzz。 これで↓。
>>> x = 0
>>> for i in range(100):
	x = x >> 2 or 810092048
	print "Fizz"*(x&1)+"Buzz"*(x/2&1) or i + 1
以下マジックナンバーの導出方法。
>>> v = [int(x%3==0) + 2 * int(x%5==0) for x in range(1,16)]
>>> v
[0, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 0, 0, 3]
>>> v.reverse()
>>> v
[3, 0, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 0, 0]
>>> reduce(lambda x,y: x*4+y, v)
810092048
>>> [810092048 >> (2 * n) & 3 for n in range(15)]
[0, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 0, 0, 3]
しまった、こんなことしている暇なかったんだ。今日は出かけるので。
= L25レバレッジメモ。

相手が誰であろうと何(What)をなぜ(Why)頼むのかを明確にする必要がある。 「できるだけ協力してくれ」や「よろしくお願いします」はダメ。

「胸がキュンとする」の「キュン」は韓国語では「チョロン」。 欧米の言語は動詞を細分化する傾向がある、たとえば「とぼとぼ歩く」は「trunge」、 「ぶらぶら歩く」は「stroll」。日本語や韓国語は動詞を擬態語で修飾する傾向がある。 by田守育啓兵庫県立大学教授

最近では肛門科の受診者は男女同数by岩垂純一診療所所長

25~34歳のR25/L25読者男女5975名に携帯でアンケートをした結果: 「分かれた後は吹っ切れるタイプ」男NO62.1%、女YES56.8%。 コメントの「オンナの方が自分の賞味期限に敏感(中略)オトコはノンキだし甘い」 が興味深い。

もう一つ興味深げな統計が出ているのだけど「複数回答 上位3つを選択」というのが 一体何を意味しているのかさっぱり理解できないのでスルー。

水天宮前の駅を降りてちょっといったところにある ボヌールって店で酸素カプセル+アロマセラピー60分で5250円だってー。 と書くだけで行かないんだけど。 ボヌール~高気圧酸素カプセルとアロマでアンチエイジングを~ぎょっ。アンチエイジング?高圧酸素でアンチエイジング? 世間一般の常識としては酸素=アンチエイジングなの? 酸素を増やして魚を養殖すると成長速度が増えるし、 酸素の薄い高地では老化が遅くなるという話を聞いたことがあるし、 なにより酸素によって組織が傷つけられることが老化の要因のかなり大きい部分を占めていると思うのだが。


=
>>> x = 0
>>> for i in range(100):
	x = x >> 2 or 810092048
	print "Fizz"*(x&1)+"Buzz"*(x/2&1) or i + 1
> なんのことだかさっぱり分からないので いろいろ試してたら なんとなく分かった気がしなくもないが とにかくすごい
自然数トリック(逃走航路@hatena - FizzBuzz問題)に比べると全然すごくないと思うので、いちおう動機と原理を解説。

まず、リンク先(おびなたのはてな日記 - 剰余を使わずにFizzBuzz)の下のコードを見て「なんか野暮ったい」と感じる。(動機)

const char* fb[] = {
    NULL, NULL, fizz,
    NULL, buzz, fizz,
    NULL, NULL, fizz,
    buzz, NULL, fizz,
    NULL, NULL, fibuzz,
};
「4種類の値が入るんだから、2ビットあれば十分」 「2ビットが15個だから30ビット…あ、整数1個で足りるじゃん」(原理)、 「1番下のビットに『3で割り切れるかどうか』、 2番目のビットに『5で割り切れるかどうか』を入れる」 「1ビット目と2ビット目は&1と/2&1でそれぞれ0/1で取り出せる」 「>>2で2ビットずらす(/4でもいいよ)」 「or 810092048で『0になったら810092048に戻す』」 「『0になったら戻す』を先に持ってくることで、xを0ではじめられる」 「文字列に0/1を掛けることで空文字列or元の文字列にするテクニックは他の回答から拝借」 「or xで前半が空文字列の時にxを表示するテクニックも拝借」
= 慢性的な肩こりと頭痛の対策として枕を購入しました(っていうか今まで枕なしで寝てたのかよ!)
= 最近ブログの更新頻度が落ちている理由を考察。
  • 今まで作業しながらぶつぶつブログにつぶやいていたことを、会社のサイボウズOfficeの掲示板に「西尾のひとりごと」スレを作って書いているから
    • Blog書きは少なくとも僕にとっては排泄行為なので、場所がどこであれ出してしまえばそれで満足。
  • 平日は会社で仕事をしているし、休日は「Non-PC活動」に重点を置いて活動しているから。
  • ラボのメンバーの開発速度が速くて、どんどん追い越されてしまうから。
    • PythonのFizzBuzzはもう縮められないと思ってBrainf*ckで1位になるために「数値を効率よく積むアルゴリズム」を開発していたら先に1位になられてしまった→Mi manca qualche giovedi`? - brainf*ckでFizzBuzz
    • 金曜日はミーティングが終わった後1週間を振り返ってBlogに何か書こうと思っていたのにActionScriptでFizzBuzzやってしまい、しかも全然勝ててないので公開する気がなくなった。
  • せっかく作ったパズルに反響が全くなくて凹んでいるw
  • っていうかBlog書いている暇があったらJython本の原稿を進めろ自分!

Blogのネタにできそうなことはいくつかあるんだけどねぇ。 JettyのサーブレットにJythonを埋め込んで、 JyConsoleで対話的コンソールを出して、 クラスを書き換えたりJettyを再起動したりせずに挙動を変更とか。 Jettyをmainから起動する方法について、日本語のブログが2つほどあったけども、 結局参考になったのはJetty本体のコードだったのでそれも書いておいた方がよさげ。 ActionScriptをいじってみて、いろいろと予想しなかった挙動を発見したのでそれについて書くのもアリ。 勉強してPythonで短いサンプルを実装したアルゴリズムについて解説してもいいし…。

毎週金曜日の進捗ミーティングの後にBlogを更新しようかと計画したけど、 初日からFizzBuzzにはまってやり損ねてしまったからなぁ。 とりあえず木曜日の夜に書くことにしようかな。 そうすると進捗報告もしやすくなるし。

Non-PC活動に関しては、先週も今週も台湾からの留学生と一緒にいろいろなところにいったり。 台湾人とのコミュニケーションは面白い。

まず漢字という表意文字を共有している。 日本語の漢字は台湾が使っている繁体字を独自に省略したものなので微妙に違うけど、 旧字体の知識とかをフル動員すればなんとかなる。 中国語の方は日本とは違う強烈な略し方をした簡体字なので いくつかすごいことになっているけど、まぁ、大した個数ではないので覚える。 今日覚えた例としては日本語の「従」は 繁体字では「從」で簡体字では「从」。 筆談で「桃太郎電鐵」とか「両津勘吉」とかそういうコミュニケーションが取れる(この例は異なる台湾人が実際に書いたもの)

次に、 英語がネイティブな人は少ないので アメリカ人とかと話すのと比べて、精神的な上下関係が生まれない。 「下手な英語でごめんなさい」という状態にならない。 コミュニケーションには英語を使っていても、 おたがい日本語と中国語という別の言語をネイティブとしているので 「歩み寄り」になっている。

それから、僕が中国語を学ぼうとしていて、 彼らも日本語を学ぼうとしているので、 これもいい関係。

後は僕が中国か台湾に旅行に行けば完璧だよね!(何)

とりあえず中国語力がまだまだ足りない。 教科書どうしたかなぁ。引っ越しの時に捨てちゃったかなぁ。 中国語検定の本がCD付きであったはずだけど…。

Jython本は頑張ります。 っていうかJython in JettyはブログじゃなくてJython本に書こう…。

2007年05月15日

パズル回答+日記

まず新作クイズを 読んでいない人はそちらを先にどうぞ。
= スポイラー代わりに別の話題。

9時に帰ってくると錦糸町のお店とかもしまっていてうれしくない。 1~2時間早く出て早めに帰ろう。

5月上旬まではテンションが高くて無駄に残業したり休日出勤したりしてしまったけど、 やっぱり体が辛いので今後は適度に働くようにしようと思う。 残業したって生産性がそんなに上がるわけでもないし。

めざせ早寝早起き。

部屋の片付け。浄水器のカートリッジとNintendoDSのACアダプタが見つかりません。 ALCの出した新しい英語ゲームが届いたのにプレイができません。自炊もできません。

bak_a_monoの日記

GRINEditの西尾氏がサイボウズ・ラボに就職したらしい。 (中略) こんな話もBlogでわかってしまうって、すげー時代だと改めて思う。 (中略) で就職したらGRINEditのメンテどうなるんだろう。
ブログで何かに言及すると、コメントやトラックバックをしなくても 自動的に関係者の知るところとなる、こわーい時代です。

種明かしをすると、 GRINEditをGoogleアラートに登録してあるので、 GRINEditに言及すると2~3日で僕に通報が来るのです。

で、GRINEditのメンテですが、 一応サイボウズラボとしてはGRINEditをオープンソースで公開し続けるのはアリとのこと。 しかも業務時間を使ってもいいと、なんと太っ腹な会社なんでしょう。

ただサイボウズラボは「9のものを10にするのではなく、0のものを1にする会社」であり、 僕自身もその考えに共感しているので、いわゆる「メンテ」的なことは後回しになりがちです。 いっぱい新しいアイデアを実験中なので…。


= さて、クイズの回答です。
→←|→→←←(顔の向き)
E F  C A B D (名前)
4 5  2 0 1 3 (ターン順序)
白白 赤赤白赤(帽子の色)

名前とターン順序が別々なのはわかりにくいと思ったので 名前を付け替えました。

順に追ってみましょう。まず ターン0, 1でAとBがパスをしますが、 2人の帽子しか見ることのできないこの二人がパスをするのは当たり前なのでスルー。

ターン2でCがA,B,Dの帽子を見て、赤白赤なので何もわからずパスをします。 このことによって他の参加者は、 A,B,Dが赤赤赤や白白白ではないことを知ることができます。

次にDがC,A,Bの帽子を見て、赤赤白なのでやはり何も言えずパスをします。 答えを言えなかったことから、 このC,A,Bが赤赤赤や白白白ではないことがわかります。

そして、ここからが重要なことですが、このパスから 「AとBが違う色だ」と言うこともわかります。 なぜなら、もし仮にAとBが同じ色(赤)なら、 Dは「もし自分が赤なら、Cから見て赤赤赤になるから Cは『自分は白だ』と答えたはずだ。 そうでないということは自分は白だ」 と結論できるからです。AとBが白白の場合も赤白逆転するだけで同じです。 というわけで、Dがパスをした時点で、参加者全員が「AとBは違う色である」 ということを知っています。これがこのクイズの鍵でしょう。

E,Fはパスをして、2周目、 Aのターンがまたやってきます。 Bの帽子が白なので、Aは「自分は赤だ」と答えます。 よってクイズの答えは「勝者はA」となります。(名前を付け替える前のならD)

最初うっかり白白赤白赤赤を出題していたのですが、 これでは「AとBが違う色だとわかる」という点に気づかなくても Aには赤赤と見えるので「もし赤赤赤ならとっくにゲームが終わっているはずだからAは白」 と解けてしまいます。 ゲームが終わるタイミングも正解も同じですけど、 パズルとしての難易度がだいぶやさしくなってしまっていました。


= なんでWordはこんなに酷いんだ。 表組みの中でShift+↓で行を選択していて、最後の行を選択するといきなりセル全体の選択に変わる。 あわててShift+↑を押すと上のセルが選ばれる。正解はShift+←。

中黒で始まる行で改行して勝手に箇条書きモードになってしまった場合はCtrl+Zで戻せる。


= 今日は7時過ぎに会社を出て錦糸町で買い物。 8時ぐらいについて9時に店が閉まるまでに、えらいあちこち廻った。 全部うまく行った。 最初にダイソーで棚用の網を買ったのは重量を考えると失敗だったけど。

マツモトキヨシで洗眼薬を買い、 ヨドバシカメラにNDS用のACアダプタを買いに行って、 USBで充電するケーブルを買い、 浄水器のコーナーでカートリッジを買った。 電気を使わない浄水器でもヨドバシカメラで買えるんだなぁ。 あと無印良品に行ってカードいれと写真の24枚はいるやつを買ってきた。 カード入れは、財布を買い換えたらあんまりカードが入らなくなってしまったので。 写真入れは撮った写真を人に見せるためにはやっぱり物理的な形があった方がいいなということ。


= アルクの10分間英語マスター。 いい点。難易度が高い。 悪い点。勉強スケジュールとか一日の目標とかを入力させるくせに、 日ごとの達成度は見られない。 「~日遅れています」と表示するだけ。 ユニット別の学習進度がかなり深いところへ行かないと見られない。 聞き取り問題が、自分で1ユニット分終わったことに気がついてやめないと止まらない。 効果音が消せない。効果音と英語の発音のボリュームを独立に調節できないので、 効果音がうるさくても小さくできない。 上下ボタンによるスクロールがPCなどのスクロールと逆方向 (下ボタンを押すと表示されているものが下に下がり上から新しいものが出てくる)。 書き取りで伏せ字になっている部分が、プロポーショナルフォントなので iとlだけ細くてバレバレ。 ミニゲーム3つもいらないからもうちょっとユーザのことを考えて欲しかった。

2007年05月13日

新作クイズ

IT戦記 - 僕もクイズをみて僕もクイズを作ってみました。amachangさんにプレゼント。
ここに6人の奴隷がいる。
王様の気まぐれで下のようなゲームをする。

・奴隷は赤か白の帽子をかぶっている
・赤の帽子が3つ、白の帽子が3つある
・奴隷には順番にターンが回ってくる。
・奴隷は自分のターンに「赤」「白」「パス」のいずれかの言葉を発することができる
・「赤」または「白」と発言して、自分の帽子の色と一致したら賞金1万円。ゲームはそこで終了。
・帽子の色と一致しなかった場合は死刑。ゲームはそこで終了。
・奴隷は理性的である。つまり、たかだか1万円のために命を賭けたバクチはしないので、確実に正解できないならパスをする。
・奴隷は下のように配置されている。
・奴隷の顔は固定されており、自分の顔の方向にいる奴隷の帽子の色しか見えない。
・自分の帽子の色は見えない。
・奴隷BとCの間には壁があり、壁の向こう側を見ることはできない。
・簡単な例

→←|→→←←(顔の向き)
A B  C D E F (名前)
4 5  2 0 1 3 (ターン順序)
白白 白赤赤赤(帽子の色)

この場合、
ターン0 DがEとFの帽子の色を見て「パス」と言う。
ターン1 EがDとCの帽子の色を見て「パス」と言う。
ターン2 CがD,E,Fの帽子の色を見て、
 3人とも赤なので「赤の帽子は3つしかないから自分は白」と判断し
 「白」と言う。正解。ゲーム終了。

・全員が回答した場合は、また0番目の人から回答する。


問い:奴隷たちの帽子の色は下のようになっている。正解するのは誰か。

→←|→→←←(顔の向き)
A B  C D E F (名前)
4 5  2 0 1 3 (ターン順序)
白白 赤赤白赤(帽子の色)
白白 赤白赤赤(帽子の色) (すいません、転記ミスですごく簡単な問題になってました)
作り方のコツを理解したので反響によってはもっと難しいものを発表するかもしれません。 奴隷を円周上に配置したり正方形に配置したり三角形に配置したり。 壁の存在はようするに「自分以外の全員が見える人」を作らないため(すぐ解けてしまうから)で、 ぶっちゃけ小部屋の中の人はゲームに参加できていません。 そこで「1直線に並べるから自分以外の全員が見える人が出てしまうんだ」ということで2次元に並べてみたのですけど、プログラマの性でついつい対称なきれいな形に並べてしまうので面白い問題になりません…。もっと面白い形に並べるか、それとも「赤い帽子は1~3個あります」と不確定要素を入れるか…。帽子の色を増やしてしまうのも面白いかも知れませんね。 後は問題設定を変えて、プレイヤーを王様の視点じゃなくて奴隷の視点にするとか?

パズル作成日記

CMS調査 ― 内閣総理大臣 安倍晋三(しんぞう) β版公式サイト

政治家が使うおすすめCMSは?
Zope+Plone 		31.72% 	(537 票)
Xoops 		33.31% 	(564 票)
MovableType 		16.01% 	(271 票)
Etomite 		2.89% 	(49 票)
Jetspeed 		5.43% 	(92 票)
その他 		10.63% 	(180 票)

その他を自由記入式にしておけば色々情報が集まるのにね。 Ruby on RailsがないのはきっとCMSじゃないからだよ。


= ACバッジ欲しい。 情報セキュリティ EXPO & 組込みシステム開発技術展 出展情報 - AC バッジ 500 個配布。 バッジを取るためにわざわざ出かけて行く気はあんまりない。
= IT戦記 - 僕もクイズ。 僕がその問題を出されたら開始するなり「赤!白!」と叫ぶけどね。 どっちか片方しか叫ぶなとは書いていないから。

仮に「片方しか叫ぶな」と書いてあったとしても、 間違えた場合の罰則がないのならダメモトでどちらかを叫ぶよな。

「勝者は先着順一名」という場合には全員が最初にバクチで叫ぶだろう。 三人の真ん中の人だけ「白い帽子が見える→自分が赤である確率は2/3」と均等でないので 確率の高い方に賭けて「赤」と叫ぶだろう。

とか書いていて、この前読んだ本に 「人間は完璧ではないので、他人のミスを見つけて指摘することはたやすい。 しかしそれはクリエイティブではない。自分ならどうするかを考えるべき。」 という感じのことを書いてあったのを思いだした。

そこで自分ならどうするかを書きつつ新しいパズルを考えてみることにする。 まず「バクチで叫ぶ」という面白くない結論を避けるために、 「不正解は死刑(コスト無限大)」「正解者に賞金1万円(有限かつ不正解のコストと比べてはるかに小さい)」 「登場人物は極めて理性的である(無意味にコストの高い行動は取らない)」 の3つを導入。 「同時に回答する」という扱いにくい現象が起きないように「回答はターン制」

さて…。


= 今日は留学生と一緒に電通大の近くのお寺に行ってきました。 名前忘れた(ぉ)

ああ、深大寺だ。

深沙大王を略して深大寺。

英語も中国語もまだまだ弱い。


= 今日は遅れそうになったので自転車で駅まで飛ばし、 駅前に止めて出かけた。土日は駅前にたくさん自転車が止まっているのを知っていたので。

帰ってきたら、やはり自転車はたくさんあったけども、 僕の自転車はなくなっていた。 盗まれたのか警察に持って行かれたのか。


= むう、さっさとお風呂に入りたかったのに、パズル作ってからにしたくなってパズル作ってしまった。

西尾泰和のブログ: 新作クイズ

どうしよう、すごくおなかすいた。


= 犬・猫写真で癒されよう - Cute or Notには 「犬/猫じゃない」ボタンをつけるといいと思う。
= unnonouno。 2GB(とかもっと多くて明らかにメモリに載らないサイズ)のデータを ソートするときはどうするのが正解かなぁ。 例えば10GBのバイナリファイルがあって、それが実はdoubleの固まりとか。

それだけの大きなデータをマネジメントするならRDBMSにつっこめ、ってのが 常道なんだろうか?

個人的には、メモリに載るサイズに刻んでクイックソートをかけた後、 ハードディスクを3つ使ってマージソートのマージ部分だけやる、 なんてのがいいんじゃないかと妄想。

ハードディスク1つしかないので試せません。 言うだけ。


= 僕の母国語は
if(foo == bar)
{
    baz()
}
ではなく、
(define (facto n)
    (if (> n 0)
        (* n (facto (- n 1)))
        1))
でもなく、
If foo Then
    bar()
Else
    baz()
End If
なので、どういうインデントを美しいと思うかについても
●●●
(
    ■■■
)
(●●●
    (■■■))
ではなく
●●●(
    ■■■
)
を好むようだ。

と下のコードを書いてて思った。

foo = [
    [x == 'o' for x in line]
    for line in [
        concat(
            line for line in toLine(mat)
        ) for mat in mats
    ] + [
        concat(
            concat(reversed(line))
            for line in reversed(toLine(mat))
        ) for mat in reversed(mats)
    ]
]

= 日曜日。 お片付け。 洗濯。 棚作り。

■デジアナ逆十字固め…[27]魚眼は楽しかった/上原ゼンジ : 日刊デジタルクリエイターズ。 デジカメに両面テープでドアスコープを貼り付けて魚眼レンズ。 やってみよう。


= うえむん

とりあえず

return Math.round((Math.pow(k,x) - Math.pow(-k,x))/root5);
return Math.round((Math.pow(k,x) - Math.pow(1-k,x))/root5);
の間違い。

Pythonの浮動小数点数の精度もdoubleなので試してみた。 71番目のフィボナッチ数列で浮動小数点数の精度の限界を超えるようだ。 その値は308061521170129。

1 1 1.0
2 1 1.0
3 2 2.0
4 3 3.0
5 5 5.0
6 8 8.0
(中略)
70 190392490709135 190392490709135.0
71 308061521170129 308061521170130.0

= 明日散髪しよう。

「来週は○○するつもりだったけど、□□をしよう!」 と思ったはずだったのに、□□がなんだったのか忘れた。

○○はAspectJなんだけどね。 GRINEditにネットワーク同期機能を入れたんだけど、 同期用のコードが散らばって汚いのでアスペクト指向できれいにしようと。

あ、ちなみにErlang熱はかなり冷めています。 文法が汚そうなので。


= キヤノン:wordtank V90(電子辞書:中国語対応)。 「英語の辞典なんて英辞郎があれば十分」とか言っていたけども、 使っているところを見て、ちょっと借りていじってみて、これはいいと思った。 まず中国語の日中・中日ができる。そして英英がある(Oxford Advanced Learner's Dictionary)。
= やば、 部屋片付けなきゃ寝る場所ない。

虫が入ってきた。 出て行かない。 一泊だけ泊めてあげることにした。


= やっと寝る場所ができた。
= 虫さんは朝起きたら夜いた場所からいなくなっていたので、 住み着かれたら嫌だなぁと思ったのですが、 窓に貼り付いて「早く出せー」と言っていたので 出て行ってもらいました。
= 知らなかったけど職場から渋谷まで8分だった。近い。 東大駒場前までで17分。

2007年05月10日

気分のよくなった日記

なんか疲れが抜けていない。
= FizzBuzz、気づいたときにはもう手の出しようがないところまでいっているし…。
= 今日の前半は ちゃんとkeep-aliveになっているか調べてみようと思って、 JettyにPythonのxmlrpclibを使ってがんがんリクエストを投げつけて、 netstat -n | wcで消費ソケットが増えていかないことを確認しようとして、 予想に反して増えていくから大弱り。

Jettyでkeep-aliveを有効にする方法を探し回って全然見つからず、 憂鬱な気持ちのまま別件で外出。

帰りの電車の中で 「Pythonのxmlrpclibがkeep-aliveに対応していなければ、Jettyが対応していてもダメ」 ということに気がついて、 JavaからApacheのXmlRpcClientLiteを使って同じことを試すが、 やっぱりソケットがどんどん消費されていく。

この方法ではやっぱり「Jettyが悪いのかXmlRpcClientLiteが悪いのかわからない」 ということに気がついて、どうすればいいか考える。

Etherealというパケットキャプチャソフトを入れる。 なぜか一つのマシンの中でパケットを送ってもキャプチャしてくれないので、 ノートパソコンに入っていたGRINEditに向かってパケットを投げる。

風の噂に聞いていた3ウェイハンドシェイクなるものが実際に見られて面白かった。

Pythonのxmlrpclibが投げるリクエストのヘッダにはConnection: Keep-Aliveが付いていない。 XmlRpcClientLiteからだとConnection: Keep-Aliveが付いている。

やっぱりJettyに向かってクエリを投げたいので、 クエリを投げるプログラムだけノートパソコンに移してそこから投げる。 投げたリクエストはHTTP/1.0でConnection: Keep-Alive。 返事はHTTP/1.1でConnection: keep-alive。 なのにやっぱりソケットはどんどん消費されていく。

ぎょぎょっ、開いて、閉じずに、また新しいのを作ってる!

packet.png

というわけでJettyは何も悪くない。 最初からkeep-aliveになっているので、keep-aliveにする方法を探しても見つからないのは当たり前。 悪いのは一度開いたソケットを再利用しないXmlRpcClientLite。

ソースコードを追ってみたら、 XmlRpcClientLiteが使っている LiteXmlRpcTransportに 「socketがnullでなければ再利用」 と書かれているけども、 そのXmlRpcTransportを毎回作成している(当然socketはnull)ように見える。 executeのたびにcreateTransportを呼んで、

    public Object execute(XmlRpcClientRequest request)
            throws XmlRpcException, IOException
    {
        return execute(request, createTransport());
    }
createTransportの中では無条件に新しいインスタンスを…
    protected XmlRpcTransport createTransport()
    {
        return new LiteXmlRpcTransport(url);
    }

必要なコードだけ自分のパッケージにコピペして書き換えてみたら、 ソケットを食いつぶさなくなった。 そしてパフォーマンスも体感できるほど速くなった。 めでたしめでたし。

本日の教訓: 正確に観察しよう。

もう九時半だ。 でも気分がいい。


= あ、ダメだ。 テンションは高くなったけど、 体が…。

今週はラボで体調を崩す人が続出。 気をつけないと。

2007年05月09日

サーブレットのお勉強日記

サーブレットのお勉強。 とりあえずJetty6をダウンロード。

よくわかんないけどたぶんHttpServletを継承して作ったクラスを、 どっかにおいて、設定ファイルを書けばいいんだろうなぁ。


= HttpServletがない。 J2EEを入れないといけないのか。

違ったみたい。 Jettyのlibの中にあるservlet-api-....jarにjavax.servletが入っていた。

サンプルのHelloWorldサーブレットのコードを貼り付けたらコンパイル通った。 出力メッセージを少し書き換えて、 できたクラスファイルをサンプルのHelloWorld.classに上書きして、 Jettyを再起動したら… OK、書き換わった。めでたしめでたし。


= XML-RPCを積んだ。コンパイルは通ったが実行時にエラー。 実行時のクラスパスに追加する必要があるんだな。
= STBBS.NET blog: Jettyを使ってWebアプリケーションをスタンドアロン動作可能にする

なるほど、Jettyは起動が高速だからこういう使い方でも苦にならないわけだな。


= 設定ファイルのどこに「このサーブレットはxmlrpc2.0.jarを使う」と書けばいいのか さんざん調べたあげく、設定ファイルに書かずにlibフォルダに入れればいいだけだと、 Tomcatでサーブレットの説明をしているページで知った…。 時間を無駄にした…。 まぁ、XML-RPCのクエリを受け取るサーブレットは動いた。 Pythonからクエリを投げてきちんと結果が得られたし、 その後でブラウザから別のクエリを投げて、 サーブレット内で保持しておいた値をちゃんと見られることを確認した。

4時。 今日は書類書きのために5時にお台場のラボに行くので、 続きは明日。


= 出かける前にささださんからSkype。 この前の「Rubyの文字列はミュータブルだけど、 配列のキーに入れるときにイミュータブルなものに変換するのかな?」 「Rubyにはタプルに相当するものはあるのかな?」 という疑問に関して。NOだそうな。

Rubyではミュータブルな文字列やアレイがそのままハッシュのキーにできる。 で、文字列やアレイの場合、 ハッシュ値の計算の際にオブジェクトのIDを使うのではなくて、 中身の値を使うらしい。 ちょうど西尾泰和のブログ: immutableクイズの3番目に相当する。

>>> class Foo(list):
	def __hash__(self):
		return sum(self)
もちろん本当はsumなんかじゃなくてもうちょっとまともなハッシュ関数なんだけど、 「中身の関数」という点では同じね。

だから見かけが同じオブジェクトはIDが違っていても同じと見なされる。

>>> h = {}
>>> a = Foo()
>>> a
[]
>>> b = Foo()
>>> b
[]
>>> h[a] = 1
>>> h[b] = 2
>>> h
{[]: 2}
そして「入れたときに違っていたら、その後破壊しても違うまま」
>>> c = Foo([1])
>>> c
[1]
>>> d = Foo([2])
>>> d
[2]
>>> h[c] = 3
>>> h[d] = 4
>>> h
{[]: 2, [1]: 3, [2]: 4}
>>> c.remove(1)
>>> d.remove(2)
>>> h
{[]: 2, []: 3, []: 4}
もちろん、この3と4は取り出すことのできない値になってしまう。
>>> h[d]
2
immutableクイズの時は 「キーを変更されるとこんなことが起こってしまうので、 変更のできないリストを作らなきゃね→それがタプル」 という結論だったのだけどRubyは 「キーを変更されるとこんなことが起こってしまうね →だからしないでね。っていうかメリットないし誰もしないよね」 という方針なのだなぁ。

そしてタプルなんか作らなくてもそれでよかったような気もするなぁ。 Rubyの人たちはイミュータブルなアレイがなくてもちっとも困ってないみたいだし。

あ、でも代わりにRubyの人たちには ミュータブルな文字列と、イミュータブルなシンボルがあるのかw Pythonはもとから文字列がイミュータブルなので Rubyのシンボルに相当するのだ。


= NAISTの松浦君(お台場ラボに松浦さんがいて、サイボウズ本社にも松浦さんがいるのだ、松浦率高い!) からライブドアリーダーのキャプチャ画像をもらいました。

lr_top.gif

たぶん 秋元@サイボウズラボ・プログラマー・ブログ: サイボウズ・ラボにまたまた新しい仲間が増えた を見てフィードを登録した人がたくさんいたということでしょう。 ありがとうございました。 なるべく有益な情報を頻繁に出すように努力します。

会社ブログと言えば、 最近メモが出てきて思い出したのだけど、僕は 一つ目のエントリーで 「Pで始まる言語はあまり詳しくないのでこれから勉強していきたいと思います」 と書いておいて、 二つめのエントリーで 「Pで始まる言語を勉強してみました!Pietで"Just Another Piet Hacker,"と表示します!」 とやるつもりだったようだ。 すっかり忘れてた。

僕の身長は181.5cm日記

あー、有名人の身長推定サイトで自分を検索するというのは思いつかなかった。

SETAKE - 「西尾泰和」の身長

最頻値:185cm 平均値:181.5cm
おおっ、惜しいっ!(大嘘

本当は大体これくらい→ SETAKE - 「キムチ」の身長

でも僕が見たときから変動する可能性もあるわけだなぁ。 誰かが「キムチ200cm」とあちこちに書いたりすれば増えるのだろうか。


= 名古屋で日記など
仕方なく僕も自発磁化の増加に貢献することになった。
カップルは反磁性?
= 電話うけるのまだまだ下手です。
= 型のある言語だと、 物理の文章題を解くときに 「計算式に単位をつけろ!」 と言われた、あれができるわけだ。
= リストコンプリヘンションだけじゃなくてさ、 ディクショナリーコンプリヘンションも欲しいよね。
= 0x20の含まれるファイル名があるからfindするときに注意って 書いてあったのはどこだったかなぁとおもって探した。

void GraphicWizardsLair( void ); // いまどきfindとxargsを使う時は-print0と-0を忘れずに

僕は脳の老化を防ぐためにチャンスがあれば環境を変えるようにしている。 たとえばマウスが壊れたので電気屋に行って、 マウスではないという理由でトラックボールを買ってきたり。 鶴亀メールに脆弱性が見つかったときに、 同じ作者の秀丸エディタをアンインストールして、 サクラエディタに乗り換えたり。 最近はhowmが使いたいという理由でMeadow2をインストールしたものの、 やっぱりサクラエディタも使ってしまうので、 ラボのマシンにはサクラエディタをインストールしないことにしてかわりにMeadow3を入れた。

そういうわけで今までサクラエディタではCtrl+Gでgrepできたのに meadowではできなくて不便だったの。

とりあえず Manpage of FINDManpage of XARGS。 Manpageに用例が載っているとわかりやすくていいんだけどなぁ。

結局第一の原因はfindがWindowsのfindを指していることで、 さらに謎の原因によりgrep.elの中のfind-programを書き換えても反映されないので、 findしてgrepするバッチファイルを作成してそれを呼び出すように書き換えたのだった。 やれやれ。 検索が終わった後にエラーが出る。 雰囲気的に「出力をパースしてなにかするんだけど、出力が想定されているものとちょっと違う」 ってところだろうか。

ラボの机に座っているときと、 気を抜いているときではやっぱり思考の流れ方が違う。 目の前にコードがあるときはそこに集中してしまうけども、 コードから離れるともっと視野が広がる。

そういう意味では ラボのデスクトップ機で開発をするというのはいいのかも知れない。 メリハリという意味で。 気になることがあっても、コードが手元にないのだからいじりようもない。

難しい問題にスタックしたときには、ラボでコードを前にしてしばらく頑張って、 それでもダメだったならすっぱり切り換えるべきなのかも知れない。 で、コードから離れて夜になると勝手に解決する。


= 勉強することはいっぱいあるけども、 時間が足りない…と言っちゃいけないんだな。 時間が足りないと言っても何も解決しない。
= Erlang勉強したいけど、 ちょっと保留してJettyとかAspecJとかHaskellとか。 僕は最先端を走るのよりも、半周遅れを走るのの方が性に合っているのかも知れない。 Jython2.2とかMeadow3とかもう疲れてきた。 CPythonなんか2.4で十分だよ。 Windows Vistaなんていらないよ。2000でいいよ。

これって老化だろうか。ガクガクブルブル。


= 中国産毒性物質、風邪薬として売られていた | Chosun Online | 朝鮮日報。 パナマ保健当局が咳止めシロップを作るために購入した「99.5%純粋グリセリン」が 実は有毒な「ジエチレングリコール」を含んでいたために、 咳止めシロップを飲んだ幼い子供を含む100人以上が死亡したという話。 これはひどい。

朝鮮日報は信じられないという人もいるようなのでロイターの記事も貼っておこう。 Reuters AlertNet - China says fatal drug outside scope of regulators 少なくとも18人は死亡者が出ていると書いているね。


= 明日は資源ゴミの日。 やっと引っ越しの段ボールがなくなる。 ペットボトルや空き缶は袋に入れずに回収箱へ。 いろいろ決まり事が多い。
= 引っ越しメモ。 炊飯器のコードは炊飯器の中に入れて運ぶ。 組み立て家具の組み立てように添付されてきた工具は、 組み立て家具の裏にガムテープで貼り付ける。

しかし次の引っ越しまで覚えているだろうか。


= 日記。 今日は帰りに錦糸町によった。 マツモトキヨシに行った。 HOKUOがタイムセールで20%割引だった。 帰りにHOKUOで翌日の朝ご飯を買うというのは悪くない選択肢だ。 錦糸町には24時間営業の食料品スーパーもある。 マルイやヨドバシカメラが閉まるのは21時。
= わー、もう27時。 予定外。

劇的ワンペーパーのレバレッジメモを作ってた。 全部はこっちに載せないけど、いくつかはJython本の執筆にも役立ちそうだ。

「できがいいかどうかを決めるのは他人。」 「書いたものを寝かせる。」

おすすめの構成として 「情報+具体例」 があげられている。Jython本は「説明+コード」。

「書けない…」→情報が足りない→調査→得た情報をすべて書き出す →ボトムアップでグループ化、または「書けない…」→何を書きたい? →それを3分割→さらに3分割→…とトップダウンで書くことを決める。

物事の本質は所詮独断と偏見である。 まじめな人は「いや、こんなこと言い切ってしまっては…こういう例もあるし…」 と逡巡するがそれはダメ。本質は複数ある。絶対的な正解はないのだから、 自分が正解だと思うものを出せばいい。

知識で稼ぐ人間はどうやって知識を稼ぎに結びつけているのか? 多くのまじめなサラリーマンはこの問題を考えていない。 「大きな会社に入る」ことが知識や富の証明だと考えている。 知識を用いて富を稼ぎ出すためにはまず 「私には富を生み出す知識がある」 ということを実証する必要がある →自分の持っている知識や知恵を形にして世に示すしかない。

って感じ。 最初に読んだときは失敗だったと思ったけど、 じっくり読んでみるとそれほど悪くはなかったかも。 質感と不必要な下ネタがイメージを悪くしている。


= おなかすいたよ。 27時か…。 微妙だ。 そして今までたいがい帰ってきたら即寝てしまっていたから、 こんな遅くまで起きていて明日ちゃんと会社に行けるのか不安。

2007年05月07日

CraftLaunchEx日記

CraftLaunchEx

割とよさそう。 とりあえずデフォルトの設定ではアイドル状態が時刻表示だけど、 それはタスクトレイの時計とかぶるので月日の表示にしてみよう。 import timeでgrepしてみる。

clmode_clock.py

    def OnTimer( self ):
        if not IsActive() :
            import time
            str = time.strftime( GetOption(OPTION_CLOCK_FORMAT) )
            if str != GetValue():
                SetValue(str)
これだな。 (メソッド名は小文字ではじめて欲しいとか、引数の前後に余計な空白があるのはやだなとかは、 まぁ言わないことにして) OPTION_CLOCK_FORMATでgrep。

cloption.py

SetOption( OPTION_CLOCK_FORMAT, ' %H:%M' )
なるほど。 これを下のように書き換えてみる。
SetOption( OPTION_CLOCK_FORMAT, ' %m/%d' )

再起動。 おお、ちゃんと月日表示になった。

しかし、どうしてこういうconfigっぽいものがconfig.pyに入っていないのか… とconfig.pyを見たら、同じSetOption関数がいっぱい使われていたので、 cloption.pyの該当行をconfig.pyに移動してみた。 ちゃんと動いた。 つまりconfig.pyに

SetOption( OPTION_CLOCK_FORMAT, ' %m/%d' )
を書き足す、というのが正解だったようだ。

結論:CraftLaunchExはハックしやすいので面白い。

しかし4年も前から公開されていたんだなぁ、これ。 僕アンテナ低いから全然知らなかったよ。


= 試しにショートカットをドラッグドロップしてみたら 下のように出力された。
<shellexec name='nzoom'
           file='C:\Home\Tools\nzoom122\nzoom.exe'
           param=''
           directory='C:\Home\Tools\nzoom122'
           swmode=''
/>
これをcommand.xmlに書き足せと言うことなんだろう。 しかしなぜわざわざxmlなんか使ってるんだろうねぇ。 Pythonのコードを吐き出せばいいのに。
addShellExec(
	name = 'nzoom',
	file = 'C:\Home\Tools\nzoom122\nzoom.exe',
	directory='C:\Home\Tools\nzoom122'
)
って感じで。
= 404 Blog Not Found:私がブログを書くときに意識したら負けだと思っていること

世の中にはいろんな考え方の人がいるもんだなぁ、と 言及先の Life is beautiful: 私がブログを書くときに意識していること を見て思いました。 特に

「なぜブログを書くの?」、「もちろん、あなたのためです」
が。 ブログを人のために書くなんて考えてもみませんでしたよ。

たとえて言うならば、 このブログは僕にとっては自分の家の庭であって、 僕はその庭でやりたいことをやっているだけです。 道行く人からは庭が見えるけども、 別に見られて困るものでもないので目隠しは設置しません。 見られて困ることは裏庭ですればいいだけだし。 時にはきれいな花を植えて道行く人の目を楽しませることもあるかも知れないですけど、 それはあくまで「僕が花を植えたかったから植えた」のであって 「道行く人のために花を植えた」のじゃありません。 僕が「ドクダミ茶を作ろう!」と言い出して花壇をドクダミだらけにしたり、 「太陽電池を設置しよう!」と言い出して花壇をつぶしたりするかもしれませんし、 僕がやりたいと思ったのなら道行く人が反対してもやります。 ここは僕の庭ですから。

いちおうステテコ一丁で昼寝したりはしないように気をつけてはいます。 そういう「大半の人が不快に思うような内容を避ける配慮」まではいちおう。 でも、そこから踏み込んで「多くの人が喜ぶような内容を書く」ってとこまでは 目指していません。


= とか書いてから Life is beautiful: 「なぜブログを書くの?」、「もちろん、あなたのためです」を読んでみたら、 これは女性読者に「なぜブログを書くの?」と聞かれたときにこう答えればよかったという趣旨のエントリーでした。なるほど。僕もそう答えよう(ぇ

それならもうちょっと女性受けする話題を書くべきか…(ぉ

明日の話題は少子化と結婚しやすい社会についてです(嘘)


= Web日記を書く心がけ 日記を書く理由 - enbug diary (2007-05-02)
= 名古屋で日記など
通りすがりの人に「間違った情報を載せるのは情報が無いより有害だ」と言われて、確かにそうだと思ったのと、面倒になったのもあってtips公開をやめてしまった。
ううむ。 「間違った情報が載っている」と「情報が載っていない」だと確かに前者の方が悪い状態だけども、 「間違っている可能性のある情報も載せる」と「間違っている可能性のある情報は載せない」だと、 間違っている確率の多寡によっては評価が逆転するよね。
= SETAKE - 「親指姫」の身長。 ちょw。
= 巨神兵オーマ製作記(前編)。 すごかった。

2007年05月03日

Erlangに魅力を感じる今日この頃日記

むう。 JYamlにバグがあるから結局JythonでYAML出力のためのコードを書いちゃったよ。

汎用的に作ってないので公開の予定はなし。 見栄えをよくするために(趣味)キーの出力する順番を固定しているから。 デフォルト値は出力しないようにしたりとかね。

Jythonで75行くらい~。

パーサを作ることに比べると、 適当な(パーサがちゃんと判断してくれるような)文字列を作る方は、 格段に楽なのだった。


= 「パーサに手を加えるより、既存のパーサがうまく動くような文字列を出力する方が楽」 という話で、この前のHaskell in Pythonに帰りの電車で手を加えたのを思い出したんだが もう9時半なのでその話を書くのは又今度。
= ゴールデンウィークに仕事はしない。 というかJython本の執筆をしなきゃ! 完全に脳の中から抜けてしまっているよ!

やっぱり僕は一度に一つのことしかできないんだなぁ…と。


= Erlangを起動して、「1 + 1」と入力して、 Enterを押したけども何も起きなくてしょんぼり。 文末にはピリオドが必要なのか~。

XMLRPCライブラリがあった。


= ゴールデンウィークに母校(高校)で文化祭があることすら忘れていた。 今日は一人ラボに来てJython本の執筆。
= HHKにだいぶ慣れてきたんだけど、 案の定Thinkpadの方でCtrlとShiftを押し間違えるケースが増加。 CapsLockとCtrlを取り替えちゃおうか。 っていうか両方Ctrlにしちゃおうか。
= むう、もう21時半。 今日中に終わらせたかったところまで終わるか微妙。

あとモジュールの説明と正規表現の説明。

僕が書いているのは本当にJythonの本なのか? JavaとPythonの本なんじゃないのか?

23時までに終わらせて、印刷して帰ろう。 明日は朗読。


= 病気と予防「前立腺炎」

慢性前立腺炎は、ドライバーやデスクワーク中心の人など、座り続ける職業の男性に 現れやすいものです。同じ姿勢で座り続けていると、骨盤内の血液循環がとどこおって 前立腺炎の誘因となります。

うーん。

前立腺炎 - Google 検索

前立腺炎とは、前立腺が炎症を起こした状態で、あらゆる年代の男性に起こります。 (略) 前立腺炎は、前立腺に細菌感染し炎症が起きることをいいます。青壮年期に多く、 (略) 欧米では、男性の半数は生涯のうち、一度は前立腺炎になると言われています。また、前立腺炎の患者数は、前立腺肥大症や前立腺がんより多いと報告され (略) 男性で排尿時に痛みや頻尿、残尿感といった症状が見られる場合には、前立腺炎が疑われます。

うーん。

昔は淋菌感染が主な原因だったのだけど、 最近では細菌感染によるものの半数は大腸菌などだそうで、 別に性病になるようなことをしていなくても発症するんだそうな。 そもそも非細菌性の場合もあるし。 そして明らかにデスクワーク中心で血流が滞る職業だし。 うーん。泌尿器科に行くべきか。


= ラボの近くの日枝神社は、ふつうに「ひえ」と読むようだ。 大阪堺市にある 日部神社 - Wikipedia は「くさべ」と読むので、こっちも「くさえだ」だと思った。 日下部で「くさかべ」と読む名字もあるし。
= 5日はこどもの日と土曜日とが重なっているのに、7日の月曜日に繰り越し休日にならないの?
= 電話を受けて、後輩と飲みに行くことに。 電話の電源は切っておくべきかなぁ。 受けてしまうともちろん行きたくなるわけで。
= うー、そうか。 19時からの飲み会に行くことにしたから、 作業時間が一気に4時間消えたわけか。 うーむ。 明日8時にラボに来るか…。 今日は12時に来たから。
= 国民の祝日に関する法律
こどもの日 五月五日 こどもの人格を重んじ、こどもの幸福をはかるとともに、母に感謝する。
父に感謝する日がない!ひどい!
= RimoのFractal and Chaosチャンネルがやばい。 すごい。 劣化していない画像が欲しい。

犬も歩けば棒にあたる本棚 - Rimo: Fractals and Chaosの中の YouTube - Hedgerow Bustle Picture-Frame - fractal zoomがすごい。 木の枝みたいなのが増えていくところのアルゴリズムは一体どういうものなんだろう?


= 執筆が一段落付いたら craftware CraftLaunchEx 0.991 をハックする。
このソフトウェアは、キーボードだけでアプリケーションを立ちあげることが出来る、キーボードランチャです。 (中略) スクリプト言語 Python で自由度の高いカスタマイズが可能

= Greenbear Diary - C言語のenumの代わりには、StringじゃなくてSymbolを使おう , immutableについての補足。 RubyのSymbolの実装がどういう仕組みになっているのか知らないけど、 「シンボルは最初の :hoge のときのみインスタンスが作られる」 が事実だとすれば 「コードを実行していて:hogeが出てきたら、 すでに使われているシンボルと一致するかどうかチェックする必要がある」 なのじゃないかと思った。 そのチェックが構文木を作る時に済んでいて、 実行時にはチェックの必要がないということなんだろうか。
= Rubyの文字列はミュータブルだけど、 ハッシュのキーにしたときはどう処理されるんだろう? ハッシュの実装の内部でシンボルに変換している?
= スラッシュドット ジャパン | シェイクスピアを学ぶテレビゲーム、カナダの大学が開発
2年間、5万カナダドル(およそ540万円)が費やされているそうです。結構大型なプロジェクトだったのではないでしょうか。
2年で540万と言うことは1年で270万で、 1ヶ月で22万5千円だね。 仮に全額人件費だとして、一人の人が月に200時間(毎日8時間を25日)働いただけで作ったとして、 時給1125円。
= あー、ダメだダメだ。 集中力が切れてきたー。 一応もうちょっとで第4章が終わるんだが…。

ふー。できたー。 この章は40ページくらいになるのかー。

あと3つ。

なんか今日はすごく疲れた。 帰ろう。

2007年05月01日

南の島に行ってきたよ!日記

ゴールデンウィークなので南の島に行ってきました!

青い空!椰子の木!

青い空!椰子の木!
青い空!椰子の木! posted by (C)にしお

瀟洒な建物!

瀟洒な建物!
瀟洒な建物! posted by (C)にしお

波が作ったダイナミックな地形!

波が作ったダイナミックな地形
波が作ったダイナミックな地形 posted by (C)にしお

白い波を立てて海を駆ける船!

白い波を立てて海を駆ける船!
白い波を立てて海を駆ける船! posted by (C)にしお

人に慣れている野鳥。近づいても逃げないよ!

人に慣れている野鳥。
人に慣れている野鳥。 posted by (C)にしお

土着信仰のモニュメント!

土着信仰のモニュメント!
土着信仰のモニュメント! posted by (C)にしお

水上に建築された不思議な形の建造物。立ち入り禁止なので中にはいることはできなかったよ!

水上に建築された不思議な形の建造物。
水上に建築された不思議な形の建造物。 posted by (C)にしお

原住民の婚姻儀式!

原住民の婚姻儀式!
原住民の婚姻儀式! posted by (C)にしお

象形文字が刻まれた石碑!

石碑!
石碑! posted by (C)にしお

おみやげはさっきの野鳥をモデルにしたお菓子!

おみやげ!
おみやげ! posted by (C)にしお

楽しかったよ!

錦糸町へ自転車で日記

うひゃー。 印鑑間違えて公共料金と家賃の自動引き落としが 全部失敗してるー。

はがきに保護のために貼るシール、 貼った後普通のシールみたいに裏紙をはがそうとしてしまった。 あぶなかった。

お、Controlキーがこっちにあるのか。 Shift+DELがFn+Shift+BSになるのか。 ちょっとなれるまでとまどいそう。 なれたらThinkpadの方でCapsLock押して怒りそう。

コーディングの最中はこのキーボードでもいいんだけど、 OSを操作しているときはちょっと不便かも。 なれるとそうでもなくなるのかも。


= やっぱJavaScriptの時代なのかも知れない(弱気)
= 土曜日の日記。 部屋がだいぶ片付いた。 ダイソーに行って結束バンドを買わないと棚の建築ができない。 錦糸町にあることがわかった。 錦糸町まで3~4キロ。 今は17時半で雨が降って道が濡れている。 うーん。 自転車で行くか電車で行くか…。 電車だと往復で600円くらいかかるか。

自転車で行こう。 地理を把握するのも兼ねて。


= 行ってきた。 ダイソーは結構広かった。 色々余計なものを買ってしまった。

錦糸町~京成曳舟は自転車で気合いを入れてこぐと12分くらい。

余計なものの中で一番余計なものは、 なんたらバンブーだと思う。 水につけておくとどんどん伸びる植物。 サンセベリアはなんだか全然変化がなくて寂しいので。

あとデニムの端切れを売っていたので、よろこんで布用ボンドと一緒に買ってきた。 情報漏洩の危険性があるジーンズに パッチを当ててみた。 後ろのポケットに財布を入れていたせいで空いてしまったバックドアは さすがに大きく空いているので当て布が見えてしまうけども、 股座のセキュリティホールはいい感じにふさがった。 思っていたよりも簡単で、はいてみても違和感がない。 面白い。


= 同期と一泊旅行(後で書く)

楽しかった。


= 馬喰町で「ばくろちょう」って読むのか。 博労町だと思ってた。

調べてみた。 大阪市の中央区に博労町があるな。 鳥取県の米子市には博労町駅があるようだ。 ATOKでならちゃんと変換できる。 白楽町も「ばくろちょう」と読むらしい。 こちらは岡山県倉敷市にある。


= MORI LOG ACADEMY: エンジンが好き。 血圧計で動く機関車!なるほど、たしかに血圧計には電池で動くポンプが入っているから機関車に使えるのか! 頭いい!
= あー、これか。 YouTubeにキスするとFLVファイルがダウンロードできる「KissYouTube」 - GIGAZINE。 最初、http://kiss.youtube.com/と勘違いしたので、YouTubeがそんなサービスをするはずがないよなぁ、 と思ったのだけど、ドメイン名がkissyoutube.comになるわけね。それならkissyoutube.com を取って、スクレイピングのプログラムを書いて設置するだけで可能なわけだ。

このケースだとYouTubeから商標侵害で訴えられたら勝ち目はなさそう。 でも抜け道はあるなぁ。


= ぴかちふのひとりごと。 あー、Kinesis使いの知り合いが一人増えた。 Kinesisは結構使いやすいんだけど、リソースを食うからなぁ。(金銭と空間)

4月はラボのマシンに最初から付いていたDELLのキーボードを使っていたのだけど、 やっぱり使いにくいので何を買おうか…と考えたときにも候補に入れたのだけど、 結局外した。


= 今週は二日しか働ける時間がない。 やりたいことは山積み。 うまく効率よく切り盛りしないと…。

この3連休は「金曜、同期と飲み→徹夜カラオケ→一泊旅行」というコンボのおかげで、 心配していた「休日も働いてしまう病」が出る暇がなかったけど。