« 2006年07月 | メイン | 2006年09月 »

2006年08月31日

日記

NHKの英語番組を久しぶりに見ました。「形が同じ物は共通の意味を持っている」だそうです。つまり春とバネと泉には共通の意味があるわけですね…あ、伸びるイメージ?


__ ワンライナーな作成スクリプトは、代入文x = yをglobals().__setitem__("x", y)に置き換える、なんて方法で一応出来そうではあるけど、構文木からコードに戻す方法が用意されてなさげ。単純にトークンを並べていくとNAMEトークンが2つ並んだときに貼り付いてしまうから空白文字で区切る必要があるのだけど、それってNAMEとNUMBERの間だけでいいのかな…。あとこの方法ではglobals()がうようよ出てくるダサいワンライナーになるので、最初の代入文の手前でglobals().__setitem__("g", globals())としておきたいところだけど、この時使うgがすでにグローバル変数として使われていると動かないコードを生成してしまうのであらかじめどういう変数が使われているかを解析しなければ行けない。必要のない括弧を省略したいとか、式に変換する必要のない文は変換しないとか、そういうことを要求すると…うわー、やっぱめんどくさー。


__ 任意のPythonスクリプトをワンライナーに自動変換をするためには、今回僕が使わなかった言語機能に関しても全部ワンライナーで実装する方法を考えないと行けないわけですね。breakとか。

>>> x = 0
>>> while True:
	if x == 3:
		break
	x += 1
	print x

whileには他にもelse節とかありますが…。

いちおう通常終了の場合にはTrueでブレイクされたときには"BREAKED"なので、それを見て分岐すればelse節相当の処理も出来ますね。


__ RigidChips。 今や入手困難な「パネキット」が進化したようなゲーム。スクリプト言語Luaで制御できてオンライン対戦も出来るという噂。時間を見つけて試してみたいところです。


__ 眠れないので、西尾泰和のブログ: Pythonでワンライナーを作成する際のノウハウ集にちょっと加筆。例外をキャッチしたときに、どういう状況だったかの情報が必要な場合にどうするか、必要な物全部cPickle.dumpsで文字列にダンプして出力しとけ、とかを加筆。一番はてなブックマークが多いのがこの記事で、その次が西尾泰和のブログ: Pythonでタブ区切りデータを出力する方法と、気合いが入っていない記事ばっかり評判がいいのはどういうことなのだろう(苦笑)


__ 【楽天市場】はぁとぷち☆おためしセット☆880円:プチプチSHOP。 で、はぁとを一つ一つつぶしていくわけですね(ぇー)

2006年08月30日

日記

結局、浴室に吊しただけで乾燥させ忘れた服は、乾燥させてみると微妙ににおうようになったので改めて洗濯して乾燥中です。にどでまー。


__ ささださんの日記のコメントに反応。 PyOne - Python によるワンライナー を使って「じゃんけんエージェントをPythonでワンライナーにしました」と言ってしまうと、会場からブーイングを受けたのではないかと思います。 構文に手を加えてしまっては、Pythonとは言えないと思います。かみ砕いてしまうと「ワンライナーを書くために実装されたPyOneという言語でワンライナーを書きました!ちなみにPyOneはワンライナーを書くのが困難なPythonに変換されて実行されます!」ということですから、そんな発表があったら僕なら「それのどこが難しいんだ!」と心の中で叫びます。あえてこの方向でネタに走らなければ行けないとしたら、Pythonスクリプトを出力して実行するRubyスクリプトを作ります。ワンライナーで。

まぁ、それはさておき、サポートツールを使ってしまっては面白みがないということを簡単に示すためにちょっとコードを書いてみました。

import sys
exec(eval('"%s"' % sys.argv[1]))

これを適当な名前(たとえばpyexec)で保存し、適当なフォルダに入れ次のようなバッチファイルを作ります。

@echo off
pyexec.py %1

これをpython.batという名前で保存します(ここ重要!w)

そうすると、ほら改行が必須なfor文がワンライナーで書けました!(ぇー)

C:\Python24\pyexec>python "for i in range(5):\n\tprint 'hello!'"
hello!
hello!
hello!
hello!
hello!

あ、でもサポートツールを使わなくてもこう書けばワンライナーですね…。ということはサポートツールを使ったことが問題なのではなくて、execを使ったことが問題なのかも知れませんね。

C:\Python24>python -c "exec(\"for i in range(5):\n\tprint 'hello!'\")"
hello!
hello!
hello!
hello!
hello!

__ 本当は早めにラボに行きたかったのだけど、洗濯物のせいでもう14時…。

そうだ、ベルトと家の鍵を探さないと…。

うわー、ベルト探してたら洗濯機の底に干し忘れの服が!

ベルトも鍵も見つからず…。ダメだ、どんどん時間が遅くなっている。締め切りを先に決めよう。3時の電車に乗ることにしよう。

しかしどうして、洗濯機の底にある洗濯物に他の洗濯物を取り出したときに気づかないんだろうな。

2006年08月29日

日記

CVSのリポジトリをSubversionのものに変換するcvs2svnはPythonスクリプトのようだ。


__ 今日は「Amazon.co.jp: 大人の常識 漢字力―漢字「脳」力がぐんぐん高まる!: 本: 漢字力研究会」を読みながら出勤したのだけど、やっぱり漢字は面白い。「唆す」を「諭す」と読んだり、「寧ろ」を「懇ろ」と読んだり、「漸く」を「暫く」と読んだり。こういう「漢字一文字+送りがな一文字」の物の一覧表とかどこかに落ちてないのでしょうかね。

当て字難読語(Win)(データ / 文書作成) から抽出するのもありかも。


__ Google Answers: Microsoft Visual C# Method: Externalを見ていると、やっぱり$200という高い報酬を提示することで質の高い回答が出たと思えます。質問をリストに掲載するのに50セントかかり、それは回答が付かなくても返金されないのかな。で、回答に対する報酬は$2~$200。しかも「Google Answers keeps only 25% of the price」。


__ ただいま帰宅。プロシンのポジションペーパーはできた。プリンタの特性か、強調のつもりで文字を少し青くしただけじゃほとんど変わらず、最終的に一番鮮やかな青にしたのにそれでもさほど目立たない。


__ 最近、お腹に電気を流して腹筋を鍛える装置を買ってしまったで、使わないのももったいないから装着しています。これ接着部分がかゆい。

強度の調節が出来て、最大が99なのですけど、50でもうかなりきついです。 体験談を読んでいると99でも平気な(というか効いてない?)人がいるみたいです。どうも脂肪が多いと効かないようで…。試しに99まで挙げてみようと思ったのですが70が限界でした。


__ 「オンデマンドによる録画の動画配信」だとオンデマンドで録画してくれるようにも取れる。 カメラ付きインターホンはオンデマンドの録画・配信ですね。


__ textfile経由でhail2u.net - Weblog - JavaScriptで配列をシャッフル。 仮にソートのアルゴリズムがクイックソートだとすると、まず最初にピボットが選ばれるのでそれをvとしましょう。リストの長さをnとしましょう。正しいシャッフルが行われるためには、vが0番目に来る確率は1/nで、1番目に来る確率も1/nでなければなりません。でも一定確率で大小を分けるリンク先の例ではvがリストの中央に来る確率が一番高くなりますね。

「1/3ずつのランダムだけを使って、任意の長さのリストを正しくシャッフルする」というのは実は結構いい問題になるのかも。


__ RSS。っていうかはてなブックマーク。はてなRSS - 西尾泰和のブログ。ほー。どの記事がウケたかがわかるわけですな。

そしてなんだかいくつかブログをおすすめされているので目を通してみたのですが、なんでおすすめなのか謎です。LLRingへ行ってきました (ueBLOG)以外は。


__ 今日は洗濯物を浴室に吊して、浴室乾燥機をつけずに学校に行ってしまった。洗い直すべきかどうか微妙。においはしないけど…。


__ パソコンをハイバネーションさせるときにUSB接続の機器を外し忘れるのがなんとかならないものか。

2006年08月28日

日記

LL Ringアンケート(open) — Lightweight Language Ring。あれ、「よく使う言語」の選択肢にPlaggerが含まれてないよ?(ぉ)

お弁当にご飯と昨日のナスと高菜を入れて、「あ、蛋白源がない」と思い、生卵をどーん。入れてから気づきました。もし今日の午後や明日にこの日記が更新されなければ、サルモネラ菌による食中毒で入院したと思ってください(ぉ)

サルモネラ食中毒。「あたり」の卵である確率は0.03%くらいだそうです。

あうっ。箸を忘れたorz


__ scripting: Project Home Page。JSR 223でPythonが使えると聞いて、Jythonの代わりになるか調べていたのだけど、結局Jythonを呼び出しているだけだと言うことが判明。 呼び出し用のAPIが統一されたというだけか…。


__ mac miniにplaggerをインストールしようとして、permission deniedと怒られる。どうも管理者アカウントはrootじゃないらしい。そしてsuしようとしてもsorryと言われるだけ。Google先生に聞いてみたらsudo suせよとのこと。sudo suならできた。謎。sudoしてcpanしてforce install Plaggerしてみた。YAML::Loaderがないとか言われたのでそれは別途インストールしけど、あとはなんか自動的にすごくたくさんいろいろな物をインストールしている気配。

そしてインストール完了したけど実行したらこけたorz。

Plaggerインストールしている場合ではないのでしばらくは保留。


__ 100ドルノートPCの正式名は「チルドレンズ・マシン」, CM1 - Engadget Japanese。 一般向けに倍の値段で売って、その利益でもう一台そのマシンを子供たちに届ける、と。自分用マシンにはどうかと思うけど、子供やヘビーユーザーでない他の家族用にマシンを買うときにはいいかもしれないですね。


__ Matzにっきのコメント。 ガレージ欲しいなぁ。


__ ベーコンをカリカリに加熱。買ってから3日経ってしまた小松菜はレンジで加熱して小分け。冷めたら冷凍庫に入れよう。しまったな、ベーコンをベーコン単体で加熱して、出てきた油は拭き取って捨ててしまったのだけど、冷蔵庫のカボチャを調理するのに使えばよかったかも。カボチャはたぶん持つだろうから今度でいいかな。

NHK放送文化研究所より

「カロチン」は「古い用語として文献などに見られるが、その使用は望ましくない」とされています。

ガーン。


__ プログラミングの教育にテストケースを用意するのは意外といいみたいですね、通った人は強い達成感を味わえるので。ただ、論理的に考えてバグを直していく能力が身についていない人には何の助けにもならないので、あくまである程度プログラミングを習得した人向けですね。

2006年08月27日

日記

ハードカバー製本。中身の作り方は(4)本文の作り方。面白い。今度やってみよう。


__ 惑星から冥王星が除外、太陽系惑星は8個

ちょうど来年度の教科書を仕上げなきゃならない時期で、 教科書屋さんが困惑しているっていう報道があったけど、 12個案が通っていたら今後も毎年のように惑星リストの 更新が起こっていた筈だ、ということを考えたら、彼らは もっと今回の決定に感謝すべきだと思う。

なるほど、確かに。

ボイジャーのレコードの画像ですが、よく見ると外惑星の直径 [nasa.gov] (一番上の数値)が現在分かっている数値 [wikipedia.org]とかなり違っていますね。 (中略) 冥王星についてはかなり間違っていて、直径14000kmと、なんと地球よりも 大きいことになっています。ボイジャー打ち上げ前には、そう考えられていたんですね。

( ・∀・) つ〃∩へー

なんたらかんたら: 冥王星「あたい…間違ってたんだ…」

みんなが楽しそうにあの人の周りを回ってるの見て、いいなぁって思ってた。
ここはとても寒くて、でも私はこんなだし、でも…さびしくて。
いつのまにか、こっそり私も回ってた。みんなみたいにうまくいかなかったけど。

見つかっちゃった時は少し恥ずかしかった。でも、うれしかった…
みんなが私に気づいてくれた。ここは寒いけど…もう寒くなかった。
私はもう、一人じゃないんだって。そう思えた。
でも…やっぱりいけない事だった。みんな今まで騙してゴメンね。やっぱり私には資格がなかった。

今まで私を仲間にしてくれて、ありがとう。
みんなにたくさんのあったかい思い出をもらったから、私はそれで十分です。

どうか、私が勝手に回ることをゆるしてください。
うまく回れるように、今も頑張っています。
そうしたら、もしかしたら、また…
それは絶対にない。頭ではわかってる。でも、そうせずにはいられない私を、どうかゆるしてください。

うまいなぁ。


__ キムチの容器の中に液体が溜まってしまう問題の発展的な解決方法を思いつきました。増えるわかめを投入。

思惑通り、水分が吸収されました。


__ 住む場所を探しているのだけども、だいたいわからない単語ばっかりで困る。分譲賃貸マンションって何だろう。分譲なのに賃貸ってどういう意味なんだろう。分譲賃貸マンションとは? 分譲賃貸とは? 分譲賃貸マンションの違いとは? 部屋探しの気づき!マスターのカフェ【リプロ】。分譲マンションを賃貸している物のことなのか。

叩いて硬い壁は防音? 鉄筋コンクリートのマンションの壁は防音? 賃貸部屋探しの気づき!マスターのカフェ【リプロ】。叩いてコンクリートの感触がする壁(コンクリートに直接壁紙を貼っている壁)は壁紙がはがれたり結露でかびたりする可能性が高いそうな。( ・∀・) つ〃∩へー。


__ もうすぐ11時だ…。今日は生産性が悪い。食べてないせいだ。今になって気がついた。気がついたらおなかすいた。おととい野菜を買ってきたのに調理してないじゃん…。今週末の新しく挑戦する野菜は「なす」です。2つで100円。

なすの田舎風しょうゆ煮 料理レシピ/ホームクッキング【キッコーマン】。これにしよう。 水1カップって何ccなんだろう。Google「1カップをccで」「1カップ = 200 cc」。おおー。こんな単位でも変換できるのかー。

うーん。料理酒はないのでみりんで代用することにしよう。砂糖はなしで。って結局調味料がみりんだけだけどいいのかな。醤油とか入れそうな気がするんだけど…。

はっ。ちゃんとレシピに醤油って書いてあるじゃん!色が違うから気づかなかった…。

ナス、高菜、キムチの3色丼。


__

  • 駅と家の間もしくは家からさほど遠くないところにスーパーがあるか
  • 携帯の電波が届くか
  • インターネットの接続方法は
  • 退去時のリフォームなどの条件
  • シャワーの水圧
  • エアコン、ガスコンロ、照明、網戸などが設備かどうか(設備なら修理は大家の責任)
  • 賃貸契約解除の方法
  • 網戸を取り付けるレールの有無
  • ガスメータの閉栓タグで前の住人がいつ出たかがわかる

