« 2006年12月 | メイン | 2007年02月 »

2007年01月31日

テキスト音楽サクラでパッヘルベルのカノンを作った

面白かった。 音符の長さを八分音符にしているときに 「ドーーー」と書けば二分音符になるところが直感的でいいと思った。 テキスト音楽サクラではMMLも使えて、それでもc^^^で同じことができるようだ。

あと引数付きのマクロが実装されているので 「タッカタン」というリズムが繰り返される曲はMMLでは「e.d16c」も「e^^dc^^^」も面倒だけども、引数付きマクロでまとめてしまうことも可能。 ただどうも#takkatan({e}, {d}, {c})みたいに文字列リテラルを囲ってカンマで区切らないといけないみたい。 Pythonならこうなんだけどなぁ

>>> def takkatan(a, b, c):
	return a + "." + b + "8" + c + "4"

>>> [takkatan(*x) for x in ["edc", "cde", "egc"]]
['e.d8c4', 'c.d8e4', 'e.g8c4']

そういう抽象化の手法をほとんど使わずに書いたサクラのコードは下記

調#(ドファ)
テンポ120

#MELODY = {
音符2
ファミレ  ド↓シラシ↑ド
レド↓シラ ソファソミ

音符4
レファラソ ファレファミ
レ"シレラソシラソ

ファレミ↑ド レファラ↓ラ
シソラファ  レ↑レレ.ド8

音符8
レドレ↓レドラミファ レ↑レド"シドファラシ
ソファミソファミレド ↓シラソファミソファミ
レミファソラミラソ ファシラソラソファミ
レ"シシ↑ドレド↓シラソファミシラシラソ

音符4
ファ↑ファミーンレファー
シーラーシー↑ドー

レ↓レドー ン"シレー
レーーレ レソミラ

音符16
ラーファソ ラーファソ
ラ↓ラシ↑ド レミファソ
ファーレミ ファー↓ファソ
ラシラソ ラファソラ
ソーシラ ソーファミ
ファミレミ ファソラシ
ソーシラ シー↑ドレ
↓ラシ↑ドレミファソラ


ファーレミ ファーミレ
ミドレミ ファミレド
レー"シド レー↓レミ
ファソファミ ファ↑レドレ
↓シー↑レド ↓シーラソ
ラソファソ ラシ↑ドレ↓
シー↑レド レード↓シ
↑ドレミレドレ"シド

音符4
レンドン↓シン↑レン
↓レンレンレンミン
ンランランファンラ
ンソンファンソ↑ンミ

音符16
ファ↓ファソファミ↑ミファミ
レ↓ファレシラ↓ラソラ
シ↑シ`ドシラ↓ラソラ
シ↑シラシ`ドド"シド

レ↑レミレ ド↓ドレド
"シシラシ ↑ド↓ドファミ
レ↑レミソ ファ↓ファラ↑ファ
レソファソ ミ↓ラソラ

ファラララ ララララ ファファファファ ファファララ
ソソソ↑レ レレレレ レレ↓シシ ララ↑ミド

↓ラ↑ファファファ ミミミミ レレレレ ララララ
シシシシ ララララ シシシシ ↑ド↓ラララ

音符32
レー↓レミファーレー
ドー↑ドレミードー↓
シー↓シ↑ドレー↓シー↑
ドーラソファーミー
レーソファミーソー
ファーレミファーラー
ソーシラソーファー
ミーラソファーミー

