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

2006年10月28日

日記

今日は朝の10時に留学生と待ち合わせをしてオープンキャンパスに行ってきました。着信履歴に入っていた番号を彼からの電話だと思ってかけたら佐川急便につながったり。

その後、彼が「デジカメ買いたいんだけどいい店知らない?」と言うので秋葉原に連れて行くことに。でもネットで調べた価格と比べて1万円も高い、とのこと。帰ってきて調べてみたら、最安値はPC-Successでした。それがわかっていれば行けたんだけども…まぁいいや。

脳の中にはやっぱり「英語スイッチ」がある。英語スイッチが入ると英語モードで考えてしゃべる。日本人が複数いては外国人と話そうが海外に行こうが日本語モードのままかもしれない。英語モードの状態をどれだけ続けたかが重要なのかも知れない。そう考えるとマンツーマンの(日本語で考えている暇のない)英会話スクールは結構有効かも知れない。

Pythonでコーディングしているときもやっぱり「Pythonスイッチ」が入る。 そうするとインタプリタの気持ちがわかるようになる。たぶん誇張。

2006年10月27日

日記

台湾から留学してきている人からのメールが見事にスパムフォルダに入っていた。中国や台湾の人とメアドを交換したら、すみやかにホワイトリストに入れなきゃいけないね。


__ コンシーラというものは、シミを隠したりするファンデーションのようなものらしい。今までまつげを挟む工具のことだと思ってた。


__ 昔、スタートメニュー直下に「,」(カンマ)という名前のフォルダを作って、そこによく使うショートカットを置いていました。僕の使っているThinkpadTabletX41にはWindowsキーがないので、右AltをWindowsキーにしています。だから右Altを押してからカンマを押すと、そのショートカット一覧が開かれるのです。しかしショートカットの数が増えると問題が明らかになりました。ショートカットの中にFirefoxとFFFTPとInternetExplorerがあったとすると、Fを押しても候補が複数あるので選ばれず、次にIを押すと直前のFのことは無視してInternetExplorerが立ち上がります。うーむ。

その後、C:\Home\shortcutsにパスを通して、ショートカットを置くようにしました。こうするとWin+Rで「名前を指定して実行」ダイアログを出して、そこにショートカットの名前を打ち込めばそれが起動されるようになります。しかも「名前を指定して実行」には補完機能があるので、全部打たなくてもWin+R FIR{DOWN}{Enter}でFirefoxが立ち上がります。

で、今日はその二つを統合しました。「,」フォルダにパスを通してショートカットをそちらへ移動。ファイル名を覚えているときは直接Win+Rして、忘れたときはWin+,して一覧から眺める、というわけです。


__ 3日くらいひたすら寝ていたので、Jythonの本、全然はかどっていません。 今日は新しい章にチャレンジ。


__ おなかすいてきた。よく考えたら昨日、ハクサイとネギを全部食べてしまったので鍋の材料を買ってこないと鍋ができない。

キムチ鍋を作りました。汗がすごい。


__ AutoHotKeyを使うとCtrlが押しっぱなしになったりとかするんですけど。

なんかSend,!+xjをSend,+!xjに変えたら起こらなくなったんですけど、元に戻しても起こるようにならず…うーん。


__ ウィンドウをきれいに切り抜いてくれるソフトが欲しい。

手で切り抜いた後で1ピクセルずれていたりするのを見つけると許せない。

8倍に拡大して切り抜く。ウィンドウの左上は白線じゃなくて灰色線であることに注意。


__ プトレマイオス超エジプト。

比戸君の「くらえ、モホロビチッチ・フレンゾクメン!!」に反応しつつ、世界史を履修したことをアピールw

それはさておき、何が負担なのかさっぱりわかりません。 どうせ履修していないのに履修したことにして単位を出すくらいモラルが欠如しているんだから、世界史の授業中に内職している生徒に気がつかない振りをし、世界史のテスト中にカンニングをしている生徒にも気がつかない振りをしたらいいだけじゃないかと。

2006年10月26日

日記

今日は起きて頭が痛くて寒くてまた寝て、何も食べていないことに気がついて、「すきや」に行ったら負けだと思って、野菜を買ってきて鍋にしました。ネギやハクサイは縮むからたくさん入れても大丈夫だけど、大根をたくさん入れると大変なことになると学びました。

KNOPPIXの頭のKは発音するらしい。

2006年10月25日

日記

昨日は、東京に着いてみるとえらい寒いし、 西船橋に着いてみると雨風激しくてずぶ濡れになるし、 途中まで歩いたところで手に持っていた紙袋が雨に負けるし、 傘は裏返るし、 やっとの事で家にたどり着いたらノートパソコンがブルースクリーンで落ちて、 その後起動しなくなるし、でさんざんでした。


__ Rozetkus power stripというACタップは、端子の丸いヨーロッパとかのプラグじゃないと刺さらないけど、十字にするとかしたら日本でも使えないかなぁ…などと思っていたのですが、こういう解決法もありですね。METAPHYS<メタフィス商品:node>


__ だいぶ寝たのでだいぶ楽になった。 雨もやんだし、備蓄食糧ばかり食べているよりタンパク質を取った方がよさそうなので近くのすきやに行ってこよう。

そうそう、杜仲茶来ました。後で書きます。


__ Hello, KNOPPIX!

ThinkpadA30にKNOPPIXを入れました。正確にいえばCDからブートしているので入れたというのも変かもしれません。CDイメージを焼いて入れて起動するだけ。

UNIXは日本語入力が面倒というイメージがあったのだけど、デフォルトではいっていたSCIMというものはなんだか賢いです。予測入力なんかをサポートしているみたいです。しばらく触れないうちにいろいろ進化したのですね。

最新のFlashPlayerを入れるとYouTubeも見られるようになりました。 なんかあっさり行き過ぎてこれでいいのかと(いいに決まっている)

ちなみにこのマシンが昨日の紙袋の中身です。水たまりの中に落としたけど大丈夫だったようです。