「連帯保証人は契約者と同等かそれ以上の支払い能力がある親兄弟、祖父母」と書いてあったけども、一人っ子で親が定年を迎えた場合は誰を連帯保証人にしたらいいんだろう。関係ないけど気になった。

やっと賃貸部屋探し,不動産屋が言えない部屋探しのテクニックをあなたに 賃貸・部屋探しの気づき!マスターのカフェ【リプロ】賃貸編を読み終わった。疲れたけどだいぶ参考になった。

あー。冷蔵庫のカボチャと小松菜どうしよう…。

2006年08月26日

LL Gong日記

お疲れ様でした。

さっそくforce cpan Plagger。force: command not found. 修行してきますorz.

本物のリングに上がったり本物のゴングを叩いたり、Perlのrequireとuseの違いがわかったりで色々楽しかったです。チャンピオンベルトも本物だとよかったのだけど(無理)

LL GONGはLowlabel Language GONGだった。 他の奴らの下をいけ!

停電?

直った。

Sumibi.org ローマ字を日本語に変換できる無料サイトは、Wikipediaとかから学習して新しい芸能人の名前とかを変換できるようになるそうだ。単語で区切っているアドバンテージはあるとしても「チャングムの誓い」が一発で変換できました。これはいい。

と行った人にしかわからないネタをいくつも飛ばしつつ、わからない人のためにリンクリンク。セッション内容 — Lightweight Language Ring

目が痛い…。暗い中で強い照明が使われていたせいか眼精疲労で…。例の紫カクテル(ウェルチのグレープ100+ルジェのカシス)を飲むとしよう…。これは眼精疲労によく効く。と言っても、ポリフェノールにそんなに即効性があるわけがないので、アルコールの効果なのだろうけど。

JSR 223 and Scripting Java。現時点でJythonは便利だけど、JSR223の方が将来性があるのかもなぁ。JSRは「Java Scripting なんとか」かと思ったら「Java Specification Request」だった。あとBSF(Bean Scripting Framework)もJavaとスクリプト言語の橋渡しを目指した物らしい。Java技術最前線11月のお題「Java関連スクリプト言語」第2回(全4回):ITpro。「BSFが標準でサポートするスクリプト言語には,Rhino(JavaScript),Jython(Python),Jacl(Tcl)などがあります。独自のBSFエンジンを実装しているものとしては,BeanShell(Javaインタプリタ),JRuby(Ruby),JudoScript, Groovyなどがあります。」

Seaside: Seasideもすごかった。Webアプリがこけたときに、デバッグして再開。ユーザーが戻るボタンで戻っても問題なし。

2006年08月25日

日記

昨日「(1)自らの重力で球状となる(2)太陽を周回する(3)軌道周辺で、圧倒的に支配的な天体…。「圧倒的」って何…。IAUのサイトは負荷が高くて見られなくなっているみたいで確認できず…。」の続き。

IAU Website: NEWSによれば

The IAU members gathered at the 2006 General Assembly agreed that a "planet" is defined as a celestial body that (a) is in orbit around the Sun, (b) has sufficient mass for its self-gravity to overcome rigid body forces so that it assumes a hydrostatic equilibrium (nearly round) shape, and (c) has cleared the neighbourhood around its orbit.

おっと。「has cleared the neighbourhood around its orbit」って…。冥王星を惑星のままにするのは科学的じゃないとかどうとか争っていたんだと思っていたのに、この結論はどういうことなんでしょう。これが科学的なんでしょうか。「(b)表面の起伏が惑星の半径のxx%以下に収まり、(c)その惑星がyyの重力を発生させる範囲に惑星の質量のzz%以上の質量を持った天体が存在しない」とかじゃないと僕は納得できません。

大きさの比較(Max Planck Institute for Radio Astronomy)。わかりやすい。


__ 今日、出勤途中の電車の中で24ページからなる絵本のアイデアが唐突に振ってきたのですけど、どうしましょう、これ…。とりあえずメモだけして塩漬け。


__ この前は2値のラベリングが0/1でAdaBoostを実装したのだけど、今日は-1/+1で実装し直してみました。うん、こっちの方がきれい。


__ EclipseのProfilerプラグインを使ったときに

java.lang.ClassFormatError: java.lang.ClassFormatError: LVTT entry for 'result' in class file org/nishiohirokazu/grinEdit/UtilXMLRPC does not match any LVT entry

などというエラーが出る問題はVM引数に-noverifyをつけることで回避できる。おそらくBCELの問題、だそうな。djUnit - EclipseWiki

GRINEditのボトルネックは想像通り反発力の計算。しかし、高速化はさほど焦る必要がないという結論に。


__ 前にナイーブベイズで文章をクラスタリングするスクリプトをPythonで書いたのだけど、どこへやったかなぁ…。


__ ただいま。

楽天の期間限定ポイントが1129ポイントもある。なぜ。「プラチナ・ゴールド会員限定楽天カード新規入会でプラス1000ポイントプレゼント」で1000ポイント付いているみたい。8月19日に付いて、そして31日が期限。気づかないで欲しかったのかも…。


__ 秋元@サイボウズ研究所プログラマーBlog: Linux猫フィーダー(餌やり機) (動画)

コンピューターに接続してプログラムからコントロールできる動力の、一番入手が簡単な物がこれなのかも。たしかに…。USB扇風機とかがちゃんとソフトウェアからON/OFFできるとハックしがいがあるんですけどねー。


__ まだ公開(しない/できない)「ひみつのプロジェクト」が3つになりそうな気配。


__ MORI LOG ACADEMY: 読点をどこに打つか

僕も打つとしたら「それは嫌だ、と私は思う」と読点を打つ。でもあまり読点は多用しない。なぜなら僕にとって読点を使うことで読みやすくなるケースは少なく、却って読みにくくなるケースさえあるからだ。その典型例が「それは嫌だ、と私は思う」だと思う。これは「「それは嫌だ」と私は思う」であった方が(少なくとも僕にとっては)読みやすい。おそらく、読点を多用する人は文章を音声としてとらえているのだろうと思う。だから声に出して読んだときに間を開ける部分に読点を打つことで読みやすくなったと感じるのだろう。ひるがえって、僕は文章を音声としてとらえる割合が他の人よりおそらく少ない。というのも、「幼稚園に入った初日にうつむいて黙ってじっとしているから泣いているのかと思ったら絵本を黙読していた」らしいから。そういう僕にとっては、音声情報を盛り込んだ読点の打ち方をしてあっても読む助けにはならないようだ。


__ 高校生に紹介するためにmodulobe.com - Modulobeの名前を思い出そうとして色々検索した結果「西尾泰和 うねうね」で発見(ぇ)

もう一つsodaconstructor。sobaで検索して「違うなぁ」とか思ったけど「Java バネ 生き物」で検索して発見。今後のためにそれっぽいキーワードを周りにちりばめておくことにします。物理演算で生物っぽい動きをシミュレート。

パネキットとは。パネキットは紹介に都合のいいページが見つからないので、イメージ検索とかして欲しいです。

2006年08月24日

日記

ICTスクール2006生徒作品集。 やっぱりチーム「非常用電源」のムービーはこれじゃもったいない。クロスフェード時のブロックノイズが酷い。 何らかの方法でもっとマシなフォーマットで公開できないだろうか。


__ Winkで連番画像のインポートが出来ればいいのになぁ、などと考えつつもう八時半か。


__ 「父さんの子供の頃には冥王星という惑星があってな…」「わかった!冥王星人が戦争して粉々になっちゃったんでしょ!」

という会話がなされるのかどうかは知りませんが、冥王星は惑星ではなくなったそうです。太陽系惑星:冥王星を除外 最終案を賛成多数で IAU-今日の話題:MSN毎日インタラクティブ。そんなことより、最終的な定義:(1)自らの重力で球状となる(2)太陽を周回する(3)軌道周辺で、圧倒的に支配的な天体…。「圧倒的」って何…。IAUのサイトは負荷が高くて見られなくなっているみたいで確認できず…。

プルート (ディズニーキャラクター) - Wikipediaから引用: この名前は、プルートが生まれた1930年に発見された冥王星からきている。

( ・∀・) つ〃∩へー

IAUのページから引用:

Page is being generated. If this message does not disappear within 30 seconds, please reload.

あちゃぁ…。しばらく待つしかないか。

2006年08月23日

日記

ヨドバシアキバの有隣堂書店の椅子から接続中。でもさすがに本を読みながら作業したら怒られるだろうなー。

しまった、ポカミス。朝ご飯を駅のパン屋で買って食べるつもりだったのを忘れてた。おなかすいた。

思い出した。前回ここに来たときは体脂肪計に乗ってみたのだけど、すでに体脂肪は標準程度になっていることが判明。D論太りは解消されたみたい。問題は筋肉量がかなり低いところではないかと…。タンパク質を食べて運動をしろと言うことですか。むむむ。

自分の管理能力を超えて、たくさん手を出しすぎるのはよくないが、 「自分の管理能力を超えて、たくさん手を出しすぎるのはよくない」と言って手を出さないのもよくない。自分の管理能力を向上する手段を開発せねば。

スケジュール。 26日 LL Ring。29日ラボ内ミーティング。GRINEditに関するPPTは作ってあるので、デモの練習をしておく。2日~4日 プログラミングシンポジウム。これまでにGRINEditのポジションペーパーを作る。可能なら当日までに最新版のリリース。 終わって10日から未踏ユースのブースト会議。ほったらかしになってるWavからウダー譜を作るプログラムを掘り出して、もうちょっとまともなバージョンを作りたいところ。ブースト会議を聞くと「やりたいこと」が増殖してしまうので危険だ。きっちり優先しないといけないことを記録しておかないと。16日から情報科学若手の会。GRINEditの発表。そして29日に提出が締め切りを迎えるコンテスト状のものが2つ。両方応募したい。締め切りドリブンでぎりぎりでやっていると片方を捨てることになってしまうので、うまいことスレッドが2つあるような作業の仕方をしないといけない。たぶん今が一番時間に余裕があるんだろう。

頭が泡だってしまっている。 やっぱりウダー譜とmltfindは10月まで保留にするか。そうするとたぶんウダー譜はまた塩漬けになってしまうんだけどな。


__ シュレッダーにたくさん書類を入れられるように入れ口を広くしたら、指の細い子供の指が入ってしまうようになったのでやっぱり狭くします…って、それじゃ書類が入らなくなってしまうじゃない。入れ口から刃までの距離を伸ばして子供が手を入れても届かないようにするとか、口から刃までS字に折れ曲がるとかすればいいのでは…。


__ 冥王星の軌道が「細長い楕円形」ってのはいくら何でも言い過ぎでは>NHK

冥王星が発見されて世界が沸いて、その当時に発見された元素をプルートから取ってプルトニウムにしたほど、っての表現も微妙…。 二つ前の元素は天王星ウラノスから取ってウラン、一つ前の元素が海王星ネプチューンから取ってネプツニウム だからでは…。 一応、調べてみました。冥王星の発見は1930年。プルトニウムの発見が1940年。冥王星発見当時、プルトニウムの発見者は18歳。うーん。「当時」といえなくはないのか…。

Eccentricity (mathematics) - Wikipedia, the free encyclopediaを参考に計算してみたところ、離心率0.25の冥王星の軌道は、短径が長径の0.95倍くらいのようです。長い軸が10センチとすると、短い軸は9センチ5ミリ。これを「細長い」というのはさすがに言い過ぎでしょう。


__ キムチが発酵しすぎてちょっと酸っぱい。一昨日つけたばっかりのキュウリがもう酸っぱい。うーむ、底に水分が溜まっているなぁ。この水分は捨てた方がいいのだろうか?

2006年08月22日

日記

名刺印刷用紙のメーカーが出しているフリーのレイアウトソフトをダウンロードしようとしたらサーバが落ちていて悲しい。

名刺の裏に数独のルールの説明を書いてみたけど、字が細かくてごちゃごちゃするからやっぱりやめよう

うーむ。枠いっぱいに使うと、少し紙が斜めになっていたりするだけで印刷がはみ出してしまう。30枚印刷して10枚失敗。 シートからはがすところは適当にやっても大丈夫。こっちに細心の注意を払わないで、手差しの紙を入れるところに払えば失敗しない。


__ 404 Blog Not Found:役所仕事

アメリカにビザ無しで入国できるのはわずか27カ国。アジアでは日本、シンガポール、ブルネイの3カ国だけです。 http://www.travel.state.gov/visa/temp/without/without_1990.html#2

へぇー!( ・∀・) つ〃∩

信頼されてるんですねぇ。


__ 学校によって同じ科研費でありながら使えるかどうかが違うのが謎です。 書籍を買えるようになったのはうれしいのですけど、NAISTではすんなり買えたものが買えなくなったり理由書が必要になったりとややこしいです。b-mobileを買ったときはすんなり買えたのに、更新ライセンスの購入に理由書が必要だったり。ネットワーク接続機器が研究とどう関わりがあり、どう利用し、これがあればどうメリットがあり、ないとどうデメリットがあるか、を書かないといけないようです。えー。


__ 【楽天市場】ネフ社(naef) アークレインボウ:木のおもちゃWoodWarlock うわー。欲しい。でもこれは絶対子供へのプレゼントには買えないな、踏んで割りそう。買うなら自分で買って一人で楽しむ(ぇ)

【楽天市場】ネフ社(naef) ネフスピールウッドワーロック5周年記念バージョンモノクロ【世界限定200個】:木のおもちゃWoodWarlockの逆三角形の積み方とか、【楽天市場】ネフ社(naef) アングーラ:木のおもちゃWoodWarlockのふしぎな積み方とか、【楽天市場】ネフ社(naef) セラ:木のおもちゃWoodWarlockのグラデーションとかスゴイ。欲しくなってしまう。

【楽天市場】ネフの積み木いっぱいで遊ぼう!:木のおもちゃがりとん。 こんなこと書かれたら4セット大人買いしたくなってしまうじゃないか!


__ おなかすいた。今気がついたけど、20時からのミーティングだったら食事は済ませてから行ったほうがよさそうなのでその時間を見て早めに出ないといけないですね。じゃ、そろそろ。


__ 自転車の鍵をなくして駅からとぼとぼ歩いて帰ってきて悲しい。


__ タスクの管理方法について手帳に書いたことを整理。

子供の時みたいな、何にも邪魔されずに一番好きなことだけにつぎ込むことが出来る時間は、基本的にもう訪れない物だと思った方がいい。インタラプトや並列で走らせないといけないジョブがあることを前提として、どうやってうまく時間を使うかを考えないといけない。もしくは一攫千金して運用益だけで食べていけるようになって雑用は全部メイドに任せる。

人間の意識はシングルスレッド。パフォーマンス向上のためには、PC、他人、潜在意識などを使って並列化する必要がある。