ファー↑レドレー↓ファー
ラーラシ`ドーラー
ファー↑レミファーレー
ファーファミレードー↓
シーシラシー↑ドー
レーファミレーファー
ソーレド↓シーシー
ラーミーラーラー

音符8
ラーーラレーーラ
ソーラーソレレ.ド16

レ↑レドー↓シーラー
レ.ミ16ファーシーミ.ミ16

音符16
ファーー↑ファファソファミ
レーーレレミレド↓
シーーー↑レーーー レド♭"シド♭ ↓ラーーラ

ラーー↑ララシラソ
ファーーファファソファミ
レド♭"シド♭ ↓ラーーラ ソーレー↑ドーード

音符8
レレードー↓シーラーソーファファ.ミ16ミー

ラ↑ファーミレ↑レード♭↓ シー↑レ↓ラシーラー
ラーl16↓ラーーソファーーー↑ファーーミl8レーーレレードー

ラ↓レド↑ド ↓シ↓シラ↑ラ ソ↑ソファ↓ファミシミ↑ミ
ファ↓ファミ↑ミレ↓レド↑ド↓ シ↑シラ↓ラソ.↑ミ18↓ラララーンンン
}

トラック1
#MELODY

トラック2
音符1 ンンンン
#MELODY

トラック3
音符1 ンンンンンンンン
#MELODY

2007年01月29日

「波線省略するな」キャンペーン?

高木浩光@自宅の日記 - 日常化するNHKの捏造棒グラフ

一つ目のグラフはひどいけど、値を表示しているのでまだ良心的。 二つ目のグラフは縦軸に目盛りがあるし、きちんと波線を書いているので 高木先生の言うところの「小学4年の算数で習うレベルの学力」がある人ならば問題なく理解できるはず。

一つ目のグラフのように縦軸と波線を省略し、 二つ目のグラフのように値を省略すれば 「まったく根拠のないデタラメグラフ」のできあがり。

今回高木先生が例示したグラフは、決して「いちばんひどいケース」ではないですよね。 捏造というには片手落ちでぼろが出ているグラフ。 だからこそ外部の人間が間違いを指摘できたわけです。

だから ICのblog:それは違うかと・・・ の「事業所数が30750から20750になるのは,激減といって間違いではない」 という指摘はあまり意味がありません。 どれくらいの変化で激減なのかは客観的には決まりませんし、 この事業者数のグラフがよいか悪いかではなくて、 こういうグラフを作って放送してしまうことを問題視しているのでしょうから。

もわ爛漫 - 表すべきデータの意味 の 「「プレゼンテーションにおいては見せるべきところを強調する」という基本ともろにバッティングする主張でもある」 という主張は確かにその通りで、 時間の限られるテレビ放送に論文のような厳密さを要求するのは難しいし、 またそれが視聴者のためになるとも限らないです。 リンク先で提案されている 「データに細工をしたことが分かる表記を省略しない」 「報道関係者は検証可能な生データをWebサイト等で提供すること」 に大賛成。 高木先生の「波線省略をするな」は過激すぎて実行が難しいです。

はっ、これはもしかして 「過激なことを言って注目を集めるメソッド」なのでしょうか? 「サニタイズ言うな」みたいな。 あー、そうか、そう考えると納得がいく。 近いうちに「波線省略するな」というタグがつけられるようになるんだ、きっと。

ミンチ日記

今日は留学生と一緒に明治神宮へ。 明治は中国語ではミンチと読みうるらしい。
= みんちちんくーから帰ってきました。 ming2 zhi4 shen2 gong1。 「みんちしぇんごん」じゃん。 そうか、なまってただけで本人は日本語読みのつもりだったのか。
= 新年会のようなものに行ってきました。

OSASKの川合さんに執筆のコツとかを聞いて、 すこしやる気がわいてきました。

  • 言いたいことを決める
  • 言いたいことを書く
  • 自分流を押し通す
    • 炸裂、川合節!

= ICTスクールの高校生が4ヶ月の自宅作業と1週間の合宿で作ったもの。もうちょっと動画の品質を上げることはできなかったのだろうか。 あ、「ムービーをダウンロードする」というメニューがある。 これを押せばいいのか。

いろいろつっこみたいところはあるけども…まぁいっか。

2007年01月27日

冬眠日記

とてもねむい。

行きにブラックブラックガムを買うかどうか迷ったけど、買えばよかった。


= http://www.pref.mie.jp/TOPICS/200701007112.pdf。 三重県の津市でセンサーネットワーク系のシンポジウムがあります。 1月30日、31日。1000円。 その辺の話題に興味がある人や、生アランケイ博士を見たい人は行ってみてもいいのではないでしょうか。

こういうお知らせがエントリーへのコメントとして来ることがあるので、 やっぱりコメントをつけられるブログの存在は重要かなぁとも思うわけです。


= 携帯電話を忘れずに携帯してきたけども、電池が切れている罠。
= 渡辺さんの日記。僕もその症状に出くわし、同じようにタブで回避しました。
= おびなたのはてな日記 - 情報処理学会刊行物オンライン化。 ああ。 言葉の定義が食い違っている…。

とりあえず整理。

このエントリーでは「投稿料」を文字通り「論文を投稿する際に支払う料金」としよう。 つまりこれはアクセプトされる(論文誌に掲載される)かどうかにかかわらず払うお金。 入試で言えば受験料に当たる。 論文を投稿すると、「専門家による査読&コメント」というサービスを受けるわけなので、 対価を支払うことは不自然ではない。

一方「別刷り代」は、建前としては別刷りの代金だが、 「掲載されたら最低100部購入せよ」などの縛りがあるので 事実上「掲載料」だ。 これも「彼らの研究は専門家によって価値があると判断されました」というお墨付きを与えるものなので、 対価を支払うことは不自然ではない。

で、料金体系を見直そうと考える理由がアンケートには書かれていなかったように思うが、 単にお金が必要なだけならシステムを変更しないでも別刷り代を値上げすればいいだけだから、 きっと査読者に対価を支払うための原資として導入するってことなんじゃないかと思った。 それならば合理的。

もちろん合理的であるかどうかと、よい戦略であるかどうかとは別だけど。


__ 目とか頭とか痛い。

2007年01月26日

論文誌も変わらなきゃ日記

論文誌の電子化についてのアンケートに答えて欲しいという依頼が来ていたので見てみたんだけど 「論文誌ジャーナルの購読がオンライン化した場合に、 オンラインならではのメリットが活かせる購読者向けサービスとして、 どのようなものがあれば良いと思われますか?」 という質問に 「紙では掲載できなかったプログラムが見える、実際にプログラムが動く、 音楽が聞こえるといったマルチメディア対応サービスが欲しい」 という選択肢があってちょっとwktk。

「論文誌も変わらなきゃ」の時代ですかね。


= 22時。だいぶ交通機関を理解した。 この時間は新木場から普通に武蔵野線に乗ると座れないので、 一度逆方向に乗って東京から帰ればいいんだ。 この時間の東京発は空いている。 新木場に行くまでに座れないくらい混む。

八丁堀って何があるんだろうなぁ。


= ラボに入った50インチのタッチパネルを試してみた。 GRINEditにマウスだけで頂点を追加できる機能を入れれば 面白いかも。
= e-かなネットアンケート : 神奈川県

諸外国では、法律等によりレストランやショッピングセンターなどの公共の場所を全面禁煙にしている国もありますが、神奈川県で、受動喫煙を防止するために条例で特定の公共の場所の喫煙を規制することについてどのように考えますか。あてはまる番号を選んでください。(回答は一つ)(3472)

賛成である (1376件 39%)
反対である (1823件 52%)

「喫煙者が組織票を投じている」という話 ([mixi] 煙草撲滅運動 | 緊急!!) を聞いて試してみました。 しかし一体どうやって 「ここ数日で反対票が増加しています。 反対派が組織的に巻き返しを図っているからです。」 という事実を確認したのかが疑問ですが。 mixiで投票を募っている喫煙規制賛成派がそもそも組織票のような気もしますし。


= メリハリ。 帰ってきてオフの時間を楽しむためには、 オンの時間をもうちょっと前にずらすべきだと思う。 23時に帰ってくるとだいぶ疲れている。
= 今日のウダー。 新世紀より第2楽章の例のメロディをちゃんと最後まで弾けたのに、 ボリュームが小さすぎて撮れていないorz 前から音が小さくて困っていたのだけど、 ソフトウェア音源を変えたら「まろやかな音」になってさらに小さくなってしまった。

カノン (パッヘルベル) - Wikipedia を練習中。激ムズ。音符が360度かけずり回る上に0.8オクターブくらいジャンプしたりする。 ちなみにリンク先に楽譜が載っているけど、Violin1の4小節目までは弾けます(ぉ) Canon in D (Violin I)

2007年01月25日

odaiba日記

人力検索はてな - 教えてください!!  googleの入社問題です。 Congratulations. You've made it to level 2. Go to www.Linux.org and enter Bobsyouruncle as the login and the answer ..

ちょw、聞くなよw


= 「新世界より」の楽譜を入手。あの有名なフレーズはオーボエなんですね。
= お台場のラボに50インチのディスプレイが入るという話は聞いていたけども、 来てみたらハンドライティングシステムまであった! 50インチのタッチパネル!ぎゃー!

と思ったけど、実はハンドライティングシステムってそんなに高くないようだ。 23万円くらい。 ディスプレイの方は価格がわからなかったけども、似たような型番のものだと75万くらいか。 熱帯魚に100万とかかける人もいるようだから、 自宅に50インチタッチパネルってのもありかも知れない。

書道できる。


= メリ!ハリ!メリ!ハリ!


= 校正していて思ったのだけど、 「実際の」が多すぎる、自分。 実際のところ、「実際の」は全部削っても問題がない。
= 20時。おなかすいた。
= Emacs Lisp、キライ。 GRINEditを呼び出す関数群を一つのジェネレータから作るようにしようとしたらうまく行かず。 原因を調べていたら、
(defun foo (x)
  (lambda (y) (+ x y)))

((foo 1) 2)
これがエラー。 まず関数と変数の名前空間を区別しているので関数が呼びたければ下のようにしなきゃいけない。
(funcall (foo 1) 2)
でもって、これでも(void-variable x)というエラーになる。 lambdaの中で使われているxは外のxを参照できていない。 キライ。 Schemeなら
(define (foo x) (lambda (y) (+ x y)))

((foo 1) 2) ;=> 3
と非常にわかりやすいのに。 Emacs Lispでパラメトライズされた関数群を返したいときにはどうしたらいいんだろうか。

GNU Emacs Lisp Reference Manual - スコープと Extent。 うーん。僕がやろうとしていることはやろうとしている方法ではできないと言うことか…。

はっ。マクロを使うのか?!

GNU Emacs Lisp Reference Manual - マクロ

(defmacro foo (x) (list 'lambda (list 'y) (list '+ x 'y)))
(funcall (foo 1) 2) ;=> 3
マクロを使ったら出来た。えー。

で、やりたかったことはこれなんだが…

(defun generate-process-caller
       (script-name)
       (lambda ()
	       (interactive)
	       (call-process-region
		(point-min)
		(point-max)
		script-name)))
こうなるのか?↓
(defmacro generate-process-caller
       (script-name)
       (list 'lambda '()
	       (list 'interactive)
	       (list 'call-process-region
		(list 'point-min)
		(list 'point-max)
		script-name)))
うまく動いた。うーん。 いまいち好きになれないなぁ、これ。

以上、実は「はじめてのマクロ」でした。

Scheme、Common Lisp、Emacs Lispの比較。 ふむふむ。やっぱり僕の好みはScheme > Common Lisp > Emacs Lispの順かなぁ。


= おなかの調子が悪い。
= メリハリ。ハリって疲れたのでメリの時間なんだけども、 疲れすぎてウダーを練習する気力がでない。ううむ。 まぁ一応つなぐだけつなごうか。

2007年01月24日

ズボラ防災日記

サイボウズラボに来ています。ウダーを持って。 竹迫さん情報: S-YXG50 - MuseWiki。 とりあえずこれを入れてみてどう変わるか試してみます。

説明通りにWindows Updateカタログに行っても 説明通りのタイトルのものはありませんでした、 がファイルサイズから適当なものを選んでインストールしてみたらそれでよかったみたいでした。 体験版のダウンロードに関してはOpen Drivers/S-YXG50での自動ダウンロードは失敗しますが、 Direct Downloadのopendrivers.comからのダウンロードを選べばOK。


= 今日プレゼンするのに、すでに日記で公開した内容ばっかりなのはアレなので 前からやろうと思っていた 「Meadow上で書いた個条書きをGRINEditにグラフの形で送信する機能」を急遽実装。 これはまったくもってGRINEditのレイヤーの話ではなく、 Javaのソースはいじってない。 EmacsLispをちょろっと書き足して、 Pythonを60行くらい書いただけ。 近いうちにFlashと解説を日本語と英語で作るべきだろうな。

箇条書きは「西尾泰和のブログ: Pythonで箇条書きをHTMLに変換」のフォーマットを採用しよう。


= それ Unicode で。 高木先生が日記に対応策を書くのをワクワクしながら待つことにします。
= 「東大はRubyを教えることにした」と思っていたらそれは教養の方だけで、 専門では「Python処理系を実装させる」なんてことをやっているらしい。 全員Pythonの構文に改行が必須なのを知っているのか~。 それを事前に知っていたらPythonワンライナーの話にしたんだけどなぁ、今日のプレゼン。

西尾泰和のブログ: 「Jythonでインタラクティブ・ハッキング」@Python Developers Camp 2007 Winter。 紹介するつもりでブラウザを開いていたのに、デモでトラブったのですっかり忘れてしまった。


= 留学生にプログラミングを教えるのはとても難しい。英語が。 自分が実装していないコードを解説はできない。実装しないで説明できるのは環状双方向リストくらいが限界。四方向リストの管理はちょっとね。 そしてまたブルースクリーン。 怖いな、このマシンそろそろ壊れるんじゃないだろうか。

2007年01月23日

柏日記

壊れた椅子は、壊れた部品だけ買えないかと聞いてみたら、 無償で交換してもらえることになりました。 文字通り交換なので、壊れた部品を段ボールで梱包して置かないと。
= 今朝届いた宇田君のメールで、ウダーはきちんとウダー練習ソフトで音が鳴るようになりました。 ちょっと試してみてうまく動かないから動かないと思いこんでましたが 僕が設定ファイルの存在に気がついていなかっただけでした。 結局FL STUDIOとかACIDとかは必要ありませんでした…。

ピアノ譜を眺めながらウダー譜を書いているのだけど、 よく考えたらピアノじゃなくてバイオリンとかトロンボーンとかの方が 練習によかったのかも知れないと思ったり。


= マックスコーヒー1本のカロリーはサトーの切り餅1個よりわずかに多い。
= 最速インターフェース研究会 :: お気に入りをサイドバーに常時表示させてない人はどうしてるのか
Firefoxだとブックマークレットにキーワードを割り当てられるので、例えば「ctrl+l sub enter」でsubscribeとかいうのもやってる。
これは便利。
= 今日は柏。 今日はWiiができない。

「べっ、べつにWiiがしたくてラボに行ってるんじゃないんだからねっ!」(ツンデレ)

デレはどんな感じだろう。


= お腹が空いたので、ふと 「生協の食堂開いてるかも」と思いつき、 カードキーを持って一階まで降りて、ドアを開けて…

外に出る前に気がついたのだけど、 産総研のカードキーでは東大柏キャンパスの建物に入れません。 危なかった。


= もみあげがうっとうしい。
= 今日のウダー日記。

P1060887 写真共有「フォト蔵」。 せっかくうまく弾けたのに映ってないし!

新世界より第二楽章・手元アップ 写真共有「フォト蔵」

手元をアップにすると、またしてもウダーが回っていないことがばれてしまいますw。 実はオクターブの上下を無視すると、4カ所しか押さえていないのです。 スタートから見ると0, -2, -4, +3の4カ所。 負にならないようにすると4, 2, 0, 7。ミレドソですね。 4,7,7, 4,2,0, 2,4,7,4,2, 4,7,7, ^0,^2,^4, ^2,^0,^2,7,^2。 ^の付いているのがオクターブ上。

片手でも弾けた。

音がハウリングっぽくなったり、妙に鋭い音になったりするのは、 デジカメ内蔵マイクの性能の問題。たぶん共鳴する周波数があるんだ。 楽器の音をきれいに録音することは意図されていないんだろう。


__ 椅子を解体して梱包したので座れない。

僕の脳内ウダーバイエル。

1:一つの指で一つの音を出す、
2:ピーポーピーポー(0,4, 2音)、
3:チャルメラ(0,2,4, 3音)
4:「家路」の終わり部分(0,2,4,7, 4音+オクターブ違い3音)
5:「聖者の行進」(5音)
6:「こげよマイケル」(6音)
7:「家路」(6音+オクターブ違い3音)←いまここ
8:4~7を片手で弾く
ウダー採点ソフトとか欲しいかも。 ウダー練習ソフトの改良版で、 MIDIを食わせると音なしで音符が振ってきて、 叩きそこねと、余計な音符を押したのをカウントしてスコアが表示されるようなソフト。 …それって音ゲーじゃん!

僕の指が短いのか、一番低いオクターブはかなり押しにくい。 持ち手を削るべきだろうか…。

ぐるぐる回しているうちにソの上に置いていた指がソ#になったりする。 今までのウダーは鍵盤に合わせた塗り分けだったり、交互の塗り分けだったりしたけど、 交互では知らない間に一つずれたときに、どちらの隣が正解かわからない。 3色の塗り分けなら、1つまでのずれは補正できる。 今度ダイソーに行って適当なネイルシールを買ってきて貼るとしよう。

2007年01月21日

ウダー日記

ウダーとは: 宇田道信氏が開発した、螺旋上を指で押さえて演奏する新しい楽器です。 1周で1オクターブで、半音より小さい間隔の音も出すことが出来ます。 MIDI楽器なので好きな音色が出せます。 なめらかに音程を変えられるという点ではピアノより優れ(トロンボーンみたい)、 一度に指の数だけの音を鳴らせるという点ではトロンボーンより優れ(ピアノみたい)、 同じ種類の和音は同じ指の形になるため、ピアノやギターよりはるかに覚えることが少ない。 そんな楽器です。
= P1060874
P1060874

買っちゃいました。


= 何もかもが裏目に出ていたこの数日。 まずウダーを送るのは時間帯指定できるけどどうするか?と聞かれて 「じゃぁ20~21時」と答えたこと。 土曜日の20~21時に来ました。土曜日は家にいるから朝にしておけばよかった…orz。

「MIDI音源が必要」と言われたのに、ソフトウェア音源でいいだろうと考え、 AmazonでUSB-MIDIインターフェイスを購入。 ウダー本体が土曜日に着くことを知った時にAmazonで確認したら 「月曜日発送予定(すでに発送準備に入ったのでキャンセルできません)」 …秋葉原に行って買ってきた方が早いorz。 一応、返品は可能らしい。

土曜日、不動産屋へ行ったものの、色々必要な情報が足りなくて書類に書き込めない。 その中でも一番大変なのが「どうせ今のところに住むのは1年間だけだから」 と言って変更していなかった住民票。現住所を証明できる書類が何もありませんorz これで与信審査に落ちたらどうなるんだろう…。

帰りに「はたして月曜(発送が月曜なら着くのは火曜?)まで 眺めるだけで我慢できるか?」と自問して秋葉原に寄る。 USB-MIDIインターフェイスを見る。うは、コネクタがメスのとオスのとあるよ! どっちを買えばいいかわかんないよ! うーん、よし、Amazonで買ったのはオスだったから、今回はメスを買おう!

帰ってウダーを受け取る。19時半。 オラ、ワクワクしてきたぞ!(悟空) さっそく開けてつないでみる… ……USB-MIDIインターフェイスはオスを買うべきでしたorz。 うわーん。 今からもう一度秋葉原に行っても間に合わないよな…。 諦めるしかないのか…、、はっ、今日は土曜日だから南船橋のららぽーとは21時まで開いているはず! 自転車で走れば20分で着く! 楽器屋あるかな、あった!ktkr!今行くぜ!雨だ!強行突破!

MIDIケーブルは1種類しかありませんでした。 秋葉原では300円くらいだったのに、なんか高級品っぽい1000円のしかありませんでした。 ここまで来て買わないわけにも行くまい。

買いました。つなぎました。 USB-MIDIインターフェイスのLEDが点灯してUSB接続はうまく行っていることがわかります。 また、MIDI機器から信号が来るとMIDI-INの所のLEDが点灯することになっています。 …点灯しませんorz。 当然のように全然音が鳴りませんorz

仕方がないので宇田君にメールを書いて今日は寝ることに。


= 次の日。 朝。 「ピンポーン」 「ん?」 「お届け物でーす」 Amazonから2つ目のUSB-MIDIインターフェイスが来たorz。

宇田君からの返事によれば、 ウダーから信号が来ている場合にはウダー・MIDI変換BOXのLEDが明るくなるそうです。 おお、確かにウダーをいじるとLEDが明るくなる。 気づいてなかった。 ということは、ウダーとMIDI変換BOXには問題はなく、 またUSB-MIDIインターフェイスにも問題がない… …ケーブルか?!雨の中買いに走ったケーブルが原因だというのか?! 端子の形も同じだし、ちゃんとMIDIケーブルって書いてあるけど?! MIDI - Wikipedia

MIDI機器(ハードウェア)は5ピンDINコネクタで接続するのが一般的で、音響用のストレートケーブルではなくクロスケーブルが用いられる。これをMIDIケーブルと呼ぶ。
この記述を読んだとき、もしかしてとは思っていたけども! このケーブル、まさかクロスケーブルじゃなくてストレートケーブルなのか?!

ぁぅぁぅ。原因がケーブルにあるのなら、 今手元にあるオス-オスのUSB-MIDIインターフェイスを使えば問題なく動くはず… …でもこれを開封したらAmazonに返品できないぞ。 メスのUSB-MIDIインターフェイスが余っちゃうぞ。 ケーブルだけ買い換えて試せば300円程度の追加でうまく動くかも知れないぞ… …ペリペリ(パッケージを開ける音)

ktkr! ウダーの操作にあわせてMIDI-INのランプが点灯するよ!

ダウンロードしておいたFL STUDIOの体験版を起動する。 ウダーを操作する。 ウダーの操作にあわせて、ドラムの音がする。 …機能が豊富すぎてどこをどういじったら普通に音が出るのかわからないorz。

とりあえずチャンネルの追加でWASPという物を選んだら、 音階の音が出るようにはなった。 しかしウダーの出力が一定値を超えた時に音をならすみたいで、 なんだか三味線みたいな音。 グリッサンド - Wikipedia ができないのでウダーの長所を全然生かしていない。 それどころか、軽く触れただけで音が鳴ってしまうので演奏どころじゃない…。 うーん、やっぱり素直にMIDI音源を買った方がよかったのか? MIDI音源はかさばるからラップトップだけでできるといいなと思ったんだが…。 でもウダー・MIDI変換BOXに電源が必要だからどっちみち電源のない場所では遊べないか…。 うーん。音源を買うべきなのかな…。

動画:設定の仕方がよくわからないorz 写真共有「フォト蔵」。 全然曲になっていないのは僕が下手なだけです。はやくこんな風に弾けるようになりたい→ 宇田さんウダー演奏中 写真共有「フォト蔵」


= 追伸。その他にも「メールアドレスを更新し忘れていて、ドメイン料金を払い損ねた」 「椅子の鉄パイプが破断しかけ、体重を後ろにかけると曲がって僕が投げ出される」 「雨の中を強行してから、右足の太ももの付け根が痛いのですが…」 などなど。 お茶を沸かし始めた時にこけたので被害は少なかったが、 沸いてからだったら大惨事だ。 椅子どうしよう。…半田付けしてみる?

__ さらに追伸。ACIDの体験版を使ったら長い音が出せるようになったので: 一応曲が弾けた!(5音しか使わない曲だけど) 写真共有「フォト蔵」。 いや、この曲は初めてウダーに触ったときに弾いたので弾けることはわかっていたのだけども。一応弾けたと言うことで。

一日遅れ日記

howmに書いて、次の日くらいに「あ、昨日の日記をアップしていないや」と気づいたら一日遅れ。 もっと気づかない場合はもっと遅れる日記です。
= スラッシュドット ジャパン | 中国が弾道ミサイルによる人工衛星の破壊実験に成功コメント
アメリカが、同様の実験を1985年9月13日に行っています。

F-15から、ASM-135という対衛星ミサイルを発射。 高度555kmの軌道上にあった太陽観測衛星P78-1を見事撃破。

そして、少なくとも250のデブリが発生しました。(レーダー観測された数と思われます。) 全てのデブリが大気圏に突入し消滅したのは1997年とされていますが、観測にかからない小型のデブリは空気抵抗が少ないため、20年ぐらいは残ると思われます。

アメリカでは、デブリの問題及び予算その他の問題により、衛星攻撃実験はこの1回で終了しています。

今回中国が撃破した標的衛星は、高度860kmです。 アメリカの時より、遙かに長い間デブリとして軌道を占有するはずです。 これは宇宙開発国として、非常に無責任な姿勢と言えます。

ちなみに、国際宇宙ステーションは高度400kmの軌道にあります。 今現在、直接的な危険は無いわけですが…

これはテロじゃないか。


= ここのところしばらく「お風呂で暖まった後、シャワーで手足や首の後ろに水をかける」 というのを試していた。 今日は両手足に手桶で水をかけたあとで首の後ろにかけようとして、 失敗して前にも流れてしまった。心臓がびっくり。
= PDFを校正して返すのってどうするのがいいのかなぁ。 AcrobatReaderでJournalノートライタに印刷し、 Windows Journalで手書きでコメントをつけてクセロPDFに印刷してPDFに戻してみたら、 ソースコードの英数字部分だけ消えた。「すべてのフォントを埋め込む」になっているのに。 画像として書きだしたら元々500KBだったPDFが6MBに増えてしまった。 これをメールで送るのはちょっとなぁ。

JournalノートライタでWindows Journalに変換した時点ではフォントは何も変化していない ように見える。(レンダリング時にアンチエイリアスをかけていないせいで見栄えはかなり悪化しているけど。) ということはクセロPDFがいけないのか…。

Acrobatを買えばこういう問題は解決するのかなぁ。 買ってみないと解決するのかどうかわからないってのはなんかやだなぁ。

とりあえず今回は画像として書きだした6MBのPDFを自分のWebサーバに置いて ダウンロードしてもらうことにしよう。


= だいぶ前に、YouTubeへのアップロードしたArmadilloRunのプレイ動画、 コメントが付いたらしいので読んでみたら 「すげービデオだね、でも俺体験版しか持ってないんだ、正規版送ってくれね?」 買えよ!
= 明日、もう一度不動産屋さんに行って、 物件の実物を見て、どうするか決めてこよう。 というか、どういう物件がいい物件なのかの判断基準が僕の中にあんまり明確にない以上、 行って実物を見たところでいいのか悪いのか判断のしようがないし、 結局「とくに問題もなさそうだし、別のを探すのも面倒だからこれでいいや」になりそうな気が。 「物件を見ないで契約する」ということに抵抗があったからこういう行動を取ったのだろう。 あんまり合理的とは言えない。

まぁ、ダメだと思ったらまた引っ越せばいいわけだし。

不動産屋に行く前に電話をかけた方がいいかな。たぶんいいだろうな。 名刺もらったし。


= 8時までに帰って来て、注文した楽器を受け取ろう。 8~9時に届く予定。 でも必要な周辺機器がまだないので使えない。 あー。配送が2007/1/22だって…。 amazonの「お急ぎ配達」はこういうときに使うべきだったのか。 お急ぎにしてたら今日届く予定だったのに。 うーん。 明日秋葉原に行って買ってくる方が手っ取り早いなぁ。 しまったなぁ。 失敗。
= いじめ禁止を校則化ねぇ…。 どちらかというと、匿名のいじめ報告窓口を設けて 「いじめを目撃したにもかかわらず報告しなかったことが発覚した場合、 いじめの共犯としていじめの正犯と同じ処分に処す」 とかにした方がいいんじゃないかと思ったり。 「見て見ぬふり」ができなくなるでしょ。

ある程度の情状酌量はあってもいいかもしれないけど、 むしろ処分の決定を学校外の組織が行うようにして、 「学校の損得計算」で情状酌量されたりしないようにすべき。

例えば長期間にわたる執拗ないじめとクラス全体の「見て見ぬふり」 によって被害者が追い詰められて自殺をしたようなケースでは、 直接いじめていない生徒といえ十分悪質であり情状酌量の余地がない、として クラス丸ごとの退学処分もあり得る、というシステム。

PythonとJavaScriptの微妙な違い

だいありー

なんかささださんと話がかみ合っていない気配がするので、 とりあえずこちらが知っているPythonの話をまとめてみます。

Pythonの場合、関数内で代入が行われる変数はローカル変数です。 すでに外のスコープに変数があろうがそんなことはお構いなしにローカル変数です。 例外は、変数をglobal宣言した場合で、この場合だけグローバル変数になります。

>>> def func1():
	global a
	a = 1 # グローバル変数への代入になっている
	b = 2
	print locals()

	
>>> func1()
{'b': 2} # ローカル変数はbだけ
>>> a
1 # aはグローバル変数なのでアクセスできる
>>> def func2():
	a = 1
	global a
	
SyntaxError: name 'a' is assigned to before global declaration (, line 1)
それでもって、一つの関数内で同じ名前でグローバル変数とローカル変数を作ったら、 グローバル変数がローカル変数で隠されている状態になるのが自然だと僕は思ったわけです。
>>> def func2():
	c = 1 # ローカル変数作成
	globals()["c"] = 2 # グローバル変数作成
	print c

	
>>> func2()
1 # ローカルのcは1
>>> c
2 # グローバルのcは2
でもって、ささださんの挙げたJavaScriptの例も、 "a"になるのが自然だな、でも違うのか、と思って試してみたらやっぱり"a"になったので、 「うむむ、これは何か話がかみ合ってないぞ?」と思った次第。
function test() {
  var foo = "a";
  function inner() {
    foo = "b";
    var foo = "c";
  }
  inner();
  return foo;
}
document.write(test());
PythonでもJavaScriptと同じように"a"が返ります。
>>> def test():
	foo = "a"
	def inner():
		globals()["foo"] = "b"
		foo = "c"
	inner()
	return foo

>>> test()
'a'
ささださんが何を不自然だと感じたのか詳しいことはわからないですけど、 もし"b"が返ると思ったのだったらどういうことか考えてみると…。 きっと僕の脳内では
  • JavaScriptの"x = 1"はグローバル変数のxを作成して1で初期化する命令
  • グローバルスコープとは、トップレベルのスコープ
という認識になっていて、
  • 「foo = "b";」によってグローバル変数がいじられようが何だろうが、 関数testのローカル変数が影響を受けるはずがない
  • 「var foo = "c";」はローカル変数だから関数の外に影響を及ぼすはずがない。
と感じるのでしょう。 一方、"b"が返るべきだと感じる人は
  • JavaScriptの"var x"は変数xの有効範囲を関数内に限定する命令
  • varの付いていないのは限定されていない変数
  • 限定されていないってのはつまり、1枚外側のスコープってこと
という認識になっているのでしょう。 そういう実装の言語もありだと思います。 で、その場合
  • 「var foo = "c";」はローカル変数だから関数の外に影響を及ぼすはずがない。
  • でも「foo = "b";」は普通の変数なんだから、「var foo = "a";」と同じスコープ。
  • あれ?"a"って返ってくるぞ?
となるんじゃないでしょうか。

と勝手に憶測。

でもなんだかんだ考えた結果、JavaScriptもPythonと同じように 「varでスコープを限定したいのなら、最初の代入の時までに宣言しなければシンタックスエラー」 というようになればいいんじゃないかと思えてきました。 というわけで「え、エラー出すべきなの?」は撤回。


= うっ、これは後に代入された方が返るのか…。 これは気持ちが悪い…。当然"b"が返ると思ったのに…。
function inner() {
  var foo = "b";
  foo = "c";
  document.write(foo);
}
inner();
Pythonなら代入の順序にかかわらず"b"が返ります。
>>> def test():
	globals()["foo"] = "c"
	foo = "b"
	print foo
	foo = "b"
	globals()["foo"] = "c"
	print foo

	
>>> test()
b
b

ふうむ。 Core JavaScript 1.5 Guide:Variables - MDC: 「JavaScript の変数に関して独特なこととして、後に宣言される変数を例外を発生させることなく参照できるということもあります。」 っていう実装なのか。 仮に関数の冒頭でfoo = 1と書いてあっても、 もしかすると関数の最後にvar fooと書いてあるかも知れないから 全部読むまではグローバル変数かどうかわからないわけか。 一方Pythonはfoo = 1が出てきた時点でローカル変数に決定、 仮に後からglobal fooが出てきても構文エラー、と。 global fooが先に出てきたらfooはグローバル変数に決定、と。

Python流の方がいいと思うけど、 JavaScript流の方がインタプリタの実装が楽そうな気配。

2007年01月19日

新年会日記

週刊ロボザックは本当にロボザックが完成するところまで継続するんだろうか。
= 「CPUなんかもう速くならなくていいから、早くメモリを1テラバイト積めるようになってくれ」 という話を聞くのだけど、やっぱりそれは難しいのだろうなぁ。
= asahi.com:日本の技術力を一堂に 「ものづくり展」開幕?-?暮らし うわっ、環境マッピングっ! 見に行かなきゃ。
= 2日くらい前にヤクルトを投入した充実野菜は、 見事に発酵しています。だって酸っぱいはずがないもんね。

充実野菜を飲んでいると最後に繊維質のどろりとしたものが残りますよね。 あれが軽い酸味とヨーグルト臭を帯びています。 個人的にはただのどろりとしたものよりおいしくなったように感じますが、 まぁ発酵食品の好みは人によってかなりわかれるのでおすすめはしません。

ウェルチのグレープジュースは何も変わっていないような… もしかすると元が甘いので少し酸味が出ているけどわからないだけなのかも。 オリジナルと飲み比べると違いがわかるのかも。今度試そう。


= NETA NOTE -ネタノート-: デスノートコラ「終わらないパズル」 ピヨ速。 -YouTube- デスノートコラ 『恋心』 ピヨ速。 -YouTube- デスノートコラ 『もしもリュークが最後にライトを助けたら』
= 上は昨日の日記。作業中に久しぶりにブルースクリーンになり、集中力が途切れた。

今日は研究室で新年会。お好み焼き。 研究室に主婦がいます。あ、シェフなの?どっちでもいいや。 職業シoフ、普段は駄菓子屋の店長。世を忍ぶ仮の姿は修士1年。

Wii。

テニスでロケットサーブが打てるようになったよ! あと「裏向きに振るとスライスが出る」とか 「走る向きをコントロールできる」とか 「振る向きは関係ない」とか色々噂が流れていますが、正解はどれなんでしょう。 とりあえず走る向きがコントロールできないのなら、 相手の右へのサーブを即座に相手コートの左手前に打ち返すのは確定になってしまうかも。


= もう終わりかと思っていたのに新たにワインが1本。

帰りの電車は23:59分発の最終電車に乗って大崎、秋葉原と移動すれば帰られることが判明。 隣に立っていた女性が寝ててイナバウアーで体当たりしてくる。 うれしくない。

日能研 - シカクいアタマをマルくする。 解けた。 酔ってな~い!

どうしよう。酔いがさめたから眠くない。

2007年01月18日

circular doubly linked listを使って0/1配列を省メモリ実装

もちろんPythonを使っているので定数倍くらいのディスアドバンテージはありますが。 要素のほとんどが0で、少しだけ1であるようなサイズNの配列を、 素直に普通の配列として実装するとNのオーダーのメモリを消費します。 そこで1の入っている部分だけを双方向リストで実装してメモリが節約しよう、というアルゴリズム。 西尾泰和のブログ: Pythonでcircular doubly linked listの続編。
# -*- coding: cp932 -*-
from circularDoublyLinkedList import DList

# DListを使って巨大な0/1配列をエミュレートする

class Array(DList):
    def __init__(self, size):
        self.size = size
        DList.__init__(self)

    def get(self, index):
        "index番目の要素の値を返す"
        for x in self:
            if x.value == index:
                return 1
            if x.value > index:
                return 0

    def set(self, index, value):
        "index番目の要素の値を設定する"
        if value:
            self.turnOn(index)
        else:
            self.turnOff(index)

    def turnOn(self, index):
        "index番目の要素の値を1にする"
        for x in self:
            if x.value == index:
                # すでに1になっている
                return
            if x.value > index:
                # indexより大きい最小の数の手前に要素を追加
                self.addBefore(index, x)
                return
        # indexより大きい数はない→末尾に追加
        self.addTail(index)

    def turnOff(self, index):
        "index番目の要素の値を0にする"
        e = self.find(index)
        if e:
            self.delete(e)
        else:
            # そんな要素はない→すでに0だった
            pass
            
    def __str__(self):
        result = ["0"] * self.size
        for x in self:
            result[x.value] = "1"

        return "[%s]" % "".join(result)

xs = Array(10)
print xs #=> [0000000000]
xs.set(5, 1)
xs.set(3, 1)
xs.set(7, 1)
print xs #=> [0001010100]
xs.set(3, 1)
print DList.__str__(xs) #=> [3, 5, 7]
xs.set(5, 0)
print xs #=> [0001000100]

Pythonでcircular doubly linked list

後輩が頑張っている課題、さすがに複雑になってきたので自分で実装してみて自分が正しいアドバイスをしているかどうか確認してみることにした。

Pythonの__iter__を使って、リストに対するイテレーションをまとめたので、文字列化する__str__やマッチする物を見つけるfindなんかがとても簡単に書けるようになったのだけど、Javaでこれをやるにはどうするんだっけ。Javaにyieldに相当する機能はあったっけ。Iteratorを返すメソッドとか作って、拡張for文を使わないといけないかな。うーん。教えるべきか教えざるべきか、それが問題だ。

追記:addBeforeはheadの前に追加されたのかどうかを自分で判定してself.headを更新するようにしないと、外から利用するときに面倒なので修正。あとその変更に伴い、addTailがaddBeforeを呼び出してはいけなくなった(addTailもaddHeadも要素の追加される位置は同じ、self.headが更新されるかどうかだけが違う)ので、もっとプリミティブなaddBetweenメソッドを作成。deleteメソッドでheadを消した場合の処理が正しくなかったので修正。

# -*- coding: cp932 -*-
class Element:
    def __init__(self, v):
        self.value = v
        
    def __str__(self):
        return str(self.value)

    def pop(self):
        "自分をリストから取り除く"
        prev = self.prev
        next = self.next
        next.prev = prev
        prev.next = next
        
class DList:
    "circular doubly linked list"
    def __init__(self):
        self.clear()

    def clear(self):
        "空にする"
        self.head = None

    def addBefore(self, v, target):
        "指定されたエレメントの手前に要素を追加する"
        prev = target.prev
        next = target
        e = self.addBetween(v, prev, next)
        if target == self.head:
            self.head = e

        return e

    def addBetween(self, v, prev, next):
        "指定されたエレメントの間に要素を追加する"
        e = Element(v)
        prev.next = e
        next.prev = e
        e.next = next
        e.prev = prev
        return e

    def addHead(self, v):
        "headの位置に要素を追加する"
        if self.head:
            e = self.addBefore(v, self.head)
            self.head = e
        else:
            self._addFirstElement(v)

    def addTail(self, v):
        "tailの位置に要素を追加する"
        if self.head:
            e = self.addBetween(v, self.head.prev, self.head)
        else:
            self._addFirstElement(v)

    def find(self, v):
        "値vを持つ最初のエレメントを返す"
        for x in xs:
            if x.value == v:
                return x

    def delete(self, e):
        "指定されたエレメントを削除する(削除したエレメントを返す)"
        if e.prev == e:
            self.clear()
        elif self.head == e:
            self.head = e.next
        else:
            e.pop()
        return e

    def _addFirstElement(self, v):
        "空のリストに追加する場合の処理"
        e = Element(v)
        e.prev = e
        e.next = e
        self.head = e
        
    def __iter__(self):
        if self.head:
            yield self.head

            cur = self.head.next
            while cur != self.head:
                yield cur
                cur = cur.next

    def __str__(self):
        result = "["
        result += ", ".join(str(x) for x in self)
        result += "]"
        return result

if __name__ == "__main__":
    xs = DList()
    xs.addHead(1)
    print xs.delete(xs.find(1))
    print xs
    xs.addHead(2)
    xs.addHead(3)
    xs.addTail(4)
    xs.addTail(5)
    print xs.delete(xs.find(4))
    print xs

2007年01月17日

「Jythonでインタラクティブ・ハッキング」@Python Developers Camp 2007 Winter

Python Developers Camp 2007 Winter

また、皆様から事前に質問事項を募集し、合宿期間中にチューターや他の参加 者の方を交え、その事項についての学習を進めていただければと思います。

現在予定されているチューター設置分野とプログラム概要は以下の通りです。

(中略)

・Jython
チューター:西尾さん
「Jythonでインタラクティブ・ハッキング」
概要:
Jythonの解説というと、なぜか「Javaの代わりにPythonを使う」という方 向性のものが多かったがPythonの長所を生かすならやはりインタラクティ ブにいじりたいところ。このプログラムでは既存のJavaプロジェクトにJy Consoleを組み込み、実行時にオブジェクトをのぞいたりいじったりして 遊んでもらう予定。

■■流れ■■
■準備
合宿の準備期間(参加者が確定してから,開催日までの間)に, Jythonのインストール(もしかしたらJyConsoleの導入まで)を各自でやってもらう。 JyConsoleを組み込む対象になる適当なJavaプロジェクトを用意する。 (一応最初の解説ではみんな同じターゲットをいじった方がよいだろうから) 各自自分がJyConsoleを組み込んでみたいJavaのプロジェクトを持ってきてもらう。

■当日
まずインストールでこけた人がいれば救済する。 Jythonについて簡単な説明をした後、JyConsoleの組み込みをする。 実行時にPure Javaなオブジェクトのメソッドを叩いたり、 Pure Javaなオブジェクトを作成したり、 Pure JavaなクラスをPythonで継承して新しいクラスを作って差し替えてみたりする。 イントロスペクションでいろいろのぞいてみたりする。 一通り説明が済んだら、時間いっぱい各自で遊んでもらう。 質問は随時受け付ける。

という感じです。流れは適当なので、やって欲しいことや質問などがあれば あらかじめメールとかで送ってもらえるとありがたいです。

モヒカン日記

はじめてのA(アプレット)
たとえて云うと、電源が入っていないロボットがクラスで、 入って仕事しているロボットがオブジェクトで、電源を入れることをインスタンス。ってな感じかなぁ...。

えー。


= エレクトロプランクトン ELECTROPLANKTON。 僕もプランクトン作りたい。
= SOMの説明。 「SOMの説明どこだっけ」と聞かれて、見つけ出してきた説明。
= strongaxeの日記 - モヒカン族とアスペルガー
とりあえず、モヒカン族にはモヒカン族なんてかっこいい名前をつけるより「病識」を持ってもらうほうが先なのでは。
ウェブで診断基準の字面を追っただけで他人に 「おまえら病気なんだから自覚しろ」 なんて放言できるのは、なかなか…なんというか…自己相対化ができていないのではないでしょうかね。

まぁ、定型発達者の中でも自己相対化のできていない人は、 平然と「空気を読め」なんて言い放ったりしますが。 彼らが「空気」と呼ぶ「言語的コミュニケーションによらずに共有できる感覚」は、 必ずしもすべての人に共有されているわけではないということです。

僕は空気が読めないのだけども「誤字脱字を訂正すると不快に思う人が多い(特に口頭の場合)」 というのは知識として知っています。 だから特に訂正する必要がない場合には訂正せずにスルーしています。 しかし、自分がつっこまれる側で、つっこまれても不快に思わない場合は、 「余計な気を回される」と知識を獲得するチャンスを失うことになります。 「不快に思わない人」同士がお互いに気を使いあってつっこまない場合、 お互い損をするわけです。 まさに囚人のジレンマ - Wikipediaですね。 これを回避する方法はモヒカン族同士がお互いにカミングアウトして 「モヒカンのつきあい」をすることかと。

2007年01月16日

言語融合の時代

おととい寝るときに布団の中で思いついて、忘れないうちにメモした文章です。 プログラミングシンポジウムで「LLってなんなのよ」という話題になったのがきっかけです。 Jython本に入れるとしたらどこがいいでしょうね。第1章のJythonを使うメリットとかの所でしょうかね。本に使うかどうかはさておき、実質的にはただのアジテーションなので、ブログで公開してみました(笑) 反論は大歓迎です。

__ かつてプログラミングとは 機械語を人間が直接書くことでした。 その後、いろいろなプログラミング言語が発明されました。 抽象化能力の高い言語を使うと、 「ハードウェアに密着した、ごちゃごちゃした細かいこと」 を気にせずに済むようになりました。 同じ機能が短いコードで実装できるようになり、 生産性が高まりました。 抽象化能力こそが言語のパワーでした。 こうして、プログラミング言語はどんどん抽象化能力を高めてきました。 この時代を便宜的に「第一世代」と呼ぶことにしましょう。

時とともに、価値観は少しずつ変わり始めました。 コンピュータが安価になり、 「一部の研究者が使うもの」ではなくなりました。 プログラマが増えました。 大部分のプログラマの仕事は 「新しいアルゴリズムを作り出して論文を書くこと」ではありませんでした。 「既存の部品を組み合わせてなるべく楽に顧客の望みをかなえること」でした。 高い抽象性よりも、部品(ライブラリ)の充実度や、 開発をサポートするツールの性能が求められるようになりました。 そしてC++やJavaが大きなシェアを持つようになりました。 第一世代のプログラマはこう言います。 「どうしてみんなC++やJavaのような貧弱な言語を使うんだろう。 あれには継続がない、遅延評価がない、カリー化がない、型推論がない…。」 価値観が変わったのです。「第二世代」のプログラマにとって、 充実したライブラリ、高機能な統合開発環境こそが言語のパワーなのです。

今、「第三世代」に向かって、いろいろな変化が起きつつあります。 「デザインパターン」が大流行しました。 再利用するオブジェクトの設計の軸足が継承から委譲へと変わりました。 古いAbstract Windowing Toolkit(AWT)や Swingが部品を継承してカスタマイズさせるのに対し、 新しいStandard Widget Toolkit(SWT)は 部品の継承を禁止していることが象徴的です。 また「依存性の注入」も流行しました。 これはオブジェクトAのオブジェクトBに処理を委譲する場合に、 オブジェクトAがオブジェクトBを作成するのではなく、 「なにものか」がオブジェクトBを作成してオブジェクトAに注入する、 という設計手法です。 この方法を使うとクラスAとクラスBがそれぞれ別個に再利用できるようになります。 依存性の注入は「DIコンテナがXMLで書かれた設定を読んで行う」と書かれることが多いですが、 「JythonがPythonコードを読んで行う」のも同じようなものです。 また2006年9月にはMicrosoftが.NET Framework上で動くPython実装「IronPython 1.0」を、 12月にはSun Microsystemsがスクリプティング標準仕様JSR-223を実装したJava SE6をリリースしました。

第一世代も、第二世代も、使う言語は一つでした。しかし第三世代は 「一つのプログラムに複数の言語を使う」世代です。 5年前に公開されたEclipseが、 今やJavaを使う多くのプロジェクトで当たり前のように利用されているように、 今から5年後には多くのプロジェクトが当たり前のように複数の言語を使っているかも知れません。 「Javaなどの堅い言語で再利用性の高い部品(コンポーネント)を作り、 それをPythonなどのやわらかい言語でつないで使う」、これが基本的な開発方針になっているかもしれません。

筆者は神様ではないので、5年後にどの言語が優位に立っているのかはわかりません。 しかし、現時点ですでにJavaと.NET Frameworkの両方に実装があるPythonは、 他のスクリプト言語から何歩か先に進んでいるのは間違いないでしょう。 この本で学ぶことはきっと無駄にならないはずです。


__ Paul GrahamはBeating the Averagesで「言語の間に順序関係が(全順序ではなく半順序とはいえ)成立する」という仮定を置いています。しかし、これこそ「第一世代」の発想だと思います。 実際にはある言語XとYを考えた場合、文字列処理ならXが便利だけども数値計算にはYが便利、というように得手不得手があるのが普通です。使う目的を限定しなければ半順序さえも成立しません。

Paul Grahamはまた「 「力」とは、 明確に定義できるものではないけれど、たとえば、 ある機能を実現するのに、力の弱い言語では、その機能を含むようなより力の強い言語の インタプリタを書くことでしか実現できない、というふうに言える。」とも言っていますが、 「インタプリタを書くしかない」という考え方こそ第一世代の盲点なのです。 すでに誰かがインタプリタを書いてあるならば、 後はそれをライブラリとして使うだけでその言語の力を獲得できるのです。 第一世代の人には「ライブラリレベルの機能は本質的ではない」という思想があるようですが、第二世代の人にとっては「言語の機能は本質的ではない、ライブラリの多さやIDEの使いやすさが重要」なのです。そして第一世代が軽視し続けた「ライブラリレベルの機能」として、言語の融合が起きつつあるのです。

言語の融合とか、一度に複数の言語を使う、というと「そんなマニアックなことが普及するはずがない」と考える人もいるかも知れません。しかし、すでに自覚せずに複数言語を使っているかもしれませんよ。 正規表現って何でしょうか。 正規表現は命令列ではありません。マッチすべき文字列の形の宣言です。 正規表現ライブラリはプログラマが書いた正規表現を「高速にマッチングできる形」に「コンパイル」します。 Perlの正規表現もJavaの正規表現もほぼ同じ文法です。 そう、正規表現は「文字列マッチングに特化した宣言的プログラミング言語」であり、 正規表現ライブラリは「その言語のコンパイラとVM」なのです。 多くの手続き型言語で、文字列のマッチング処理を書くのは面倒です。ステートマシンを直接書くよりも、解決すべき問題を宣言してそこから自動生成する方が簡単そうです。そこで正規表現という「文字列処理に特化した言語」をライブラリとして組み込んで使っているわけです。多くの異なる言語でほぼ同じ正規表現を使っている事実が、正規表現というものが特定の言語の一部ではなく、独立した言語であることを支持しています。今まで、正規表現がプログラミング言語であるという認識があまりされなかったのは、正規表現が「汎用的なプログラミング言語」ではなく、文字列処理に特化しているからでしょう。

正規表現には限りません。プログラミングの中核が事実上手続き型言語に占められてはいますが、やっぱり世の中には他のパラダイムの方が適している問題領域もたくさんあるわけです。そのため、いろいろな分野で「手続き的ではない」言語が使われています。 分野を限定していたり、小規模な使い方しかしなかったり、手続き型ではないがゆえに手続き型プログラミングに慣れたプログラマにはプログラミング言語に見えにくかったりするだけです。例えばSQL、例えばウェブアプリのテンプレート記述言語。

第三世代の流れは、手続き型の言語に手続き型の言語を組み合わせるというところが今までとはちょっと違いますが、 実際にJythonを使って開発をしていて感じるのは、 やはり「Javaでクラスを宣言しておいて、ロジックはPythonで書く」または 「Pythonで『Javaで書かれたクラスをどういう組み合わせで使うか』を宣言しておいて、ロジックはJavaで書く」というように、どちらかが宣言的な役割を果たすケースが多いということでしょうか。


__ なんだか話の流れで「手続き型と非手続き型で棲み分けが起こる」というストーリーになってしまいましたが、インラインアセンブラとかも複数言語を同時に使っている例ですよね。 「読みやすいけど遅い言語」と「読みにくいけど早い言語」という棲み分けの仕方ですね。

あと、こういうストーリーを書いていると頭の中では「真核生物に好気性細菌が共生してミトコンドリアになり、藍藻が共生して葉緑体になった」というストーリーを連想します。ミトコンドリアもそれ自身のDNAを持っているのですが、ものすごく短いです。なぜかというと、ほとんどの部分は核が持っている情報で用が済むからです。正規表現がシンプルな形でいられるのも、正規表現が他の言語に共生しているからです。正規表現だけでファイルの入出力までできるように正規表現を拡張したとしたら、どれだけ使いにくいものになることやら。そう考えると、将来的には真核生物に相当する「巨大なライブラリを持った手続き型言語」がオルガネラ(細胞内小器官)に相当する「既存のスクリプト言語からいろいろなものをそぎ落とした小さなモジュール」をいくつも持つ形になるのかなぁ、という気がします。

2007年01月15日

体脂肪日記

GRINEdit alpha0.21リリース NAISTの先輩から「辺の太さを変えられないか」とのオファーがあったので、 さくっと作ってみました。 で、JarとサンプルのYAMLをプラグインとして渡せばいいと思ったのですが、 なんとYAMLのローダが動いていないことが発覚。 JythonのクラスパスがJavaのクラスパスと一致しないことに起因する問題。 Eclipseで実行しているときには発生しなくて、 Jarにまとめた後で発生するので見落としやすい。 もう「Jythonからサードパーティのライブラリを使う際には直接importするな」 って書いちゃおうかなぁ。これってアンチパターンだよねぇ。 つまずいてしばらく悩んだ上に、何度も同じ所でつまずいているから…。 注意喚起のマークをつけた囲み記事にするか…。 どの章に入れようか…。 importの解説で「サードパーティのライブラリを使う場合には注意が必要」と書いて、 付録にリダイレクトしようか。
= みなさんお待ちかねの、年末年始の体重の変化グラフ… ではなくてこれは体脂肪量(体重×体脂肪率)のグラフ。 体重を見てもいまいち傾向は見えないのですが、こちらはとてもわかりやすい。 なんか脂肪の量が1ヶ月分戻ったみたい。 taijuu.png

賞味期限切れ日記

賞味期限切れの牛乳の次は、 賞味期限切れの醤油。 醤油なんか賞味期限切れたってたいして変わらないように思う。 そんなことを考えながら賞味期限が10月26日のキムチを食べる。 あんまり酸っぱくなっていない。 密閉型のボトル容器の場合はもっと早く酸っぱくなったように思う。 平たい皿状の容器に入っていた今回のキムチは 酸素に触れる面積が広くて、 乳酸菌は嫌気性なので、増殖が抑えられたのかも知れない。 まぁ、その代わり冷蔵庫にキムチのにおいが充満してしまったから やっぱりボトル式の方がいいかもしれない。
= 昨日唐突に思いついて、牛乳と充実野菜とウェルチのグレープジュースに ヤクルトを投入して常温で放置しているのだけど、さすがにまだ何も起こらない。
= ドメインを差し押さえることが出来るかどうかという法学論争は法学者にまかせて。 2ちゃんねるのドメインが差し押さえられて競売にかけられたとして、 それを買ったらきっと2ちゃんねらーが攻撃してくるんだろうなぁ、と。 不動産で言えば怖いお兄さんが立てこもっていて退去に応じない物件というか、 毎日近所のおばさんが汚水を撒きに来る物件というか…。
= ガム買い忘れた。 干し芋を2日で2袋食べてしまった。 準備とサンプルコードの動作確認が出来たので、 jythoncの解説を書き始めた。
= あれはたぶん水曜日まで黙っていた方がいいんだろうなぁ。
= 眠い。 2時半でだいぶ疲れた。 でも筆が結構進んでいる。 ここ1ヶ月で一番進んでる。 ここ1ヶ月がスランプだっただけかも知れないけど。

いったい何がきっかけでスランプを抜け出したのだろうか。 それが謎。

メリハリかな。

年末年始に結局全然進まず、 「プロシンに参考資料を持って行ってもどうせ書かないに違いない」 と思って、行き帰りように1冊だけ鞄に入れて、 2泊3日の間きれいさっぱり執筆から離れたのがよかったのか?

「~~しなければならない」は敵?

あと、今まで色々やってきた「やる気向上策」がやっと結実した。 机の脇に置いた空き缶にローズマリーを中心とした「やる気の出るブレンド」を作り、 パソコンからは高速再生の曲を流し、 口にはキシリトールガム。 時々清涼感を求めてローズマリーの缶に鼻を近づけたり、 フリスクを食べたりしつつ。 この環境が一番作業がはかどるかも知れない。 電車の中よりも。 電車の中ではアロマテラピーできないし。


= サンプルコードは簡潔であるべき。 可能な限り短く、読む気の起こる長さであるべき。 どうしても長いコードを紹介したい場合は、 読み方をアドバイスするべき。 そう考えて書いていくと6行のJythonスクリプトでアプレットができちゃった。
import java.applet.Applet as Applet

class MyApplet(Applet):
    def paint(self, g):
        for i in range(10, 300, 20):
            g.drawString("Hello, Applet!", i, i)
「Jythonでややこしいことしなくても、 最初から素直にJava使えばいいじゃん、 どうせインタプリタは動かないんだし」 と思っていたけども、 意外と悪くないかもなぁと思い直したり。 アプレットを作るのが思ったほどややこしくなかったのが一因。
= やばい、眠くなくなってきた。

2007年01月13日

フルヘッヘンド日記

寒い寒い。
= 部屋をちょっと片付ける。 玄関にフルヘッヘンドした新聞はまだ手をつけてない。 実家で読んだしなぁ。 年末年始の間だけ新聞止めればよかった。

蘭学事始 - Wikipedia

『蘭学事始』の中で語られている『解体新書』翻訳時のエピソードのひとつに、「鼻の所に『フルヘッヘンド』という語があったが意味がわからず、しばらく考えて『堆い(うずたかい)』のことだと判明した」というものがある。有名な話であり、歴史の教科書にしばしば取り上げられている。

しかし、『解体新書』の原書『ターヘル・アナトミア』の「鼻」の部分には、フルヘッヘンドの単語はない。このことにより、『蘭学事始』の真実性を疑う声もある。

な、なんだってーΩ

だが「胸」の章に、乳の形状の説明としてフルヘッヘンドの単語がある。

この問題については、いくつかの可能性が考えられる。

(中略) 4. 「乳」の形状について真剣に議論したというのが恥ずかしいので、あえて「乳」を「鼻」と置き換えた。

杉田玄白テラモエスwww

弟子「先生っ、この乳の解説に書いてある、フルヘッヘンドって何でしょう?!」
玄白「うーむ…はっ、そうかこれは『うずたかい』じゃ!」
弟子「おおーっ、たしかに『うずたかい』ですね!」

          _  ∩
杉田玄白→( ゚∀゚)彡 ふるへっへんど!ふるへっへんど!
         ⊂彡

という会話がなされたに違いない(妄想)


= PARO[パロ]: 受賞・記録等(パロおよび開発者・柴田崇徳)

僕が日本最年少博士号取得者なのかどうかをちゃんと調べて売名に使った方がよいとのアドバイスを受けて 軽く調べてみたところ、こういうものを発見。 僕は24歳で博士号を取得したのでとりあえずこの方よりは若い。

Googleで検索する以上のことをするのは面倒だなぁ…。 最年少でないことを証明するのは簡単だが最年少であることを証明するのは大変。


= 楽器を買いました。 でも今の精神状態では練習できません。

何か大きな「やらなければいけないこと」がある際に、 脳がそのタスク一色に染まってしまって、それ以外のことが出来なくなる。 マルチタスク下手。

そして大きなタスクは大きすぎてなかなか着手できない。 結局「やらなきゃ、やらなきゃ」といいながら、 着手しやすいネットサーフィンなどに時間を費やしてしまう。 不必要に頻繁にメールをチェックしてしまう。

以前、こういう状態はタスクが大きすぎてどこから着手すればいいかがわからないことが原因だと考えた。 しかし、それは唯一の原因ではない。

まだ頭の中が整理されていないので、論理的に説明は出来ないけども、結論は次の二つ。 「めりはりのある生活リズムが必要」 「何でもかんでもTODOにしてはいけない」 人間はマシンではない。 タスクによってはマシン的なもの(例えば郵便箱にチラシを入れて歩くとか、 掲示板にテンプレートに従ってサクラ書き込みをして歩くとか、 一括ダウンロードを禁止されているデータベースからひたすら1個ずつコピペするとか) もあり、この手のものは簡単に定量化できるし、 1単位の仕事をするのにかかった時間の2倍の時間をかければまぁ2単位の仕事ができると考えられる。 しかし、 特にクリエイティビティが要求されるようなタスクでは そうはいかない。この手の仕事はやる気によって生産性が激しく変化し、 また努力によって生産性を上げることが出来ない。 むやみやたらにTODOを増やすと、 「やらなきゃいけないことがたくさんある」という印象だけ強くなり、 やる気がなくなってしまう。 解決したくなるような問題の形で表現した方がいいのかも知れない。


= うーむ。 古い本だからなのか、色々間違いがある。 jythoncで作ったアプレットが 「最初に思いつく方法」ではうまく動かない理由について、 JythonEssentialsでは「ブラウザ上で動かすためにはJava1.1でコンパイルしなきゃダメだよ」 的なことを言っているけども、これは現状にはあっていない。 Jythonで作ったアプレットがClassNotFoundExceptionを投げるのは、 クラスの名前が期待したものになっていないことではないだろうか。 applet.pyの中で宣言したMyAppletクラスは、 jythoncによってappletクラスのインナークラスとして作成されるので、 最終的なクラスのファイル名はapplet$MyAppletだ。 これを「MyAppletクラスを作ったから」と思って"MyApplet"と書いてしまうと 当然クラスが見つからない。

あと@sigディレクティブはバッドノウハウだと思う。 僕が考える「Jythonの正しい使い方」にのっとると、@sigはまったく必要ない。 でもやっぱ説明しないわけにはいかないんだろうなぁ。 個人的にはネームマングリングと@sigは捨ててしまえと言いたい。

Digital Courier日記

学生会員諸君!IPSJ Digital Courierに挑戦しよう。 こんなのがあったなんて知りませんでした。 さっき事務の人から電話で「メールで教えたのに応募しないのか」という趣旨の話があり、 とりあえず応募してみてから詳しい内容を読んだのだけど、 表彰されると副賞として別刷り代が出るんですね。 学生さんはぜひ論文を書いて挑戦してみるといいと思います。

ってこれは学生が英語で論文を書くのをエンカレッジするためのものなのですか…。対象になるのは英語の論文だけなんですねぇ。僕は何も考えずに英語で論文を書いたのですけど。

そもそも僕は自分の論文がDigital Courierで読めるってことも知りませんでした。 IPSJ Digital Courierの Vol.2, pp. 133-137のところ。「Spherical SOM and Arrangement of Neurons Using Helix on Sphere」です。 後でプロフィールの所に載せておこう。


= スパムだらけになっているtDiaryのコメント機能をとりあえず外してこれ以上スパムが増えないようにした。

かなり雑なプログラミングシンポジウム日記

お風呂に入って体温が1度上がると、基礎代謝が12%上がるんだそうな。 お風呂の中で使えるEMSのCMで言っていた。

お風呂に入っても使えるパソコンがあればなぁ。

壁面ディスプレイで本体は外に置いて防水キーボードと防水ジョイスティックがあれば…。


= 明日は小田原で乗り換えればいいのか。 9時に出れば十分間に合うのか。
= プロシン会場。

わーお。Lock-on-Chatに傘連判状機能が付いたものが稼働している。

電子的な名刺交換システムも稼働している。 さっそく試す。

名刺の交換はある意味でSNSのマイミク申請に似ている。

2007/01/09時点でXという人間がYという役職に就いていたとして、 Xが今何をしているかが知りたい場合と、Yという役職の人にアクセスしたい場合とがある。 Yという役職がユニークかどうかによるかも知れない。

今までのIRCとかでのチャットを1枚の掲示板にたとえるなら、 Lock-on-Chatはふたばちゃんねるとかに近いのかも知れない。

画像認識(OpenCV)、音声認識(Julian)

ロボットの目玉は試してみたい。

ウェブアプリはネットワークの弱い環境ではデモできなくなったりするのが問題。 デモがとても重要なアプリだけにとても残念。

マルチマウスは何かに使いたい。

僕の書いた原稿の「Python」が「P thon」になっているのですが、 「Multiplayer」も「Multipla er」になっている模様。

ブログの内容からキャッチフレーズ自動生成。 キャッチフレーズはキャッチーであれば正しくなくてもいい?

もぶろげっと mobloget.jp

「面白い」のパーソナライズ。

http://cp.seman.cs.uec.ac.jp

顔文字の付与、形容詞のねじ込み、伏せ字、などなど。

「来年の超絶プロシンまでにGRINEditベースの○○○が出来るといいな(´・ω・`)」