__ 久しぶりにラベルプリンタを取り出して、お気に入りキーボードのラベルを作ってみたのだけども、サイズが微妙に合わない。

今のところEclipseでお気に入りに割り当てているショートカットは「Java実行!+xj」「コンソール!+qc」「エディタ{F12}」の3つ。コンソールを閉じるのは結局「エディタにフォーカスを移す」でいいじゃないかと気がついたのでただのF12に。今後マウスを使う作業を徐々にキーボードに置き換えていこう。Alt+Tabで切り替えるのは画面を見て何番目かを把握しないといけないので、直接Eclipseにフォーカスするキーとか作ろうかな。

2006年10月24日

日記

やっぱり風邪を引いてしまいました。寒気が…。マフラー装着していいですか。

あー。マフラーをカバンから取り出して置いてきてしまった…。毛糸ならあるけど編むわけにもなぁ…。

Pythonのジェネレータを使ってprivateな変数

Pythonのジェネレータを使えば変数の値を隠せるんじゃないかとふと思ったのだけどダメだったという話。 下のようなコードならprivateな値にアクセスする方法がないんじゃないかと期待した。
>>> def Counter():
	private = {"count": 0} # private
	def push():
		private["count"] += 1
		print private["count"], "回押されました"
	def clear():
		private["count"] = 0
	public = {"push": push, "clear": clear}
	yield public

>>> c = Counter()
>>> c.next()
{'push': <function push at 0x00E3D1B0>, 'clear': <function clear at 0x00E3D370>}
>>> push = _["push"]
>>> push()
1 回押されました
>>> push()
2 回押されました
>>> push()
3 回押されました
でもdirしてみたらフレームの情報があるのが見えてしまったのですぐにprivateな値に到達。
>>> c.gi_frame.f_locals["private"]
{'count': 3}

2006年10月23日

日記

いやなブログ: 文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++。参考になる。いやなブログ: 配列操作の比較表: Ruby, Python, JavaScript, Perl, C++。これも。

__ 秋元@サイボウズラボ・プログラマー・ブログ: あなたの知らない5つの楽器ガジェット経由。 Hacked Gadgets » Blog Archive » Tesla Coil Music。放電。


__ Sun & Users - オープンソースプロジェクトの翻訳作業を支援するサン 第2回 ~サンの翻訳の方針とノウハウを公開~

「「日本語スタイルガイド」(中略) このスタイルガイドは、日本語の文体や定型の訳文を整理したもので、どのドキュメントを読んでも、表現(Look&Feel)に統一感を与えるという効果を持つ。 (中略) このスタイルガイドは、サンからの提供を受けてOpenOffice.orgプロジェクトやGNOMEプロジェクトで公開されており、誰でも閲覧できる。(中略) このほかに、英語でドキュメントを書く場合のスタイルガイドもあり、これはツールを使って自動的にスタイルをチェックすることができるという。

ふむふむ。


__ Kazuho@Cybozu Labs: JavaScript を学ぶ上で読むべきウェブサイト経由。Core JavaScript 1.5 Guide - MDC。参考になる。


__ Eclipseで、コンソールを高速ビュー化して全画面で表示するようにしているのだけど、今まではエディタとコンソールの切り替えがマウスだったので面倒だった。AutoHotKeyでAlt+Ctrl+CとDとに「コンソール表示」「コンソール最小化(正確にはフォーカスしているビューの最小化)を割り当ててみた。

^!c::
	Send,!+qc
return

^!d::
	Send,!wg{Down}{Down}{Down}{Enter}
return
(追記:コンソールは高速ビューにしてあるのでエディタにフォーカスを移すだけで最小化できると気がついたので^!dはSend, {F12}に変更しました。)

__ JYamlで空っぽのHashtableを出力した場合 「!java.util.Hashtable {}」となるべきところが「!java.util.Hashtable」になるので、出力したものを再度読み込みするとエラーになる。


__ 2.3.6 シーケンス型の注の6番目を訳し直したいけど、今日東京に帰らないといけないのに29時になってもまだ起きていて、しかもちょっと冷えて喉が痛くて体がほてってるのはとてもよくない。寝るべき。

もうちょっとで改良版の「3時間でわかるPython」が完成するんだけど、まぁ、また今度でいいか。

なおこの「3時間でわかるPython」は現在執筆中の「実用Jythonスーパーガイド」に入る予定です。出版社を伏せれば書いていること自体はむしろ公表しちゃった方がいいとのことなので公開してみました。以前言っていた「プロジェクトC」ってこれのこと。「プロジェクトB」は待機状態です。あと、ラボが週に1回進捗報告と飲み会をするようになったので、「今週は本書いてたから進捗しませんでした」ってわけにもいかない。マルチタスクをいかにして効率化するか…。

2006年10月22日

日記

12キー版ディスプレイキーボードUpravlator - Engadget Japanese

これでバイオモルフ(アプレット)のアニメーションバージョンを作ると面白いかも。親アニメーションに突然変異が加わったものがそれぞれのボタンに表示されて、クリックするとそれを親としてまた突然変異を加える。

2006年10月20日

日記

The Log of the No22 - それは逆ポーランドじゃない(1) , それは逆ポーランドじゃない(2) , それは逆ポーランドじゃない(3)。 「数値やリストのリテラルに見えるものも含めてすべてが実はスタックに対する関数」「関数合成のみの式では、どこで式を「切断」しても正当な式に分割することができ、また「連結」の順番が同じであれば式全体の意味は変わらない」。おおお、目から鱗!

なんか急に髪の毛が伸びていることに気がついて、 うっとうしいのでちょっと切ってみたのだけど、 右利きだから左側の切り具合が足りなくて気になる…。 左耳の上が右耳の上より長くて暑い。

クラスとは何なのか、なんで必要なのかを説明しようと思っていたら、 結局クラスなんてなくてもやりたいことはできることに気がついた。 ハッシュに必要なメソッドとかフィールドとかつっこんで、 メソッドを呼び出す際にそのハッシュをきちんと渡してやれば クラスを定義しなくても問題ない。 単にクラスを使うとすっきり書けるというだけ。