タスクリスト、TODOリスト、などはようはwait setだ。手帳のTODOリストを見て次に何をすべきか決めるのはnotifyAllだ。きちんとnotifyAllする(タスクを取りこぼしたりしない)ためにはすべてのタスクがそのリストに載っていなければならない。だってwait setだもの。

(バージョン0.1) to do、done、defer、delegate、suspend、canceled、wait、depend、be depended

(バージョン0.2)

  • □ to do。実行すること。実行することが可能なことでなければならない。
  • to doの削除
    • [v] done。実行可能なことを実行完了したことを示す状態。手帳で管理する場合は本文部分を打ち消し線で消す。(以下、「打ち消し線で消す」と表記)
    • [x] canceled。実行可能なことを、実行するのをやめた状態。状況が変わったので実行する必要がなくなった、当初の記述では適切でないと気づいたので書き直す、など。打ち消し線で消す。
    • [d] delegated。canceledの一種。実行できると思っていたが、実は他者(PC、潜在意識含む)の行動を待たなければいけないと言うことに気がついた。もしくは、実行した結果、完了までに他者の行動を待たなければいけない状態になった。打ち消し線で消す。条件付きタスクを生む。例:「○○の実装」というTODOを書いたが、似た目的のソースをAさんが持っていたことを思い出したので、メールでソースをもらえないか問い合わせた。
    • [s] suspended。canceledの一種。実行できると思っていたが、今は実行できない状態になった。もしくは実行した結果、何かを待たなければ続行できない状態になった。打ち消し線で消す。条件付きタスクを生む。例:「郵便局で~を出す」というTODOを書いたが、うかうかしていたら閉まってしまったので明日出すことにする。
  • 条件付きタスク
    • ○条件→□ to do。条件は実行可能ではないので頭に□をつけるのは誤り。条件が満たされた場合に実行する内容が条件の満たされ方によって大きく変わる場合や、書くまでもない自明なことの場合は省略してもいいと思う。例:○Aさんからソースコード→□読む。○郵便局開いた→○○を出す。
    • 条件付きタスクは、条件を満たしている場合しか実行できないので、notifyAllの際にはきちんとチェックする。
  • 依存関係
    • 矢印。矢印の根本が依存される側。時間の流れと同じ矢印。条件付きタスク。手帳の場合は矢印は自由に曲がりくねっていい。複雑になったら書き直す。依存元を解決しないと後続が実行できないので、依存元は優先的に実行される。例:本Aを段ボールに入れる→本の小包をラボに持って行く→ラボのガムテープと小包を持って郵便局に行き、書籍小包で出す。(書籍小包は中身を局員が確認するので閉じて持って行ってはいけないので)
  • 書き直し
    • 手帳と付箋での管理では、打ち消し線で消しても実際には消えないのでいつかリソース(紙面)を食いつぶしてしまう。食いつぶす寸前はパフォーマンスが悪化するので、適当なタイミングでガベージコレクションが必要。これは打ち消し線で消されていない物だけを新しい付箋に書き写して、古い付箋を廃棄する
    • この際、書かれたけども手をつけられていないタスクは存在意義を見直す必要がある。特に、タスクブレイクダウンの可能性を検討する。例えば上の書籍小包のタスクは、実際には当初「ゲド戦記を実家に送る」だったが、郵便局のあるラボに来ても送るべき本がなく、本のある家に戻っても郵便局が近くにないので先延ばしになっていた。ブレイクダウンをすることで、まず家で段ボールに詰めてラボに持って行かないといけないことを理解することが出来た。
    • ルールとして、タスクブレイクダウンをせずに「そのまま書き写す」際には「そのまま書き写された=特にブレイクダウンせずに今すぐ実行できるはずなのになぜか実行されなかったタスク」として(-)マークをつける。このマークが1つつくだけならまだ付箋の回転が速くて仕事が追いつかなかっただけだとも考えられるが、積み重なっていくようなら何かが確実におかしい。

すごい、これだけの内容が 1枚の付箋に書かれていたはずがないので、ほとんどは「書いたつもりで実際には頭の中にあったこと」なのだろう。今書きだしていなかったらいつの間にか消え去っていたかも知れない。危ない危ない。


__ 夏のプロシンのプログラム。

 ・トーク1 「(未定)」
                                                    筧 捷彦 (早大)

は話す内容が単にまだ決まっていないということなんだろうけど、

・トーク1 「(不定)」
                                                  竹内 郁雄 (東大)

は話す内容は決まらないことが決まっているんだろう。 何人も「(不能)」を語ること能わず。

それはさておき、発表者じゃなくてもポジションペーパーを配布できるようだからGRINEditのポジションペーパーを作ろう。もともと去年のプロシンで発表した時に、グラフ可視化ライブラリを作った方がよさそうな気配を感じたのがそもそもの始まりだもの。


__ じゃこの中に小さいエビが入っているが、じゃこよりだいぶ小さい。どうしてもっと大きなエビはいないのか。じゃこと同じ程度の大きさのエビなら、同じように捕まってもおかしくないのに。

キミならどう書く 2.0 - ROUND 3 -

>>> def graph(xs):
	print "\n".join([str(x).rjust(max([len(str(y)) for y in xs]))
			 + ": " + "*" * (20 * x / max(xs)) for x in xs])

	
>>> graph([2, 5, 9, 11])
 2: ***
 5: *********
 9: ****************
11: ********************

寝る前に発見したのでとりあえずあっさり目の回答をして寝ることにします。グラフ簡約が欲しい。

「グラフを出力する」の「グラフ」を「グラフ理論」の「グラフ」だと無理矢理に解釈してうねうねするのも一興か。

2006年08月21日

日記

発表資料、また持ち時間×3になっちゃった。

ひょえー、どこぞの高校生対象のネットワークプログラミング講座はいつの間にかアスペクト指向になってるー。しかも高校生がちゃんと理解して課題を提出してるー。一番わかりやすいとか言ってるー。あうあう。負けてられないが参加する時間あるかな。って時間はひねりだすものだったか。


__ 秋葉原に行って名刺プリント用紙を買ってきました。最近は縁がギザギザにならない物とかもあるんですね。で、それだけにしとけばいいのに、ヨドバシカメラの雑誌コーナーになぜ料理があるのかと釣られてしまいました。Yahoo!インターネット検定 - 食育エキスパートですね。食べる食育と作る食育があるようですが、食べる食育の方は演習問題をあっさり全問正解してしまったので作る食育の方を買ってきました。ニンジンは赤いけど緑黄色野菜で、キュウリは緑色だけど緑黄色野菜ではなく、アスパラはキュウリ同様に「中が白い」けど緑黄色野菜、ってのは常識かと思っていたけどそうでもないんですかね。うちの母親が食育の英才教育を施したせいですかね。


__ 座長を頼まれて、座長って何するかよくわからないです、と答えたら、なんとなく進行して適当に質問したり場に問いかけたりして、キャラで乗り切れと言われてしまったorz。


__ そうそう。3WAYバッグも買ってしまいました。横向きの手提げになって、縦向きの手提げになって、リュックサック型になって、肩にかけることも出来る。あれ、4WAYだ?たぶん縦の手提げはリュックサックモードに含まれるんでしょう。でも混んだ車内で足の間に入れるときとか、既存のリュックサックだと紐を踏まれてしまったけど、これなら紐を中にしまえるので踏まれません。

今まで使っていた肩から提げるカバンは、パソコンを入れるといっぱいで、本を入れるとパンパンになってしまうのです。そこで別の袋にパソコン関連の物だけ移して両肩にかけていたのですが、これは自転車に乗っているとずり落ちて大変だし、(指摘されるまで気がつかなかったけど)紐が細いので肩に食い込んで痛いし、大変なのです。

2006年08月20日

日記

新聞を見ていたら「特にパソコンを多く使う人は目元の血行が悪化し、実年齢より上に見られることがある」だそうな。確かに、目元の血行は悪いような気もする。でもそこで目元用の化粧品を使うのは問題の解決になっていない気が…目元の血行を促進する

昨日一昨日の夜更かしがたたってちょっと調子が悪い。

青汁は、クエン酸を加えるとにおいが気になりにくくなるかも知れない。


__ えー、昨日一昨日の疲労と生活リズムの変調のせいで、目がかなり疲れています。そこで作業は置いておいて、駅前のスーパーに行ってきました。

ここでオリジナルカクテルを紹介したいと思います。 まず用意するのはウェルチのグレープ100。濃い紫色の濃厚なジュースです。これ単体でもソーダで割りたくなる人はいるかも知れません。次に用意するのはルジェのクレーム・ド・カシス。カシスオレンジを頼むとたまに底に溜まっていたりするあのリキュールです。濃い紫色をしています。この2つを適当に混ぜます。見た目ちっとも変わらないじゃん!


__ 人力検索はてな - よく「因数分解が何の役にたつんだよ」という子どもがいます(中略) これに対するスマートな反論をお願いします。 。えー。因数分解なんか日常生活にはちっとも役に立たないと思います。そして因数分解と素因数分解と混同している回答があるのにスルーされているのが個人的には不安感を煽ります(笑)

2006年08月19日

Just Another Python Hacker, その3

Python リファレンスマニュアルを読んでいて、単項演算子は-, +の他に~(ビット否定)もあることを知ったのでそれを導入して西尾泰和の日記(2006-02-02)を改良してみました。

>>> print''.join([chr(x) for x in 7^77,-~7*7^77,-77^-~7*~7,77^7*7-~7,7*7&~-7*7,7
^77-7,~-777/7,777/7,77^7*7-~7,7^777/7,7777/77,~7*7^7-77,7*7&~-7*7,~7&7+77,7^7*7+
77,77^7*7-~7,7^777/7,777/7,~-777/7,7*7&~-7*7,~7&77,-777/~7,-7777/~77,7-7777/~77,
7777/77,~7*7^7-77,~-7^~-7*7])
Just Another Python Hacker,

80文字改行で、1行くらい短くなりましたね。なお見やすくするために80文字で改行しているので実行してみる人は改行を取り除いてくださいね。

この他に括弧をつける機能も入れてみたのですけど、括弧はコストが高いみたいでちっとも使われませんでした。


__ ちょっと行数は短くなったけども、7だらけなのは変わらないので見栄えは大して変わらず、ちょっと面白くないので0と1のバージョンを作ってみました。

>>> print''.join([chr(x) for x in -~0111,100|10+11,10^11*11,100|10+10,-0101/~1,0
101,110,111,100|10+10,~11^-100,101,1+111-~1,-0101/~1,10*010,11*11,100|10+10,~11^
-100,111,110,-0101/~1,0110,~1%~-100,~-100,10|~-100,101,1+111-~1,11*~1*~1])
Just Another Python Hacker,

今のところこれが一番短いですね。0と1から10進数と8進数の両方を作れるからでしょう。

>>> print''.join([chr(x) for x in 7^77,77^070,~-77^077,700/~-7,7*7&7*70,7^70,770
/7,777/7,700/~-7,7^777/7,707/7,77^077,7*7&7*70,70+70/7,70^077,700/~-7,7^777/7,77
7/7,770/7,7*7&7*70,~7&77,-777/~7,~-700/7,7+700/7,707/7,77^077,700&70700])
Just Another Python Hacker,

0と7の方がわずかに短いですね。でも0/1版は最初の項がマイナスで始まるからinの後のスペースを詰めることが出来てやっぱり同じですね…。


__

>>> print''.join([chr(x) for x in -~0111,100|10+11,10^11*11,100|10+10,-0101/~1,0
101,110,111,100|10+10,~11^-100,101,1+111-~1,-0101/~1,10*010,11*11,100|10+10,~11^
-100,111,110,-0101/~1,0110,~1%~-100,~-100,10|~-100,101,1+111-~1,11*~1*~1])
Just Another Python Hacker,

>>> print''.join([chr(x) for x in -222/~2,20|202/2,22^202/2,20|200/2,2*020,0202/
2,220/2,222/2,20|200/2,2-~202/2,202/2,0202-020,2*020,2*2*20,20+202/2,20|200/2,2-
~202/2,222/2,220/2,2*020,0220/2,~2+200/2,~-200/2,~2+220/2,202/2,0202-020,22*2])
Just Another Python Hacker,

>>> print''.join([chr(x) for x in 3^0333/3,-3-~3*30,3-~333/3,~3-~3*30,~-33,0303/
3,330/3,333/3,~3-~3*30,3+303/3,303/3,3+333/3,~-33,330/3-30,30*3-~30,~3-~3*30,3+3
03/3,333/3,330/3,~-33,3*030,333^300,33*3,330/3-3,303/3,3+333/3,33+33/3])
Just Another Python Hacker,

>>> print''.join([chr(x) for x in 044^440/4,~-4*~-40,4+444/4,4*40-44,040,0404/4,
440/4,444/4,4*40-44,4+400/4,404/4,4+440/4,040,40+40,4*40-~-40,4*40-44,4+400/4,44
4/4,440/4,040,0440/4,4^404/4,~-400/4,4^444/4,404/4,4+440/4,44])
Just Another Python Hacker,

>>> print''.join([chr(x) for x in 55^5*5*5,5-~555/5,5+55+55,5+555/5,50&050,0505/
5,55+55,555/5,5+555/5,55+~-50,505/5,5+55+~-55,50&050,55+5*5,-5&5*5*5,5+555/5,55+
~-50,555/5,55+55,50&050,0550/5,5^50+50,50+~-50,5^55+55,505/5,5+55+~-55,~-055])
Just Another Python Hacker,

>>> print''.join([chr(x) for x in 66|6+66,6+666/6,066-~60,66^066,~6&6*6,~-66,660
/6,666/6,66^066,6^660/6,606/6,66|060,~6&6*6,66^6+6+6,60-~60,66^066,6^660/6,666/6
,660/6,~6&6*6,66+6,6*6-~60,~-600/6,6+606/6,606/6,66|060,60&6060])
Just Another Python Hacker,

>>> print''.join([chr(x) for x in 7^77,77^070,~-77^077,700/~-7,7*7&7*70,7^70,770
/7,777/7,700/~-7,7^777/7,707/7,77^077,7*7&7*70,70+70/7,70^077,700/~-7,7^777/7,77
7/7,770/7,7*7&7*70,~7&77,-777/~7,~-700/7,7+700/7,707/7,77^077,700&70700])
Just Another Python Hacker,

>>> print''.join([chr(x) for x in 8*8+80/8,80|808/8,808/~-8,80|800/8,8+8+8+8,8*8
-~0,880/8,888/8,80|800/8,8|8+88,808/8,800/~-8,8+8+8+8,80,88|8-~88,80|800/8,8|8+8
8,888/8,880/8,8+8+8+8,80-8,88-~8,88+88/8,8-888/~8,808/8,800/~-8,-88/~-~0])
Just Another Python Hacker,