ネットにつながりにくい。そしてPHSもつながりにくい。ネット難民。

あー、ビジュアルシーンエディタ。 ソフトを見ると思い出す。 言葉だとわからなくなる。 トゥーンレンダリングとかモーションブラーとかを簡単にできる、という論文だったので LAMPみたいなものかと思ったけども、 プレゼンもその3Dでやっているのを見るとtaosさんのアレを連想する(ソフト名を忘れた)

(追記:これだ→3Dプレゼンテーションソフトウェア [prezvision] -SoftAdvance, Inc.-)

ピカチュウの着ぐるみ。 最近デンチュウダイはそういうキャラが多いんだそうだ。

FileUtils-URI

http://www.trashbox.jp/~moriwaka/moin.cgi/ProgrammerProverb  ひいきのwiki倒し

夜。サンシンを弾く。 ピカチュウをくすぐる。


= プロシン2日目。

SMILES記法でフラーレンをどう書くか。

(追記: Wikipediaによれば 「角括弧を省略した原子は、暗黙の水素原子が適宜付いているとみなされる。つまりSMILES記法では水は単に'O'と表され、エタノールは'CCO'と表される。二重結合を持つ二酸化炭素は'O=C=O'の様に表され、三重結合を持つシアン化水素は'C#N'と表される。シクロヘキサンを表す'C1CCCCC1'の二つの'1'の数字は分子の同一の位置で繋がっていて、炭素の6員環を形成していることを表す。」 とのことらしい。そういえばベンゼン環のcは小文字で書いていたなぁ。)