__ @大阪の実家。

長野テクトロン お気に入りキーボード。だいぶ前に買ったんですけど、間違えて郵送先を千葉じゃなくて大阪にしていたので今頃手にしたわけです。 あとはAutoHotkeyと組み合わせていろんな作業を自動化すると面白いかと思っています。


__ テーブルにハサミ型シュレッダーが乗っていて「あー、こーてやぁる」と思ったら、本棚には Amazon.co.jp: 暮らしに役立つ 2ちゃんねるの使い方が。あー。この二人の子供です、僕。


__ 渡辺さんはエディタにマクロ機能をつける方法を探してらっしゃるんだと勘違いしてPython埋め込みを紹介したんですけど、JavaScriptがいいんですねー。

サーバサイドのプログラムがクライアントサイドのプログラムを生成するというメタな感じが面白いと思う人におすすめなのはサーバサイドをJavaScriptで書いてしまうAJAJA。萌える。


__ スラッシュドット経由 asahi.com:リスク回避にネット監視活況 メールから取り付け騒ぎも - 暮らしのせいで「佐賀県庁が監視との報道で、2ちゃんねるでは「佐賀」が大流行 (中略)現在1万以上のスレッドに「佐賀」の文字が。」(やじうまWatch)って話題。

公式キャッチフレーズの「佐賀を探そう」を逆転した「佐賀を探してます」というネタかと思いました。


__ AutoHotKeyのスクリプト言語がかなり辛い。誰かPythonでラップしてくれないかな~なんていってみる。

2006年10月19日

日記

ここのところ鼻と喉の調子が悪いのは、知らないうちに冷えているからなのだろうか。


__ 部屋をきれいに片付ける人と、僕のようなすぐに散らかる人との間では、そもそも「あるべき部屋の状態」の認識が違うのだと思う。 片付ける人は、いろいろなものが「見えない」状態を好むのに対し、僕はいろいろなものが自分から「見える」状態を好む。

片付ける人にとっては、床には何も置かれていないのが「よい」状態で、それをキープするために片付けるのだろう。僕にとっては床は歩くところで、歩けるだけのスペース以外はものを置くところ。必要もないのに床の上のものを片付けるなんてのは、自分一人しか使っていないパソコンで毎日ブラウザのキャッシュとクッキーを削除しているようなもの。

…なんて書いてみたけども、この理屈では床に空き缶やペットボトルが落ちている理由を説明できないので捨ててきます。


__ やっと産総研のカードをもらえました。これで18時以降にコンビニに行って、入れなくなって悲しい思いをしたりしなくて済みます(笑)


__ いま流行っている風邪はmixi経由でうつるらしいですよ!やばい!


__ 10時まで働くと帰りの電車がすいているという仮説の検証のために10時まで働きました(今9時45分)

これで帰りに新木場から京葉線の普通電車に乗れば座れるはず。で、南船橋まで行きすぎてから逆向きに乗り換える。

あー、しまった、明日大阪に帰るのに、ぷらっとこだまのチケット取ってないー。


__ mixiに貼った画像は誰でも見えてしまう、という問題、「過去にあまり考えずに決めた設計のせいで大きくなってから首が絞まったけどすでに変更不可能」という状態かと思っていたのですがそうではないようです。 ログインしなくても見える画像 | Okumura's Blog


__ GRINEditの作業ログをGRINEditのTracのWikiでつけるようにしようと思いつつ徹底できていない。


__ 座れなかったorz。 ちょっと遅すぎた模様。 武蔵野線の最終電車が終わってしまったので。


__ サーバがメンテナンスで止まるときに、リポジトリはsvkを使っているから問題ないのだけど、Tracが動かなくなるのは困りもの。

なんか本当に、できそこないのCommonLispを作っているような気分になってきた。結局のところ、頂点を辺よりも先に生成しないといけないのは、辺の生成時にシンボルを評価してしまうからであって、必要になるまで評価を遅延させれば何の問題もない。描画毎にヌルチェックが行われるだけなのでパフォーマンスにもさして問題はなさそう。西尾泰和のブログ: logで、なんで「微妙」と思ったのか「微妙」としか書いていないのでわからないけども、setterで頂点の名前を変更したときに、頂点そのものへの参照をnullに戻しておいてやれば、大したコストなしに「辺をつなぎ替えられる」というメリットも得られる。


スラッシュドット ジャパン | リアル「ロケットガール養成講座」開講 __ 秋田大学ものづくり創造工学センター

…。この絵は…。っていうかただでさえ女の子は集めにくいのにこの絵は…。あっ、そうか、「ロケットガールになったらメディアに露出できて、もしかするとそのまま芸能界デビューも夢じゃないかも?」と煽ればいいのか?!(違)

そして秋葉原に「ロケットガール喫茶」ができる、と。ペットボトルロケットをロケットガールと一緒に打ち上げるのが1000円。って打ち上げられるスペースがないか…。

2006年10月18日

テスト重要

ユーザが見て面白くない動作チェックのためのスクリプト、呼んでもいいけど読まれることを意識して書いているわけではないスクリプトはtestフォルダに、見て面白いスクリプトや簡単なサンプルになっているようなスクリプトはdemoに入れることにしよう。

過去のスクリプトを色々試していて問題が発覚。

PyUnit初体験。

suite = unittest.TestSuite()
[suite.addTest(XMLRPCTestCase(s)) for s in dir(XMLRPCTestCase) if s.find("test") == 0]
なんて書いてから
unittest.makeSuite(XMLRPCTestCase)
でよかったと知る。

こういうのの説明を書く際に、細かい所から始めて楽なところへ進むのと、 楽なのを最初に教えてから細かいことを教えるのはどちらがいいのかなぁ。

書いたコード

import unittest