>>> print''.join([chr(x) for x in 90&-9-9,9+99+9,99|9+9,99+9+~-9,99&9000,99&9*9,
990/9,999/9,99+9+~-9,99^99/9,909/9,~99^-9-9,99&9000,~9%90,9|9+9^99,99+9+~-9,99^9
9/9,999/9,990/9,99&9000,9*~-9,~-~-99,99,9|99,909/9,~99^-9-9,9+99&9-90])
Just Another Python Hacker,

4が一番短いですね。そしてやっぱりどれも括弧は使わないですね。コストが高いんでしょう。

DIGIT = 1
OPERATORS = "%/&|^*+-"
PREFIX = "-~0" + str(DIGIT)
SUFFIX = "0" + str(DIGIT)
caches = [{}, {DIGIT: str(DIGIT), 0: "0"}]
numLetters = {}
QUERY = [ord(x) for x in "Just Another Python Hacker,"]
query = QUERY
 
def evalEq(eq):
    try:
        v = eval(eq)
        if not(numLetters.has_key(v)):
            numLetters[v] = level
            result[v] = eq
    except:
        pass


for level in range(2, 100):
    result = {}
    
    for a in caches[level - 1].values():
        for prefix in PREFIX:
            evalEq(prefix + a)
        for suffix in SUFFIX:
            evalEq(a + suffix)

    for i in range(1, level - 1):
        j = level - i - 1
        for a in caches[i].values():
            for b in caches[j].values():
                for f in OPERATORS:
                    eq = a + f + b
                    evalEq(eq)

    for i in range(1, level - 3):
        j = (level - 3) - i
        for a in caches[i].values():
            for b in caches[j].values():
                for f in OPERATORS:
                    eq = "%s%s(%s)" % (a, f, b)
                    evalEq(eq)
                    eq = "(%s)%s%s" % (a, f, b)
                    evalEq(eq)

    for i in range(1, level - 5):
        j = (level - 5) - i
        for a in caches[i].values():
            for b in caches[j].values():
                for f in OPERATORS:
                    eq = "(%s)%s(%s)" % (a, f, b)
                    evalEq(eq)

 
    query = [q for q in query if not(q in result)]
    caches.append(result)
    if query == []: break
    print level
 

print "print''.join([chr(x) for x in " + ",".join(
    [caches[numLetters[x]][x] for x in QUERY]) + "])"

Pythonの構文木を見る

ワンライナーから不要な空白文字を取り除くスクリプトを作ったのですが、「取り除いてパースに成功するなら取り除いてOK」とやってしまったので文字列の中の空白まで取り除かれてしまいました。そこできちんと構文木を眺めてみることにしました。love unstable: Pythonの構文木を見るを参考に。

import parser, symbol, pprint, token
def change(ast):
    if type(ast) is list:
        return map(change, ast)
    else:
        leaf = symbol.sym_name.get(ast, ast)
        return token.tok_name.get(leaf, leaf)
parse = lambda s: change(parser.ast2list(parser.expr(s)))

pprint.pprint(parse("('1 1'       * 2)   + (3 - 4)"))

これで出力は

['eval_input',
 ['testlist',
  ['test',
   ['and_test',
    ['not_test',
     ['comparison',
      ['expr',
       ['xor_expr',
        ['and_expr',
         ['shift_expr',
          ['arith_expr',
           ['term',
            ['factor',
             ['power',
              ['atom',
               ['LPAR', '('],
               ['testlist_gexp',
                ['test',
                 ['and_test',
                  ['not_test',
                   ['comparison',
                    ['expr',
                     ['xor_expr',
                      ['and_expr',
                       ['shift_expr',
                        ['arith_expr',
                         ['term',
                          ['factor',
                           ['power',
                            ['atom',
                             ['STRING', "'1 1'"]]]],
                          ['STAR', '*'],
                          ['factor',
                           ['power',
                            ['atom',
                             ['NUMBER', '2']]]]]]]]]]]]]]],
               ['RPAR', ')']]]],
            ['STAR', '*'],
            ['factor', ['power', ['atom', ['NAME', 'x']]]]],
           ['PLUS', '+'],
           ['term',
            ['factor',
             ['power',
              ['atom',
               ['LPAR', '('],
               ['testlist_gexp',
                ['test',
                 ['and_test',
                  ['not_test',
                   ['comparison',
                    ['expr',
                     ['xor_expr',
                      ['and_expr',
                       ['shift_expr',
                        ['arith_expr',
                         ['term',
                          ['factor',
                           ['power',
                            ['atom',
                             ['NUMBER', '3']]]]],
                         ['MINUS', '-'],
                         ['term',
                          ['factor',
                           ['power',
                            ['atom',
                             ['NUMBER', '4']]]]]]]]]]]]]]],
               ['RPAR', ')']]]]]]]]]]]]]]],
 ['NEWLINE', ''],
 ['ENDMARKER', '']]

当たり前ですが、文字列の中の空白は残って、トークンの間の空白は消えていますね。後はNAME、NUMBERなどが隣接するときには空白を挟み、RPAR(括弧)などは空白を挟まないでトークンを結合してやれば目的は果たせるでしょうかね…?

日記

結局西尾泰和のブログ: Pythonでワンライナーを作成する際のノウハウ集なんかを作って徹夜してしまいました。

和田君から。

西尾さん、Fnキー+F7にあるメニューの設定でのカスタマイズは既にをお使いですか?変なサイズのディスプレイや最近はやりのワイドタイプの場合はともかく、4:3タイプのディスプレイの大きさなら大体、何とかなると思います。もし使われてないならぜひ。こういう機能はThinkPadはしっかりしていると思います。

おすすめされたモニタをよく考えずに買ったらその最近はやりのワイドタイプで、切り替えられるサイズ一覧に適切なサイズが出てこないという罠にはまっています。画面のプロパティで変える場合も、一度デュアルモニタの設定にしてOKを押さないと選択肢に出てこないので、不便です。 現在の状況を保存・復元できればいいだけなんですけどね。


__ まいねーむいず


__ 喉が渇いたなぁ…。薬局でクレジットカードが使えなかったので青汁を買わなかったのは間違いだったのかも知れないなぁ。


__ うまく動かなかったEclipseのProfilerプラグイン、消してインストールし直したら動きました。何が原因だったのだろう。とりあえずProfilerDLL.dllが適切なところにコピーされていないというのではないと思われる。なぜなら「ProfilerDLL.dllが~~に入っていないと起動できないよ?コピーする?」という趣旨のダイアログが表示されたから。親切ー。

GRINEditのプロファイリングをしたいのをぐっとこらえてDancingLinks。

ふむ。 僕はJavaプログラムの高速化はあまり詳しくはないが…2次元配列をd[x][y]を{{x, y, d[x][y]},....}というリストに一度変換した上で、制約に反せずにx,yに値vを入れることが出来るかどうかをこのリストから線形探索して調べているように見える…。9 * 9 * 9回、このリストからの線形探索をしているように見える…。 はっ、しかも制約に反することがわかったところでreturnすればいいものを、毎回全部探索してる!

書き換えたら一時的に作られるリスト自体がいらなくなりました。16%高速化。


__ 「ふつうのはすける」で変換したら「普通のは透ける」になりました。


__ Dancing Linksの肝は4方向リスト。本当は昨日読むはずだったのに、ワンライナーなんか作ってしまって、急いで読もうと思ったのに晩ご飯を食べたら眠くて…寝てから読むか、月曜にプリントアウトして電車の中で読むか。火曜日はラボのミーティングだしなぁ。


__ 渡辺さんの裏に迷路が付いている名刺を見てから、ずっと裏につけようと思っていた物がやっと完成しました。

sudoku.png

一応、数字の入っているマスも、印の付いているマスも点対称なのだけど、3*3*3*3の普通の数独に比べて制約が弱くなるからなのか、これくらいたくさん数字を入れないと解けてくれません。うまく配置するともっと少なくても解けるのかも知れないけど…。

あとはこれを名刺の裏にうまく印刷できるか試さなきゃ。

Pythonでワンライナーを作成する際のノウハウ集

これはLL Ringというイベントの「じゃんけん2.0」に出場する際に「多くの構文に改行が必須であるPythonで書かれたじゃんけんエージェントをワンライナーにしていたらウケるかな」と思ってワンライナー化しているときに書いたメモです。自分用のメモのつもりだったので書き殴ってありますが、意外と人気のようなので近いうちに加筆します。 実は後から書いた英語版(How to make oneliner in Python?)の方が整理されているのかも。

完成したワンライナー

jankenoneliner.png

def文を式にする

defは改行を要求するのでlambdaに置き換える必要がある。

def foo(x): return x + 1(ここに改行)
foo = lambda x: x + 1
globals().__setitem__("foo", lambda x: x + 1)

lambdaは式しか含むことが出来ないので、代入などの文は全部式に置き換える必要がある。

if文を式にする

if condition:
    p("True")
else:
    p("False")
condition and p("True") or p("False")

andやorが遅延評価することを利用している。このandとorを使った評価順の制御が、式しか使えないlambdaの中ではすべての基礎になる。

p("True")が0, NoneなどのFalseと判定される値になりうる場合は例えばこうする。

(condition and [p("True")] or [p("False")])[0]

空でないリストやタプルはTrueと判定されることを利用している。

柴田さん(TRIVIAL TECHNOLOGIES 2.0)情報によればbool値をintに変換した際に0と1になることを利用して以下のように書くこともできる。これは上の例での関数pが副作用を持たない場合にのみ使うことができる。

["False", "True"][condition]

for文を式にする

リスト閉包内包を使う。

>>> for i in range(5):
	print i

	
0
1
2
3
4
>>> import sys;[sys.stdout.write(str(i) + "\n") for i in range(5)]
0
1
2
3
4
[None, None, None, None, None]

最後の[None, None, None, None, None]がこの式の値である。

代入文を式にする

リストのappendや辞書の__setitem__を使用する。 グローバルな名前空間globals()、ローカルの名前空間locals()、そしてオブジェクトxの名前空間x.__dict__がよく使われるだろう。

while文を式にする

ループ回数が十分少なければ再帰呼び出しでも構わないが、多い場合は再帰回数の上限を超えてしまうので使えない。 そこで、itertoolsのcountとifilterfalseを使う。countはいわゆる無限リスト。ifilterfalseによって生成されたイテレータのnextメソッドを呼ぶと、最初にfalseになる所まで実行して中断することを利用する。

>>> i = 1
>>> while i < 100:
	i *= 2

	
>>> i
128

break文とelse節

breakを実現するためには「式を評価した結果が特定の値になったら続きを実行しない」という必要がある。 「特定の値」をわかりやすくするために"BREAKED"という文字列にすると、これはTrueと判断される値なので、orで繋いでおき、Trueと判断される値になったらループを終了する。itertools.ifilterfalseではなくitertools.ifilterを使う。ループがブレイクされた場合には値が"BREAKED"になり、されなかった場合にはTrueになることを利用してelse節を実現できる。

>>> primes = []
>>> for i in range(2, 100):
	for p in primes:
		if i % p == 0:
			break
	else:
		primes.append(i)

>>> primes
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

この素数を求めるコードをまず下のように書き換え、forを消す。

>>> primes = []
>>> for i in range(2, 100):
	j = 0
	while j < len(primes):
		if i % primes[j] == 0:
			break
		j += 1
	else:
		primes.append(i)

		
>>> primes
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

>>> globals().__setitem__("primes", []) or [
  globals().__setitem__("j", 0) or
  ifilter(bool,
    (
      not(j < len(primes)) or
      (i % primes[j] == 0 and "BREAKED") or
      globals().__setitem__("j", j + 1)
      for c in count()
    )
  ).next() == True and primes.append(i)
  for i in range(2, 100)
] and None
>>> primes
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

改行の除去と適切なimportはお任せします。

2つの式を順次実行する

一つめの式がTrueと判定されるならandで結ぶ。Falsと判定されるならorで結ぶ。わからないなら一つめの式を[]で囲ってTrueと判定させる。

NoneはFalseと判定される。__setitem__やsys.stdout.writeなどのメソッドはNoneを返すのでa or b or c or ...と続けていくのが一番自然だが、Trueと判定される物が混ざっている場合は(a and False)などとやって無理矢理Falseにする必要がある。もちろん、文字数を減らしたい場合は(a and 0)でOK。数値であることがわかっているならa * 0がよいだろう。

逆にandで続けていくのなら、Falseと判定されうる物は最初に書いたように[]で囲うことでTrueと判定させる必要がある。Falseと判定される物が連続しているなら[sys.stdout.write("1"), sys.stdout.write("2"), sys.stdout.write("3")]というようにリストにしてしまうのも字数を減らす上では一つの手である。

class文を式にする

read-onlyでないクラスをインポートする。そのクラスのインスタンスを作ってメンバを動的につっこむ。もし複数のインスタンスを作る必要があるならlambdaで囲ってbuilder関数にする。

>>> class Counter:
	def __init__(self):
		self.count = 0
	def __call__(self):
		self.count += 1
		return self.count

	
>>> c = Counter()
>>> c()
1
>>> c()
2

クラスを定義するのは多くの場合トップレベルなのでこの例ではimport文や代入文を使っている。完全に式としてクラスの生成をしたければimportを式にし、生成したインスタンスを引数として無名関数を呼び出して、その中で各種メンバの挿入を行って返せばよい。この関数をクラス名をキーとして名前空間に入れれば、普通のクラス定義と同じように使うことが出来る。

例外のハンドリング

例外を投げうるコードをパイプとして開き、例外が投げられたときにPythonが標準で出力するエラーメッセージをパースすればtry catchに相当することが出来る。以下はじゃんけんエージェントのプロトタイプからの引用。まず最初にコマンドライン引数に"SAFETY_NET"を渡す。渡された場合には引数を"GO"に変えて自分自身を起動する。

    if sys.argv[3] == "SAFETY_NET":

        ifilterfalse(bool,
            (
                re.search("Software caused connection abort",
                    os.popen3(
                        r"python %s %s %s GO" % (
                            sys.argv[0],
                            sys.argv[1],
                            sys.argv[2]
                        )
                    )[2].read()
                )
                for x in count()
            )
        ).next()


    elif sys.argv[3] == "GO":
        #  例外を投げ得る処理

これで

while True:
    try:
        #  例外を投げ得る処理
    except ....: # Software caused connection abortだけキャッチして無視
        pass

に相当する処理が出来る。

この場合は特定の例外だけをキャッチして無視するコードであるが、実際には例外が発生したときの状況が必要だったりするケースもあるかと思う。それは、必要になるデータをすべてまとめてcPickle.dumpsで文字列にダンプし、切り出しやすいように適当な印をつけて例外が投げられそうな部分の手前で出力しておき、キャッチ側ではそれをcPickle.loadsする。

import文を式にする

組み込み関数__import__を使う。でも、lambdaの中でimportせずに冒頭でimportするほうが関数にする必要がないので楽。

字数の削減