podcastle

QBH:Query by Humming

ミッシングファンダメンタル

RefraiD

サビ区間抽出手法

Masataka Goto: SmartMusicKIOSK (in Japanese)

繰り返し部分を可視化するだけでもかなり面白い。使いたい。 繰り返し構造の抽出は結構大変、なぜなら歌詞が異なる。変調されたりする。 12次元クロマベクトル。1オクターブに12個。

Musicream Masataka Goto: Musicream (in Japanese)

タイムマシンインターフェイス 暦本 タイムマシン - Google 検索

オーディオプログラミング権。 デジタルデータ処理できない(決めうちのソフトでの再生しかさせない)音楽CDは この手の研究も出来ないし、Musicreamのような新しい面白い「音楽の聞き方」 をユーザーが利用することも妨げる。

「デジタル右管理」。ネタ。

Tzanetakis 2000,楽曲の曲調の特徴ベクトル。30次元。 セントロイド・ロールオフ・フラックス・ゼロクロス(8次元)、 MFCCの平均(10次元)、音量の小さい区間の占める割合。 周期性11次元。 ここからたどれるかな?ネット太いところに行ったら調べる。 http://profs.sci.univr.it/~dafx/Final-Papers/pdf/Tzanetakis_veronafull.pdf

夜。宇田君と一緒にピカチュウをくすぐる。 宇田君とピカチュウにくすぐられる。 二人で反撃しようとしたら僕が足をつかんでいる状態で宇田君がピカチュウを投げた。 宇田君強すぎ。