class XMLRPCTestCase(unittest.TestCase):
    def setUp(self):
        import xmlrpclib
        self.server = xmlrpclib.Server('http://localhost:8080/RPC2')
        self.grinedit = self.server.grinedit
        
    def testAddVertexAndEdge(self):
        "simple test"
        g = self.grinedit

        v1 = g.addVertex("BoxVertex", {"label": "Hello"})
        v2 = g.addVertex("CircleVertex", {})
        g.addEdge("LinearEdge", {"v1": v1, "v2": v2})
    
    def testBatch(self):
        self.grinedit.batch([
            {"method": "addVertex", "params": ["CircleVertex", {}]},
            {"method": "addVertex", "params": ["CircleVertex", {}]},
            {"method": "addVertex", "params": ["CircleVertex", {}]}])
            

def suite():
    return unittest.makeSuite(XMLRPCTestCase)

if __name__ == "__main__":
    unittest.main()

簡単。問題は、目視しないと発見できないエラーが多いことだろうか。SWTからAWTに変えた際にCircleVertexの塗りが少しずれて隙間ができているとか。まぁ、全部のテストを自動化する方法を悩んでないで、簡単に自動化できるところから自動化するのが正しいのだろう。

日記

「電波目覚まし時計」というからには、時計を電波で合わせるだけだじゃなくて、目を覚まさせるのも電波でやって欲しい。

あ、ラジオ機能があるからいいのか。


__ 渡辺さん、「 5. 他のアプリケーションへの Python の埋め込み」なんてのもありますよ。Rubyにもあるかと思いますけど、見つけられませんでした。


__ 一昨日、ブルーベリーのハチミツ漬けを衝動買いしてしまったのだけども、何に使ったらいいかなぁ。「目にいい」と言われると弱い。

2006年10月17日

vim日記

*if_python.txt* For Vim version 5.7. Last change: 1999 Oct 28。そんな昔からPythonインターフェイスが付いていたのかー。vimで
:py << EOF
for i in range(10):
  print i
EOF
と打ってみて、ちゃんと動いてちょっと感動した。

KaoriYa.net からlibiconvをダウンロードし、iconv.dllをwindows/system32にコピーした。

vim各種設定を見ながら設定してみる。

「:echo $VIM」して確認した上で_vimrcに「set backupdir=$VIM/backups」と書いてみた。

サクラエディタ風にタブを表示するために

set listchars=tab:^\ 
set list
highlight SpecialKey guifg=#BBBBBB
バッドノウハウ…。 どこにも「タブ」という言葉が出てこないのはどういうことかと。

日記

PowerPointで資料を作って、PowerPointの配付資料作成機能で1ページに複数枚のスライドを割り付けると、空白がたくさん入ってスライドが小さくなってしまう。もっとスライドを大きくしようと調べたのだけどもわからず。Microsoft PowerPoint FAQ - 印刷にはオフィシャルではないものの「残念ながら、配布資料として印刷する場合、個々のスライドの大きさ及び間隔のカスタマイズをすることはできません。」と書かれている。

[225302]複数ページの PDF を 1 枚に出力する方法(Acrobat 7.0/Adobe Reader 7.0)を使って複数ページを印刷して配れば問題ないのだけど、印刷するのが自分でない場合には割り付けた状態で渡したい。

AdobeReaderでクセロPDFに対して印刷してPDFを作成してみたら、フォントがビットマップになってしまった。謎。dpiとJPEGの画質を最大限に上げれば見栄えはそんなに悪くないけど、ファイルサイズも大きい。あと、これでもやっぱりIとかが妙に太くなったりしてかっこわるい。

ああ、フォントを埋め込むようにすればよかったのか?むむ?

なんだかよくわからなくなってきたけどまぁいいや。

AcrobatReaderのカスタム4x2の割り付けを使えばちょうど普段使っているA7の付箋サイズになるなぁ。

前にWordで似たようなことに挑戦したのを思い出して検索。「"パワーポイントで1ページに8枚印刷できないかと試したけど無理で"」という文字列を含む記事があるのは簡単にわかったのだけど、そこから肝心のその記事にたどり着けない…。ブログのメインページや雑記カテゴリのような、変化が激しくてすでにそこには情報が載っていないようなページしかヒットしない…。サイト内限定検索にしてもヒットしない。うーん。自分がGoogleで検索できるというメリットを見込んで日々公開しているのに、こういう現象が起きると、やっぱりローカルで書いてローカルで検索する方がいいのかもなぁ、と思ってしまう。

キャッシュからパーマリンクを使ってジャンプ。

フォーマットに関する考察

JSONがほとんどPythonなのを利用して、PythonでpprintするだけでJSON形式で出力し、evalするだけでJSON形式を読む、という作戦が失敗したので次はXMLにするかYAMLにするか検討していたのだけども、YAMLはよく考えたらそれ自体でネットワーク構造を表現できるので、legacyフォーマット相当のことがシンプルに書けそう。頂点クラスの指定などの細かいことまでできるフォーマットの他に、ちょっと試してみるのに楽ちんなシンプルフォーマットがあってもいいのかも知れない。

- Vertex:
  - &vertex1 {label: Hello}
  - &vertex2 {label: World, bgcolor: [255, 0, 0]}
- Edge:
  - {v1: *vertex1, v2: *vertex2}
こんな感じかな。これなら見てすぐ理解できるし、print文しか使えないような ユーザでも問題なく出力できるだろう。

YAMLでグラフ構造を表現できる、と英語で書こうとして「YAML can represent ...」なんて書きかけたんだけど、Google先生に「YAML supports serializing native graph data structures through an aliasing mechanism」という例文を教えてもらった。「supports serialization of native graph structure」ではいけないのだろうか?いいらしい。


__ 早めに寝ようと思ったのに無意識にブラックブラックガムを口に入れるのは何とかしないと。もうすぐ26時。


__

Version: simplified
Vertex:
  - {label: Hello, id: vertex1}
  - {label: World, bgcolor: [255, 0, 0], id: vertex2}
Edge:
  - {v1: vertex1, v2: vertex2}