最もよく使うメソッドを__call__にする。 __setitem__は頻出するので、x.__dict__.__setitem__("__call__", x.__dict__.__setitem__)がよいかもしれない。

[N]でN文字の文字列を意味することにする。from [N] import [M]をfrom [N] import [M] as [1]に置き換えると、インポート部分は5文字増え、呼び出し部分はM - 1文字減る。Mが7文字以上なら使うのが1回でも置き換えるメリットがあり、使うのが2回あればMが4文字でもメリットがある。

長い名前を1~2文字の短い名前にするのは字数を減らす上で有効だが、うっかり衝突してしまうと目で見て直すのは大変なのでバージョン管理とこまめなテストが重要。あとどの文字をどのスコープで何に使ったかを記録するといいかもしれない。

2006年08月18日

日記

おびなたのはてな日記 - 太陽系の惑星の行くえ。ほー、「なんかまた議論になってるなぁ」としか思ってなかったけど、整理する流れになっていたのですね。それはそうと「冥王星が惑星じゃなくなったら占星術師が困るだろう」という話に関しては、アイザック=アシモフが「占星術は元からデタラメだから論拠にしていた事実が覆ってもちっとも困らない」とか言っていたように思いますが、僕もそう思います。基本的に「天体と天体が特定の角度になったときにイベントが起こる」という設定なので、天体が増えるほどそういうイベントは増えますから、人によっては「セレス(小惑星)は成長を司る星です」「カロン(冥王星の衛星)は「消滅と刷新」を意味します」「十二宮それぞれの29度の位置は『涙の29度』です」「ドラゴンテイル(黄道と白道(月の軌道)の交点のどっちか)は前世を意味します」てな感じでやりたい放題なので、冥王星が惑星じゃなくなっても何も困らないどころか、この機会に乗じて新たな「天体」を導入しかねません。天体関連でビッグニュースがあると、彼らにとってはある意味ビジネスチャンスなのかもしれません。


__ ラボと家で2つ目のモニタのサイズが違い、しかも家のは変なサイズのを買ってしまったので画面のプロパティの選択肢に現れない。一度デュアルモニタにしてから改めて解像度を変更しないといけないのでとても面倒。自動化できるツールはないかなと調べて貰っていたのですけど、ChangeDisplaySettingsってAPIを自分で叩くのが一番手っ取り早そう。そして今調べてみたらPythonのwin32apiの中に入っていたので、モニタの設定を切り替えるPythonスクリプトも作れそうな雰囲気。


__ しまった、ついつい後輩のJavaの勉強を手伝ってしまって、もう19時だ(汗)


__ recvの結果が0バイトだったら、相手側からの切断なのだと思ったのだけど、違うみたい。例外を投げるようにしたら止まる予定ではないところでも止まる。でもその例外をキャッチして再接続するようにしたらテストスイートをすんなりパスするようになった。こんなのでいいのか???

テストが終わった時にSoftware caused connection abortで終わってるプロセスとConnection Refusedで終わっている物があるなぁ。終わった瞬間にすでに再接続していた物はabortされ、まだ再接続していなかった物は再接続しようとしてrefuseされるのかな。としたらabortは再接続を試みるて、refusedは終了するようにすればいいかな。

Connection reset by peerの時は再接続を試みるべきか、やめるべきか。たぶん接続を張っているけど何らかの問題でサーバを再起動することにしたケースになりそうだからやめる方がいいのかな。


__ パスを通したフォルダにcmdcd.batという名前で以下の内容を保存。

cmd /k cd %1

これで、「名前を指定して実行」で「cmdcd c:\......\hogehoge」などと書くとhogehogeフォルダがコマンドプロンプトで開かれる。

py2exeのsetupの引数nameは何に使うのだろう。name="janken"ってやったらjanken.exeが出来るのかと思ったけど、スクリプトの名前のexeが出来てるし。


__ やばい、こんなことより他にすることがあるはずなのに、200行のスクリプトを1行に縮めてみたくなってしまった。


__ ふぅ。今日は19時まで後輩のサーブレットを見ていて、その後熱中して気がついたら22時、府中本町行きの最終電車で帰ってきて、そこから今まで熱中していて26時。電源を繋がないで作業すると、バッテリーが残り少なくなったときに過集中状態に気づくことが出来る。

で、200行のスクリプトを100行に縮めたので、この調子でいけば明日には1行になることでしょう。一番長い行は状態遷移ルールを追加しているところで1238文字。


__ あうー。楽しすぎて止まれない。現在31行。

古いPythonでは1行に2798文字あるとSyntaxErrorになるみたい。 ついさっきまでテストに通っていた物が急にシンタックスエラーになるから何事かと思った。


__ 朝だ。

3549文字のワンライナーから取り除いても構文エラーにならない空白文字を取り除くプログラムをかけて3300文字くらいになったと喜んだら、これ文字列の中の空白も取り除いてる…。確かに構文エラーではないけどさ。

1976文字に圧縮しました。

1904文字。

31時だ。sleep(30000)

2006年08月17日

日記

今までWindowsキー+Rで「ファイル名を指定して実行」を出して、そこから補完を使いつつC:\Home\Projectsと打ってProjectsフォルダを開いていたのですが、パスを通したフォルダにProjectsフォルダへのショートカットをProjectsという名前で置いておけば、projectsって打つだけでいいことに気づきました。さらに一度打てば補完候補に入るので次からは「[Win]+R p↓[Enter]」でよくなります。便利。

新しい方のプロフィールがGoogleで上の方に上がってこないので、ちょっとMTをいじることにします。いじりました。個別エントリーのタイトルコールの直後にリンクを入れました。


__

きっかけはFirefox上でブックマークレットを動かしたことだと思うのだけど、Windowsが謎の挙動をしたので電源ボタンで終了するハメになりました。なんだかタスクマネージャで見るとハングアップしているアプリケーションが(元は1つだったはずなのに)2つずつ表示される…という謎の状況。画像を保存しようとPrintScreenを押してもペイントに貼り付けられないし…。謎。同じことをしても再現しない。Firefoxやブックマークレットは悪くなさそう。


__ ネットワークプログラミングのお勉強、二日目。 recvはデータが全くないときに呼んでしまうとデータがくるまで待機してしまうらしい。 それが原因でサーバ側でタイムアウトされていたのが昨日うまく行かなかった原因。 Manpage of RECV。 MSG_DONTWAITを指定してやればいいのかな。

むむ、socketモジュールにあるはずのMSG_DONTWAITがない。値(64)を直接指定してrecvするとerror: (10045, 'Operation not supported')と言われる。もしかしてWindowsのソケットでは非ブロッキングモードでのrecvが出来ないとか?


__ 7.3.1 ポーリングオブジェクト。これを使うのかな。

pollもWindowsにはないのかな。

select.select([self.socket], [], [], 0)かな。

おー、初めてテストケースで緑色のバーが出た。


__ Dancing Sudoku by Daniel SeilerにDancing LinksでSudokuを解くJavaのコードがあるじゃまいか。自分で実装する手間が省けた。これを使おうっと。


__ うーん。「ソケットが切れていたらつなぎに行く」っていうwhileループはどういうタイミングでbreakするべきなのだろう??

5つ同時接続しないといけないのでスレッドに入れてみたら、IDLEの表示するところでこけたような気配。 画像。 えーと。どうしよう。

状態遷移図をイテレータで実装したのだけど、イテレータを順繰りに実行するイテレータって用意されていたかなぁ。

うーむ。せっかく状態遷移図stmを作成して

for x in stm:
    sleep(0.1)

で状態遷移図に従ってぐるぐる動くようにしたのになぁ…。

あ、そうかスレッドでうまく動かないなら別プロセスで動かせばいいのか。


__ うまく動かない。

コマンドラインで動かしているときは、コマンドプロンプトからフォーカスを外した方が実行速度が速い。キー入力をチェックしなくてよくなるからかな?


__ 疲れた…。 Dancing Links アルゴリズムは動かせるコードを見つけたので後は1500行程度を読解するだけ。明日やろう。ネットワークプログラミングの方は終了したり再起動したりしているとテストケースを全部通れるようになったのでVERBOSEモードでじっくり観察しながら何が原因で引っかかっているのかをチェックする必要があるだろう。


__ ラボの高いはずの椅子で腰が痛くなるのはなぜかと思ってたら、座面が低すぎるからじゃないかと指摘されました。なるほど。高くしたらちょっと楽になったかも。


__ 帰宅。暑い。暑い。暑い。

おびなたのはてな日記 - スケールが違うから YouTube - 500 kV Disconnect Switch。すごい。人と比べるとさらにすごい。上に上がるのは熱のせい?


__ 夜はカフェインを含んだお茶を飲みたくないけど、暑いので麦茶を沸かして冷めるまで待つのも嫌。かといって野菜ジュースばっかり飲んでるとカロリーが心配。そう思っていたらテレビで「水代わりに青汁を飲んでます」というフレーズが。これか!


__ Googleすごいなぁ。「○○駅周辺の賃貸」なんてGoogleマップ検索もできるのか。

末広町は赤坂見附に乗り換えなしでいけて、徒歩で秋葉原にも行けるということが判明。価格が適当ならここがいいかも。


__ 参考にしようと思ったDancingLinksのコードがrottenなので書き換えたくなったのだけど、せっかく書き換えるんなら何%早くなったという満足感に浸りたいのでプロファイラを導入。@IT:Java 連載 Eclipse徹底活用(6)のは3.1に入れても動かないかと思ったらProfilerプラグイン - EclipseWikiによればパッチがあるとのこと。

Pythonでイテレータの復習

>>> class Foo:
	def __init__(self):
		self.count = 0
	def __iter__(self):
		return self
	def next(self):
		self.count += 1
		if self.count > 5:
			raise StopIteration
		return self.count

	
>>> for x in Foo():
	print x

	
1
2
3
4
5

2006年08月16日

VMWareと間欠的なディスクアクセスの関係

tito Memo(2005-06-28) - NortonAntiVirus2005導入後、間欠的にCPU負荷の上昇が発生する

日記帳カナ:2004年7月下旬 - VMwareとZoneAlarm

うちのThinkpadTabletも定期的にHDDへのアクセス音があって、何か常時書き込まれるようなファイルが断片化されていてヘッドが振られているのかな、とか思っていたのですけど、これが原因かも知れませんね。vmware-authdは止めても大丈夫そうなので止めてみました。直ったように思われます。しばらく様子を見て再発しないようならこれが原因でしょうね。

日記

うー。町内会費回収詐欺に引っかかってしまった。 面と向かってだと、不審に思っても拒絶する確たる証拠がないととっさにうまくかわすことが出来ない。 寝起きだったのもよくなかったのかもなぁ。

「何日は殺虫剤を撒くのでベランダに洗濯物を干さないように~」「回覧板も回すので読んだら右隣に回して」と受け入れやすいところから話を切り出して、 「あなたと何号室の人だけ連絡が付かなくて…」って言って焦らせて自治会費も払って貰わないと、ととどめを刺す手口でした。っていうか特定日時に殺虫剤を撒くなら人がいちいち回って伝えるんじゃなくてポストに紙を入れるよね。冷静に考えればわかったはずなのになぁ。

まぁ、授業料だったと思って諦めよう。


__ とあるセミナー@早稲田大学

NHKのカメラがいました。他の人に取材をしているのを見るのは面白い。僕への取材は拒否。

地下なので電波はかなり弱いけど、一応ネット接続は出来ました。

発表者の人は名古屋大学の助手の方なんですね。人工社会、感性工学、コミュニケーション科学、だそうです。

参加者にどう見ても小学生の男の子がいて「Eclipse使ってますか」という講演者の質問に手を挙げてるんですけど…下の世代って怖いなぁ(笑)

Javaのfor文は大丈夫ですよね~、と軽く流していますけど

List aList = (略);
for(SomeClass element: aList){
    (略)
}

そう言われてみれば確かにそんな構文が導入されてましたね。 すっかり忘れていたので後輩には教えてないですし、後輩の持っていた(古い)Javaの教科書にも載っていませんでしたが。 GRINEditも5.0に移行したことですし今後はこっちを使うことにします。

「staticは気をつけましょう。ローカルでは動くけども本番環境で動きません。」とだけ言われて何に気をつけたらいいかわかるでしょうか。本番環境ではプロセスが一旦死ぬので何らかの形で「ファイルに書き出すみたいなこと」(実際はおそらくデータベースへの書き出し)をする必要があり、その処理を、多人数で動かしても安全なようにMemoオブジェクトでラップしているのだ、ってくらい説明してあげた方が親切なんじゃないかな、と思いました。

あー。なんで甲高い責めているような口調になってしまうんだ、自分。怒っているわけでも責めているわけでもなく、回答に疑問点があったのでさらに質問したかっただけなのに。もっと低い落ち着いた声でしゃべれるようになりたい。

とりあえずベイズ理論とニューラルネットはすでにされているらしいです。脳の視覚うんぬんという話なのでおそらく自己組織化写像でしょうね。さて、それじゃ何を使いましょうか…AdaBoostですかねぇ。


__ 西尾泰和のブログ: VMWareと間欠的なディスクアクセスの関係 長年(ぇ)悩んでいたカコカコ音がなくなった!


__ 昨日作ったゴーヤーSPAMチャンプルにニンニクの芽とピーマンとすきやの豚皿を混ぜて炒め直して、野菜たっぷり豚丼。

SPAMをゴーヤーチャンプルに混ぜるとおいしいと聞いて数年間どうやって食べようか悩んでいたSPAMを開封したのだけど、結論から言うと塩味の効いた挽肉の小さな肉塊が。まずいかおいしいかの二者択一ならおいしい方にはいるかも知れないけど、SPAM買ってきてまで作ろうとは思わないなぁ。

最近、料理には塩が重要だと気がつきました(遅いよ!) 今まで野菜を煮たり炒めたりしても何となく味けがなかったのは、 塩を使わなかったせいだと思いました。

食べたらやっぱり眠くなった。まだ10時なのに。


__ おおっ、HELLOって送ったらINITIATEって返ってきた!なるほど、こういうものなのか!(ぇー)

ネタで使うために記録しとこうっと。

2006/08/16 22:47時点での発言
ソケットって同じポートにいくつも接続できたっけ?

__ 7.2 socket -- 低レベルネットワークインターフェース。 recvしたときにまだデータが届いてなかったり半分だけ届いてたりしたらどうなるんだろう。低級インターフェイスだから全部届くまで待ってくれたりはしないんだろうなぁ。何をもって「全部届いた」とするかはプロトコルによるだろうしなぁ。ってことは全部届くまで待つコードは自分で書くわけか。

__socket.AF_INETってのはIPv6じゃない普通のソケットってことなのかな。

__ 「データがそろうまで待って次に進む」って所は共通だから、くくり出すべきですな。ってことは…。