天井まで届く積み木の塔。女王様(悪い魔女という噂も)とかしづく小人たち。 天井まで届かない座布団の塔。崩れるバベルの座布団。 生き埋めになるピカチュウ。

うぃー。


= プロシン3日目。

ITで視覚障害者もだいぶ便利になったような、 まだまだ便利にする余地があるような。

ロックオンチャットは結局3日間フルにデモンストレーションされていたようなもの。 スライドを読んでいる最中に次に行ってしまった場合とかに、 画像の上がっているチャットがあると戻って読めるから便利。 でも、元のitalkだけの時からあった 参加者の注意が前のモニタや話している人から離れてそちらへ移りがちになる傾向が さらに強まったかも知れない。

ごく少数italkにしかログインできない人がいるため、結局両方必要になる罠。

検索結果やブックマークからカテゴリ型の検索エンジンが自動的にできあがる netPlant、お試しパスワードで色々眺めていたのだけど、 だんだん「エロ」と「萌え」のカテゴリが大きくなってきた気がする。 みんなが「何が入っているんだろう」と思ってクリックすると大きくなるんだろうか。 そして「エロ」カテゴリの中にはなんかかなりヤバいブックマークが入っていた。いいのだろうか、これ。


= 帰ってきた。 いつもにもまして全然まとめになっていない日記。 チャットが2枚あるとそれだけで忙しい。 発表の最中に発表の内容について他の人と議論が出来るのはいいことだと思うのだけどもな…。