アンカーを使ったりしなくても、GRINEditでは全てのオブジェクトがid属性というアンカーに使えるものを持っているからこう表現できるんだった。シンプル表記用のフォーマットでやるべきことは、
  • キーVertexやEdgeに対応する値がマッピングでなくシーケンスの時は、シーケンスの中の各オブジェクトのidの値をキーとするハッシュの簡略表記として解釈する。
  • 各オブジェクトはマッピングを使って{classname: 文字列, params: マッピング}と表現されているが、もしこのマッピングがclassnameというキーを持たないなら、デフォルトのものが指定されたと見なし、そのマッピングはparamsに指定されたものと見なす。
  • もしトップのマッピングがLawというキーを持たないなら、デフォルトの物理法則が指定されたものと見なす。
もし物理法則を本当に指定したくない場合には「Law: {}」とやれば済む(頂点の移動すらできないからかなり無意味だが)(勘違い。頂点の移動はできる。単なる動的な整形のない「グラフ描画ソフト」に変わる)。そのほかの点については現在のフォーマットと共存させることに何の問題もない。こっちにしよう。

2006年10月16日

日記

いま領収書を整理していて気がつきました。 大垣のアパホテルに止まった際、禁煙のシングルを予約したはずなのに、その前に検討していた喫煙の安い部屋になってたので「あれれ?」と思いつつも、自分が予約を間違えたのかと思ってそこに泊まったのですけど、チェックインカードを見ると名前が間違っています。楽天トラベルで予約したのでカタカナ表記の名前を間違えるとは思いにくい…ということは僕はたまたま名字の同じ誰か他人が予約した部屋に泊まってしまったのかも?

確かに僕は「楽天トラベルで予約していた西尾ですけど」としか言わなかったし、予想と違う部屋を言われたときも自分が間違えたんだろうと思ったので否定しなかったけど…。

こんな部屋でした。P1060664 写真共有「フォト蔵」


__ 業務用 杜仲茶 100% 10g*30包 【ケンコーコム】を買おうかと思ったのですけど、念のため楽天で検索してみたら、同じ会社が楽天で売っているものの方がわずかに安いのを発見。謎。【楽天市場】業務用 杜仲茶 100% 10g*30包:ケンコーコム


__ ようやく産総研からゲストじゃないまともなIDカードがもらえるらしいです。これで夜18時を過ぎてコンビニに買い物に行ったときに中に入れなくて立ちつくすこともなくなるでしょう(2回も同じミスをしたし)。

あー、よく考えたらプロフィールに「5月から産総研にて外来研究員」ってのを書くべきなのかな?


__ 「後で書く」のまま忘れていた西尾泰和のブログ: 一連の関数のリストを作るを加筆修正。

2006年10月15日

log

どうして今まで気がつかなかったのかが謎だけど、GraphにanchorTableを持たせるんじゃなくて、アンカーを扱う物理演算PL_Anchorに持たせればJSONで物理演算を出力するのが面倒という問題は解決されるじゃないかと今朝5時に気がついた。

変更した。

JythonでJavaのクラスMapに対して isinstance(obj, Map)なんてのできるんだなぁ。 typeするとPyJavaInstanceとか表示されるけど、getClassすればJavaのクラスが得られるし。

IGRINObjectというインターフェイスを作ってみた。 XML-RPC経由で操作できるオブジェクトたちが持つべきメソッドを インターフェイスの形で明確化。

あー。 クラスでgetNameという名前のメソッドを宣言すると、 ClassクラスのgetNameとややこしくなりそう。 うーん。nameはそもそもクラスの名前と紛らわしいからと言ってクラスの名前の側をclassnameと書いているんだけど、nameもidに変えてしまったほうがいいのかもなぁ。nameでは一意であることがあまりアピールされていないし。

何も頂点のない状態でJSON形式で保存してpprintで整形するとこんな感じ。

{'Edge': {},
 'Law': {'Anchor': {'classname': 'org.nishiohirokazu.layout.PL_Anchor',
                    'params': {'target': {}, 'id': 'Anchor'}},
         'Repulsion': {'classname': 'org.nishiohirokazu.layout.PL_Repulsion',
                       'params': {'id': 'Repulsion',
                                  'repulsionK': 0.02,
                                  'repulsionRadius': 3.0}},
         'SpringEdge': {'classname': 'org.nishiohirokazu.layout.PL_SpringEdge',
                        'params': {'defaultNormalLength': 1.0,
                                   'defaultSpringStrength': 0.1,
                                   'id': 'SpringEdge'}}},
 'Vertex': {},
 'version': 'alpha0.20'}

ぎゃー。 JythonのPyFloatクラスやPyIntegerクラスはPyObjectを直接継承している!PyNumberとかないの?!

  File "plugins\grinedit-app\menu-saveAsJSON\init.py", line 52, in func
java.lang.ClassFormatError: Invalid method Code length 75346
in class file org/python/pycode/_pyx13
100頂点のグラフをJSONで出したものをJythonでevalしたら「そんな長いものはevalできない」と怒られてしまった。 JSONをPythonとして扱うのは無理みたいだ。 「Pythonとして読める」というメリットが使えないのであればJSONにこだわる理由はあまりない。単に永続化したいだけならpickleで、人間に見やすくしたいならYAMLで、XMLにしたいならXMLで。

Edgeの頂点をセットするメソッドで、引数として与えられた「頂点のid」を解決して自分のフィールドに頂点を置いている。 その為、単純に永続化されたファイルから復元したときにEdgeの作成が頂点の作成より先に来るとエラーになる。解決法はいくつかある。

  • ローダに手を加えて頂点を先に作成するようにする
    • 一番早いけど、やな感じ。
  • 実際にレンダリングなどで頂点オブジェクトを使うときまで評価を遅延させる
    • nullチェックの分遅い。あと、微妙。
  • 頂点への参照を直接持つのをやめて、頂点のidで持つ。
    • これが一番美しい。現状では作成した後で頂点のつながっている頂点を変えることはできない(消して新しく作るしかない)けど、これなら普通のsetterで頂点のidを変更するだけでつながる先が変わる。
    • ただし描画や整形のたびに全ての辺が2回ずつHashtableで名前解決をする。