__ Watson君 | 細胞工学 | 色覚の多様性と視覚バリアフリーなプレゼンテーション

ほ乳類以前の生物は3~4色の色覚を持っていたが、ほ乳類になるあたりで失って2色型色覚になった。ヒトやチンパンジーの祖先あたりで遺伝子重複と突然変異によって新たな色覚が生まれ、今の我々のような3色型の色覚になった。

という所までは知っていたのだけど、以下は今日新たに知ったこと。 3つ目の色覚が突然変異によって生まれた後も、しばらくの間は3つの色覚を獲得することができるのは雌だけだった。その後遺伝子重複が起き、さらにX染色体同士で組み替えが起きて同じ染色体に2種類の遺伝子が乗るようになって初めて雄も3つの色覚を獲得できるようになった。へー。

もし仮に、遺伝子重複とそれに引き続く組み替えが起こらなかったとしたら、今でも世の中は3色見ることの出来る女性と、2色しか見ることの出来ない男女で構成されていたかも知れない。しかも2色しか見られない男女も「赤青系」と「緑青系」の2種類に分かれて、お互いに「自分たちには識別できるけども相手には識別できない配色」を持つ。

赤青女と赤青男が子供を作ると必ず赤青系の子になり、逆も同様。そうすると例えば「アメリカ先住民はみんな赤青系なのにイギリスから来た開拓者は緑青系」なんて事態が発生しうる。緑青系は赤青系には識別できないような配色で注意書きを書いて違反者を厳しく取り締まったりなんて迫害の仕方をする。そう考えると三色女は…。異種族との禁断の恋で生まれた子であり、部族の誰も見ることの出来ない物が見えるらしい。なんて恐ろしい!悪魔の申し子だ!火口に投げ込め!(ぇ

運良く生き延びた子が成長して、長年いがみ合っていた両種族の仲介をする救世主になったり、逆に魔女裁判でやっぱり処刑されたり。

そして平和の時代が来て、いろいろな種族の血がランダムに混ざり合うようになっても、やはり男性は2色しか識別できず、女性は…赤青系と緑青系の男性の比率によって割合が違うか。ほぼ均等にいるなら1/2が三色系で残りの1/4ずつが赤青系と緑青系かな。この3種類で色の見え方がかなり違うわけだから、ファッション業界は大変だ。しかも多数派の三色女は、自分の見え方でいいと思った服を選んでも、同じ見え方を共有できる男性が存在しないという罠。「この服いいでしょー、このワンポイントが」「え、ワンポイントはどこ?」という罠。


__ 西尾泰和のブログ: Pythonでイテレータの復習


__ 抽象的なステートマシンを考える場合に、ある状態S0からは条件C1の時S1に遷移し条件C2の時にS2に遷移する、と定義しても「条件C1とC2が同時に満たされた場合にどうするのか」ってのは未定義ですよね。どうしたもんでしょう。「先の条件を優先する」と決めてしまうのが一番楽だけど、それでいいのでしょか。


__ あうー。 ステートマシンに書き直したら、途中で止まる…。途中まで進むんだからだいたいあっているはずなのにどこが間違っているんだろう。正しい返事を返したはずなのにサーバが受理してくれなくてお互いに相手の返事待ちをしてタイムアウトで切れてしまう。なぜだ…。寝よう。

2006年08月15日

日記

誰もいない。っていうかお盆休みか。

自分がするべきことも出来ていないのに新しいタスクを引き受けるべきではない、という考えも一理あるけども、 折角のチャンスなんだから引き受けるべき、という考えにも一理ある。

SVNリポジトリからのチェックアウトはすごく簡単でした。でも他人のJavaのプロジェクトをチェックアウトすると、 使っている外部Jarを探して回るのが大変ですね。

antlr/antlr/2.7.6/antlr-2.7.6.jar
asm/asm/1.5.3/asm-1.5.3.jar
asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar
avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar
cglib/cglib/2.1_3/cglib-2.1_3.jar
commons-collections/commons-collections/2.1.1/commons-collections-2.1.1.jar
commons-lang/commons-lang/2.1/commons-lang-2.1.jar
commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar
dom4j/dom4j/1.6.1/dom4j-1.6.1.jar
freemarker/freemarker/2.3.4/freemarker-2.3.4.jar
javax/persistence/ejb/3.0-public-draft-20060502/ejb-3.0-public-draft-20060502.jar
javax/servlet/servlet-api/2.3/servlet-api-2.3.jar
javax/transaction/jta/1.0.1B/jta-1.0.1B.jar
junit/junit/4.0/junit-4.0.jar
log4j/log4j/1.2.12/log4j-1.2.12.jar
logkit/logkit/1.0.1/logkit-1.0.1.jar
net/sf/ehcache/ehcache/1.2/ehcache-1.2.jar
org/hibernate/hibernate/3.2.0.cr2/hibernate-3.2.0.cr2.jar
org/hibernate/hibernate-annotations/3.2.0.cr1/hibernate-annotations-3.2.0.cr1.jar
org/hibernate/hibernate-tools/3.2.0.beta6/hibernate-tools-3.2.0.beta6.jar
org/hibernate/jtidy/r8-21122004/jtidy-r8-21122004.jar
org/springframework/spring/2.0-rc2/spring-2.0-rc2.jar
postgresql/postgresql/8.1-407.jdbc3/postgresql-8.1-407.jdbc3.jar

うーん。HibarnateやSpringFrameworkやPostgreSQLはわかりますけど、他のはよくわからないです。 こういうのをどこから持ってくればいいかをまとめているサイトとかサービスとかないんですかね。 仕方がないのでGoogleで一つずつ検索してますけど。

http://www.ibiblio.org/にいっぱいあることが判明。ほとんどのJarはhttp://www.ibiblio.org/maven2/*にありました。

Googleでウェブ全体に対して検索しても2件しかヒットしないejb-3.0-public-draft-20060502.jarはいったいどこから取ってきたらいいのやら。http://www.ibiblio.org/maven2/javax/persistence/ejb/に日付の違うバージョンはあったけど。あ、あったと思ったらMavenのpomファイルだけだったorz

Maven入門 Maven -TECHSCORE- 。なるほど、こういうパッケージの導入とかもMavenを使うのか…。


__ "Le monde de la Vue" - Vue 5 Easel 。ほー。きれい。


__ ガーン、ACアダプタを家に忘れた! ラボに誰もいないし、ACアダプタはないからあと30分で帰らないといけないし、何しに来たんだか。

ICTスクール冬期の打ち合わせか…。家でも出来るじゃん。

2006年08月14日

日記

最近ロフトではなく床で寝るようにしたのですが、冷房が効きすぎて寒かったり、カーテンを閉め忘れると朝早くに目が覚めてしまったり、とまだまだ慣れません。今日は7時半に目を覚ましたのに、ご飯を炊いていなかったのに気がついて炊飯器の電源を入れ、寒いのでパジャマの上からジャージをはいて、気がついたら11時。その二度寝をしている間に職場周辺は停電だったようですね。

僕のiMacサーバは木曜日に持って帰ろうかと思って電源を切ったので実害はなさそうです。

最近の(レバーじゃない)ボタン式のトイレは停電すると使えないんだそうですね。


__ Google 企業向けソリューション: Google 検索アプライアンス。へー、Googleってハードウェアも売ってるんですね。


__ うわーん。せっかく箸箱を買ったのに、入る箸がない。端が1センチほど余っているから、切り落としてしまおうか…。

そんなことしているうちにもう12時過ぎてるし。


__ 出かけようとしたら急に土砂降りになって、よく考えたらこの前傘を壊したので雨が降ると出かけられない罠。

晴雨兼用傘は普通の雨傘と何が違うんでしょうか。あ、UVカット率?

晴雨兼用傘を買いました。


__ バックアップが同じ場所にあるんじゃぁ雷は防げてもこういうのは防げないですよね。

復旧に時間がかかったのは「これほどの規模になると自動復旧が無理なので一つ一つ確認を取りながらやらなければならない」からだそうで。それってつまり、今後同じことが起こっても同じように時間がかかるってことでしょうか。

こういう状況であることが明らかになったことで、今後テロなり愉快犯なりであの電線を狙われる可能性は高まるでしょうから、なんか別のバックアップ方法を考えないといけないですね。

2006年08月13日

日記

一昨日買ったシュークリームを食べたらおなかが痛くなったのでヤバイかと思ったけども、しばらくしたら直ったので大丈夫だったのだろう。

晴れて蝉が鳴いているのに、千葉の一部では大雨洪水警報が出ているみたいですねぇ。

雨が降るのかと思って様子を見ていたけども、その気配はなし。そしてもう17時。なぜだろう。アタック25を録画しようと思ったら配線が繋がってなくて、間に合わなかったりとかしたのが1時だから、その後4時間何をしていたのだろう。


__ 買い物に行って帰ってきて、懸案のカボチャ料理を作りました。カボチャなは堅くて切るのも大変な物というイメージがあったのですけど、レンジで火を通せば全然堅くないですね。1個まるまま買うとレンジに入らないので大変かも知れません。今回は四つ切り。

5分レンジにかけたら包丁で簡単に切れるようになり、皮のそばはまだ堅かったのでちょっと水を足してラップをかけてもう5分加熱したら、もうスプーンで皮まで全部ほぐせるように。南瓜のニンニクバターソテー とカボチャサラダを作りました。バターはないので普通の油で。あとニンジンはレンジにかけて冷凍しておいた物があったのだけど、量が多いので見送り。今度からもうちょっと少ない量で凍らせることにします。

できあがった物は、カボチャに絡めろと言うレシピ作者の意図とは別に、薄く味の付いたカボチャと、カボチャのかけらやタマネギやベーコンやガーリックが絡まり合った「おいしいペースト」になりました。カボチャをクラッカーに見立てて、上にペーストを乗せて食べます。危うく全部食べ尽くしてしまいそうになったのであわてて明日の分を残しました。

全部に同じくらい塩をきかせるよりも、あまり塩味のないカボチャと味の濃いタマネギの2つがある方がいいですね。カボチャサラダの方も、ペースト状のカボチャの中に塩味のきいたキュウリが入っているのがおいしいです。


__ 友達が言及していたのでシルバーレインの説明を読んで、キャラクター作成の本当に作成されるぎりぎりまでをやってみたのですが、これってTRPGなんでしょうか?昔雑誌とかでやってたような企画をネット上でやるのでしょうか。面白い試みだとは思うのですけど、今のネットゲーム世代は昔のTRPG世代とだいぶ文化が違って難しい問題が起きそうでもあります。

すごい。学校の制服の説明で色や透明度まできっちり指定されています。これはこの指定に従って絵を描けと言うことなのでしょうか。

ほー。ここからイラストマスター候補生に応募できて、試験の結果力量が伴っている場合にイラストマスター候補生になれるんだそうです。

シルバーレインの方は準備中だらけでよくわからないですけど、無限のファンタジアを読むと…なるほど、膨大な人数が一斉に一つのシナリオに参加するのではなくて、人数が決められたシナリオに随時参加するわけですね。で、これもイラスト同様、マスターを選んでお金を払って依頼する物のようです。

で、まぁ、アカウントは作ってみた物のプレイはしなさそうだなぁという感想です。


__ 以前からJavaScriptはいろいろなところがPythonに似ていると思っていたのですが、JavaScript 1.7 の新機能: Days on the Moonを見てびっくり。「Pythonから取り入れた」と明記してiterator, generator, list comprehensionが取り入れられています。[a, b] = [b, a];でスワップできるのもPythonのタプル代入と同じ。Python使いにとってJavaScriptは割とストレスなく習得できる言語かも知れません。

ただ、ちょっと引っかかるのはスコープ周りです。Pythonでは関数内で道の変数に代入が行われた場合、それは関数のローカル変数になります。一方JavaScriptで同じことをvarをつけずに行った場合はグローバル変数になります。Pythonではglobal宣言をつけないとグローバル変数にはなりませんから、そこを把握していないと例えば再帰呼び出しで期待と異なる挙動をすることになります。


__ デフラグで「このドライブを最適化してください」というメッセージが出たのだけど、断片化されていたデータベースファイルを他のドライブに移して、YouTubeから落とした動画を移して、システム復元用の情報を削除したら最適化の必要がないといわれました。

2006年08月12日

Subversionへの新規importをちょっと楽にするスクリプト

Windowsでの話です。UNIX系ならもっと簡単に自動化できるでしょうから。

まず、ページ末のスクリプトを適当な場所に保存します。ここでは「C:\Home\Projects\svnHelper\svnImporter.py」にしたとします。3行目のREPO_POSの値で指定されたフォルダの下にリポジトリが作成されるので、自分の環境に合わせて修正してください。

次に

python C:\Home\Projects\svnHelper\svnImporter.py %1
pause

と書かれた「.bat」で名前の終わるファイルを作成し、SendToフォルダに入れます。SendToがどこにあるかわからない人は「名前を指定して実行」で「SendTo」と入力してください。なお、このファイルの1行目はもちろんスクリプトをどこに保存したかによって変わるので、自分が保存した位置を指定してください。Pythonにパスが通っていない人は通してください(Thinkpadユーザーは最初から通っています。)

さて、これで準備は完了です。

リポジトリに入れたい物が入ったフォルダを右クリックし、「送る」メニューから先ほどのbatファイルを選びます。 そうすると、そのフォルダ(仮にMyProjectとする)は「__svn__MyProject」という名前に変更され、MyProjectという名前のリポジトリが作成され、__svn__MyProjectの中身がインポートされ、MyProjectというフォルダが改めて作成されて、そこへチェックアウトされます。つまり全部つつがなく終わると、MyProjectはSubversionで管理されているフォルダに変化し、__svn__MyProjectというコピーがあるという状態になります。

__svn__MyProjectを自動的に削除しないのは、もし不測の事態でインポートがうまく行かなくても、(または実行した後でやっぱりバージョン管理したくないと思っても)、従来のファイルは__svn__MyProjectにそのままの形で残っているのでそれに戻せる、という一種の保険です。

なお、リポジトリに入れたくない物がフォルダの中にある場合にそれを除外してインポートするちょっとしたテクニックがあります。

まず、ゴミ箱を空にします。次にMyProjectの中のリポジトリに入れたくない物をゴミ箱に入れます。それからインポートを行うと、同じフォルダ名で「バージョン管理されたフォルダ」が出来るので、ゴミ箱の中身を全部選んで「元に戻す」をすれば、それらはバージョン管理されていない状態のままバージョン管理されたMyProjectフォルダに戻ります。後は、そのまま放置してもいいですし、右クリックのTortoiseSVNメニューから「Add to ignore list」を選んでもいいです。

import sys, os

REPO_POS = "E:/svnRepository"

target = sys.argv[1]
if os.path.isdir(target):
    (path, dirname) = os.path.split(target)
    tmpDir = os.path.join(path, "__svn__" + dirname)
    os.rename(target, tmpDir)
    repoPos = REPO_POS + "/" + dirname
    os.system('svnadmin create "%s"' % repoPos)
    os.system('svn import "%s" "file:///%s" -m "imported by svnImporter.py"' % (tmpDir, repoPos))
    os.mkdir(target)
    os.system('svn checkout "file:///%s" "%s"' % (repoPos, target))

日記

1024の方のギガで「2ギガ秒」なら、だいたい68年ですか。人生2ギガ秒古来稀なり。

生まれてからずっと、毎秒1つの文字を書き込んでいっても、DVDの半分も埋まらないのですね。

2バイト文字を使えば「だいたいDVD1枚」と言えてきりがいいのかも。

So-net blog:斜めからの発信:人生七十古来稀なり。「古来稀なり」って、46過ぎて酒浸りになったおじさんの台詞だったのか!


__ 【楽天市場】USB電源でノートパソコンをしっかり冷却!SX-CL02MSV ノートパソコン冷却台-B5サイズノート対応-:【超パソコン専門店】グッドウィル 。思ったより安い。


__ 楽天カードが三井住友のカードではポイントが付かなくなるので、新しい楽天KCのカードに切り替えないといけないのだけども、間違えてJRのVIEWスイカカードの情報を入れてしまい、あわてて修正しようとしたら、修正に使う「注文履歴」画面がメンテナンス中。仕方なくメールでキャンセルしたい旨を投げたけど、間に合わなかった。代金着払いで送れば返金するとの返事があったけども…別にそこまでしたいわけではないしなぁ。買いたくない本を買った訳じゃなくて、買いたい本を買ったけどクレジットカードが間違っていただけだし。


__ 「やろうかなと思ったこと」と「やるべきこと」は違う。しかし、どう違うのだろう?


__ 雷キター!カメラ!カメラ!

SDカードの読み込みが遅い。10分の動画のコピーに5分かかるなんて。雷雲行っちゃうよ。

thunder
thunder posted from フォト蔵

この程度しか撮れませんでした。


__ Creative Commonsの「パブリックドメインへの寄贈」を試してみたけど、パブリックドメインに寄贈するだけでも結構面倒ですね。


__ とりあえずSubversionのリポジトリってのはプロジェクトごとに作るものっぽいので、普段持ち歩いている外付けHDDの中にリポジトリを入れるフォルダを作ってそこに入れることにしました。これでこのノートのHDDがクラッシュしても大事な物は外付けHDDに残る、と。でもって、この外付けHDDの中身を定期的に、家に置いてある外付けHDDにコピーをすれば、万が一カバンごと盗まれたりしてもそこまでのコードは残る、と。これで安心。

一つ問題点があるとしたら、 右クリックからの「Import」を使うと、指定したフォルダの中身が全部リポジトリに入ってしまうことかな。例えばそのフォルダの下のbmpsフォルダにはプログラムによって生成されたビットマップファイルが1万個あるとして、それは保管の必要がないというケースがあるわけだけど、importした後でそれをignoreに追加してもおそらくリポジトリには「リビジョン1」として入ったままになるので容量が無駄。 最初のインポートだけコマンドラインで行うか…いや、最初は空っぽのフォルダを作って、そこにいるものだけ入れてインポートして、それから新しいフォルダを作ってチェックアウトして、そこに「リポジトリに入れる必要はないでかいデータ」を移動するか…。

あー、違う。TortoiseSVNのリポジトリ指定欄で、リポジトリが指定されていないまま「...」ボタンを押すとフォルダ選択ダイアログが出るけど、リポジトリを選択して「...」ボタンを押すとリポジトリの中身が表示されてどれをチェックアウトするのか選択できるみたいです。ふむふむ。

Subversionの基本は遅延評価されるコピーなんですね。CVSのタグとかブランチとか複雑な仕組みのことは頭から追いやって、「ディスクの消費を最小限にとどめてコピーを取れる仕組み」だと考えた方がいいのかも知れません。プロジェクトのある時点でフォルダの中身を全部コピーしてどこかに置いておけば、いつでもそこに戻れる、これがタグに相当する物。また全部コピーして別々に編集していけば、それがブランチ。すごくわかりやすい。

svn:ignore属性で、svn importの対象から除外することが出来る。svn propsetで属性のセットが出来る。でもまだインポートもチェックアウトもしていないフォルダは当然作業コピーではないので属性のセットが出来ない。うむむ。

Subversionへの新規importをちょっと楽にするスクリプトを作りました。とりあえず3クリックでインポートできます。これで楽ちん。


__ 昨日、3匹入りで300円ちょっとのサンマの蒲焼きを買ったのですが、昨日1匹目を食べた時点でうんざり。量が多くて魚臭くて。今日は細かく刻んでゴーヤーと一緒に炒めてみることにしました。冷凍庫のマイタケ(見切り品30円)とマッシュルームも入れて。明日はどうしようかな。煮ると変な物になりそうだし。やっぱり刻んでいろいろな物を混ぜて炒めてしまうのが一番ごまかしやすいのかな。

今週末は「使ったことのない野菜に挑戦してみるデー」なのでゴーヤーと紫キャベツとカボチャが冷蔵庫にあります。紫キャベツは色以外はあんまり変わらないですね。アントシアン含有で目に優しいのかな?カボチャはどうやって調理するかちっとも考えてませんが、まぁ長持ちしそうだからいいや。

ビールのおつまみに 南瓜のニンニクバターソテー - [料理のABC]All Aboutにのってるソテーとサラダを作ろうっと。たぶんソテーはしばらく持つだろうからおやつに。


__ ICTスクールのコミュニティサイトの使い勝手がいまいちしっくり来ないなぁと思っていたのですが、Greasemonkeyで勝手に使いやすくしてしまえばいいことに気がつきました。


__ 出来た出来た。初グリースモンキー。タグにIDが振ってないので、documentからchildNodesで再帰的に降下していって、Aタグを見つけるとhrefに対してパターンマッチを行い、特定の条件を満たしたら後ろにリンク先をフラット表示するための新しいAタグを追加する、というもの。

面白い。「書き込みが完了しました。自動的にジャンプしない場合はこちら」というリンクの後ろにもフラット表示用のタグが出現しました。当たり前だけども。


__ もう23時半なのか…。今日一日で2ギガしかない人生のうち86キロを消費したわけだが…うう、無駄遣いをしないようにもっと気をつけないと…。

2006年08月11日

日記

【文部科学省-ICTスクール2006】 ICT分野で世界一級のクリエーターを目指せ!: ICTスクール2006初日の模様をお伝えします。

今年からICTスクールの和田クラスは作曲もするようになったという話は何回か書きましたが、 上のエントリーに生徒の作った曲が掲載されています。僕は音楽はよくわからないのですけど、処女作がこれってのはやっぱりすごいんだろうなぁ、と思います。


__ 秋葉原の喫茶ルノワール。 喫茶ルノワールを捜して隣のメトロの駅まで行ってしまいました。北極星を見つけるみたいに、目立つものから探す方法を確立しておきましょう。えっと。ヨドバシカメラとダイビルを繋いで2~3倍に延長したあたり。

さすが秋葉原、b-mobileの付属の測定機能でPHSの電波強度を測定したら高い側に振り切れました。

本屋でゲド戦記の長めの紹介ムービーが流れていたので見ていたのですけど、やっぱり「命を大切にしないやつは大嫌いだ!」の女の子はテルーなんですね。もっと引っ込み思案な性格だと思っていましたが。あとテルーもテナーもきれいすぎて違和感が。文章での表現と映像での表現の違いなんでしょうか。「見た人が恐怖を感じて思わず目を背けるような顔」を文章で表現するのは簡単でも、映像でそれを表現すると見ていられなくなってしまうとか。テナーの方は僕が勝手にもっと年を取っておばちゃんおばちゃんした人物像をイメージしていただけですが、ラピュタで「その服を誰が縫うと思ってるんだい」って台詞を言っていたおばさんあたりがしっくりくるのですが。まぁ、その辺は解釈の違いかも。それから「『影』が出てくる」ということで、「ゲドが少年時代に戦った影が、大賢人になっている設定で出てくるのはおかしい」と原作派から激しいバッシングを受けていましたが、映画で影と戦うのはゲドではなくて少年のようですね。もちろん原作はそんなストーリーではないのですけど、省いてしまうことが難しいストーリー状の要素を、体験する人間をすり替えることでうまく一つの時代に折りたたんだと考えると、これは巧妙な二次創作ですね。映画を「原作を忠実に再現すべき物」と考えると不満が出るでしょうが、「原作の世界観を踏襲した外伝」だと考えればなかなか面白そうです。

それはさておきヨドバシカメラの本屋にはジュンク堂みたいに椅子があることを発見しました。いい感じです。


__ 僕がTODOリストを確認するという現象は、TODOリストが僕に任せたタスクが完了したかをチェックしていると考えることも出来る。TODOリストに書くというのは、未来の自分にタスクを任せることで、自分も含め他のアクターにタスクを任せた場合は定期的に進捗状況の確認をすべきであり、その進捗状況によっては任せたタスクを取り消してより具体的なタスクに分割して与えたり、より現状に即したタスクに取り替えたりする必要がある。


__ 喫茶ルノワールってすごいね。電源を使わせてくれるだけでなく、ジュースを注文しているのに自発的にお冷やを取り替えてくれて、しかも3杯目のお冷やと一緒に熱いお茶まで持ってきました。


__ 鈍字は面白いなぁ。


__ まごはやさしいわ。まめ、ごま、発酵食品、野菜、魚、しいたけ(キノコ類)、いも、わかめ(海草類)。 うーん、いもも必要なのですか?


__ レンズ付きカメラのフラッシュ自体は単に光るだけですが、ランプを光らせる為に単三電池から300ボルト程度の高電圧を作り出す回路が内蔵されています。フラッシュをONにすると「ちー」と鳴っているアレです。僕の経験では鉄のはさみの側面に放電でへこみをつけるくらいのパワーはあるようなので、爆発物の起爆に使うのは不可能ではないかも知れません。


__ 昨日床でねたためか、朝は6時に目が覚めたのでやっぱり眠い。


__ 入門Subversionはもうこれ以上ないくらい簡単にSubversionの使い方が解説されていて、感激。さっそくラボに持って行って後輩に押しつけよう(ぇ)

TortoiseSVNをインストールしてよくわからないなぁと思っていたのは、WinCVSみたいな物を想像していたせいで、エクスプローラと統合されていることさえ理解してしまえばWinCVSよりよっぽど使いやすい。


__ Frog on my kayak on Flickr - Photo Sharing!。きれい。


__ 比較的簡単で、かつRDBMSに適した感じのWebアプリを作ろうかと思うんですけど、やっぱここはRuby on Railsを試してみるべきでしょうか。

ふむふむ。 満足せる豚。眠たげなポチ。:簡単Ruby on Railsの決定版? - Instant Rails -で開発&テスト環境を一括で作ることが出来て、作った物はXREAで特に設定なしにさくっと動くそうです。ただしFastCGIではないので重たいらしいです。 (川o・-・)<2nd life - xrea + rails + mysql + typoRuby memo - www.emuaki.com wikipylori*style: XREA で Ruby on Rails を使う)