そして出張の申請をするのを忘れてた。やばい。

2007年01月08日

キーボード直った!日記

東京に帰ってきました。

Thinkpadはマシンの裏のキーボードの印が付いたねじを外せばキーボードを取り外せる、と知ったので、さっそく実行。

ねじ一つ潰れた。

潰れきってなかったのでなんとか回せた。

ねじを全部外したけど、キーボードが外れないぞ??

検索したらすぐに整備マニュアルが見つかったのでそれを見ながらキーボードを外す。 バッテリーパックを外してからぐっと前に押してやるとわずかに前にずれて、 そうすると手前が持ち上がるようになりました。なるほど。

P1060862
P1060862 posted from フォト蔵

コネクターはどうやって外すのだろう?引っ張っていいのかな?引っ張ったら…うひゃぁ、取れた!

P1060865
P1060865 posted from フォト蔵

よーく、ふーふーしてからもう一度刺して、 マシンを立ち上げてみると…直った!直ったよ!クララが立った!(違)

というわけで新しいマシンを買う必要も修理に出す必要もなくなりました。万歳。 明日からのプログラミングシンポジウムに邪魔なキーボードを担いで行かなくていい。万歳。

とりあえず、保守マニュアルがあるってすばらしい。 昔使っていたマシン、壊れて動かなくなったから実家で埃をかぶっているけど、 もしかしたら直せるかも知れないのか…。試してみる価値はあるかも…。