多少不満が残るけども、1番目の選択肢で。

ふぅ。できた。 日曜日ももう終わりかぁ…。

JYaml - Yaml library for the Java language。ListとMapが扱えて、書いてないけどStringも当然扱えるだろうから、CommonGatewayを通せばほとんどコーディングなしでシリアライズできるかもなぁ。でもまぁ、それは今すぐじゃなくていいや。

日記

日曜日の朝起きるなり、まずキーボードに向かってJavaのソースコードを描いている自分に疑問を感じ始めた。

JythonでJavaのクラスMapに対して isinstance(obj, Map)なんてのできるんだなぁ。 typeするとPyJavaInstanceとか表示されるけど、getClassすればJavaのクラスが得られるし。

歩いていると開発できないとか言ってないで歩くべきなんだろうなぁ。 ダイエットのために。

2006年10月14日

日記

僕は「どうやって作るか」に偏りすぎていて「何を作るか」「なぜ作るか」をなおざりにしすぎなのかもしれない。

最初は「おざなり」って書いたけど「なおざり」の方が正しいのかな?


__ 一生懸命AntとかMavenとかでビルドさせようとしていたけども、Pythonで書いちゃう方が楽だなぁ。いいのかなぁ。


__ 昨日のニューラルネットは興味を持った人が何人かいるようなので、詳しく書いてみます。「ニューラルネット」というのは僕が勝手に言っているだけで、調べてみると説明のページが見つかったのでそちらを参考にしてください。 [AITIA WEB] moids。一つのコンデンサマイクと一つのスピーカが付いた同じ形の基盤がたくさんはしご状に並んでいました。上と下とで向きが逆になっているので、基盤4つの小さいループから6,8,…といろいろなサイズのループが存在しています。とても面白いです。個人的には(エンジニアのさがなのか)できあがったものを眺めるんじゃなくて、自分で回路を組み合わせて遊びたいのですけど(笑) スピーカもぐねぐね曲げられるようにして、0.5秒の遅延を起こす回路のマイクに自分自身のスピーカを近づけてそばで手を叩けば、理論上は鳴らされた音を拾ってテンポ120で拍をうつはずですよね。そういう「理解できる」素子をいくつか適当に組み合わせているうちに、ノイズや音漏れのせいで謎の挙動を示すようになるのが面白そう。そういうおもちゃを売っていたらぜひ買いたい。

「神社の中に巨大スクリーンが」という話は ICC Online | アート&テクノロジーの下の方にある「KODAMA」。 夕闇迫る頃に見ると、神社の中に森が広がっているみたいに見えて幻想的。

おおお、イッヒェンと世界一愛らしい妹ウッヒェンってオンラインで見れるじゃん。…再生中に画像の更新が止まってしまうなぁ…。うーん、残念。


__ Subversionのバージョンが1.3.1で「svn: このクライアントは、作業コピー '.' を扱うには古すぎます。もっと新しい Subversion クライアントをダウンロードしてください。」と言われたので subversion: ファイルの共有: Windowsから1.4.0をインストール。

JyConsoleには日本人にとってシビアな問題がある。

>>> a = u"あいうえお"
>>> a
'BDFHJ'
>>> import java
>>> java.lang.System.out.println(a)
(コンソールにBDFHJとでる)
(日本語文字列をprintするスクリプトをメニューから読み込み)
こんにちは世界
JyConsole上で入力された非アスキー文字の扱いがおかしいようだ。

Don Colemanの方のコンソールも同じだった。

Donのは複数行貼り付けた際に挙動がおかしくなる。JyConsoleはならない。

どちらを選ぶか難しいところだなぁ。とりあえずJyConsoleの方で、出力を本来のコンソールにもJyConsoleにも出すコードが書けたのでJyConsoleを使う方針で…。

あー。JyConsoleの中の人から「バグトラッカーにアカウント作ったから自由に使ってくれい」というメールが来た。やっぱりJyConsoleだなぁ。何か言ったときの反応が素早い。


__ 28時半か…。 最近太ったと指摘されて、考えてみたのだけども、 こういう時間まで起きていて、昼まで寝ていることで、1日2食になっているのがいけないのではないだろうか。あと運動してないし。運動しながらコーディングできるならいくらでも運動するんだが。エアロバイクこぎながらならコーディングできるかと思いきや、想像以上に頭が揺れるので近くのモニターは見づらい。ヘッドマウントディスプレイがモノクロでいいから1024x768とかになってくれればいいのになあ。

2006年10月13日

日記(大垣2日目)

19時半に新宿に帰らないといけないけど、3,4時間あれば帰れるだろうから今日も結構な時間見て回れますね。 説明が後先しましたがおおがきビエンナーレに来ています。 OGAKI Biennale 2006。 サイトを見てもいまいちピンと来なかったのですが、実際に回ってみると色々面白いです。

大垣駅を16時38分に出れば新宿の待ち合わせには間に合うようです。 あと今気づいたんですけど、新宿西口は新宿駅の西口ではなくて別の駅なの?まぎらわしい。


P1060699
P1060699 posted from フォト蔵

ニューラルネットだ! てんかん発作を起こしているニューラルネットの可聴化だ!

ニューラルネット in 日本家屋

僕は今まで、実世界に近い方(ハードウェアとか)をより抽象度の低い領域、 数学に近い側(アルゴリズムとか)をより抽象度の高い領域だと捕らえていたのですが、 これは間違いだったのではないかと気がつきました。 実世界に近い側やハードウェアでも、例えば「共鳴現象」という抽象概念や「赤外線カメラ」なんていうコンポーネントが存在しています。 ソフトウェアを使わずに実世界のコンポーネントだけを組み合わせて作られたものは、今までの僕の概念では「抽象化度が低いもの」だったのですけど、ある作品は、あえて比較するなら黄金比探索法よりも抽象化度が高いものでした。クイックソートといい勝負かもしれません。あれに比べればペアワイズアライメントの動的計画法による実装なんてはるかに泥臭いです。