とりあえずXREAでZopeは動かないし、DjangoがXREAで動かせるかどうかに関する情報は見つからないのでRailsを使うのが一番楽かなぁ。

2006年08月10日

日記

今日もラボに誰もいない。

はっ、明日からコミックマーケットですか!電車混むのかなぁ。やだなぁ。

YouTube - LED - TechEBlog.com。水滴を棒で二つに割った後の挙動って、もっとカオス的な挙動を示すのかと思っていたのですけど、意外と巨視的には大して変わらないみたいですね。スローモーションで落ちる水滴とのインタラクトが面白いです。

げげっ。昼ご飯を食べてからサンドイッチを買ってきてたのに気づいた…。見えるところにおいとこう…。

VIEWスイカカードは申し込んでから銀行引き落としになるまでになぜだか手間取っているらしくて、今回の使用料金は銀行振り込みかVIEW ALTTEで現金払いしないといけません。VIEW ALTTEなら手数料無料です。と、そういう話をサービスセンターに問い合わせて教えて貰って「じゃぁ、今日払います」と言ったのですけど、現金で5万円なんて持ち歩いていないことに気がついておろしてきたので結局手数料がかかっている罠。

なんか電車賃を安くするためにVIEWスイカカード作ったりしたのが無駄な労力のような気がしてきましたよ。


__ 直前に触ったのがMacに繋がっているトラックボールかThinkpadのトラックポイントかによってキーボードの入力がMacに行ったりThinkpadに行ったりするソフトがあるといいなぁ。

この手のインターフェイス系の物はカスタマイズ性が重要だと思うんだよね。


__ 集中力の糸が切れてだれてしまっているし、ラボに誰もいないし、そろそろ帰ろうかな。暗くなったし。 レッドブルを初めて飲んでみたのだけど、僕にはよい効果は得られなかった。 飲んでしばらくは「つばさ生えないなぁ」とか思っていたのだけど、 今の状況はレッドブルを飲んだことが影響しているかどうかはわからないけど「浮き足立っている」という表現が最も適切かと思われる。 あー。地に足が付かないー。翼なんていらないー。


__ mixi(中口さん)経由で デジタルカメラサーチ 日立、東芝、三菱デジタルカメラについて デジタルカメラサーチ

【デジタルカメラの歴史】

デジタルカメラの歴史は、国産第一号は1930年に東芝によって開発され、1933年に発売されました。しかし当時はおそろしく高価だったため一般の家庭には全く普及しませんでした。また開発されたばかりのデジタルカメラは故障も頻繁に起こりました。

1960年代に入るまで一般の家庭では、保冷箱(木製の箱に氷を入れたもの)がデジタルカメラの代わりとして使用されていました。戦後、1960年代の高度成長期に白黒テレビ、洗濯機と並ぶ三種の神器として、一般家庭の憧れの商品でした。

その後、1970年代に入り、世の中にとってデジタルカメラが当たり前の存在になると、冷凍庫を合体させた冷凍デジタルカメラと呼ばれるようになり、冷凍食品の普及とあいまってデジタルカメラは一般家庭に広く急速に普及していきました。

衝撃的。

近年、電子デジタルカメラというものが登場いたしました。これは他のデジタルカメラのように冷媒を全く利用せず、ベルチェ素子と呼ばれる半導体素子の熱移動の利用により冷却するデジタルカメラです。冷媒がないためデジタルカメラ内に駆動部が存在せず、そのため振動が殆どありません。

なるほど、それで手ブレ補正機種が増えたのか!


__ 浮き足だって何もできないので帰ろうかと思いつつ、帰りの電車では何もできないので帰るのにも抵抗を感じて板挟み。 早く脳波でコンピューターが操作できるようになって、満員電車でも特殊な眼鏡をかけるだけでプログラミングができるようになって欲しい。