2007年01月07日

パソコン買おうかな日記

キーボードが別付けだと出先での作業がやりにくいので、どうするか考えていたのだけども、ThinkPad G41が8万円で売っていたので買おうか悩み中。

__ プログラミングシンポジウム、11日からだと思っていたら9日からだった。 明後日からだ。 明日東京に行って東京からプログラミングシンポジウムに行くべきか、 大阪からプログラミングシンポジウムに行って東京に帰るべきか、 どっちがいいんだろう。 とりあえずこの邪魔な外付けキーボードもプロシンに持っていかないと…。

えーと。必要なものは…。着替え。これは大阪でも東京でも用意できそう。 名刺。これは用意できてないなぁ。あきらめるか。どっちみち今の肩書きはあと3ヶ月で終わって4月から社会人だし。


__ Thinkpadのキーボードは裏のキーボード印のねじを外すだけで取り外せるのか…。ダメモトで一度外してつけ直してみるか…。


__ 明日のぷらっとこだまはもういっぱいだって。 えきねっとで混み具合を調べようと思ったらこれJR東日本のだから新大阪では受け取れないって。

でも混み具合を調べるだけなら出来るときが付いたので調べてみたところ、博多発ののぞみとか以外は空いていることがわかった。新大阪発の自由席で座れると踏んだ。