ああ、そうか…。 例えばマンデルブロ集合をフラクタルっぽい画像を作り出すためのコンポーネントとしてとらえると、それをカスタマイズするために数式をハックするのは抽象化度の低い領域での作業になるわけか…。

なんだか色々やりたいことは増えたけども、 とりあえず、今一番やるべきことをやろう。


新幹線にて。 しまった。来た新幹線に飛び乗ったら全然座れなかった。 名古屋から新横浜まで座れないということは いったい金額に換算してどれだけの仕事機会が失われたのか。

車掌さんが来たので指定席が空いてないか聞いてみたら、 グリーン車の喫煙席が7席残っているだけで 他は指定席もグリーン席も全部埋まっているんだそうな。 ホテルが喫煙部屋なのは多少臭いだけだから耐えられるけど、 席が喫煙席だと周りでガンガン吸われる上に、 新幹線だから窓を開けられない…。 あきらめてデッキで作業することに。

健康>>作業効率>お金


__ 帰ってきました。

寿司に入っている緑のギザギザのことを、バレンと言っている人がいたので「バレンは版画をこするやつで、寿司に入っているのはバランじゃないのかなぁ」と思っていたのですが、調べてみたらバランのことを和歌山の方言でバレンというそうな。

大垣城にて。滝と木陰。時間があればここでコーディングしたかった。

P1060671
P1060671 posted from フォト蔵


__ route
route posted from フォト蔵

二日間の足取りを赤と青とで書き込んでみました。 初日まず、目的地と直角方向に進んで、お城を見つけるまで間違いに気づかない。途中、車で稲荷神社まで送ってもらってそこから改めて最初に間違えていって閉まったところを見に行く。2日目、南下して、細い皮と交差したところで曲がったつもりが、進んでいくとよくわからないところに到着。さまよったあげく自分が南に来すぎたことに気づく。戻る。その後、川に沿って大垣駅まで戻ろうとする。川とメインストリートの交差部分で駅と逆方向に進む。お城の前を素通りして銀行の先の交差点で地下道の入り口で自分向きの矢印に「大垣駅」と書かれているのを見て間違いに気づく。戻る。

ということでメインストリートの一部は7回通ったことになります。ひえー。 全部で何キロ歩いたんだろう。いい運動になりました。 そろそろ肩が悲鳴を上げ始めています。 明日は全身筋肉痛に違いない。

でも久しぶりに長距離歩いてみて、 意外とまだまだ歩けると言うことと、 歩くのはやっぱり楽しいと言うことを再発見。

肩の次はどうも右足首が痛くなりそうな予感。肩こりで緊張性頭痛が始まりそう。ねます。

2006年10月12日

日記(大垣1日目)

朝起きてメールチェックだけするつもりだったのに、コード書いて、仕方がないからコードだけ貼って説明は後で書こうと思ったのに、ついついほとんど書いてしまって…そんなことより先にすることがあるだろうと…。一連の関数のリストを作る

もう11時になっちゃう!


__ @12:33分発の新幹線

やっぱり、なぜか電車の中では集中して作業ができる。集中した状態に簡単に移行できる。気を散らせるものは多いはずなのに、多すぎて逆にシャットダウンしてしまうんだろうか。東京駅を乗り過ごして新橋まで行ってしまったけど。