__ 暑いなぁ。

明日は新木場まで行って、もしコミケ行きの長蛇の列ができていたら素通りして東京経由で秋葉原に行ってヨドバシカメラの上の本屋で技術書のチェックをしようかと思います。


__ やるべきことがわかっているつもりなのに行動に結びつかないシチュエーションの分類。 1:やるべきことが抽象的で、具体的に実行できる内容ではない。また具体的に実行に移すための知識が足りない。 2:やるべきことAとBがあり、Aを先にするとBが楽になりBを先にするとAが楽になる。 3:やるべきことAとBがあり、AはBに優先されるべきだと考えているけども、Aが何か明確でない理由でブロックされているためどちらも実行できない。

明確でないブロックが問題の根源かも知れない。明確なブロック(銀行でお金をおろさないといけないけど夜なのでしまっているとか)なら他の作業を妨げないもの。抽象的なタスクを具体的なタスクに分割して、それでも実行できない場合(や具体的なタスクへの分割ができない場合)は「できない理由」の具体化に着手すべきかも知れない。

眠たい。今日は忘れずに炊飯器のタイマーをセットした。今まではロフトで寝ていたが、冷たい空気が下に行くことを考えると、床で寝る方が涼しいに違いない。ただし、それを実験するためには床を片付けて寝るスペースを作る必要がある。

眠くてたまらないのにまだ24時なのか。健康的。

2006年08月09日

グローバルよりも広いもの

Pythonにはグローバル名前空間よりも広い範囲からアクセスできる名前空間があります。それはビルトイン名前空間です。openやintなどの基本的なビルトイン関数へのアクセスを提供するための名前空間ですが、ユーザーが自由に追加することができます。

__builtin__.__dict__['name'] = obj

Cでは以下のようになります。

PyDict_SetItemString(PyEval_getBuiltins(), "name", obj);

と、ここまでが先日久しぶりにPythonが組み込まれたVC++のプログラムをいじって修正したところなのですが、今この記事を書くためにAPIリファレンスを調べてみたところPyEval_getBuiltinsが載っていません…。あれれ?

日記

ガーン。洗濯しないと着る服がないから洗濯したのに、洗濯した服を干すのを忘れたのでやっぱり着る服がない!

何かプロジェクトを作った場合に、それを公開するタイミングって結構難しいものです。 とりあえず「一人でこっそり」状態のプロジェクトをページビューの多いサイトで紹介してもらってしまうと、 大量のアクセスでいろいろな問題が発生しそうです。「数人でこっそり」を経ないと。

そういうわけで、詳しい内容は自分の日記で公開するのも保留しています。ここで広告してもPythonユーザーの比率が高いですし。


__ IT戦記 - 勉強が出来ない奴はプログラマになれ!(バカだからできる勉強法)

いろいろな意見があり、その多くが「『勉強』という言葉の定義が自分の考える定義と違う」という物に思えます。 でも、僕にとってはこの「勉強」という言葉の使い方はしっくりくるものです。 彼の言う「勉強」と「プログラミング学習」の関係は 自然科学で言うところの「勉強」と「研究(実験)」に相当するのではないでしょうか。他人の書いた文章を読んで理解することを「勉強」と呼ぶのなら、どんなに勉強しても研究にはならないし、どんなに勉強してもプログラミングを学んだことにはなりません。そういうたぐいの「勉強」が得意で、他のことが苦手な人がいるとすれば、そういうたぐいの「勉強」は苦手でもプログラミングの得意な人には負けることでしょう。

僕がプログラミングの経験のない人にプログラミングを教えるときには「教科書なんか読んでないで書け」と言ってみたり「人の書いたソースを読め」と言ってみたり「どんな教科書で勉強したらいいですか?」「Google。」と言ってみたり「プログラミングに限らず読めない言語は書けない。書く量の100倍読め。」と言ってみたりしているわけなので、きっと基本的なスタンスは彼と一緒なのでしょう。

最近JavaScriptを勉強しようと思ったのですけど、Googleで調べるとつまらない装飾の付け方などがいっぱいヒットしてしまうので困っていたのでした。とりあえずprototype.jsを読んでみることにしましょう。


__ Rabin-Karp string search algorithm - Wikipedia, the free encyclopediaを勉強中。クエリー文字列が1つの場合はKnuth-Morris-Prattの方が速いけども、クエリー文字列が複数になるとこちらの方がよいようです。

期待した物は完全一致ではなくても似ているパターンを見つけられるアルゴリズムだったのですけど、 Rabin Karp アルゴリズムでコード重複の検出: blog.bulknews.netで紹介されている物は80文字のウィンドウでずらしながらハッシュ値を計算するものの用なので、80文字に1文字でも異なると、その範囲は一致していないと判断されてしまいそうですね。


__ 「しばらく経ってから思い出す」のが苦手です。 お腹がすいたのでご飯を食べようとしたら、ご飯の器が行方不明で、 机の上にも放置されておらず、食器棚にも入っておらず、いったいどこに消えたのだろうかとしばらくうろうろ探していたのですが…電子レンジの中で「熱くてもてないのでしばらく待ってから食べよう」と思った食べ物が入った状態で放置されているのを発見しました。食品衛生上よろしくない。

ゆりかもめ 概要。職場の最寄り駅があるゆりかもめは駅ごとに声が違うらしい。最寄り駅のテレコムセンターは水橋かおり - Wikipedia。出演アニメの一覧を見ても知らないのばっかり…いや犬夜叉はわかるけど、紫織って誰。聞いたことのある番組があっても、キャラクター名を聞いて声も顔も出てこない。はっ、リトル・ウィッチパルフェのココット!それって黄色い髪の幼女ですかっ!かなり幼い舌足らずな声ですかっ!(わかったらしい)


__ 例の「1時間で覚える?Python」はPythonを勉強している人の画面を肩越しにのぞくと時々開かれている。でもアレは「1時間で覚える(Rubyを見て5時間で書いた)Python」なのであんまりいい資料とは言い難い。どうしたものか。

そもそもプログラミング言語を初めて学ぶ人が1時間で特定の言語を習得できるはずがなく、「1時間で覚える○○」なんてのは1時間で新しい言語を習得できるくらいにスキルの高い人向けの文章のつもりだったのだけども…そういう発想は一般常識とはかけ離れていたみたいです。

プログラミング経験者向けに重要かつコアな部分を1時間でなぞる文章と、プログラミング未経験者向けに重要かつ「深くない」ことを1時間でなぞる文章に分けるべきなのかも知れません。

1時間で覚える(プログラミング経験者向け)Python講座。 C++で実装されているPythonではすべての値はPyObject*型です。整数を表すPyIntegerや浮動小数点を表すPyFloat、ヌルオブジェクトであるPyNoneなどはすべてPyObjectの子クラスです。ここまで読んでひるんだ方は「1時間で覚える(プログラミング未経験者向け)Python講座」をどうぞ。

みたいな感じ。

なおPyFloatという名前ですが、C++のdouble相当の精度があります。

とか。

関数を表すPyFunctionやクラスを表すPyClassもPyObjectの子クラスなので、整数などと同様に変数に代入したり関数の引数として渡すことができます。

これは自信がない。PyClassだったかどうかに自信がない。だいぶ長いことPython/C APIは叩いていないので。Jython入門はプログラミング未経験者には荷が重いだろうし…。やっぱりプログラミング未経験者向けのPython入門が必要なのかも。


__ クライアントサイドがJSでサーバサイドもJSでWindowsの面倒な処理を自動化するのもJSでEmEditorの拡張もJSなのだったら、なぜJSを学ばないのか、自分。


__ PCB流出って!

カネミ油症事件 - Wikipediaの原因物質はPCBだけじゃないということになったのか。


__ テレビで金魚のいろんな品種をやっていましたが、 一部の品種はどうみても畸形です。気持ち悪い。変な袋ができていたり眼が変な付き方をしていたり…。まだ朝顔の畸形を愛でる方が動物じゃないだけマシです。

もっとがんがん突然変異させられるバーチャルな生物が欲しい。プランクトン系かな。バイオモルフと物理演算を両方入れると面白そう。そんな需要のかけらもない物を作る暇は…。

鱗をはがしたり梅酢を塗ったり、虐待もいいところだ。


__ Pythonにsqueezeはないのだろうか。

2006年08月08日

日記

mjskはマジスカだろうと見当つきましたが wktkがワクテカだというのは、元の単語を知らないからどうしようもありません。ワカッタカかと思いました。

アマゾンがラーメンズの「新日本語学校」を買えとのメールを送ってきます。

洗濯をしないと明日ラボに着ていく服がないことに気がつきました。洗濯機を回しました。異音がしました。調べてみると腕時計が洗われていました。防水でよかった。

ちなみに昨日の若手の会の話ですが、若手の範囲は非公式に「片手で年を数えられる範囲」となっていますので2進数でしか数えられない普通の人間は31歳までです。3進数で数えられる方は242歳までOKかも知れません。

ポストに「使用されている自転車か放置されている自転車かを判別するために黄色いシールを貼ってあるので、使用されている方は速やかにシールをはがしてください」という連絡が入っていたのに僕の自転車にはシールが貼られていないのですが、どういうことでしょうか。 1:誰か僕が出張中だと知っている親切な人がはがしてくれた。2:僕の自転車を自分の自転車だと思っている人がいる。3:正直者には見えないシールだった。

まだ11時にもなっていないのに眠い。

2006年08月07日

日記

昨日帰ってきて寝て食べて寝て起きました。

今年は例年の「3Dモデル作成・キーフレームアニメーションの作成・それらをコントロールするスクリプトの作成・それらを配置したバーチャルワールドの作成・キャプチャして編集した動画の作成・発表」というスケジュールに作曲が新しく追加され、テクスチャ作成も強化されたのでした。しかも軽めにしようと思っていたスクリプト講座も、要望が強くて結局並行処理がどう実現されているかなどの深い話まですることになってかなりアレゲでした。

グラフィック面でかなりクオリティの高いものもあり、例年並みの小さな画面のFLASHで紹介するのはもったいない気もします。

チューターの服部君は明日から始まるセキュリティキャンプにも生徒として参加するそうで。

インストーラ開発ツールInstallShieldが一番安いパッケージでも8万円弱するということにびっくり。

酷暑日って。

明日が申し込み締め切りの情報科学若手の会にてグラフ可視化ソフトウェアGRINEditについて以下のような発表を行いますので興味のある方はぜひご参加ください。

「物理法則の宣言による可視化エンジンの実装」
動的にレイアウトを行う可視化エンジンを実装する際には、 表示や計算の実行順序に起因するバグが入りやすい。 筆者は宣言によってレイアウトの方法を記述することが出来る、 グラフの可視化ソフトウェア「GRINEdit」を開発中である。 当発表ではベータ版の機能と、これから目指す方向についての解説を行う。

2006年08月05日

ICTスクール日記

Pythonは「ありそうなところ」(WindowsならC:\Python23とか)にPythonがあるかどうかをチェックしに行くので、環境変数やレジストリに何も書かれていないにもかかわらずインストールされたPythonを見つけ出す。見つけ出して欲しくないときでも見つけ出した。フォルダの名前を_Python23に変えたら見つけなくなった。

高校生たちがPythonのことを「ハッカーになるための入門言語らしい」と話しているのを聞いて、ぐぐってみました。きっとHow To Become A Hacker: Japaneseを読んだんでしょうね。

2, 3年ぶりにVisualStudioを使ったりしました。Python/C API。懐かしいなぁ。 PyEval_getBuiltinsでビルトイン名前空間を取得してPyDict_SetItemか PyDict_SetItemStringでそれにオブジェクトを入れればどこからでもアクセスできるようになります。

2006年08月04日

ICTスクール日記

日本学生科学賞。10月24日必着。

【文部科学省-ICTスクール2006】 ICT分野で世界一級のクリエーターを目指せ!: ICTスクール3日目の模様をお伝えします。 言われるまで気づかなかったけど3枚とも僕じゃん!

2006年08月03日

ICTスクール日記

車をモデリングするのに日産:シルフィ 車体寸法のような資料を参考にするといいらしい。

KH Software Factory

デスクトップ上のアイコンの並びを記憶し、崩れたときや解像度変更時に簡単に復元するためのソフトウェアです。

よさそう。

2006年08月01日

ICTスクール日記

タオルを忘れました。

今日の授業はACIDを使って作曲の勉強。高校生はすごいなぁ。わずかな時間で結構な物ができている。

すばる高校の先生がいらっしゃってすばるでの授業について解説されていたのですけど、全員ノートパソコンがあるとかすごいなぁ。僕が情報学科に入ったときは自分のパソコンを持っていない人が半分居たと言うことを考えると、若いときから十分にコンピュータを使うことが出来た彼らのような人間が将来どんなイノベーションを引き起こすのか楽しみでもあり恐ろしくもあり。

仮に自分にとって興味のない話が30分間あったとして、その30分間を何もせず話も聞かずにぼんやりとして過ごす高校生と、しばらく聞いて自分は興味がないと判断したらさっさと自分の作業に戻る高校生との2パターンが居ますね。後者は与えられる物に満足せずに自分で取りに行くけど、前者は何かが与えられるときにはその内容にかかわらず与えられる物で満足して自分で取ろうとはしない、と言えるのでしょうかね。

自分で取りに行くことをしない人に何かを与えても、与えた以上の物にはならないから無駄なのでしょうか…。

タオルを買いに行ったのですが、なかったのでタオル生地のぞうきんになりました(ぇ)

以前この日記でも紹介したNTTの方がVocaloidと、ACIDで作った曲を聞いたり。面白いなぁ。

ってマインスイーパをしている生徒が居るよ…。 早めに来たり自由時間に来たりして積極的に学んでいる生徒はすでにかなり進んで居るんだけどね。

application/x-www-form-urlencodedじゃなくてmultipart/form-dataか。

コンテンツサーバが3Dモデルやスクリプト、アニメーション、テクスチャなどを一括管理しているのだけど、 それへファイルを一括でアップロードするツールがないので作ろうとしてました。 CGIで1個ずつならアップロードできるので、それを叩けばいいと思ったのですが「<input type = "file"...」のフィールドがある場合にどうすればいいのかがわからず調べてました。 でも、ファイルアップロードCGIのHTMLを書き換えてlocalhostにクエリを投げるようにし、Pythonで80番のポートをlistenさせて、来たデータを見るというのが一番手っ取り早かった気がします。抽象的な説明を読むより。まずは実際にどうなっているのかを見ることが重要ですね。

サイボウズの最長6年間の育児休暇制度は、6年間という期間すごいですけど、その他のところもよく考えられていますね。育児短期間勤務が「妊娠判明時から両親ともに適用可能」だとか、「子供の看護休暇」の存在とか。