__ とてもヤバイことに気がついた。 学会会場が箱根の山の上でめちゃくちゃ寒いにもかかわらず、防寒具がない。うすい秋用の上着しかない。

2007年01月06日

区別つきません、日記

大晦日の話。テレビをつけると紅白歌合戦が。
父:仲間由紀恵?
僕:TRICKとかに出てたでしょ
母:功名が辻で千代の役をしてたでしょ
僕:えー?違うよ?
違いませんでしたorz。 何度も見たのに気づかなかったのか、自分!

今日の話。テレビをつけると西遊記が。

僕:あー、三蔵法師が仲間由紀恵だー。
深津絵里でしたorz。

前に日記で上戸彩と安藤美姫の違いがわからないって書いたのを思いだしました。

人の顔と名前が一致しないとか言う以前の問題だよねー。


= 任天堂DSで 漢検とか平成教育委員会とかのソフトもあるんだなぁ。 DS買おうかなぁ。
= タイミングを逃すと日記書けないなぁ。 ダリ回顧展に行ったことも、帰りの新幹線にタッチの差で乗り遅れたことも書いてないなぁ。

武蔵野線が暴風で遅延して、大あわてで東海道新幹線の乗り場に行ったが、 予約したチケットを受け取るための端末が見つからず、 駅員さんに聞いたら東北新幹線の方にあると言われ、 行って操作してもチケットが得られず、 駅員さんに「24分発の新幹線の切符が出ない」と言ったら「今もう26分ですよ」と。 そんなことがあったのでした。


= 「出力が出ます」は牛の牛肉かな。

やっぱりキーボードが壊れていると作業がやりにくい。 新しいマシンを買うか、この前買った中古のマシンにEclipseとかを入れるか…。 メモリが少ないからストレスたまりそうな気がするなぁ。


= 仮装大賞。ダリはすごかった。想像通り優勝だった。 過去の作品をDVDとかで見られないのか調べてみた。 優勝作品は公式サイトで見られることを発見。 仮装大賞優勝作品
= Jython本を書きながらこんなことを言うのはどうかと思うのだけど、 Jython本を書き終わったらC#のサーベイを始めよう。 GRINEdit2はC# + WPF + IronPythonになりそうな気配。
= 余裕か…、余裕が足りないのか…。 原稿書きスランプ。 スランプから抜け出す方法を見つけた気がしたのにスランプ。 実家でぬくぬく作業した方がはかどると思ったのだけど、 やっぱり東京に戻った方がはかどるのかも知れない。 どっちもはかどらないのかも知れない。 問題は環境ではなくて自分の弱さにあるのかも知れない。 キーボードの打ちにくさにあるのかも知れない。
= そういえば今日は朝、貧血を起こして寝込んでしまったのだった。 実家にいるからといって一人で暮らしているときよりも健康管理が万全かというとそうでもない。

2007年01月02日

あけましておめでとうございます日記

あけましておめでとうございます。今年もよろしくお願いします。

TPA Menbers。 うわっ、知らない間になんか羞恥プレイされてるっ。

Thinkpadの壊れたキーボードの代わりに買ってきたキーボードは非常に使いにくい。理由1:安物ンブレンスイッチのせいでクリック感がない。理由2:ポインティングデバイスを持っていない(Thinkpadのトラックポイント大好き)なので、キーボードをつけているにもかかわらず、本来のキーボードもさわれるようにしておかないといけない。理由3:USBケーブルがなんか3メートルもある。邪魔。