ガーン。昨日ラボに行ってb-mobileの更新手続きをしたつもりだったのに、 どうやら僕がやったことは更新手続きじゃなくて単にアンインストールしてもう一度インストールしただけらしい。CD-ROMの中のextend.htmから更新手続きをしないと行けなかったらしい。ネットに接続できない。(´・ω・`)

しまった。11時前に遅めの朝ご飯を食べて出発するつもりだったのに、どたばたしてたからすっかり忘れてしまった。おなかすいた。

先日の「「時間がない」状態から抜け出すには、時間がどれだけかかるか・どれだけかけるかを明確にするべきかも」という話の具体化として、 自分が英文をどれくらいのスピードで読めるのかを計測して、 毎日行き帰りの電車で読める予定の量を印刷してカバンに入れるというのもいいのかも知れない。本当は印刷すると資源がもったいないので電子ブックがいいのだけども。軽くて小さくてPDFをいくつも入れておけるA3サイズの電子ブックないかなぁ。


__ 大垣にて。 素直に30分に1本のバスに乗ればいい物を、歩いた方が早いと思って目的地と直角方向に歩いて、結局到着したのは1時間後。orz。

目的のものはあんまり見る時間がなかったので、明日もう一度見に行こう。同じ部屋にあった他の展示もなかなか面白そうだったし。

自己組織化写像を応用してもっといい感じのモーフィングができないかなぁとか思った、少なくとも3枚以上のモーフィングで画像Aから画像Bへのモーフィングが画像Bから画像Cへのモーフィングに切り替わるタイミングが「キツイ」のは、線形補間を単純につないだせいで微分不可能な点ができているからだ。ちょうど3Dのボーンアニメーションの補完で線形補間よりスプラインでの補間の方が自然なアニメーションになるのと同じように、モーフィングもスプラインでやった方が自然になるはずだ。

問:N枚の透明なシートに白と黒で適当な符号を印刷し、M枚を選んで重ねたときに、上から撮影した1枚の画像だけでどのシートがどの順番で重ねられているかを判別するにはどういう符号にすればよいか。

USBのウェブカメラで意外と簡単に自作のバーコード的なものを読ませることができる。重要なのは読まれるものの位置を固定すること。それならばQRコードなどの既存のコードを使わない方が、そういうコードを面白い目的に使うのが楽そうだ。QRコードなんかは誤り訂正の仕組みが大きすぎてハックがしにくい。

あと白いインクで印刷するのは面倒。 あと、OHPに印刷したものって透けるから、どっちが上か(どっちが覆い隠している側か)の判定が難しくなっちゃうね。 なるべく人間の作業はなくしたいのだけど、やっぱり「指定された場所を不透明な白いペイントで塗る」という作業は必要になるのかもなぁ…。 シートが完全に透けてしまうとどちらが上かの判断は無理だし。

N * N 個のマスを使うトリビアルな解がある。 最初のN個はx番目のシートのみxマス目が黒く塗られているもの。 これでどのシートが存在するかが判定できる。 続くN * (N - 1)は全てのシートからの2枚の組み合わせについて、 片方が白、片方が黒になっている。最初のN個で存在することがわかっている2枚について、そのどちらが上に来ているかを判定できる。

シートが5枚程度なら、マス目は25個だから1列に並べても十分そう。 シートが20枚とかになると問題。マス目を小さくして画像処理能力で頑張ってもらう方針と、白黒じゃなくて何色かの判別しやすい色を使う方法とがある。

仮に白黒に限定しないなら、一番下の紙の色(白)と異なる2色を使うことでN * (N - 1)までは簡単に削減できることがわかる。一般に背景色をのぞいてP色使える場合に、マスがいくつあればN枚のシートの組み合わせを表現できるか?

一連の関数のリストを作る

Pythonのメーリングリストで、リスト閉包内包を用いて一連の関数を定義しようとした際に、以下のような現象が起きることについての話題がありました。
>>> funcs = [lambda x: k * x for k in range(10)]
>>> funcs[3](4)
36
>>> funcs[1](4)
36

これはリスト閉包内包がスコープを作らないので、それぞれの関数が「グローバルスコープのk」を参照しており、その値は関数を呼び出すときにはすでにループが最後まで回って4になってしまっていることが原因です。

まつもとさんは、Pythonの「デフォルト引数が定義時に評価される」という特徴を利用したイディオムを紹介してらっしゃいました。これはわかっている人間が自分だけで使うぶんにはクールで楽ですが、他の人が読むコードに使うのは好ましくないように思います。

>>> funcs = [lambda x, k = k: k * x for k in range(10)]
>>> funcs[3](4)
12
[lambda x: k * x for k in range(10)]がダメな理由は、lambdaの中のkがグローバルスコープのkを指しているからです。もう一枚関数で包めば(ローカル変数にしてやれば)期待通りに動くようになります。こちらの方がlambdaに慣れた人にはわかりやすい書き方かも知れません。
>>> funcs = [(lambda k: lambda x: k * x)(k) for k in range(10)]
>>> funcs[3](4)
12
でも、わかりにくいのはそもそも無理に1行で書こうとするからです。ワンライナーは悪。 おのおのの「呼び出せる」オブジェクトがそれぞれ別個の「かける数」を持つんですから、その通りに書けば何の問題もありません。
>>> class Multiplier:
	def __init__(self, k):
		self.k = k
	def __call__(self, x):
		return self.k * x

	
>>> funcs = [Multiplier(k) for k in range(10)]
>>> funcs[3](4)
12
この最後の例が一番美しいと思うのは、僕がJavaに毒されているからでしょうか?(笑)

intをstrに変更できるか?

タイトルは長くなりすぎるので厳密さを捨ててはしょりましたが、 「intクラスの子クラスのオブジェクトのクラス属性(__class__)をstrやstrの子クラスに変更できるか?」が正解。 できませんでした。同じ「Cで書かれた基本クラス」を継承したクラスなら変更できるようです。まぁ、根っこがCである以上仕方がないですし、「これを可能にすることとパフォーマンスとどちらが大事か」と言われるとやっぱりパフォーマンスですものね。
>>> class MyInt(int):
	pass

>>> MyInt(1)
1
>>> x = _
>>> x.__class__

>>> x.__class__ = str

Traceback (most recent call last):
  File "", line 1, in -toplevel-
    x.__class__ = str
TypeError: __class__ assignment: only for heap types
>>> class MyStr(str):
	pass

>>> x.__class__ = MyStr

Traceback (most recent call last):
  File "", line 1, in -toplevel-
    x.__class__ = MyStr
TypeError: __class__ assignment: 'MyInt' object layout differs from 'MyStr'
>>> class AnotherInt(int):
	def __str__(self):
		return str(self + 1)

	
>>> x.__class__ = AnotherInt
>>> x
1
>>> print x
2

2006年10月11日

はてなブックマークの件数を表示

はてなブックマーク日記 - ブックマーク数を画像で取得する API の公開についてを参考に、はてなブックマークの件数を表示するようにしてみました。 といってもMovableTypeを使っているのでテンプレートの適当なところにimgタグを入れるだけです。エントリーのフッタ(時刻やパーマリンクのあるところ)はモジュールに切り出してあったので、そこに一つ。それからカテゴリアーカイブのそれぞれのエントリへのリンクに一つ。修正はたったの2カ所でした。解説するまでもないかと思うので解説は省略。

画像の背景がピンクなのでこのグリーンの背景では目立ちすぎるかも知れませんね。あとカテゴリ内一覧のようなページを開くと画像がなかなか読み込み完了しなくてうっとうしいかも知れませんね…。うーん。

日記

なんかダメっぽい雰囲気。 一つ一つは別にそれほどたいしたことのない小さな「ダメ」なのだけど、 タイミング悪く3つも重なって現れたので、共鳴しあってダメな気持ちだけが増幅しあって、 合理的な理由のない「ダメな感じ」が頭を取り巻いている。 どうしよう…。 どうしたらいいんだろう。

「旅に出ろ」という案を出されました。 明日岐阜に一泊する予定なんだけど、 そのまま帰ってこないでさまよってくるとか…。

本当にそうしようかなぁ。 バッテリーは予備も含めて満充電すれば6~7時間持つし、 PHSの電波が届く所でならさほど仕事に影響でないし…。 svkいれたからオンラインじゃなくてもコミットできるしなぁ。


__ 秋元@サイボウズラボ・プログラマー・ブログ: 新興宗教Google教

おもしろおかしい: +3

十戒:The 10 Commandments of Google - The Church Of Google . Org

  • 3: 汝、Google